Как получить файл json (ABI) с известного адреса контракта?

Я хочу посмотреть контракт Solidity с помощью браузера Mist. Я знаю, как это сделать, и ему нужен адрес и json. У меня есть адрес, но у меня нет json. У меня есть исходный код.

Могу ли я сгенерировать json из исходного кода и/или адреса Ethereum?

Ответы (7)

JSON называется ABI.

Вам действительно нужен исходный код, как и у вас, и один из способов получить ABI — вставить его в Remix IDE , скомпилировать, а затем нажать кнопку «ABI», чтобы скопировать ABI в буфер обмена.

@eth: что, если это чей-то другой контракт, который уже развернут в блокчейне? Вы знаете, где находится контракт (его хэш), но вы не знаете аби. Как вы можете взаимодействовать с ним?
@David Если автор не опубликовал ABI, он может не захотеть, чтобы вы взаимодействовали с ним. В этом случае вы можете попробовать реконструировать их код для взаимодействия с ним.

Если контракт проверен в Etherscan, следующий сценарий извлекает ABI и сохраняет его в файл JSON. Используйте это как

$ python fetch_abi.py <contract address> -o <target JSON file>

fetch_abi.py

#!/usr/bin/python
import argparse
import requests
import json

# Exports contract ABI in JSON

ABI_ENDPOINT = 'https://api.etherscan.io/api?module=contract&action=getabi&address='

parser = argparse.ArgumentParser()
parser.add_argument('addr', type=str, help='Contract address')
parser.add_argument('-o', '--output', type=str, help="Path to the output JSON file", required=True)

def __main__():

    args = parser.parse_args()

    response = requests.get('%s%s'%(ABI_ENDPOINT, args.addr))
    response_json = response.json()
    abi_json = json.loads(response_json['result'])
    result = json.dumps({"abi":abi_json}, indent=4, sort_keys=True)

    open(args.output, 'w').write(result)

if __name__ == '__main__':
    __main__()

Вот как вы получаете abiс помощью вашего локального solcкомпилятора:

solc filename.sol --abi

Вам также нужен binкод для развертывания контракта, который вы можете получить следующим образом:

solc filename.sol --bin

Если вам нужен комбинированный вывод solc (например, для четности), где binчасть abiстроки json, используйте это:

solc filename.sol --combined-json abi,bin

РЕДАКТИРОВАТЬ

На Compileвкладке (правое верхнее меню) просто нажмите на Details.


СТАРЫЙ МЕТОД

В новой версии браузера Solidity вы можете найти Interfaceзначение, нажав наContract details (bytecode, interface etc.)

Json-интерфейс браузера Solidity

Где Contract details (bytecode, interface etc.)находится? @NineCattoRules
@Alper мой ответ старый. На Compileвкладке просто нажмите наDetails

Вы можете получить ABI json из API etherscan, как показано ниже.

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider());
var version = web3.version.api;
        
$.getJSON('https://api.etherscan.io/api?module=contract&action=getabi&address=0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359', function (data) {
    var contractABI = "";
    contractABI = JSON.parse(data.result);
    if (contractABI != ''){
        var MyContract = web3.eth.contract(contractABI);
        var myContractInstance = MyContract.at("0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359");
        var result = myContractInstance.memberId("0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715");
        console.log("result1 : " + result);            
        var result = myContractInstance.members(1);
        console.log("result2 : " + result);
    } else {
        console.log("Error" );
    }            
})
Где бы вы разместили свой идентификатор контракта? Нужно ли предварительно где-то загружать договор?
Вы можете получить уже развернутые контракты ABI в сети ethereum.

Перейдите в EtherScan> введите адрес контракта> щелкните код в заголовке раздела вкладки> прокрутите вниз, чтобы найти ABI контракта> щелкните значок «Копировать», чтобы скопировать его.

Это работает только в том случае, если издатель смарт-контракта решил опубликовать свой ABI, но вы правы. Насколько я знаю, это единственный способ получить его.

Просто перейдите на http://remix.ethereum.org/ и вставьте исходный код контракта. Нажмите «Начать компиляцию», и примерно через несколько секунд ваш контракт будет обработан. Нажмите кнопку «Подробнее» (находится в правом верхнем углу). Во всплывающем окне вы найдете ABI, METADATA, BYTECODE и т. д.