Как обрабатывать несколько транзакций web3 в nodejs

#javascript #node.js #ethereum #web3

#javascript #node.js #ethereum #web3

Вопрос:

Я обрабатываю транзакцию следующим образом:

 web3.eth.getTransactionCount(sender_address, (err, txCount) =>{
        console.log(txCount)
        if(err){
          console.log(err);
        }else{
          const txObject = {
            nonce: web3.utils.toHex(txCount),
            to: master_address,
            value: web3.utils.toHex(web3.utils.toWei("0.1", "ether")),
            gasLimit: web3.utils.toHex(21000),
            gasPrice: web3.utils.toHex(web3.utils.toWei("10", "gwei"))
          } 

          const tx = new Tx(txObject);
          tx.sign(sender_private_key);

          const serialized_tx = tx.serialize();
          const raw = '0x'   serialized_tx.toString('hex');
          

          web3.eth.sendSignedTransaction(raw, (err, txHash) =>{
            if(err){
              console.log(err);
              
            }else{
              console.log("txHash:", txHash);
              
            }
            
          }).then(function(receipt) {
            //Insert amir
            if(receipt["status"] == true){
              console.log("Tx has been mined")
            }else{

            }
            console.log(receipt)
          });
        }

      });
 

На данный момент это работает, если отправитель совершает 1 транзакцию, но если отправитель совершает две транзакции до их майнинга, одноразовый номер остается тем же и, следовательно, вызывает ошибку.

Я прочитал в документации web3js о цепочке, но я не уверен, что это то, что я ищу.

Как мне изменить существующий код, чтобы работать с несколькими транзакциями до их майнинга?

Ответ №1:

Ваше приложение должно управлять nonce и сохранять последнее значение, а затем использовать его в транзакции отправки.

Но, возможно pending , количество транзакций решит вашу проблему

 web3.eth.getTransactionCount(sender_address, 'pending', (err, txCount) =>{...