Все, я только что развернул разрешенную сеть Кворума (с 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все работает нормально.
Полагаю, что некоторые сложные задачи ЦП блокируют цикл событий.Однако я дважды проверяю, что кворум txn запускается асинхронно.Я также заметил, что есть несколько процессов nodejs, порождаемых в консоли через top
cmd.Кроме того, некоторые файлы с именем .node-xmlhttprequest-sync-*
создаются автоматически.
Есть идеи, что происходит?Кстати, совместим ли кворум с web3js 1.0.0 +?
Thx