美文网首页
【智能合约】合约币转币参数解析

【智能合约】合约币转币参数解析

作者: 捕梦少女的梦想 | 来源:发表于2018-06-26 16:35 被阅读0次

Transaction有几个重要字段,from, to, value, data(input)。
from: Transaction是由谁发起的。
to: Transaction发送到哪个地址。
value: Transaction发送的ETH数量。
data: 某些api中字段名字叫做input,含义都一样,代表这个Transaction附带的数据,通常是执行某些智能合约的命令。

let _data = '0x' +                          // 固定
// 代表调用合约 transfer 方法
            'a9059cbb' +                    
// 参数1 收币 address 使用 '0' 补足 length 为 64 字符串
            '000000000000000000000000' +    
            'ee37d06477a5a6733dcf032aeb7460f7e913efef' +
// 参数2 转币数量 用户输入单位为 ether 需要转换为 wei 再转换为16进制字符串 
// 同样是使用 '0' 补位为 length 64 字符串
          '000000000000000000000000000000000000000000000000000000000000' +    
            '2710'
let txObj = {
    nonce: _nonce,                             // 此参数为当前账户交易次数统计
    gasPrice: BigInt(28000),            //  gas 每单位价格
    gasLimit: BigInt(100000),          // 最高上限
    to: '0xb2cf81e5ef5b3272fc6c014be41076b7baaab5d9',       // 此处为 token 合约地址
    value: '0x00',
    data: _data
}

跟主链币的区别就是多了data参数的生成,详解data如何生成:

当我们调用transfer函数向某个地址发送N个ERC-20代币的时候,交易的input数据分为3个部分:

1.指令hash。

  • 4 字节,是方法名的哈希:a9059cbb

回到ERC20的代码中,发送的函数如下,根据ABI编码的规则,我们要通过web3.sha3("transfer(address,uint256)")方法计算得到值,取前4个字节(8个16进制数)得到Transaction中的指令hash。ERC20标准的transfer函数的指令hash前8字节为a9059cbb

2.接收账户。

  • 32字节,放以太坊地址,目前以太坊地址是20个字节,高危补0
    000000000000000000000000abcabcabcabcabcabcabcabcabcabcabcabcabca

通常的以太坊账户为20字节(40个16进制数),前面加上0x。在data部分,需要将40个16进制数前面填充24个0,总共64个16进制数

3.数量。

  • 32字节,是需要传输的代币数量,这里是1*10^18 GNT
    0000000000000000000000000000000000000000000000000de0b6b3a7640000

将数量转化成16进制(以1e-18为单位),同样填充若干个0,填充为64个16进制数

然后将三个部分拼接而成Transaction的data。例如,向0x299432642dcc4c2f33ff0f5d41b8f4154b82ae2a地址发送1000个token。data部分凭接如下:

0x + 
a9059cbb +
000000000000000000000000299432642dcc4c2f33ff0f5d41b8f4154b82ae2a+   //(接收地址)
00000000000000000000000000000000000000000000021e19e0c9bab2400000  //(接收数量16进制表示,以1e-18为单位)。

所以发送的Transaction参数为:

from: 0x发送地址; 
to:0x合约地址; 
value:0x; 
data:0xa9059cbb000000000000000000000000299432642dcc4c2f33ff0f5d41b8f4154b82ae2a00000000000000000000000000000000000000000000021e19e0c9bab2400000.

参考链接:

https://blog.csdn.net/guokaikevin/article/details/79060095
https://blog.csdn.net/guokaikevin/article/details/78577078

相关文章

网友评论

      本文标题:【智能合约】合约币转币参数解析

      本文链接:https://www.haomeiwen.com/subject/oybyjftx.html