Я пытаюсь визуализировать транзакции для Ethereum, в настоящее время я знаю, что есть обозреватели блокчейнов, такие как Etherscan.io и Etherchain.org , однако я не хочу продолжать вызывать их API для получения данных, а использовать свой собственный полный узел для получения все данные, которые мне нужны, поскольку они дают мне больший контроль.
Поэтому я настроил полный узел и использую библиотеку Web3JS для получения блоков и транзакций. Однако у Web3JS нет возможности получить учетную запись по указанному адресу (если я не ошибаюсь). Итак, когда у меня есть объект транзакции, я могу выяснить, кто является отправителем и получателем, но я также хочу знать, является ли отправитель или получатель договором или учетной записью. Я знаю, что через API etherchain мы можем получить учетные записи, используя адрес, возможно ли сделать то же самое, используя geth и Web3Js?
В желтой книге Ethereum упоминается, что у каждой учетной записи есть nonce, balance, storageHash и codeHash, поэтому я подумал, что можно будет получить учетную запись, используя адреса из блокчейна. Пожалуйста, помогите нам разобраться, как определить, является ли данный адрес контрактом или учетной записью, не используя упомянутые выше обозреватели блокчейнов?
Нет , по одному только адресу невозможно определить, является ли это контрактной учетной записью или внешней учетной записью.
См. этот предыдущий пост о том, как генерируются адреса контрактов:
Более того, ожидается, что в конечном итоге все учетные записи будут контрактами (это называется абстракцией учетных записей ):
Вы можете использовать функцию web3.js, web3.eth.getCode
чтобы получить байт-код EVM, связанный с адресом. Предполагается, что для сторонних аккаунтов он вернет 0x0
.
Атахир
эт
Томас Джей Раш
getCode
возвращает 0x0, то этот адрес явно не контрактный. Предположительно, ОП задает вопрос, потому что он/она хочет знать, является ли адрес, который взаимодействовал с его/ее децентрализованным приложением, контрактом (и, возможно, ведет себя по-другому). Если с ним уже взаимодействовали, а getCode возвращает 0x0, не правда ли, что это не контракт (и никогда не будет)? Я не говорю, что это так, я просто смущен предыдущим комментарием.