Bereitstellung von Smart Contract im Ethereum-Testnetz

Ich habe diese Anleitung https://ethereum.stackexchange.com/a/2787/2426 (oder gleichwertig https://www.ethereum.org/greeter ) befolgt, als ich versuchte, einen einfachen Smart Contract im Ethereum-Testnetz bereitzustellen. Ich verwende geth CLI auf Testnet. Alles funktioniert außer dem letzten Schritt, dem Hochladen von Code in die Blockchain. Das habe ich getan:

GETH SECOND INSTANCE:

geth --testnet --unlock 0 attach ipc:.ethereum/testnet/geth.ipc
    instance: Geth/v1.4.10-stable-5f55d95a/linux/go1.6.2
    coinbase: 0x47978a69f410d0f61850c92acdb0d4c464d70937
    at block: 1697809 (Mon, 26 Sep 2016 07:10:20 UTC)
     datadir: .ethereum/testnet
     modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> web3.fromWei(eth.getBalance(eth.accounts[0]).toNumber(), "ether")
"5.024681313417504"

KOMPILIEREN:

> var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) suicide(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'

> var greeterCompiled = web3.eth.compile.solidity(greeterSource)

FÜGEN SIE DEN VERTRAGSCODE IN DIE BLOCKCHAIN ​​EIN:

> var _greeting = "Good Morning, Smart Contract!"

> var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);

> var greeter = greeterContract.new(_greeting, {from: eth.accounts[0], data: greeterCompiled.greeter.code, gas: 4000000}, 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); } } })

> debug.verbosity(4)

Beim Erkunden von Greeter ist dies die Ausgabe:

> greeter
    {
      abi: [{
          constant: false,
          inputs: [],
          name: "kill",
          outputs: [],
          payable: false,
          type: "function"
      }, {
          constant: true,
          inputs: [],
          name: "greet",
          outputs: [{...}],
          payable: false,
          type: "function"
      }, {
          inputs: [{...}],
          type: "constructor"
      }],
      address: undefined,
      transactionHash: null
    }

> greeter.greet();
    TypeError: 'greet' is not a function
        at <anonymous>:1:1

Ich warte eine Minute und bekomme keine Nachricht wie diese:

Contract mined! address: 0x...

Der Vertrag scheint also richtig kompiliert zu sein, aber ich kann nach dem Hochladen in die Blockchain weder Adressen noch txHash erhalten. Vielleicht wurde es nicht hochgeladen oder abgebaut. Wie kann ich es herausfinden? Habe ich etwas Wichtiges verpasst?

Bearbeiten: Unmittelbar nach dem Versuch, das Protokoll bereitzustellen, werden viele Meldungen wie diese gemeldet:

I0926 10:31:13.097817 core/state/state_object.go:160] 47978a69f410d0f61850c92acdb0d4c464d70937: #1048576 631783523629846744286 (+ 420000000000000)

0x47978a69f410d0f61850c92acdb0d4c464d70937 ist die Coinbase-Adresse des Geth-Knotens.

Haben Sie genug Testether, um einen Vertrag bereitzustellen?
Ich denke schon, 5 Ether. Ist das genug?

Antworten (1)

Das Problem ist, dass Ihr Befehl geth --testnet --unlock 0 attach ipc:.ethereum/testnet/geth.ipcdas Konto nicht wirklich entsperrt. Dieser Befehl fügt die Konsole einfach an die laufende gethInstanz an.

Wenn Sie geth --testnet --unlock 0 consolestattdessen verwendet haben, werden Sie mit der folgenden Meldung aufgefordert, Ihr Konto zu entsperren:

Unlocking account 0 | Attempt 1/3
Passphrase: 
I0926 21:48:25.702979 cmd/geth/accountcmd.go:189] Unlocked account 3b44...a400

Wenn Sie den Befehl verwenden möchten geth ... attach, führen Sie den folgenden Befehl aus, bevor Sie Ihre Transaktionen ausführen:

personal.unlockAccount(eth.accounts[0], "{your password}");

Dadurch wird Ihr Konto entsperrt und die Zahlung für die Transaktion aktiviert.

Vielen Dank. Jetzt gehts!