[求助] web3j呼叫智能合約的問題

看板 DigiCurrency
作者 fugenyuzen (翎簫)
時間 2018-02-08 13:13:03
留言 18則留言 (4推 0噓 14→)

大家好,我最近在研究私有鏈的部份, 並且用ethereum wallet發佈了一個智能合約在上面, 該智能合約很簡單,只是一個map形式的結構(key,value), 一個方法是新增,一個方法是查詢, 目前使用web3j的方式來呼叫, 但我發現短時間內大量使用web3j sendAsync()呼叫該智能合約做新增的動作, 會漏掉中間某些數據沒有成功上去, 但若使用send(),會需要10幾秒的時間才結束,太慢了, 在網路上找了很久,發現可能和nonce有關係? 不知道有誰有類似經驗的,可以回答我該怎麼做嗎?謝謝 ---------------------------------------------------------------- 智能合約: contract dataStore { struct DataStruct { string key; string value; } mapping (string => DataStruct) datas; function newData(string key, string value) public { datas[key] = DataStruct(key, value); } function getValue(string key) public view returns (string value) { DataStruct storage c = datas[key]; return c.value; } } web3j程式: String url = "http://localhost:8545"; Web3j web3j = Web3j.build(new HttpService(url)); Credentials credentials = null; credentials = WalletUtils.loadCredentials("xxx", account); DataStore contract = DataStore.load(address, web3j, credentials, Contract.GAS_PRICE, Contract.GAS_LIMIT); contract.newData("test", "testxxxxx").sendAsync(); --
※ 批踢踢實業坊(ptt.cc), 來自: 118.163.177.126
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1518066787.A.DAD.html

ousapas: 你是用parity還是geth? 02/08 20:35

fugenyuzen: 我是用geth,發佈智能合約的方式是用mist發佈的。再使 02/08 21:03

fugenyuzen: 用tuffle將abi轉成java檔 02/08 21:03

bikeboy106: TX Nonce 你可以自己設定 或是讓node幫你決定 最好方 02/08 21:57

bikeboy106: 式你自己架一個node 自己送tx到自己的node 讓你的node 02/08 21:57

bikeboy106: 廣播transaction出去 02/08 21:57

ousapas: 你要不要把code貼出來 02/08 22:15

ousapas: 我的猜想是sendAsync來不及幫你遞增nonce 02/08 22:15

ousapas: ethereum的設計是一個帳號的交易nonce必須是遞增數列 02/08 22:15

ousapas: 短時間送出太多tx,可能會造成中間有重複的nonce 02/08 22:16

ousapas: 重複nonce的tx都會被拒絕處理 02/08 22:16

ousapas: 所以才會造成有些成功有些失敗的現象 02/08 22:17

bikeboy106: 印象中web3是不處理nonce的, 所以要嘛client side自 02/09 00:44

bikeboy106: 己指定 不然就是node給. 所以聽起來像是node使用的版 02/09 00:44

bikeboy106: 本有TX nonce 同步的問題 02/09 00:44

bikeboy106: 要去看node 的 log才知道發生什麼問題 02/09 00:45

fugenyuzen: 目前應該是找到方法解決了,我自己給nonce並且遞增就可 02/09 16:37

fugenyuzen: 以正常的把資料往上送,謝謝上面二位給我很大的幫助 02/09 16:37

您可能感興趣