介绍
前不久参与开发一个 DApp,此前并没有这方面的经验,给自己加了许多假想的困难。但是开发完这个 DApp 后,发现并没有想象中的困难。
这个 DAPP 主要是与合约(Smart Contract)进行交互,关于合约的介绍留待以后再补充,本文主要介绍如何使用 ethers.js 与合约进行交互。
获取地址
DApp 要想正常使用,首先要获取用户的地址。
1 | const provider = new ethers.providers.Web3Provider(window.ethereum) |
合约交互
我们以领取 ENS 代币为例,合约地址为:0xc18360217d8f7ab5e7c516566761ea12ce7f9d72
,ABI:https://etherscan.io/address/0xc18360217d8f7ab5e7c516566761ea12ce7f9d72#code。关于 ABI ,你可以想象它是我们平常使用的 API。
执行 ABI 中 claimTokens 方法即可领取 ENS 代币:
1 | /\*\* |
首先是使用 ethers.js 组装 data 数据:
1 | // ABI 编码只需要函数声明部分,不用整个实现,而且是传入字符串就好 |
接着发送交易:
1 | const params = [ |
ABI 中也提供了方法判断领取状态
1 | function isClaimed(uint256 index) public view returns (bool) |
1 | const provider = new ethers.providers.Web3Provider(window.ethereum) |
总结
DApp 与合约进行交互主要是通过 ABI 实现,而现在也有许多封装好的第三方库帮助我们方便地使用。Web3 这个领域许多代码都是开源的,遇到问题不用愁,看看别人是如何实现的,说不定就有思路了。