Wie finde ich den Vertrag automatisch?

Ich habe ein privates Netzwerk mit Go-Ethereum mit 2 Clients erstellt, die VMs sind (Ubuntu 14.04).

Auf VM1 habe ich einen Vertrag erstellt:

N1greeterSource ='contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function changeMessage(string myMsg) returns (string){ greeting = myMsg; return myMsg; } function greet() returns (string) { return greeting; } }'
N1greeterCompiled = web3.eth.compile.solidity(N1greeterSource);
_greeting = "Hello world !";
N1greeterContract = web3.eth.contract(N1greeterCompiled.greeter.info.abiDefinition);
N1greeter = N1greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: N1greeterCompiled.greeter.code, gas: 310000}, function(e, contract){
    if(!e) {

      if(!contract.address) {
        console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");

      } else {
        console.log("Contract mined! Address: " + contract.address);
        console.log(contract);
      }

    }
    else{
    console.log("Error:>>>>>>>>>>>>>");
    console.log(e);
    }

})

Auf VM2 sehe ich Vertrag von:

N1greeter = eth.contract([{ constant: false, inputs: [], name: "kill", outputs: [], type: "function" }, { constant: false, inputs: [{ name: "myMsg", type: "string" }], name: "changeMessage", outputs: [{ name: "", type: "string" }], type: "function" }, { constant: false, inputs: [], name: "greet", outputs: [{ name: "", type: "string" }], type: "function" }, { inputs: [{ name: "_greeting", type: "string" }], type: "constructor" }] ).at("0x526e636021fbfef1584097690798145ff32be21a");

Alles ist ok.

Aber ich weiß nicht, wie VM2 den Vertrag automatisch finden kann? (Adresse und abi in VM1 finden, um diesen Code hinzuzufügen: N1greeter = eth.contract(abi).at(address) )

Vielen Dank.

Antworten (1)

Sie können den Namensregistrierungsvertrag ausprobieren , der verwendet wird, um die Adresse Ihres Vertrags einem Namen zuzuordnen. Im Falle eines privaten Testnetzes müssen Sie den Registrierungscode in Ihrem Netzwerk bereitstellen. Dazu müssen Sie zunächst den Code aus ihrem Git- Repo kompilieren und sie in Ihrem Netzwerk bereitstellen, so wie Sie es für jeden anderen Vertrag tun würden.

Weitere Informationen zum Registrar: Was ist der globale Registrar?

Ein weiterer Ansatz zur Interaktion mit einem Vertrag ist die Verwendung des NatSpec-Protokolls. Für weitere Informationen dazu, hier ist der Link: NatSpec Github Wiki .

Bitte zeigen Sie mir, wie der Registrar bereitgestellt wird. Ich arbeite an der Go-Ethereum-Konsole. Und es ist zu schwierig, "Registrar" zu finden
Ich habe meine Antwort so bearbeitet, dass sie die Antwort auf Ihre Frage enthält
Ich habe versucht, Zeilen zu entfernen und den Inhalt von "GlobalRegistrar.sol" zu unterbrechen. Dann kompiliere ich weiter mit "web3.eth.compile.solidity", aber es hat einige seltsame Fehler. Bitte zeigen Sie mir, wie "GlobalRegistrar.sol" von der Konsole geladen werden kann. Vielen Dank