SaaSベンチャーで働くエンタープライズ部長のブログ

SaaSベンチャーでエンジニア→プロダクトマネージャー→エンタープライズ部長として働いています。

Ethereumで仮想通貨を発行する(1)

この記事では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)

  今回はここまでで、次回はテストネットワークでのアカウント作成、マイニング、仮想通貨発行へとつなげていきます。

naomasa.hatenablog.com