作者fugenyuzen (翎箫)
看板DigiCurrency
标题[求助] web3j呼叫智能合约的问题
时间Thu Feb 8 13:13:03 2018
大家好,我最近在研究私有链的部份,
并且用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://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1518066787.A.DAD.html
1F:推 ousapas: 你是用parity还是geth? 02/08 20:35
2F:→ fugenyuzen: 我是用geth,发布智能合约的方式是用mist发布的。再使 02/08 21:03
3F:→ fugenyuzen: 用tuffle将abi转成java档 02/08 21:03
4F:推 bikeboy106: TX Nonce 你可以自己设定 或是让node帮你决定 最好方 02/08 21:57
5F:→ bikeboy106: 式你自己架一个node 自己送tx到自己的node 让你的node 02/08 21:57
6F:→ bikeboy106: 广播transaction出去 02/08 21:57
7F:推 ousapas: 你要不要把code贴出来 02/08 22:15
8F:→ ousapas: 我的猜想是sendAsync来不及帮你递增nonce 02/08 22:15
9F:→ ousapas: ethereum的设计是一个帐号的交易nonce必须是递增数列 02/08 22:15
10F:→ ousapas: 短时间送出太多tx,可能会造成中间有重复的nonce 02/08 22:16
11F:→ ousapas: 重复nonce的tx都会被拒绝处理 02/08 22:16
12F:→ ousapas: 所以才会造成有些成功有些失败的现象 02/08 22:17
※ 编辑: fugenyuzen (114.41.104.107), 02/08/2018 23:15:30
13F:推 bikeboy106: 印象中web3是不处理nonce的, 所以要嘛client side自 02/09 00:44
14F:→ bikeboy106: 己指定 不然就是node给. 所以听起来像是node使用的版 02/09 00:44
15F:→ bikeboy106: 本有TX nonce 同步的问题 02/09 00:44
16F:→ bikeboy106: 要去看node 的 log才知道发生什麽问题 02/09 00:45
17F:→ fugenyuzen: 目前应该是找到方法解决了,我自己给nonce并且递增就可 02/09 16:37
18F:→ fugenyuzen: 以正常的把资料往上送,谢谢上面二位给我很大的帮助 02/09 16:37