はじめに

最近、ブロックチェーンという技術がマスコミや新聞で話題になっていますが、この記事では、「自分のプライベートブロックチェーン(=自分だけがアクセス可能なブロックチェーン)を設定する方法」を紹介したいと思います。今後スマートコントラクト(契約手順をプログラム化し、自動的に実行)が普及していく中で、少しでも参考になればと思います。

プライベートブロックチェーンを設定する

Gethをインストールする

Gethはクライアントのアプリで、Ethereum(管理者のいないP2Pシステムで様々なサービスを実現するための基盤)のブロックチェーンネットワークとの取引、スマートコントラクト、マイニングなどを実行することができます。様々なOSに対応しているので、ご自身の環境にあったバージョンをダウンロードしてください。私はMac OSを使っているので、Homebrew経由でインストールしました。

Ubuntu/Linuxの場合なら、

 

マイナーのアカウントを作成

ブロックチェーン上で行われた取引の記録作業を「マイニング(Mining)」と呼び、その記録作業を行う人々のことを「マイナー(Miner)」または「採掘者」と呼びます。マイナー達はノードとして接続されている自身のコンピュータを使って、いくつもの取引をまとめた「ブロック」を生成します。マイナーは自分のコンピュータの計算能力を台帳への記録作業に提供する代わりに、記録に成功すると報酬としてビットコインを受け取ることができます。

ブロックチェーンをマイニングするためには、マイナーのアカウントが必要です。一つのアカウントにつき、公開鍵・秘密鍵また秘密鍵を保護するためのパスワードが必要です。

  • 公開鍵:ブロックチェーンの上に公開されるもの。公開鍵からEthereumのウォレットアドレスを派生することができて、ウォレットアドレスはアカウントを特定するものです。
  • 秘密鍵:取引をサインするための鍵。自分で発行した取引を秘密鍵で暗号・サインして、システムは私達の公開鍵を使い、本人が発行された取引かどうか確認・参照することができます。

全部gethのデータはdatadirというフォルダに保存されます。この記事では、~/lab/ethereum_vibloというフォルダを使います。デフォルトフォルダは以下のようになります。

  • Mac: ~/Library/Ethereum
  • Linux: ~/.ethereum
  • Windows: %APPDATA%\Ethereum

プライベートブロックチェーンを設定するために、以下のようにdatadirを指定します。

注意:パスワードを忘れないようにしてください

以上で、マイナーのアカウント設定は完了。

Genesis Block(ジェネシスブロック)を作成

どんなものでも「始まり」は存在します。ブロックチェーンの始まり、つまり1番最初のブロックは「ジェネシスブロック」と呼ばれます。次のブロックは前のブロックを参照しています(前のブロックのハッシュを保存・計算など)。Ethereumの場合、ジェネシスブロックが生成されたのは2015年07月20日です。以下のようにジェネシスブロックを作成することができます(まるで神様みたいにw)

 sample_genesis.jsonの内容

設定の説明:

  • chainid:自分のブロックチェーンのIDになります。実際にEthereumのネットワークは1つではなく、複数のネットワークが存在します。最も知られているネットワークはMainnetという(は1)、他にテスト用のネットワークやEthereumバージョンごとのネットワークもあり、例えば:morden /expanse mainnet (2), ropsten (3), rinkeby (4), rootstock mainnet (30), rootstock testnet (31), kovan (42), ethereum classic mainnet (61), ethereum classic testnet (62)もある。プライベートチェーンのデフォルトIDは1337で、今回22をIDとして使います。
  • homesteadBlock:0になると、Ethereumのhomesteadバージョンを使うことになります。Ethereumは2017年10月16日にbyzantiumバージョンにアップグレードしています。
  • eip155Block:0になると、このブロックチェーンはEIP 155のプロトコルやクライアントAPIのセットをサポートしています。
  • difficulty:採掘難易度とは、ディフィカルティーとも呼ばれ採掘(マイニング)によりブロックを生成する(ナンスを算出する)難易度のことである。ボロックタイムに影響する変数です。ブロックチェーンが実施した後、変更できないため、注意が必要です。Ethereumが使って入る計算式はこちらに説明があります。
  • gasLimit:ガスの値段になります。EthereumではコマンドがEVM(Ethereum仮想マシン)の上に実行され、 計算すると、相対のガス量を費やす。最低のガスを提供しないと途中で、実施の失敗が起こる恐れがあり、無駄遣いになってしまいます。そのため、取引を作成する時、gasLimit、つまり、取引を実施するため最大の払うガス量です。この場合、gasLimitはブロックにある全ての取引の合計を指定します。
  • alloc:こちらの設定によって、事前にEtherを配ることができます。今回、マイナーのアカウントに大量のEtherを与えます。

