Я создал частную сеть, используя 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) )
Спасибо.
Вы можете попробовать контракт регистратора имен , который используется для связывания адреса вашего контракта с именем. В случае частной тестовой сети вам потребуется развернуть код регистратора в вашей сети. Для этого вам сначала нужно будет скомпилировать код из их репозитория git и развернуть его в своей сети так же, как и для любого другого контракта.
Для получения дополнительной информации о регистраторе: что такое глобальный регистратор?
Другой подход к взаимодействию с контрактом — использование протокола NatSpec. Для получения дополнительной информации об этом, вот ссылка: NatSpec Github wiki .
Айк Чт
рупшабагчи
Айк Чт