Не в состоянии одновременно вызывать несколько контрактов в Кворум через web3js
Все, я только что развернул разрешенную сеть Кворума (с 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 немного выше (> 10 TPS на процесс), как процедура состояния, так и обратный вызов в sendTxn
не в состоянии ответить. Если ниже 10tps, все работает нормально.
Я предполагаю, что это могут быть некоторые сложные задачи CPU, блокирующие цикл событий. Однако я дважды проверяю, что кворум txn запускается асинхронно. Я также заметил, что есть несколько процессов nodejs, порождаемых в консоли через top
CMD. Кроме того, некоторые файлы .node-xmlhttprequest-sync-*
автоматически создаются.
Есть идеи, что происходит? Кстати, кворум совместим с web3js 1.0.0+?
Спасибо