说明
底层转账代表转移的是底层燃料币 MOAC,相当于以太坊的 ETH。这里和合约发行的ERC20代币不同
正文
第一步:
创建连接(前文有了,这里不再介绍)
第二步:
获取序列号,序列号的用途主要是防止双花攻击。其他区块链如井通链的 sequence 也和 MOAC 链的序号类似
1 | let sequence = chain3.mc.getTransactionCount(address); |
第三步:
组建发送交易的数据结构:
1 | let rawTx = { |
这里代表 A地址 -> B地址的一笔转账。
手续费概念请参考以太坊的手续费概念,这里写常量是做的简单方式处理
- gasPrice 越大交易越快处理
- gasLimit 此交易最大允许花费的手续费,这个手续费不能超过区块最大手续费
value 代表转账的金额,单位是 hex 的 sha 最小单位。 这里直接代码转换,非常方便。
data 数据在普通转账里面可以当做备注来使用,这里传入 UTF-8的值,会转换为 HEX 存入区块中。
data数据在合约部署中涉及到的比较复杂,这里不多做描述,这里只介绍普通转账
chainId 区块链id标识,有主网和测试网的区分。这里动态进行获取
第四步:签名
1 | const cmd = chain3.signTransaction(rawTx, secret); |
使用私钥把组建需要发送交易的数据结构进行签名,签名出来 Blob数据,拿签名数据去交易比较安全。
这一步一般在前端去做,服务器不接触用户的私钥。
第五步:提交上链
1 | const { err, hash } = await new Promise(resolve => { |
这里封装了一下,使用 es7 的 Promise 方法。使用过程是一样的。这些写比较美观,逻辑比较清晰。
有错误的话,err不为空,hash为空
无错误的话,err为空,hash有值
这里的hash还需要等待区块同步才能查询到结果,到链上查询这个hash会得到转账的基础信息和是否成功。