Как я могу обновить значение homesteadBlock по умолчанию в моем частном блокчейне Ethereum?

Я пытаюсь создать свой частный блокчейн Ethereum со значением homesteadBlock, которое я хочу присвоить. Насколько я понимаю, значение homesteadBlock по умолчанию равно 1500000.

[В] Как мне присвоить значение homesteadBlock 0? А внутри geth можно ли проверить его значение, что оно обновилось до 0? или как я могу проверить, что значение homesteadBlock обновлено?

и, что более важно, как я могу создать свою частную цепочку блоков Ethereum? Я знаю, что есть много ресурсов по этой проблеме, но я не смог найти ни одного для версии geth 1.4.17.

Я не уверен, обновлено ли значение homesteadBlock моего частного блокчейна. Вот способ, которым я следовал, чтобы создать свою частную цепочку блоков Ethereum с нуля:

Первые пустые данные предыдущей настройки:

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

Создайте новую учетную запись:

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

новый адрес учетной записи: {eda8c89a68f059c1659272076e85e4373717b0d8}

Этот адрес будет добавлен в файл CustomGenesis.json.

Настройте CustomGenesis.json: этот файл должен быть одинаковым для всех узлов, которые подключаются к частной сети Эфириума:

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

Инициализация блокчейна:

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

Обратите внимание, я вижу обновленный баланс, когда запускаю:

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

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

К моему:

$ 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

Спасибо за вашу ценную помощь и время.

Ответы (2)

Чтобы изменить блок Homestead, вам нужно будет перекомпилировать geth из исходников.

Вы можете увидеть соответствующую строку :

MainNetHomesteadBlock = big.NewInt(1150000)

Просто измените это на

MainNetHomesteadBlock = big.NewInt(0)

и перекомпилировать по инструкции

Вы можете проверить, включена ли Homestead, скомпилировав этот контракт:

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

Если вы находитесь в Homestead, это будет использовать очень мало газа (около 300), нод не вернет true. Если вы находитесь на границе, вы будете использовать весь газ, отправленный в транзакции, и это вызовет исключение.

Это часть ответа на вопрос Как вызвать библиотечную функцию из контракта? => [ошибка] Не удалось сохранить код контракта, проверьте количество газа. неопределенный .

Я настроил свою частную цепочку блоков с пользовательским homesteadBlockзначением, используя следующие процедуры:


1. Настройте 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. Файл паролей

Я создал файл паролей, testpasswordсодержащий пароль моей учетной записи


3. Скрипт инициализации блокчейна

Я создал скрипт для инициализации моего блокчейна:

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

И я использовал chmod 700 02_runGethGenesisInit, чтобы установить исполняемый бит.


4. Скрипт приватного узла

Я создал скрипт для запуска моей приватной gethноды в режиме майнинга:

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

И я использовал chmod 700 02_runGethGenesis, чтобы установить исполняемый бит.


5. Надежность браузера

Я скачал Browser Solidity с https://github.com/ethereum/browser-solidity/tree/gh-pages .

Я разархивировал файлы и загрузил index.htmlих в свой веб-браузер.


5. Начните все это

Я инициализировал свои данные блокчейна с помощью следующей команды:

Wocket:ESE bok$ ./02_runGethGenesisInit 

Я запустил свой узел, используя следующую команду, и уже некоторое время запускаю его:

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. Тестирование режима усадьбы

Я загрузил тестовый скрипт по @TjadenHessответу на этот вопрос в Solidity Browser:

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

Я подключил Solidity Browser к своему локальному частному узлу, щелкнув значок блока и выбрав Web3 Provider . Затем я нажал « Создать » , чтобы развернуть указанный выше контракт в блокчейне. Я нажал тест, и сообщение Transaction cost: 21657 gas.показывает, что мой блокчейн находится в режиме Homestead.

введите описание изображения здесь

введите описание изображения здесь

Примечание. Если я изменю функцию, чтобы сделать ее константой function test () constant returns(bool){, я получу следующие результаты для блокчейна в режиме Homestead — true :

введите описание изображения здесь

См. раздел 7 ниже для сообщения, отображаемого, когда блокчейн находится в режиме, отличном от Homestead.


7. Что происходит, когда мой узел находится в режиме, отличном от Homestead

Я подключил Browser Solidity к geth --devблокчейну:

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

Я запустил тот же тестовый код Homestead, чтобы получить сообщение Требуемый газ превышает лимит: 50000000 , показывающий, что этот --devблокчейн находится в режиме, отличном от Homestead:

введите описание изображения здесь

Примечание. Если я изменю функцию, чтобы сделать ее константой function test () constant returns(bool){, я получу следующие результаты для блокчейна, отличного от режима Homestead — false :

введите описание изображения здесь