知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
有時我們需要將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