Как можно получить сообщение из исключения, возвращающего состояние, с помощью клиентов ethereum, когда self не транслировал транзакцию? - PullRequest
0 голосов
/ 04 марта 2020

Предположим, что смарт-контракт ethereum имеет внешнюю функцию "foo", логика которой c имеет исключающее состояние возвращение require(1 == 0, 'error: you broke the simulation!');.

Если клиент ethereum транслирует транзакцию "txA", которая является вызов функции для foo, как ethereum -клиент B может получить доступ к сообщению возврата состояния, соответствующему "txA"?

редактировать: под словом "как можно" я имею в виду, как разработчик может фактически включить ethereum -клиента B для доступа к этим данным. т.е. можете ли вы указать мне направление правильного (низкоуровневого .. не webui) вызова api / rp c из определенного инструмента?

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

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

1 Ответ

0 голосов
/ 04 марта 2020

См. Это: https://ethereum.stackexchange.com/questions/39817/are-failed-transactions-included-in-the-blockchain

Неудачные транзакции часто включаются в цепочку.

То, что вы иногда видите, если вы используете, например, MetaMask, это всплывающее сообщение «эта транзакция завершится неудачей», которое происходит до транзакции отправляется в цепочку. Это MetaMask, который пытается помочь вам и не тратить впустую газ. Но вы можете принудительно отправить транзакцию в любом случае, и вы получите неудачную / отмененную транзакцию, размещенную в цепочке (например, эта для этот источник Solidity ).

Таким образом, чтобы ответить на исходный вопрос, если TxA был размещен в цепочке, тогда клиент B обработает его и получит само сообщение об отмене. Если TxA не был размещен в цепочке, запись об этом отсутствует.

...