¿Cómo podría actualizar el valor predeterminado de homesteadBlock en mi cadena de bloques Ethereum privada?

Estoy tratando de crear mi cadena de bloques Ethereum privada con el valor homesteadBlock que quiero asignar. Según tengo entendido, el valor predeterminado de homesteadBlock es 1500000.

[P] ¿Cómo podría asignar el valor de homesteadBlock a 0? ¿Y dentro de geth es posible verificar su valor que se ha actualizado a 0? o ¿cómo podría verificar que el valor de homesteadBlock esté actualizado?

y, lo que es más importante, ¿cómo podría crear mi cadena de bloques de Ethereum privada? Sé que hay muchos recursos sobre este problema, pero no pude encontrar uno para la versión 1.4.17 de geth.

No estoy seguro de si el valor homesteadBlock de mi cadena de bloques privada está actualizado. Esta es la forma que he seguido para crear mi cadena de bloques Ethereum privada desde cero:

Primero vacíe los datos de configuración anteriores:

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

Crear una nueva cuenta:

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

cuenta nueva Dirección: {eda8c89a68f059c1659272076e85e4373717b0d8}

Esta dirección se agregará al archivo CustomGenesis.json.

Configure CustomGenesis.json: este archivo debe ser el mismo para todos los nodos que se conectan a la red privada de ethereum:

{
    "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
    }
}

Inicialización de la cadena de bloques:

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

Tenga en cuenta que puedo ver el saldo actualizado cuando ejecuto:

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

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

Al mío:

$ 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

Gracias por su valiosa ayuda y tiempo.

Respuestas (2)

Para cambiar el bloque Homestead, deberá volver a compilar geth desde la fuente.

Puedes ver la línea correspondiente :

MainNetHomesteadBlock = big.NewInt(1150000)

Solo cambia esto a a

MainNetHomesteadBlock = big.NewInt(0)

y recompilar usando las instrucciones

Puede probar que Homestead está habilitado compilando este contrato:

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

Si está en Homestead, esto usará muy poca gasolina (alrededor de 300) asiente, no devuelva la verdad. Si está en la frontera, utilizará todo el gas enviado en la transacción y generará una excepción.

Esta es parte de la respuesta a ¿Cómo llamar a la función de biblioteca desde un contrato? => [error] El código de contrato no se pudo almacenar, verifique la cantidad de gas. indefinido _

Configuré mi cadena de bloques privada con un homesteadBlockvalor personalizado utilizando los siguientes procedimientos:


1. Configurar genesis.json

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. Archivo de contraseñas

Creé un archivo de contraseña que testpasswordcontiene la contraseña de mi cuenta


3. Script de inicialización de Blockchain

Creé un script para inicializar mi cadena de bloques:

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

Y solía chmod 700 02_runGethGenesisInitconfigurar el bit ejecutable.


4. Script de nodo privado

Creé un script para iniciar mi gethnodo privado en modo de minería:

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

Y solía chmod 700 02_runGethGenesisconfigurar el bit ejecutable.


5. Solidez del navegador

Descargué Browser Solidity de https://github.com/ethereum/browser-solidity/tree/gh-pages .

Descomprimí los archivos y los cargué index.htmlen mi navegador web.


5. Comience todo

Inicialicé mis datos de blockchain usando el siguiente comando:

Wocket:ESE bok$ ./02_runGethGenesisInit 

Inicié mi nodo con el siguiente comando y lo he estado ejecutando durante un tiempo:

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. Prueba para el modo Homestead

Cargué el script de prueba por @TjadenHessla respuesta de esta pregunta en Solidity Browser:

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

Conecté Solidity Browser a mi nodo privado local haciendo clic en el icono de bloque y seleccionando Web3 Provider . Luego hice clic en Crear para implementar el contrato anterior en la cadena de bloques. Hice clic en probar y el mensaje Transaction cost: 21657 gas.muestra que mi blockchain está en modo Homestead.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Nota: si modifico la función para convertirla en una constante function test () constant returns(bool){, obtengo los siguientes resultados para una cadena de bloques en modo Homestead : verdadero :

ingrese la descripción de la imagen aquí

Consulte la sección 7 a continuación para ver el mensaje que se muestra cuando la cadena de bloques no está en modo Homestead.


7. Qué sucede cuando mi nodo está en modo no familiar

Conecté Browser Solidity con una cadena de geth --devbloques:

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

Ejecuté el mismo código de prueba de Homestead para producir el mensaje El gas requerido excede el límite: 50000000 que muestra que esta --devcadena de bloques no está en modo Homestead:

ingrese la descripción de la imagen aquí

Nota: Si modifico la función para convertirla en una constante function test () constant returns(bool){, obtengo los siguientes resultados para una cadena de bloques que no es en modo Homestead : falso :

ingrese la descripción de la imagen aquí