涨知识—使用imToken钱包还能调用合约!

使用imToken钱包直接调用合约

# 一、imToken能调合约? 今天在看以太坊多重签名时,发现都是通过智能合约来实现的(类似投票合约),那么就有一个问题,主流的钱包如imToken,怎么调用智能合约呢。 以前使用imToken钱包都是直接转账,从未想过使用imToken钱包来调合约,今天研究了下,发现其实挺简单的,这里分享出来。 # 二、是的,能! 无论是转账、部署合约还是调用合约,其本质都是向以太坊网络发起一笔交易,这笔交易是使用以太坊账号私钥对请求数据进行签名。 在imToken钱包里,提供了**高级选项**模式,允许用户填写交易的请求数据。因此,只需要将所调用的合约方法及参数进行abi编码,得到十六进制数据即可。 还需要abi编码,是什么鬼,我不会啊。 没关系,这里有一个很好用的在线工具,可以自动对所请求的合约方法和参数进行编码。 工具地址:https://abi.hashex.org # 三、口说无凭,唯有实践 这里我耗费巨资(0.00045 Ether)进行了实践,在imToken中转账以太币的方式调用一个ERC20合约的`transfer`方法,进行token转账。 ## 1、来个合约 这里我用的是一个ERC20的合约,合约代码详见:[https://cn.etherscan.com/address/0x286f0322164f532f388dac8bce2a5101d92a3475#code](https://cn.etherscan.com/address/0x286f0322164f532f388dac8bce2a5101d92a3475#code) 在这里可以获取到合约的ABI文件,如果没有ABI文件也没关系,只要能确定你需要调用的合约的方法,比如转账的方法为`transfer(address _to, uint256 _value)`。 根据方法及参数填写相关信息,如下图所示。 ![image.png](https://img.learnblockchain.cn/attachments/2020/06/FZewuaO45eeec70743d93.png) 计算得到的ABI编码是由三部分组成: - 函数选择器(4 字节),`a9059cbb`,计算方法是`bytes4(keccak256(“transfer(address, uint256)”)) == 0xa9059cbb` - 第一个参数address值(32 字节),`0000000000000000000000006e1c69d7692c3ed4d483a32b7a14d75b1c8ef552` - 第二个参数uint256值(32 字节),`0000000000000000000000000000000000000000000000056bc75e2d63100000`,为100000000000000000000的16进制 ## 2、进击吧 选择ETH转账,其中: - 转账地址填写合约地址 - 转账的以太币数量,如果不需要向合约转账以太币时填写0,我这里是转一个ERC20的token,因此以太币数写0 - 填写GasPrice,一般填写20gwei就可以,数值越大,消耗的Gas越多,转账越快 - 填写GasLimit,这个由所调用合约的方法决定,ERC20的转账一般消耗21000,我这里填写30000,足够了 - 填写data,hashex工具计算的数据没有添加前缀`0x`(表示16进制) 万事具备,进击吧! ![image.png](https://img.learnblockchain.cn/attachments/2020/06/wtacmSWq5eeec71c6fd87.png) 交易发送成功后,可以在以太坊浏览器上看到我们的交易,我这里的交易地址为: [https://cn.etherscan.com/tx/0x9f4e92b764f86810c7a5fbce1c3ac64babada9fd4148806433a96e0393e5ead6](https://cn.etherscan.com/tx/0x9f4e92b764f86810c7a5fbce1c3ac64babada9fd4148806433a96e0393e5ead6) 穷啊,给的Gas比较少,还在排队中/::< ![image.png](https://img.learnblockchain.cn/attachments/2020/06/Fy1k40c75eeec7364426a.png) 掌握了这个技巧,我们就可以使用imToken钱包参与锁仓、投票、多重签名等等合约业务了。 奥利给!

一、imToken能调合约?

今天在看以太坊多重签名时,发现都是通过智能合约来实现的(类似投票合约),那么就有一个问题,主流的钱包如imToken,怎么调用智能合约呢。

以前使用imToken钱包都是直接转账,从未想过使用imToken钱包来调合约,今天研究了下,发现其实挺简单的,这里分享出来。

二、是的,能!

无论是转账、部署合约还是调用合约,其本质都是向以太坊网络发起一笔交易,这笔交易是使用以太坊账号私钥对请求数据进行签名。

在imToken钱包里,提供了高级选项模式,允许用户填写交易的请求数据。因此,只需要将所调用的合约方法及参数进行abi编码,得到十六进制数据即可。

还需要abi编码,是什么鬼,我不会啊。

没关系,这里有一个很好用的在线工具,可以自动对所请求的合约方法和参数进行编码。

工具地址:https://abi.hashex.org

三、口说无凭,唯有实践

这里我耗费巨资(0.00045 Ether)进行了实践,在imToken中转账以太币的方式调用一个ERC20合约的transfer方法,进行token转账。

1、来个合约

这里我用的是一个ERC20的合约,合约代码详见:https://cn.etherscan.com/address/0x286f0322164f532f388dac8bce2a5101d92a3475#code

在这里可以获取到合约的ABI文件,如果没有ABI文件也没关系,只要能确定你需要调用的合约的方法,比如转账的方法为transfer(address _to, uint256 _value)

根据方法及参数填写相关信息,如下图所示。

计算得到的ABI编码是由三部分组成:

  • 函数选择器(4 字节),a9059cbb,计算方法是bytes4(keccak256(“transfer(address, uint256)”)) == 0xa9059cbb
  • 第一个参数address值(32 字节),0000000000000000000000006e1c69d7692c3ed4d483a32b7a14d75b1c8ef552
  • 第二个参数uint256值(32 字节),0000000000000000000000000000000000000000000000056bc75e2d63100000,为100000000000000000000的16进制

2、进击吧

选择ETH转账,其中:

  • 转账地址填写合约地址
  • 转账的以太币数量,如果不需要向合约转账以太币时填写0,我这里是转一个ERC20的token,因此以太币数写0
  • 填写GasPrice,一般填写20gwei就可以,数值越大,消耗的Gas越多,转账越快
  • 填写GasLimit,这个由所调用合约的方法决定,ERC20的转账一般消耗21000,我这里填写30000,足够了
  • 填写data,hashex工具计算的数据没有添加前缀0x(表示16进制)

万事具备,进击吧!

交易发送成功后,可以在以太坊浏览器上看到我们的交易,我这里的交易地址为: https://cn.etherscan.com/tx/0x9f4e92b764f86810c7a5fbce1c3ac64babada9fd4148806433a96e0393e5ead6

穷啊,给的Gas比较少,还在排队中/::<

掌握了这个技巧,我们就可以使用imToken钱包参与锁仓、投票、多重签名等等合约业务了。

奥利给!

区块链技术网。

  • 发表于 2020-06-21 10:37
  • 阅读 ( 2602 )
  • 学分 ( 134 )
  • 分类:钱包

评论