以太坊(eth)交易所钱包开发 - 9 - erc20代币零钱整理

认识erc20转账的交易信息

从etherscan中我们可以看到erc20交易的信息如下:

可以看到,我们在进行erc20交易的时候需要支付两笔费用:

  • eth手续费
  • erc20代币金额

分析erc20零钱整理需求

用户的冲币地址是我们生成的,新生成的地址(例如0xA)是没有eth金额的。当用户向这个地址(0xA)充入某个erc20代币后,这个地址(0xA)便之后erc20代币却没有eth余额。这时候我们如果想把冲进来的erc20整理到冷钱包,则需要先给0xA冲入一定数量的eth作为0xA转移erc20代币时需要的eth手续费。

详细处理流程

生成erc20交易的关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
rpcTx, err := ethclient.RpcGenTokenTransfer(
context.Background(),
tokenRow.TokenAddress,
&bind.TransactOpts{
Nonce: big.NewInt(nonce),
GasPrice: big.NewInt(gasPriceRow.V),
GasLimit: uint64(erc20GasRow.V),
},
tokenRow.ColdAddress,
orgInfo.TokenBalance,
)
if err != nil {
hcommon.Log.Warnf("err: [%T] %s", err, err.Error())
continue
}
signedTx, err := types.SignTx(rpcTx, types.NewEIP155Signer(big.NewInt(chainID)), privateKey)
if err != nil {
hcommon.Log.Warnf("RpcNetworkID err: [%T] %s", err, err.Error())
continue
}
ts := types.Transactions{signedTx}
rawTxBytes := ts.GetRlp(0)
rawTxHex := hex.EncodeToString(rawTxBytes)
txHash := strings.ToLower(signedTx.Hash().Hex())

整合代码

具体实现的代码已经传到了github https://github.com/moremorefun/go-dc-wallet

功能入口在cmd/erc20_tx_org/main.go


坚持原创技术分享,您的支持鼓励我继续创作!