マイニングを開始

  • networkidに22を指定します。
  • –mine:このプロセスをマイニングします。

  • rpc:HTTP-RPCを有効にします。http://127.0.0.1:8545にアクセスして、こちらのノードの経由で、プライベートチェーンと操作することができます。
  • 他のパラメーターrpcaddrrpcportrpccorsdomain

 

Gethにコンソール実施

ノードと操作する時、コンソールを付けられる。

アカウントリストや残高を確認

 

デスクトップのEthereum Walletの設定

こちらからダウンロードして、インストールしてください。実行する時、rpcを指定して、プライベートチェーンへ接続することができます。

Mac OSXの場合

 

現在、マイナーのアカウントしかなくて、マイニングしているため、残高が上がっています。

新しいアカウントを作成、「Primary」を名付けて、マイナーのアカウントから100000ETHを振り込んでみましょう。メニューから「Add Account」を押して、秘密鍵のパスワードを入れば完了です。

取引も簡単にできます。

手数料の調整で、取引を早めに確認させることもできます。

Confirmationは取引を承認したノートの数で、ビットコインの場合なら、普段2つのConfirmationが必要だと言われています。マイナーのコンソールログを確認して、

 

ブラウザのMetaMaskウォレットの設定

MetaMask、Ethereumを用いる分散型アプリケーション(DApps)にアクセスしやすくするためのプラグインで、 あらゆるウェブサイトのJavascript のコンテキストに対して、EthereumのWeb3 APIを提供し、 それによって分散型アプリがブロックチェーンのデータをブラウザから読むことができるようになります。

設定方法

  • Chrome Web Storeからダウンロード:https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn
  • 暗号化のパスワードを設定、seed wordsを他のところへバックアップします。
  • リストから、localhost 8545を選ぶ。その為、マイナーのプロセスを実施する時、--rpccorsdomain "*" --rpcapi "web3,eth,net" を指定する必要があります。

アカウント作成

新しい2つのアカウントを作成、例えば:

  • MetaMask 1: 0xd45B8846cAB7c9aEf15D5f9Cc0aac281d9A42117
  • MetaMask 2: 0xE65Dc3305a26d91bc8FfAEd0db6f65DA3b1906C2

仮にマイナーのアカウントからデスクトップのEthereum WalletでMetaMask 1に200,000ETH、MetaMask 2に400,000ETHを振り込んでみましょう。

そして、MetaMask 2からMetaMask 1へ100 ETHを振り込みます。

MetaMaskウォレットをEthereum Walletへインポート

上記の2つのアカウントをEthereum Walletの方に使いたい場合、ブラウザから秘密鍵をエクスポートし、Ethereum Walletのキーストアへインポート。例え、MetaMask 2の秘密鍵は以下のよう

上記の内容が含まれているmetamask2_private.keyというファイルを作成して、以下のようにインポートします。

 

Blockchain Explorerをインストール

取引の詳細やブロックチェーンの状況を把握するため、EthereumにはEtherscanがあり、プライベートチェーンなら、Ethereum Block Explorerというツールがあります。

ブラウザでhttp://localhost:8000/へアクセス

残高を確認

 

最後に

プライベートチェーンを作成し、サンプル取引も実施し、この環境で、Ethereumの詳細やSolidity言語やスマートコントラクトを実験できると思います。

 

参考