Не в состоянии одновременно вызывать несколько контрактов в Кворум через 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+?

Спасибо

0 ответов

Другие вопросы по тегам