Ethereumスマートコントラクト クリプトゾンビでSolidity基礎入門

ブロックチェーン技術にも色々ありますが、一番注目なのはやはりEthereumでしょうか。

決済手段に特化したBitcoinと異なり、スマートコントラクトなど色んな事が実現可能で興味深い。

TaNA
一点ネックなのはブロックチェーン全般が最近話題になり始めたので、ネットや参考書など「コレだ!!」と思うノウハウも無く、一応参考書はあっても最新技術故に変遷も激しく、参考書通りにやっても動かずにギブアップする事もしばしば。

何か良い参考書ないかtwitterを眺めてると、最近(ブログ執筆時点で2019年1月)DMMのエンジニアの方々がスマートコントラクトの書籍を出されていたので、試しに読んでみました。

今回はSolidityの触り部分までを抜粋。

ブロックチェーンの価値

本書の冒頭ではブロックチェーンにも言及。

ただ本書はスマートコントラクトが中心であり、ブロックチェーンだけで一冊分の内容なので別途本での理解が吉。一応私が最初に読んだ書籍の内容を貼っときます↓

ブロックチェーンとは!? 一番優しい参考書を読み基礎技術の理解

本書に掲載されていたブロックチェンが提供する価値とは!?

◼️ ブロックチェーンが提供する5つの価値

・マイクロペイメント(超少額決済).

・即時支払い.

・耐改ざん性.

・データの民主化.

・スマートコントラクト(自動化).

これらの価値を用いたサービスには何があるのか!?

・仮想通貨.

・分散DNS.

・トークンプラットフォーム.

・公証.

・トレーサビリティ.

ブロックチェーンと聞くと仮想通貨やトークンサービスが印象強いですが、ブロックチェーンの透明性を利用したトレーサビリティは面白そうです。

食品や宝石類のトレーサビリティは勿論、最近はアートと組み合わせたサービスも登場してます。

アートとブロックチェーンは相性がいい・美術家が創業したスタートバーン

スマートコントラクト

そもそもスマートコントラクトとは何を意味するのか!?

本書ではまず広義の意味では、契約に関わる様々なリスク・課題を情報技術で解決する考え方とし、狭義の意味では、Ethereumや類似プラットフォーム上で動作するプログラムとしています。

◼️ スマートコントラクトで実現できること

・取引系サービス

・ゲーム系サービス

・マーケットプレイス系サービス

・ソーシャル系サービス

・ユーティリティ系サービス

TaNA
私が一番気になったのはソーシャル系ですかね。TwitterライクなSNSで一度発言した事は永遠にブロックチェーン上に残り、ユーザー間で送金したり、発言者に対して投げ銭したりと、結構色々出来そうです。

あと気になったのがGitcoinの存在。

私含め、昨今のIT技術は多くのOSS技術に支えられています。

基本的にOSS活動に従事されている技術者は無償で活動して下さっており(本当に足を向けて寝れません)、そんな方々に正当な報酬を仮想通貨で支払うべくGitcoinなるものが開発されているとか。

是非成功してもらいたいし、私も力(寄付)になりたいけど、公式HPの英語が…

Ethereumとは!?

EthereumもBitcoinの技術を応用して作られていますが両者の違い何か!?

POINTBitcoinは誰にも邪魔されず、素早く通貨を送金する決済手段に特化したもの.

POINTEthereumは通貨以外にも様々なプログラムが動作可能なプラットフォーム.

TaNA
BitocoinがLINEPayでEthereumがLine本体と例える人もいますが、こっちの方がイメージしやすいかな。ただLine上に自分が作ったアプリなどを公開出来ないので、その制限が無いのがEthereumという事になります。

またEthereum開発者はEthereumをワールドコンピューターと読んでいるそうです。

TaNA
世界中のコンピューターを繋げ、誰にも規制・管理されずに皆で安全に管理し、情報を全てデータ化。24時間365日を自動で動作し、不正も行われずに国境を超え人々の生活を変え、世界を1つのコンピューターとして捉える事。

つまり繋がっているノードは同等であり、必ず同一処理(お金の送金にしろ、スマートコントラクトにしろ)を行い同期するので、負荷が高い処理は極力制限する必要が出てきます。

POINTこの制限を実現させるため、Ethereumではガスと呼ばれるコスト概念を導入!!

◼︎ ガスの計算式 gas_price * gas.

・gas_priceは1gasあたりのETHの量.

・gasはあるトランザクションに必要な量.

ブロックチェーンを変更する行為(新規トランザクション構築等)には必ずガスが必要となり、それ以外の行為(例えば状態を変更せずに情報取得のみを行う)にはガスは不必要。

Solidityについて

SolidityはEthereum上でスマートコントラクト実装のためのオブジェクト指向な高級言語。

TaNA
SolidityはC++やPython、JavaScriptの影響を受け設計されているので、何かしらオブジェクト指向言語の開発経験があれば、割と理解し易いかも。EVM上で動作する静的型付言語で継承やライブラリをサポートしているのでJavaに酷似。

Solidityのコントラクトはオブジェクト指向のオブジェクトのような概念で、これに状態変数、関数、関数修飾子、イベント、構造体型および列挙型の宣言し、スマートコントラクト開発。

状態変数は後述の型指定で定義し、関数はfunctionキーワードで定義。

静的型付言語なので変数宣言時には型を宣言!!

◼︎ 値型

・論理型:trueまたはfalseを取り扱う型.

・整数型:符号付き整数と符号無し整数の型.

・アドレス型:20byteの値を保持し、残高表示や送金関数を保持.

・バイト配列型:byte1〜byte32まで1byte刻みで用意されている.

・列挙型:ユーザー定義型を作成する型.

小さな値を扱う値型に比べ、値型を複数扱うのが参照型。

◼︎ 参照型

・配列型:固定または動的な配列が利用可能.

・構造体:structキーワードで文字列や整数を扱う構造体を定義.

・mapping型:keyの値でvalueの値を参照可能.

本書では基本文法は詳しく記載されていないので Solidity公式HP を一読するのが吉。

CryptoZombies

Solidityの基本的な使い方は CryptoZombies で理解できます。

非常に懇切丁寧に説明してくれるサービスで、Progateを更に進化させたようなサービス。

SolidityはJavaScriptに似ているので、プログラミング未経験者はJavaScriptを学習しておくのが良いですが、大変クオリティーの高いWebサイトなので未経験者でも問題ないかなと。

説明通りに従うと以下のようなプログラムが出来上がります。

github連携で進捗度が保存できるのも○

Solidity基礎知識