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

可以看到,我们在进行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
