web3.js与节点交互的四种方法 / 学习智能合约#51

in STEEM CN/中文5 years ago

web3.js是一套和以太坊节点进行通信的API,是对JSON-RPC的封装。如果我们需要基于以太坊来开发去中心化应用,就需要通过Web3来获取节点状态,获取账号信息,调用合约、监听合约事件等等。

智能合约是运行在节点提供的虚拟机上,因此调用智能合约也需要像节点发送请求,web3.js就起到中间桥梁的作用。

根据不同的应用场景,web3.js与节点交互的四种方法,如下:

cnpm install web3 --save
cnpm install @truffle/hdwallet-provider --save

import Web3 from 'web3'

a. 如果只是使用web3的方法可以使用此方法(比如创建帐户时),其中Web3.givenProvider = null
let web3 = new Web3(Web3.givenProvider)


b. 使用本地节点或是远程节点,和提供的节点服务器相连
// let url = "http://localhost:8545"
let url = "https://rpc-mumbai.maticvigil.com"
web3 = new Web3(new Web3.providers.HttpProvider(url)) 

c. 使用私钥连接到以太坊节点,可能直接和合约交互
import HDWalletProvider from "@truffle/hdwallet-provider"

let VUE_APP_URL="https://ropsten.infura.io/v3/c9xxxxx"
let VUE_APP_KEY="fac5xxxxx"
let web3Provider = new HDWalletProvider(VUE_APP_KEY, VUE_APP_URL) 
let web3 = new Web3(web3Provider)

//也可以使用助词词
let mnemonic = "opinion destroy betray …";
let provider = new HDWalletProvider(mnemonic,"http://localhost:8545");
let web3 = new Web3(provider);

d. 从metamask中获取,和合约交互时需要用户手动签名
let web3 = new Web3(window.ethereum)

基本概括了所有的应用场景,实际情况下可以灵活应用。

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.076
BTC 63537.23
ETH 1665.10
USDT 1.00
SBD 0.43