Чтение данных транзакции с узла

Я подключен к узлу Ethereum (под управлением Geth), которым я управляю, и я могу подключиться к нему с помощью RPC. Я могу получить доступ к web3 в терминале после выдачи geth console. Я могу получить доступ и запустить вызовы функций RPC, как указано в документации здесь . Мне приходится переключаться между разными библиотеками, такими как webpy и web3.js, поэтому реализация в любой из них должна быть в порядке.

Имея хэш транзакции, я могу получить детали транзакции, скажем, с помощью web3.eth.getTransaction(transaction_hash). Но все детали, которые я получаю, включают только: hash, input, nonce, from, to, transaction_index, value, v, r, s.

Что мне интересно, так это то, как этот веб-сайт получает доступ к остальным подробным сведениям о том, сколько токенов было передано. В частности, как мы можем прочитать (учитывая адрес отправителя и контракта, участвующего в транзакции) значение переданных токенов, т.е. параметр value вызова функции ?

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

введите описание изображения здесь

Это из поля ввода? Если да, то как интерпретировать шестнадцатеричный код для фактических значений и вызываемой функции?

Ответы (2)

Скорее всего, они прослушивают события , генерируемые каждым смарт-контрактом, и индексируют их в своей локальной базе данных.

Стандартные смарт-контракты, совместимые с ERC20, генерируют Transfer()событие при каждой транзакции. Если вы хотите отслеживать все события, генерируемые смарт-контрактом, вы можете подписаться на свой клиент на allEvents.

Чтобы получить доступ к имени вызванной функции, имени параметров функции, типам параметров (uint256, адрес и т. д.) и значению этих параметров, необходимо расшифровать поле «Входные данные». .

Простой способ декодировать входные данные — использовать уже встроенный декодер, такой как ethereum-input-data-decoder .

События не являются надежным способом доступа к этим данным, потому что многие функции контрактов не запускают события, и вы никогда не можете быть уверены, что событие дает вам истинное значение параметров.