整理一下使用ehter.js与合约交互的常用方法等。
链接网站
async md1() {
let provider = new ethers.providers.Web3Provider(window.ethereum)
let signer = provider.getSigner();
let accounts = await provider.send("eth_requestAccounts", []);
console.log(accounts[0])
}
rpc节点
async md2() {
let provider = new ethers.providers.JsonRpcProvider('rpc节点地址');
let Wallet = new ethers.Wallet('你的私钥');
let signer = Wallet.connect(provider)
console.log(provider ,Wallet,signer )
}
调用合约方法
实际开发中signer已经为全局对象,这里不再重复设置
async md3() {
//greet为生成的合约对象,需要注意的是signer参数,如果传进去就可以直接调用合约的修改方法
let greet = new ethers.Contract('0x2c4eb3c76D7115E210Fadf3cBFe8E0a3d5b8448F', erc20abi, signer);
//调用合约的相关方法
let data = await greet.transfer("0x173f8ce8356dd214813f4874c316739f560d8022", ethers.utils.parseEther(
"1")).catch(function(err) {
console.log(err)
})
//这里的data为请求的区块的相关数据,如区块高度,交易hash等等,并不是合约的返回值。
console.log(data)
//根据业务情况,判断是否需要监听返回值,如果需要则加上如下监听代码
let data2=await provider.waitForTransaction(data.hash);
console.log(data)
}
进行转账
async md4(){
//这里只传了两个关键性参数,其他参数可以不传,自动获取的
let data = await signer.sendTransaction({
to: '0x6c3392AE6037F09AF9D98eaEBd43B00bA5BE6684',
value: ethers.utils.parseEther('1'),
})
console.log(data)
}
调用合约的同时转账主代币
有的时候我们在调用合约的同时也需要打固定数量的主代币
async md5() {
let greet = new ethers.Contract('0x2c4eb3c76D7115E210Fadf3cBFe8E0a3d5b8448F', erc20abi, signer);
let overrides = {
value: ethers.utils.parseEther('1'),
gasLimit: 3000000
}
let data = await greet.transfer("0x173f8ce8356dd214813f4874c316739f560d8022", ethers.utils.parseEther(
"1"), overrides).catch(function(err) {
console.log(err)
})
console.log(data)
}