#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) =>{...