Wie bekommt man eine JSON-Datei (ABI) von einer bekannten Vertragsadresse?

Ich möchte einen Solidity-Vertrag mit dem Mist-Browser ansehen. Ich weiß, wie das geht, und es braucht die Adresse und den JSON. Ich habe die Adresse, aber ich habe nicht den JSON. Ich habe den Quellcode.

Kann ich den JSON aus dem Quellcode und/oder der Ethereum-Adresse generieren?

Antworten (7)

Der JSON wird als ABI bezeichnet.

Sie benötigen den Quellcode, wie Sie ihn haben, und eine Möglichkeit, die ABI zu erhalten, besteht darin, sie in Remix IDE einzufügen , zu kompilieren und dann auf die Schaltfläche „ABI“ zu klicken, um die ABI in Ihre Zwischenablage zu kopieren.

@eth: Was ist, wenn es der Vertrag einer anderen Person ist, der bereits in der Blockchain bereitgestellt wird? Sie wissen, wo der Vertrag sitzt (Hash davon), aber Sie kennen den Abi nicht. Wie kannst du damit interagieren?
@David Wenn der Autor das ABI nicht veröffentlicht hat, möchte er möglicherweise nicht, dass Sie damit interagieren. In diesem Fall können Sie versuchen, ihren Code zurückzuentwickeln, um damit zu interagieren.

Wenn der Vertrag in Etherscan verifiziert wird, ruft das folgende Skript die ABI ab und speichert sie in einer JSON-Datei. Verwenden Sie es wie

$ 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__()

So erhalten Sie das abi, indem Sie Ihren lokalen solcCompiler verwenden:

solc filename.sol --abi

Sie benötigen auch den binCode, um den Vertrag bereitzustellen, den Sie wie folgt erhalten:

solc filename.sol --bin

Wenn Sie eine Solc-kombinierte Ausgabe (z. B. für Parität) wünschen, wobei binTeil der abiJSON-Zeichenfolge ist, verwenden Sie Folgendes:

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

BEARBEITEN

Klicken Sie auf Compileder Registerkarte (rechtes oberes Menü) einfach auf Details.


ALTE METHODE

In der neuen Version von Solidity Browser können Sie InterfaceWert finden, indem Sie auf klickenContract details (bytecode, interface etc.)

Solidity-Browser-Json-Schnittstelle

Wo befindet Contract details (bytecode, interface etc.)sich? @NineCattoRules
@Alper meine Antwort ist alt. Klicken Sie auf Compileder Registerkarte einfach aufDetails

Sie können ABI json von der Etherscan-API wie unten erhalten.

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" );
    }            
})
Wo würden Sie Ihre Vertrags-ID eintragen? Muss man den Vertrag erst irgendwo hochladen?
Sie können bereits bereitgestellte ABI-Verträge im Ethereum-Netzwerk abrufen.

Gehen Sie zu EtherScan > geben Sie die Vertragsadresse ein > klicken Sie auf den Code in der Überschrift des Registerkartenabschnitts > scrollen Sie nach unten, um die Vertrags-ABI zu finden > klicken Sie auf das Symbol Kopieren, um sie zu kopieren

Dies funktioniert nur, wenn der Herausgeber des Smart Contracts beschlossen hat, seine ABI zu veröffentlichen, aber Sie haben Recht. Soweit ich weiß, ist dies der einzige Weg, es zu bekommen.

Gehen Sie einfach zu http://remix.ethereum.org/ und fügen Sie den Quellcode des Vertrags ein. Klicken Sie auf Kompilieren starten und nach ein paar Sekunden wird Ihr Vertrag verarbeitet. Klicken Sie auf die Detailschaltfläche (oben rechts). Auf dem Popup würden Sie ABI, METADATA, BYTECODE usw. finden