отправить необработанную транзакцию, не зная одноразового номера

Я хочу отправлять необработанные транзакции, но я не хочу случайно перезаписывать какие-либо транзакции.

Afaik при использовании eth.sendTransaction он автоматически увеличивает одноразовый номер и не перезаписывает какие-либо транзакции (отслеживает ли узел здесь одноразовый номер?). Теперь у меня есть скрипт, который отправляет необработанные транзакции на узел (очевидно, учетная запись не указана там из соображений безопасности).

Есть ли способ автоматически добавлять транзакции, не зная одноразового номера или случайно перезаписывая транзакции? Или я должен сам следить за одноразовым номером?

Ответы (4)

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

Поэтому вам нужно знать одноразовый номер, который вы хотите использовать, прежде чем подписывать транзакцию.

узел отслеживает здесь одноразовый номер?

Да

Должен ли я сам отслеживать одноразовый номер?

Да


Все транзакции должны включать явный одноразовый номер. (на данный момент... См. обсуждение абстракции учетной записи для возможности удаления одноразового номера)

Так что на данный момент вы должны вручную отслеживать одноразовый номер и включать его в транзакцию.

const transactionCount = await web3.eth.getTransactionCount(<your-address>, 'pending');
const nonce = web3.toHex(transactionCount);
Это намного практичнее, чем отслеживать одноразовый номер вручную!
да, но это не учитывает ожидающие транзакции. таким образом, у меня есть риск перезаписи транзакций

Вы ДОЛЖНЫ установить правильный nonceпараметр при отправке необработанных транзакций, иначе ваша транзакция никогда не будет транслироваться.

посетите этот URL, чтобы получить последний одноразовый номер:

https://infura.io/docs/ethereum/json-rpc/eth-getTransactionCount

например

curl https://mainnet.infura.io/v3/YOUR-PROJECT-ID
    -X POST     
    -H "Content-Type: application/json"     
    -d '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params": ["0x7CCfaF74ADBA37b2eF11B4caa3ce37597074c45c","latest"],"id":1}'

result: 

{"jsonrpc":"2.0","id":1,"result":"0x396"}       # => 918