大家好,我最近在研究私有鏈的部份,
並且用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();
--
並且用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();
--
All Comments