Как автоматически найти контракт?

Я создал частную сеть, используя go-ethereum с двумя клиентами, которые являются виртуальными машинами (ubuntu 14.04).

На ВМ1 я создал контракт:

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);
    }

})

На VM2 я вижу контракт:

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");

Все отлично.

Но я не знаю, как VM2 может автоматически найти контракт? (найдите адрес и abi в VM1, чтобы добавить этот код: N1greeter = eth.contract(abi).at(address) )

Спасибо.

Ответы (1)

Вы можете попробовать контракт регистратора имен , который используется для связывания адреса вашего контракта с именем. В случае частной тестовой сети вам потребуется развернуть код регистратора в вашей сети. Для этого вам сначала нужно будет скомпилировать код из их репозитория git и развернуть его в своей сети так же, как и для любого другого контракта.

Для получения дополнительной информации о регистраторе: что такое глобальный регистратор?

Другой подход к взаимодействию с контрактом — использование протокола NatSpec. Для получения дополнительной информации об этом, вот ссылка: NatSpec Github wiki .

Пожалуйста, покажите мне, как развернуть регистратор. Я работаю над консолью go-ethereum. И слишком сложно найти "регистратора"
Я отредактировал свой ответ, чтобы включить ответ на ваш запрос
Я попытался удалить строки и разбить содержимое «GlobalRegistrar.sol». Затем я продолжаю компилировать с помощью «web3.eth.compile.solidity», но у него есть некоторые странные ошибки. Пожалуйста, покажите мне, как загрузить "GlobalRegistrar.sol" из консоли. Спасибо