Как получить метаданные Ethereum? admin_getContractInfo не существует

Есть ли способ получить метаданные (байт-код, ABI) развернутого контракта, если вы знаете только адрес контракта?

В geth в административном интерфейсе есть функция getContractinfo() , но при ее вызове я получаю сообщение об ошибке: Метод admin_getContractInfo не существует/недоступен

В документации ( https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions ) я видел пример, но я не думаю, что он работает:

// get the contract info for contract address to do manual verification
var info = admin.getContractInfo(address) // lookup, fetch, decode
var source = info.source;
var abiDef = info.abiDefinition
Какую версию Geth вы используете? Вы вызываете его из attachконсоли ed? Другие adminкоманды работают?
Да, другие команды администратора работают. Я использую подключенную консоль. Я использую версию 1.4.3.

Ответы (2)

Для байт-кода вы можете использовать web3.eth.getCode(address).

Для ABI вам нужно получить его от того, кто написал контракт, или сгенерировать ABI из исходного кода. Как правило, вы не можете определить имена функций из байт-кода, потому что в байт-коде есть только хэш имен, дополнительная информация: нужен ли мне скомпилированный контракт только для того, чтобы получить определение ABI?


admin.getContractInfoвроде удалили . (Обратите внимание, что для использования также были необходимы getContractInfoболее ранние шаги https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions#contract-info-metadata , включая saveInfoметаданные.)

Почему getContractInfo был удален? Вроде нужная функция. Как я буду слушать события другого контракта? Не существует функции «loadABI», чтобы сделать это из файла, даже если владелец контракта предоставил мне исходный код.

Да, но это немного хлопотно (вам нужно перепроектировать код/быть знакомым с байт-кодом EVM).

Здесь есть пример с развернутым контрактом .