每日一学
今天主要学习了ethers.js中provider和signer,如何通过provider和signer来构建一个合约实例,并调用合约的方法
const contractAddress = "your contract address";//合约地址
const contractABI = [];
可以从合约部署文件的 artifacts/contracts/contractname/contractname.json 里面去找,是一个数组
注:
可以将合约ABI放在其他文件加,然后export出去
const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');//也可以用infura的URL
const signer = provider.getSigner();
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
注:
window.ethereum是一个全局对象,他是由以太坊浏览器插件注入到其中,里面有一些常用的属性:
request({ method, params }):这是一个用于发送 JSON-RPC 请求的函数。method是你想要调用的方法名,params是一个包含方法参数的数组。
selectedAddress:这个属性包含了当前选中的账户的地址。如果用户 没有授权网页访问他们的账户,这个属性将为null。
enable():这个方法会弹出一个窗口,请求用户授权网页访问他们的账户。
isMetaMask:这个属性是一个布尔值,如果 `window.ethereum` 是由 MetaMask 插件注入的,这个值将为 true。
const contract = ethers.Contract(contractAddress,contractABI,provider);
或者
const contract = ethers.Contract(contractAddress,contractABI,signer);
注:
如果只是查询这用provider就可以了,需要修改链上数据则需要用signer
const tx = await contract.mint(parameters,{
gasLimit:1000000,
gasPrice:ethers.utils.parseUints('10','gwei'),
value:ethers.utils.parseEther('1')//表示1 eth
});
注:
这个{}对象里面包含一些可选的字段用户控制交易
gasLimit:设置你愿意为这笔交易支付的最大gas数量
gasPrice:设置你愿意为每个gas单位支付的价格
value:设置你想要发送的以太币数量,这个参数只有在调用payable函数时有用
nonce:设置交易的nonce,一般不用管
chainId:设置交易的链ID,一般不用管
const result = await tx.wait();//result这个对象包含了交易被挖矿后的信息
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!