この記事ではMac OS Sierra 10.12.4を使っています
Ethereumは、シンプルなコードで書かれた「コントラクト」を実行することで、様々なネットワークを生み出すことのできるブロックチェーンです。
コントラクトとしては「通貨を発行する」、「税金を払う」、「クラウドセールを実施する」など様々な種類のものを発行することができ、その手軽さと汎用性の高さからAugur,DAO,OmiseGOなどEthereum上でトークンを発行されたプロジェクトは多々あります。
何回かに分けてEthereumで仮想通貨を発行する、というところまでチュートリアルでやってみます。今回はgethの環境構築までを実施します。
gethのインストール
ethereumのクライアントとして今回はgethをインストールします。goで書かれたEthereumのクライアントでメジャーなものになります。
Mac OSではhomebrewで簡単にインストールできます。
brew tap ethereum/ethereum brew install ethereum
あるいは、ethereumのGitHubrリポジトリよりgit cloneしてビルドする形になります。
(探せばいくらでもあるのでここは省略)
genesisファイルの作成
json形式でブロックチェーンの元となる、genesisブロックを作成します。 genesisブロック例
{ "nonce" : "0x0000000000000099", "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
gethを初期化する
genesisblockができたので、genesisを元にgethによって初期化、フォルダを作成します。
geth --datadir $HOME/eth/testnet init $HOME/eth/testnet/genesis.json
実行後にtreeコマンドを打つと以下のように結果が出ます。自動的にフォルダが作成されて便利ですね。
tree
├── genesis.json
├── geth
│ └── chaindata
│ ├── 000002.log
│ ├── CURRENT
│ ├── LOCK
│ ├── LOG
│ └── MANIFEST-000003
└── keystore
テストネットワークでGethを起動する
いよいよgethを起動します。他のノードから見えないようにtestnetで実行します。
geth --networkid 2222 --nodiscover --maxpeers 0 --datadir $HOME/eth/testnet/ console
オプションの解説
--networkid ネットワーク識別子。0~3までは予約済だが、それ以外の数値を設定します --nodiscover 他のノードから検出できないようにするオプション --maxpeers 自分のノードに接続できるノード数。テストなので0を設定します console gethを実行してコンソールを起動する
他のオプションの詳細はEthereumのgithubに載っています。
Command Line Options · ethereum/go-ethereum Wiki · GitHub
成功すれば次のようなWelcomeメッセージが表示されてコンソールが起動します。
Welcome to the Geth JavaScript console! instance: Geth/v1.5.5-stable-ff07d548/darwin/go1.9 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 > I0906 01:29:55.327959 p2p/nat/nat.go:111] mapped network port tcp:30303 -> 30303 (ethereum p2p) using NAT-PMP(192.168.2.1)
今回はここまでで、次回はテストネットワークでのアカウント作成、マイニング、仮想通貨発行へとつなげていきます。