たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【Ethereum開発】スマートコントラクトの概念

   


スマートコントラクトはmetamask(詳しくはこちら参照)でつくったアカウントのようなものであると考えることができます。これは人間ではなく、コードによって制御されます。

このコードがスマートコントラクトのふるまいを記述します。

https://gyazo.com/b887c1c41282d0c27b428f27ac46c3d3

コントラクトアカウントの中身

コントラクトアカウントには、コードと命令が格納されているため、なんらかの方法により実行する必要があります。

https://gyazo.com/5f0d65bdc97180441fabf3c26d65bdb8

注意すべきは、metamaskで生成した外部アカウントとスマートコントラクトのアカウントとはまったくの別物であることというです。

作成したスマートコントラクトアカウントは特定のネットワーク上で作成し、ネットワーク経由でアクセスすることはできません。つまり、rinkebyで作成したコントラクトアカウントは、main、ropsten、kovanからアクセスすることはできません。

https://gyazo.com/b1d0e9cde16699bfd8190f1b5824e35f

コントラクトのソースをRinkebyネットワークにデプロイすると、コントラクトのインスタンスが作成されます。これらのインスタンスとコントラクトのソースコードの関係は、いわゆる「クラス」と「インスタンス」の関係と非常によく似ています。

https://gyazo.com/a5ebdae9c8f40eabf1ef0f7e530f6a91

そう、ちょうどこんなかんじ

これはオブジェクトの動作の定義です。クラスのコピーがインスタンスに作成されます。
https://gyazo.com/167eb2e32b1565a50bd3434ba170e4db

なので、ブロックチェーンにもオブジェクト指向の概念が登場します。ですので、一般的なオブジェクト指向プログラミングのクラスやインスタンスの考え方を身に着けておきましょう。

Solidity

solidityはスマートコントラクトを記述するための言語です。
コントラクトの実行を容易にしてくれる多くの機能を言語の中にもっています。solidityは強い型付け言語であり、javascriptに似ていると考えられています。

https://gyazo.com/83786ad7cb886b374a20943a8974c16c

solidityの仕組みは以下の図のようにあらわせます。
solidityのソースコードはsolidity compilerによってコンパイルされると二つのファイルを吐き出します。最初のバイトコードには理論ネットワークに展開される実際のバイトコードを含みます。もう一方は、ABI(アプリケーションバイナリインターフェース)と呼ばれるものです。ABIは展開されたスマートコントラクトと対話できるアプリケーションを作成するためのキーです。

https://gyazo.com/5c8e97ae38628fc8c301c81e13795ea4

続きは随時アップしていく予定ですが、ここからじぶんで開発を学んでいきたいひとは、
世界最大級のオンライン学習サイトUdemyから「Ethereum and Solidity: The Complete Developer's Guide」を探してみてください。

 - BlockChain, テクノロジー