Я пытаюсь создать свой частный блокчейн 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
Спасибо за вашу ценную помощь и время.
Чтобы изменить блок 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
значением, используя следующие процедуры:
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": {}
}
Я создал файл паролей, testpassword
содержащий пароль моей учетной записи
Я создал скрипт для инициализации моего блокчейна:
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
, чтобы установить исполняемый бит.
Я создал скрипт для запуска моей приватной 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
, чтобы установить исполняемый бит.
Я скачал Browser Solidity с https://github.com/ethereum/browser-solidity/tree/gh-pages .
Я разархивировал файлы и загрузил index.html
их в свой веб-браузер.
Я инициализировал свои данные блокчейна с помощью следующей команды:
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
Я загрузил тестовый скрипт по @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.
Я подключил 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 :