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