Учетная запись BlockCypher слишком далеко отстает от транзакции

В настоящее время я работаю над DApp, который включает отправку транзакций. Я использую BlockCypher для отправки транзакций, так как API довольно прост. Одна проблема, которую я обнаружил, заключается в том, что когда я запускаю свой API локально и вызываю метод отправки транзакции, я получаю хэш транзакции, и я могу проверить его на Etherscan, и транзакция действительно выполняется.

Следующим шагом, конечно же, является развертывание API, а затем его тестирование, когда я делаю это и попадаю в конечную точку API с точно такими же параметрами. Я получаю следующую ошибку: Error validating transaction: Account nonce 68 too far behind transaction 0xad50ba948fc3fe266fb19c4aa3f3a81928ff114b3fadf597a620ec86eada7cf0:. Похоже, что рассматриваемая транзакция вообще не существует (из-за поиска на Etherscan), и поэтому кажется, что мой Nonce для этой учетной записи не синхронизирован с тем, чем он должен быть. Это вообще возможно? И как побороть эту проблему?

Как оказалось, я обнаружил, что учетная запись должна иметь одноразовый номер более 200, а функция, web3.eth.getTransactionCount(ADDR)кажется, возвращает только 68. Вот как я строю транзакцию:

 var count = web3.eth.getTransactionCount(FROM_ADDR);

 var data = myContractInstance.transfer.getData(to, value, { from: FROM_ADDR });

 var gasPrice = "2000000000";
 var gasLimit = 90000;

 var rawTransaction = {
     "from": FROM_ADDR,
     "nonce": web3.toHex(count),
     "gasPrice": web3.toHex(gasPrice),
     "gasLimit": web3.toHex(gasLimit),
     "to": to,
     "data": data,
     "chainId": 0x01
 };

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

Заранее спасибо,

Ответы (1)

Когда вы создаете транзакцию с полным объектом транзакции, вы можете делать разные вещи, включая размещение другого файла nonce. Просто посмотрите на любую ожидающую транзакцию, чтобы увидеть, как она выглядит, и постройте свою транзакцию на основе чего-то вроде этого:

[{
    blockHash: null,
    blockNumber: null,
    from: "0x010...",
    gas: 90000,
    gasPrice: 100000000000,
    hash: "0xe483aec6b05342eeedf3017314a2838180d66ee78a5ef21642c9f81b7b222dce",
    input: "0x",
    nonce: 269,
    r: "0x9927c6c3856b35ca4ef1155840a4dbd83b79daa5a581b58a23563880bd9838b1",
    s: "0x20bb0b13e8c87cff5677cfbb9c720b75104708e36cd08df5e844d5f1d359ebc5",
    to: "0x020...",
    transactionIndex: 0,
    v: "0xa95",
    value: 1000000000000000000
}]

Поэтому вы можете попробовать что-то вроде:

web3.eth.sendTransaction( { from : me , to : _to, value: web3.toWei(1), /*gas: 90000, gasPrice: 100000000000,*/ nonce: 269 } )

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

Привет, Андрей, да, похоже, это проблема на стороне BlockCypher. Я просто изменил адрес, с которого отправлял письма, и все заработало. Я также проверил одноразовый номер транзакции перед ее отправкой, и этот одноразовый номер был более 200. Отправил им электронное письмо, и, надеюсь, оно будет отсортировано. Обновлю вопрос.