每日一学-day001

  • 0xKk
  • 更新于 2024-04-08 19:58
  • 阅读 1339

每日一学

今天主要学习了ethers.js中provider和signer,如何通过provider和signer来构建一个合约实例,并调用合约的方法

一,ethers.js中如何构建合约实例并调用合约方法

1,准备合约的地址和ABI

const contractAddress = "your contract address";//合约地址
const contractABI = [];
可以从合约部署文件的 artifacts/contracts/contractname/contractname.json 里面去找,是一个数组
注:
可以将合约ABI放在其他文件加,然后export出去

2,获得合约的provider或者signer

1,JsonRpcProvider

const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');//也可以用infura的URL
const signer = provider.getSigner();

2,web3Provider

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。

3,生成合约的实例

const contract = ethers.Contract(contractAddress,contractABI,provider);
或者
const contract = ethers.Contract(contractAddress,contractABI,signer);
注:
如果只是查询这用provider就可以了,需要修改链上数据则需要用signer

4,调用合约的mint方法(假设合约有一个mint方法)

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,一般不用管

5,等待mint完成,返回交易结果

const result = await tx.wait();//result这个对象包含了交易被挖矿后的信息
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
0xKk
0xKk
0xb9c0...f744
知识就是力量-- 知识提高认知,认知可以变现,现金就是力量!