ブロックチェーンアプリケーション開発の教科書　~令和2022年最新版~　変更点まとめ

# まえがき
本記事は、[ブロックチェーンアプリケーション開発の教科書](https://www.amazon.co.jp/ブロックチェーンアプリケーション開発の教科書-加嵜-長門/dp/4839965137)において、Go Ethereum(Geth)の環境構築をする際に、本の記載内容が最新ではないが故にハマった場所についてまとめていきます。

本書籍を使用してブロックチェーンの学習を進めるエンジニア諸君に同じ悲劇を味わってほしくないと思い、記事にしようと思いました。
読者の皆さんの方からも何か新たな変更点等を見つけましたらご報告いただけますと幸いです。。。

## 環境
macOS Big Sur version 11.6.4
※Windows環境の方はコマンドの実行時等、適宜Windows用のものに読み替えていただければと思います。

## 1.Gethの初期化処理
本書の通り、genesis.jsonを以下のように記載し、初期化コマンド(geth init)を実行しようとすると、以下のエラーが出ます。

```json:genesis.json
{
    "config": {
        "chainId": 33,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block:": 0
    },
    "nonce": "0x0000000000000033",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "0x8000000",
    "difficulty": "0x100",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {}
}
```

```
Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0
```

こちらは↓のAmazonのレビューにある通り、「eip150Block」を追加すればうまくいきます。
https://www.amazon.co.jp/-/en/gp/customer-reviews/R3157Q46YB8RP4?ASIN=B079JYHZY3

```json:genesis.json
{
    "config": {
        "chainId": 33,
        "homesteadBlock": 0,
        "eip150Block": 0, 
        "eip155Block": 0, 
        "eip158Block:": 0
    },
    "nonce": "0x0000000000000033",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "0x8000000",
    "difficulty": "0x100",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {}
}
```

## 2.Gethの起動

こちらも↓の記事にある通り、rpc~オプションが全般的にhttp.~に名称変更されています。
https://www.webcyou.com/?p=11104
また、「--targetgaslimit」も「--miner.gaslimit」に変更されていました。

```
geth --networkid "10" --nodiscover --datadir ~/geth/private_net --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --targetgaslimit "20000000" console 2>> ./private_net/error.log
```
↑を叩くと

```
Incorrect Usage. flag provided but not defined: -rpc
```
のエラーが出てしまいますが、、、

```
geth --networkid "10" --nodiscover --datadir ~/geth/private_net --http --http.addr "localhost" --http.port "8485" --http.corsdomain "*" --http.api "eth,net,web3,personal" --miner.gaslimit "20000000" console 2>> ./private_net/error.log
```

↑を叩くとうまくGethコンソールを起動できました！

```
Welcome to the Geth JavaScript console!
```
88888888

また、[1.Gethの初期化処理で引用した記事](https://www.amazon.co.jp/-/en/gp/customer-reviews/R3157Q46YB8RP4?ASIN=B079JYHZY3)にも書かれていますが、先のページの手順で送金時にアカウントのロックを解除する際は以下のように「--allow-insecure-unlock」オプションの指定が必要になります。

```
geth --networkid "10" --nodiscover --datadir ~/geth/private_net --http --http.addr "localhost" --http.port "8485" --http.corsdomain "*" --http.api "eth,net,web3,personal" --miner.gaslimit "20000000"  console 2>> ./private_net/error.log --allow-insecure-unlock
```

## 3.アンロックオプション付きで起動
こちらも(rpcをhttpオプションに書き換えた上で)本書籍通り起動すると以下のエラーが出ます。

```
Fatal: Account unlock with HTTP access is forbidden!
```

あまりよく調べてませんが、エラーの内容通り、httpアクセスとアンロックオプションの併用は禁止されているっぽいので、httpオプションを外して起動するとエラーが出なくなります。

```
geth --networkid "10" --nodiscover --datadir ~/geth/private_net --miner.gaslimit "20000000" console 2>> ./private_net/error.log --unlock [アカウントアドレス1],[アカウントアドレス2],[アカウントアドレス3] --password ~/geth/private_net/password.txt 
```

# あとがき
本書籍の初版の発行が4年前(2018年)なので、変化の著しい業界ということもあって他にも変更点が多々ありそうです。
自分を含む「勉強は書籍派」の人間には辛いですね。。。