イーサリアムはビットコインにつぐ、時価総額第2位の暗号通貨です。

そして、イーサリアムには他のアルトコインと違ってビットコインをコピーしただけとか、ちょっと改善しただけとかとはまったく次元の異なる、画期的な仕組みが導入されています。

それが、スマートコントラクトと呼ばれる、ブロックチェーン上でプログラムを動かす仕組みです。

 

スマートコントラクト

ブロックチェーン上でプログラムを動かすとか、まったく意味不明……

ブロックチェーンはデータが保存されている形が数珠つなぎになっているのであって、一度作られたブロックは静的なものなんでは……

わたしも最初はそんな印象でした。

 

が、今までも単一サーバ上でプログラムを動かすことはありましたし、単にそれを複数のノードで構成される大きなひとつのサーバのような物の上で走らせるようなものかな、とイメージ的に理解するようにして、何とか納得しています。

しかし、一体どんな仕組みで実現されているのかはまったく検討がつきませんね。

今回は、自分のローカルPC上にイーサリアムのブロックチェーンを立ち上げ、その上でHello Worldを表示するスマートコントラクトを構築してみます。

正直にもうしあげると、こちらの記事を1字1句まねさせていただいただけなので、何も難しいことはありません。

 

Homebrewのインストール

今回は、macOS上で環境構築しましたので、パッケージマネージャーのHomebrewが入っていない場合は入れておく必要があります。

まだ入っていない人はこちらから入手しましょう。

 

Gethのインストール

次にGethをインストールします。以降の手順は先のブログを参照ください。

GethはGo言語で作成されたイーサリアム用のノード実行環境のことです。

Go言語というのはあまり聞きなれないですが、Googleが開発した並列処理に優れたプログラミング言語です。

Gethをインストールして立ち上げると、ブロックチェーンのノードが起動したことになります。

 

そして、このノードでは以下のようなことができます。

  • ウォレットの新規作成
  • ウォレットのアドレス確認
  • ウォレットの残高確認
  • Ether(イーサ)送金
  • マイニング

 

例では[0]と[1]の2つのアカウントを作成して、マイニングしてイーサをゲット。

ゲットしたイーサの一部を[0]から[1]に送る、という一連の流れを体感することができます。

 

ポイントとなるところは、send.Transaction()で送金指示を出した後も、マイニングするまではイーサがウォレット間を移動しないということです。

これで、マイニングという行為がブロックチェーン上でのトランザクションの承認に必要であるということを身をもって実感できます。

 

ちなみにゲットしたイーサは、イーサリアムの世界の通貨の最小単位であるWei(ウェイ?)で表示されます。

1イーサは100,000,000,000,000,000ウェイであり、その間にも一応名前がついているようです。

小さい順から、以下のようになってます。人の名前かな?

 

  • 1,000 wei = 1 babbage(バベージ?)
  • 1,000,000 wei = 1 lovelace(ラブレース?)
  • 1,000,000,000 wei = 1 shannon(シャノン?)
  • 0.000001 ether = 1 szabo(ズァボ?)
  • 0.001 ether = 1 finney(フィニー?)

 

ちなみに、ビットコインにも最小通貨単位があって、Satoshi(サトシ)といいます。

正体不明のビットコイン発案者、サトシ・ナカモト氏の名前が由来です。

1ビットコイン = 1億サトシ です。

今日の時点で1万円はだいたい143万サトシです。

 

ふざけとんのか。

 

Solidity実行コードのデプロイ

ウォレット間の送金ができたので、いよいよイーサリアムの本命であるスマートコントラクトを作っていきます。

イーサリアムのスマートコントラクトはSolidityという新しいプログラミング言語で記述することになっていて、これはオブジェクト指向ならぬコントラクト指向言語と呼ばれています。

ここで用意するのは、通常のコンパイラ型言語と同じく、ソースコード(.sol)とコンパイラ(solc)です。

そして、.solソースをコンパイルすると通常見なれたバイナリの他にABIというものが出て来ます。

ABIはApplication Binary Interfaceの略で、バイナリがブロックチェーン上にデプロイされた後に、そのバイナリにアプリケーションからアクセスするためのインターフェースです。

JSON形式で記述されていて、中身を見ると.solのソースコードでfunctionとして定義したものがインターフェースになっていることがわかります。

このインターフェースをつかって、スマートコントラクトを行使するわけですね。

 

ちなみにsolcでコンパイルされたバイナリは、Java仮想マシンならぬEthereum仮想マシン(EVM)の上で動きます。

このあたりの仕組みを見ると、これまで培ってきたコンピューターの仕組みを、うまくブロックチェーン上に再現しているんだなという概念がよく分かります。

 

スマートコントラクト行使

デプロイが終わったら、コントラクト名とABI名を使ってスマートコントラクトを呼び出すのみです。

ブロックチェーンに書き込みが必要なABIを実行すると、手数料としてあらかじめ設定されたgas(ガス)を徴収されます。

このgasがマイナーへの報酬になるわけですね。

 

まとめ

環境構築からデプロイ、スマートコントラクト行使まで非常に簡単にできました。

実際にやってみると、ブロックチェーンという名の、目に見えない大きなコンピューターの上でプログラムを動かすという仕組みであることがよくわかります。

これがまさに、イーサリアムがワールド・コンピューターを名乗る所以ですね。