Wie kann ich den Standardwert homesteadBlock in meiner privaten Ethereum-Blockchain aktualisieren?

Ich versuche, meine private Ethereum-Blockchain mit dem homesteadBlock-Wert zu erstellen, den ich zuweisen möchte. Soweit ich weiß, ist der Standardwert von homesteadBlock 1500000.

[F] Wie kann ich den homesteadBlock-Wert 0 zuweisen? Und in Geth ist es möglich, seinen Wert zu überprüfen, ob er auf 0 aktualisiert wurde? oder wie kann ich überprüfen, ob der homesteadBlock-Wert aktualisiert wird?

und was noch wichtiger ist, wie könnte ich meine private Ethereum-Blockchain erstellen? Ich weiß, dass es viele Ressourcen zu diesem Problem gibt, aber ich konnte keine für die Version 1.4.17 von Geth finden.

Ich bin mir nicht sicher, ob der homesteadBlock-Wert meiner privaten Blockchain aktualisiert wird. Hier ist der Weg, den ich befolgt habe, um meine private Ethereum-Blockchain von Grund auf neu zu erstellen:

Erste leere vorherige Setup-Daten:

[$] rm -rf ~/.ethash/* && rm -rf ~/.ethereum/*
[$] sudo rm -rf /home/miner/MyEthereumEbloc/  && mkdir /home/miner/MyEthereumEbloc/

Erstellen Sie ein neues Konto:

[$] sudo geth --datadir="/home/miner/MyEthereumEbloc/" account new

Konto neue Adresse: {eda8c89a68f059c1659272076e85e4373717b0d8}

Diese Adresse wird der CustomGenesis.json-Datei hinzugefügt.

Setup CustomGenesis.json: Diese Datei sollte für alle Knoten gleich sein, die sich mit dem privaten Ethereum-Netzwerk verbinden:

{
    "config": {
            "homesteadBlock": 0
    },
    "nonce": "0",
    "difficulty": "0x400",
    "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x",
    "gasLimit": "0x3B4A1B44",
    "alloc": {
        "0xeda8c89a68f059c1659272076e85e4373717b0d8":   //added line
        { "balance": "1000000000000000000000000000000" } //added line
    }
}

Blockchain-Initialisierung:

[$] sudo geth --datadir="/home/miner/MyEthereumEbloc/" init /home/CustomGenesis.json

Beachten Sie, dass ich das aktualisierte Guthaben sehen kann, wenn ich Folgendes ausführe:

sudo geth --datadir="/home/miner/MyEthereumEbloc/" console

primaryAddress = eth.accounts[0]
> web3.fromWei(eth.getBalance(primaryAddress), "ether")
1000000000000000000000000000000

Zu mir:

$ sudo ./geth --port 3000 --networkid 23422 --identity node1 --verbosity 3 
--nodiscover --nat none --datadir="/home/miner/MyEthereumEbloc" --mine
 --ipcpath /home/miner/MyEthereumEbloc/geth.ipc console

Vielen Dank für Ihre wertvolle Hilfe und Zeit.

Antworten (2)

Um den Homestead-Block zu ändern, müssen Sie Geth aus den Quellen neu kompilieren.

Sie können die entsprechende Zeile sehen :

MainNetHomesteadBlock = big.NewInt(1150000)

Ändern Sie dies einfach in zu

MainNetHomesteadBlock = big.NewInt(0)

und mit den Anweisungen neu kompilieren

Sie können testen, ob Homestead aktiviert ist, indem Sie diesen Vertrag erstellen:

contract TestHomestead{
    function test () constant returns(bool){
        return address(4).delegatecall(1);
    }
}

Wenn Sie in Homestead sind, wird dies sehr wenig Benzin verbrauchen (ungefähr 300), was nicht stimmt. Wenn Sie sich an der Grenze befinden, verbrauchen Sie das gesamte Gas, das in der Transaktion gesendet wird, und es wird eine Ausnahme ausgelöst.

Dies ist Teil der Antwort auf Wie rufe ich eine Bibliotheksfunktion aus einem Vertrag auf? => [Fehler] Der Vertragscode konnte nicht gespeichert werden, bitte überprüfen Sie Ihre Gasmenge. undefiniert .

Ich habe meine private Blockchain mit einem benutzerdefinierten homesteadBlockWert mithilfe der folgenden Verfahren eingerichtet:


1. Richten Sie genesis.json ein

Wocket:ESE bok$ more genesis.json 
{
    "config": {
            "homesteadBlock": 10
    },
    "nonce": "0",
    "difficulty": "0x400",
    "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x",
    "gasLimit": "0x3B4A1B44",
    "alloc": {}
}


2. Passwortdatei

Ich habe eine Passwortdatei erstellt testpassword, die mein Kontopasswort enthält


3. Blockchain-Initialisierungsskript

Ich habe ein Skript erstellt, um meine Blockchain zu initialisieren:

Wocket:ESE bok$ more 02_runGethGenesisInit 
#!/bin/sh

geth --datadir /Users/bok/ESE/gethgenesis init /Users/bok/ESE/genesis.json
geth --datadir /Users/bok/ESE/gethgenesis --password testpassword account new

Und ich habe chmod 700 02_runGethGenesisInitdas ausführbare Bit gesetzt.


4. Privates Knotenskript

Ich habe ein Skript erstellt, um meinen privaten gethKnoten im Mining-Modus zu starten:

Wocket:ESE bok$ more 02_runGethGenesis 
#!/bin/sh

geth --datadir /Users/bok/ESE/gethgenesis --unlock 0 --password /Users/bok/ESE/testpassword --rpc --rpccorsdomain '*' --mine --minerthreads 1 console

Und ich habe chmod 700 02_runGethGenesisdas ausführbare Bit gesetzt.


5. Solidität des Browsers

Ich habe Browser Solidity von https://github.com/ethereum/browser-solidity/tree/gh-pages heruntergeladen .

Ich habe die Dateien entpackt und index.htmlin meinen Webbrowser geladen.


5. Beginnen Sie alles

Ich habe meine Blockchain-Daten mit dem folgenden Befehl initialisiert:

Wocket:ESE bok$ ./02_runGethGenesisInit 

Ich habe meinen Knoten mit dem folgenden Befehl gestartet und führe ihn seit einiger Zeit aus:

Wocket:ESE bok$ ./02_runGethGenesis
...
I1015 09:56:14.364062 miner/worker.go:342] 🔨  Mined block (#5210 / f881b1be). Wait 5 blocks for confirmation
I1015 09:56:14.364333 miner/worker.go:539] commit new work on block 5211 with 0 txs & 0 uncles. Took 281.474µs
I1015 09:56:14.364360 miner/worker.go:435] 🔨 🔗  Mined 5 blocks back: block #5205
I1015 09:56:14.364492 miner/worker.go:539] commit new work on block 5211 with 0 txs & 0 uncles. Took 114.592µs
I1015 09:56:16.394886 miner/worker.go:342] 🔨  Mined block (#5211 / 420c7edc). Wait 5 blocks for confirmation
I1015 09:56:16.395189 miner/worker.go:539] commit new work on block 5212 with 0 txs & 0 uncles. Took 262.993µs
I1015 09:56:16.395222 miner/worker.go:435] 🔨 🔗  Mined 5 blocks back: block #5206


6. Testen für den Homestead-Modus

Ich habe das Testskript durch @TjadenHessdie Antwort von auf diese Frage in Solidity Browser geladen:

contract TestHomestead{
    function test () returns(bool){
        return address(4).delegatecall(1);
    }
}

Ich habe Solidity Browser mit meinem lokalen privaten Knoten verbunden, indem ich auf das Blocksymbol geklickt und Web3 Provider ausgewählt habe . Ich habe dann auf Erstellen geklickt , um den Vertrag oben in der Blockchain bereitzustellen. Ich habe auf Test geklickt und die Meldung Transaction cost: 21657 gas.zeigt, dass sich meine Blockchain im Homestead-Modus befindet.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Hinweis: Wenn ich die Funktion ändere, um sie zu einer Konstante zu machen function test () constant returns(bool){, erhalte ich die folgenden Ergebnisse für eine Blockkette im Homestead-Modus - true :

Geben Sie hier die Bildbeschreibung ein

Siehe Abschnitt 7 unten für die Meldung, die angezeigt wird, wenn sich die Blockchain im Nicht-Homestead-Modus befindet.


7. Was passiert, wenn sich mein Knoten im Nicht-Homestead-Modus befindet?

Ich habe Browser Solidity mit einer geth --devBlockchain verbunden:

geth --dev --datadir /Users/bok/ESE/gethdata --unlock 0 --password /Users/bok/ESE/testpassword --rpc --rpccorsdomain '*' --mine --minerthreads 1 console

Ich habe denselben Homestead-Testcode ausgeführt, um die Meldung zu erzeugen, dass das erforderliche Gas die Grenze überschreitet: 50000000 , was zeigt, dass sich diese --devBlockchain im Nicht-Homestead-Modus befindet:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Wenn ich die Funktion ändere, um sie zu einer Konstante zu machen function test () constant returns(bool){, erhalte ich die folgenden Ergebnisse für eine Blockchain im Nicht-Homestead-Modus - false :

Geben Sie hier die Bildbeschreibung ein