全部, 我刚刚按照此处的example(不完全一样)部署了一个受许可的Quorum网络(与Tessera一起使用)。
我尝试通过web3js(版本0.20.0)发出多个并发合约调用来对网络进行基准测试。代码段如下。
function benchmark(tps){
let contractInstance = web3.eth.contract(JSON.parse(abi_str)).at(address);
let promises = [];
for (...) {
let func = ...;
let args = ...
promises.push(sendTxn(contractInstance, func, args, web3.accounts[0]));
sleep 1/tps
}
...
}
function sendTxn(contractInstance, functionName, args, from_acc) {
return new Promise((resolve, reject) => {
contractInstance[functionName].sendTransaction(...args, {
from: from_acc,
gas: 0xE0000000,
privateFor: (this.private ? this.privateFor : undefined)
}, (err, txID) => {
// console.log("txID: ", txID);
if (txID) {
resolve(txID);
} else {
reject(err);
}
});
});
}
我有一个单独的状态例程,该例程通过构建的setInterval
触发并定期收集已解析的txID
。
但是,当发出的txn速率稍高(每个进程大于10tps)时,状态例程以及sendTxn
中的回调均无法响应。如果小于10tps ,一切正常。
我想可能是某些CPU繁重的任务阻止了事件循环。
但是,我再次检查仲裁txn是否异步触发。
我还注意到通过top
cmd在控制台中产生了多个nodejs进程。
此外,会自动创建一些名为.node-xmlhttprequest-sync-*
的文件。
知道发生了什么吗?顺便说一句,仲裁是否与web3js 1.0.0+兼容?
Thx