Я хотел подчеркнуть проблему, от которой мы все страдаем при использовании сторонних API. Допустим, вы хотите совершить транзакцию эфириума. Обычно API возвращает txid при успешном выполнении запроса. Но в моем примере в запросе есть неизвестная ошибка. API не возвращает txid.
Когда вызов API терпит неудачу по любой причине, стандартное предположение состоит в том, что транзакция не была успешной. По моему опыту работы почти со всеми API, это предположение совершенно неверно. Транзакция все еще может быть успешной, даже если API возвращает ошибку. Я видел это несколько раз с биткойнами и биржевыми API.
Поэтому, когда мы получаем сообщение об ошибке при создании транзакции, мы хотим выяснить, была ли транзакция успешной или нет. В противном случае вы можете отправить транзакцию несколько раз. Проблема здесь в том, что у нас нет txid для простого поиска транзакции.
В идеале я хочу давать свой собственный идентификатор ссылки с каждой транзакцией. Таким образом, мне не нужно полагаться на txid, предоставленный мне API. К сожалению, это не параметр в текущем API json-rpc.
Я решил эту проблему в биткойне, используя поле «комментарий» для моего собственного идентификатора ссылки. Затем я перебираю последнюю сумму X транзакции и пытаюсь найти совпадение с комментарием транзакции и идентификатором ссылки.
Любые предложения о том, как решить эту проблему с Ethereum?
В идеале я хочу давать свой собственный идентификатор ссылки с каждой транзакцией.
Данные можно прикрепить к любой транзакции с помощью data
поля.
Вот пример в web3.js:
eth.sendTransaction({data:web3.toHex('123456'), from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(100,'finney')})
Данные должны быть в шестнадцатеричном формате. Строка передается, toHex
чтобы идентификатор рассматривался как BigNumber (поскольку Javascript не имеет собственных больших чисел).
Когда вы читаете шестнадцатеричные данные, преобразуйте их обратно в строковый идентификатор, используя new BigNumber(hexData).toString()
.
Чем больше данных прикреплено к транзакции, тем больше газа она будет стоить, поэтому имейте это в виду при использовании идентификаторов, которые вы используете.
эт
Иван да Силвейра
эт
to
поле пустое, вы вводите код контракта вdata
поле. Кроме того, я разместил ответ вместо того, чтобы пометить ваш вопрос как дубликат, потому что могут быть другие решения общей проблемы.