kkmory;

エンジニア系ふわふわ大学生(だった)の雑記帳

Ethereumをはじめてみる①

備忘録がてらまとめておきます。
ほぼ最短ルートでプライベートネットが立てれるはず。

クライアントについて

イーサリアムにはいくつかの代表的なクライアントが存在していて、どれを使っても問題なさそう。ただ、Qiitaや書籍等ではGoで実装された「Go Ethereum (Geth)」がデファクトみたいなので、今回もそれを使ってみようかなと。

github.com


Gethのインストール

GolangとHomebrewが入ったMacをご用意の上、

$ brew tap ethereum/ethereum
$ brew install ethereum

以上でインストールは完了。


プライベートネットを立ててみる

Ethereumには3つのネットワークが存在。

パブリックネット
→パブリックなやつ

プライベートネット
→個人の管理下に置ける中央集権的なネットワーク。開発用(?)

コンソーシアムネット
→上2つを足して2で割った感じ。半非中央集権。

解説雑かよ。
今回はとりあえずEthereumをいじるのが目的なので、プライベートネットワークを使います。


プライベートネット用のディレクトリを作る

場所や名前は適当にどうぞ

$ mkdir /Users/userhoge/eth_private_net


genesisファイルの作成

ブロックチェーン上の初期ブロック、つまり0個目のブロックを定義するgenesisファイルを作り、

$ cd /Users/userhoge/eth_private_net
$ touch genesis.json

お好みのエディタで編集。

{
  "config": {
    "chainId": 10,
    "homesteadBlock" : 0,
    "e1p155Boock" : 0,
    "e1p158Boock" : 0
  },
  "nonce": "0x0000000000000033",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "",
  "gasLimit": "0x8000000",
  "difficulty": "0x4000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}


ブロックを初期化する

–datadirで指定した先のディレクトリに、genesisブロックの情報が保存される。(ここでは /Users/userhoge/eth_private_net)

$ geth --datadir /Users/userhoge/eth_private_net init /Users/userhoge/eth_private_net/genesis.json


プライベートネットに接続する

Gethコンソールを立ち上げ、プライベートネットワークに接続してみる

$ geth console --networkid "10" --nodiscover --datadir "/Users/userhoge/eth_private_net" 2>> /Users/userhoge/eth_private_net/geth_err.log

いろいろとオプションがついているので簡単にまとめると、

console
コンソールを立ち上げますよ〜と。
対話的にコマンドを実行できるようになる。

--networkid "10"
genesis.jsonで指定したchainidと同一の値を指定する。
5以上の整数を指定することで、プライベートネットワークを起動できる。参考までに、1: Mainnet、2: Morden, 、3: Ropsten、4: Rinkby

--nodiccover
同一networkidの他のノードと接続することを避けるため。
プライベートなオレオレイサーリアムを立てるので他のノードと通信する必要はありません。

--datadir
ログなどをどこに吐き出すか。
genesisブロックの初期化で使用したのと同じディレクトリを指定する。

詳細はここに乗ってるので見ていただければと。
Command Line Options · ethereum/go-ethereum Wiki · GitHub


こんなのが出てきたら成功

Welcome to the Geth JavaScript console!

instance: Geth/v1.8.7-stable/darwin-amd64/go1.10.2
coinbase: コインベースのアドレス
at block: 58 (Fri, 04 May 2018 11:28:16 JST)
datadir: /Users/userhoge/eth_private_net
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0


とりあえず今日はここまで。