【区块链学习笔记-05】无代码调用智能合约|以及编码实现pancakeSwap的功能
有朋友跟我说,代码基础较差, 但是也想调用智能合约,通过这几天的学习,发现直接通过区块链浏览器也可以实现这个目标。
实现目标
- 无代码调用智能合约方法,将代币进行兑换
- 案例1:无代码实现——将ETH兑换成WETH
- 案例2:编码实现——调用uniswap方法,兑换代币,实现pancakeswap方法
实现过程
- 调用WETH的合约方法
Deposit
方法进行兑换
准备资料
WETH 合约地址 :https://rinkeby.etherscan.io/address/0xc778417e063141139fce010982780140aa0cd5ab
0xc778417e063141139fce010982780140aa0cd5ab
找到兑换方法:Deposit
案例一:尝试测试网络实现兑换
不了解测试网络的老板,可以参考一下我上一篇文章
先兑换WETH,再由WETH兑换其他代币。但是你在使用uniswap合约代码的时候,合约代码会帮你操作这一步。这里我们先手动尝试下利用区块链浏览器进行合约代码的调用。
为什么要兑换WETH
WETH就是“包装过的ETH”(”wrapped ETH”)
以太(Ether 或者ETH)是以太坊(Ethereum)区块链上的原生货币。
其次,是各类其他代币(Alt Tokens/山寨币),这类币就是围绕ETH建立的,符合ERC-20 标准的代币。该标准定义了代币应该如何在以太坊网络上进行转移,以及如保持代币在以太坊网络上的转移能够有一个一致的记录。
ETH本身并不符合自己的 ERC-20标准。
ETH是以太坊网络上的其他币的基本代币,也就是说 ETH在ERC-20标准被制定之前就存在了。所以有了WETH,就能让ETH符合ERC-20标准 能够将ETH兑换成各种代币
在区块链浏览器测试网络进行WETH兑换
rinkeby的WETH合约地址是:
https://rinkeby.etherscan.io/address/0xc778417e063141139fce010982780140aa0cd5ab
通过使用deposit
转账,能够获取等量的WETH。
有了WETH之后,就可以进行代币的兑换
案例二:编码调用uniswap方法,兑换代币
区块链浏览器实现步骤:
查看兑换信息,查找方法
查看这条这条兑换信息,方法是Swap Exact Token
https://rinkeby.etherscan.io/tx/0x9a5a17cd13eaf8768dd52bc3e0457d75cc12c8eeb13e27f6977da220224e0da3
查看uniswap V2: Router合约
https://rinkeby.etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#code
可以调用swapExactETHForTokens
方法来兑换其他代币(token)
刚开始不太会调用,看一下别人如何操作的
https://rinkeby.etherscan.io/tx/0x9a5a17cd13eaf8768dd52bc3e0457d75cc12c8eeb13e27f6977da220224e0da3
看到该方法有几个参数需要调用,具体的说明看上图就可以知道了
依葫芦(主要是葫芦)画瓢,我们在区块链浏览器模仿调用这个方法
调用方法名:swapExactETHForTokens
合约参数:amountOutMin、path、to、deadline
我们想兑换0.001个ETH到DAI代币,所以先换成wei格式为:1000000000000000
已知我们的WETH合约地址是:0xc778417E063141139Fce010982780140Aa0cD5Ab
我们期望兑换的代币是DAI,合约地址是:0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa
to就是自己的地址:0x601f8D3853b94a062CE2eA960BB3a2F5D033B689
deadline时间的话随便设置一个即可:1640425362
先通过区块链浏览器查询兑换的数目:
https://rinkeby.etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#readContract
由上图可知,0.001个ETH可以兑换大约336 个DAI。这里的336918736300705663884
单位是wei
编写代码实现
- 获取ABI:通过区块链浏览器就可以直接获得https://rinkeby.etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#code
- 编码实现合约功能,具体代码里说明了
1 | const Web3 = require('web3'); |
成功之后输出transactionHash0xc1b9c2ab36f25f04878f50b544bfc61746bf3a8cb094c0a482af8de3fee8868d
通过区块链浏览器查看:https://rinkeby.etherscan.io/tx/0xc1b9c2ab36f25f04878f50b544bfc61746bf3a8cb094c0a482af8de3fee8868d
到此间,我们就完成了使用代码完成pancakeswap的部分功能了。
通过metamask导入DAI的合约,可以看到我们的DAI余额