Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

9.7. 批量转账遇到的问题与解决方案

有时我们需要将Token发送到多个地址上去。通常的做法就是使用web.js写一个循环程序,但是实际使用过程中发现这种做法存在很多问题,常会发生转账失败情况。

经过分析造成发送失败原因是,频率太高,因为web.js 是异步操作,当前程序还未完成交易,交易尚未确认的情况下第二笔交易发送出去,这时就会出错。

		
web3.eth.getTransactionCount(from).then(function(nonce){
	// 问题就出在 nonce , nonce 如同数据库中的序列主键,如果上一个交易没有完成,下一个交易取得 nonce + 1 后与上一个 pending 的交易相同,产生冲突
}		
		
		

最好的解方案是在合约中实现批量转账功能,这样需要一个交易 txhash 完成多比交易。

如果你的Token已经在使用了,且没有批量转账的功能怎么解决呢?我们可以在写一个Token 继承原来的Token,在新的 Token 中实现批量转账功能

		
Function: batchTransfer(address[] _to, uint256[] _value)

MethodID: 0x88d695b2
[0]:  0000000000000000000000000000000000000000000000000000000000000040
[1]:  00000000000000000000000000000000000000000000000000000000000000a0
[2]:  0000000000000000000000000000000000000000000000000000000000000002
[3]:  000000000000000000000000372967130b1a7cd386348bc59de905e628e36f3a
[4]:  000000000000000000000000372967130b1a7cd386348bc59de905e628e36f3b
[5]:  0000000000000000000000000000000000000000000000000000000000000002
[6]:  000000000000000000000000000000000000000000000000000000000000000c
[7]:  0000000000000000000000000000000000000000000000000000000000000022