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

看板DigiCurrency (數位貨幣)作者 (翎簫)時間6年前 (2018/02/08 13:13), 6年前編輯推噓4(4014)
留言18則, 3人參與, 6年前最新討論串1/1
大家好,我最近在研究私有鏈的部份, 並且用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

02/08 20:35, 6年前 , 1F
你是用parity還是geth?
02/08 20:35, 1F

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

02/08 21:03, 6年前 , 3F
用tuffle將abi轉成java檔
02/08 21:03, 3F

02/08 21:57, 6年前 , 4F
TX Nonce 你可以自己設定 或是讓node幫你決定 最好方
02/08 21:57, 4F

02/08 21:57, 6年前 , 5F
式你自己架一個node 自己送tx到自己的node 讓你的node
02/08 21:57, 5F

02/08 21:57, 6年前 , 6F
廣播transaction出去
02/08 21:57, 6F

02/08 22:15, 6年前 , 7F
你要不要把code貼出來
02/08 22:15, 7F

02/08 22:15, 6年前 , 8F
我的猜想是sendAsync來不及幫你遞增nonce
02/08 22:15, 8F

02/08 22:15, 6年前 , 9F
ethereum的設計是一個帳號的交易nonce必須是遞增數列
02/08 22:15, 9F

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

02/08 22:16, 6年前 , 11F
重複nonce的tx都會被拒絕處理
02/08 22:16, 11F

02/08 22:17, 6年前 , 12F
所以才會造成有些成功有些失敗的現象
02/08 22:17, 12F
※ 編輯: fugenyuzen (114.41.104.107), 02/08/2018 23:15:30

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

02/09 00:44, 6年前 , 14F
己指定 不然就是node給. 所以聽起來像是node使用的版
02/09 00:44, 14F

02/09 00:44, 6年前 , 15F
本有TX nonce 同步的問題
02/09 00:44, 15F

02/09 00:45, 6年前 , 16F
要去看node 的 log才知道發生什麼問題
02/09 00:45, 16F

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

02/09 16:37, 6年前 , 18F
以正常的把資料往上送,謝謝上面二位給我很大的幫助
02/09 16:37, 18F
文章代碼(AID): #1QUznZsj (DigiCurrency)
文章代碼(AID): #1QUznZsj (DigiCurrency)