プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

WindowsでEthereum環境構築でスマートコントラクトはじめました。

ハリネズミモグラの仲間。哺乳類の「軽く熊」です。

ついにスマートコントラクトを実行する日がやってまいりました。
前回スルーされたsolidityの名誉挽回です。

Smart Contract とはブロックチェーン上に登録されたプログラムを
実行する機能
かなと個人的には思っています。


はっ?何ソレ?美味しいの?」と思った方。大丈夫です!
google先生に聞けば私が説明するよりも
わかりやすい解説サイトをきっと教えてくれます。

今回もEthereum-Walletを使ってスマートコントラクトを実行します。
Mistにもほぼ同じ機能があるからMistでも良いのですが…

なお、プログラムをブロックチェーン上に登録(DEPLOY)する場合と
実行時にデータを書き換える場合にガス(手数料)が発生します。

作成するプログラムはsolidityと呼ばれるJavaScriptに似た開発言語で記述します。

f:id:plusplus-calc_kuma:20180614124447p:plain
右上の「CONTRACTS」をクリックします。


f:id:plusplus-calc_kuma:20180614124500p:plain
左側の「DEPLOY NEW CONTRACT」をクリックします。


f:id:plusplus-calc_kuma:20180614124510p:plain
「FROM」はスマートコントラクトを実行するアカウントを選択します
「AMOUNT」はゼロのままで問題ありません。
そして「SOLIDITY CONTRACT SOURCE CODE」にプログラムを記述します。
※solidityの文法とか詳しい仕様はgoogle先生が教えてくれるよ!!
とりあえずはこんな感じでプログラムを記述します。

pragma solidity ^0.4.18;

contract MyNewContract {
    string _message;

    /* Constructor */
    function MyNewContract() public {
    }

    function Hello() public pure returns (string) {
        return "Hello World";
    }

    function setMessage(string message) public {
        _message = message;
    }

    function getMessage() public constant returns (string) {
        return _message;
    }
}

名前をMyNewContractに変えて、作ったの下記の3つのメソッド。
・固定文字列 Hello World を返す Helloメソッド。
・文字列を設定するsetMessageメソッド。
・文字列を取得するgetMessageメソッド。

※Ethereum-Walletの制限でコンストラクタで書き換えが発生するような
プログラムは正しく処理されないようです。
そのような場合にはプログラムを書き換えるか、別の開発環境を使うしかありません。



f:id:plusplus-calc_kuma:20180614124536p:plain
エラー無くプログラムを記述すると右側の部分が「Pick a contract」に変わります。
ここをクリックして自分が作成したコントラクト名を選択します。
選択したら画面を下にスクロールさせます。


f:id:plusplus-calc_kuma:20180614124549p:plain
「SELECT FEE」にはガス(手数料)を設定します。
本来であればガスを高くすると登録処理(マイニング)が優先されるのですが、
プライベートネットなのでそのままで問題ありません。
そしたら「DEPLOY」をクリックして登録ですッ!


f:id:plusplus-calc_kuma:20180614124559p:plain
確認の画面が表示されるのでFROMで選択したアカウントのパスワードを入力して、
「SEND TRANSACTION」で確定です。


f:id:plusplus-calc_kuma:20180614124608p:plain
WALLETSの画面に戻るので下にスクロールするとコントラクトの登録要求されて
マイニングにより登録処理が動いているのがわかります。

登録が完了したら「CONTRACT」をクリックします。


f:id:plusplus-calc_kuma:20180614124624p:plain
コントラクトが登録されているのでクリックします。


f:id:plusplus-calc_kuma:20180614124636p:plain
左側が読み込み(取得)メソッドの結果、右側が書き込み(設定)メソッドになります。

読み込みメソッドは一覧表示ですが、書き込みメソッドは選択式です。
Helloメソッドは固定文字列を返すだけなので結果が表示されていますが、
getMessageメソッドは空欄となっています。
ここで「Pick A Function」をクリックしてsetMessageを選択します。


f:id:plusplus-calc_kuma:20180614124646p:plain
書き込みメソッドを選択すると表示が切り替わるので
「Message - String」に書き込む文字列を入力します。
「Excute from」は実行するアカウントを選択します。(要手数料
必要項目を入力したら「EXECUTE」でついに
スマートコントラクト実行です。


f:id:plusplus-calc_kuma:20180614124655p:plain
またまた確認の画面が表示されるのでExecute fromで選択したアカウントの
パスワードを入力して、「SEND TRANSACTION」で確定です。


何も変化が起きないですがマイニングによってプログラムが実行されています。
しばらく待てば結果が表示されます。
状態を確認したい場合は「WALLETS」クリックしてコントラクトを見ます。


f:id:plusplus-calc_kuma:20180614124708p:plain
コントラクトが追加され、処理されているのがわかります。


f:id:plusplus-calc_kuma:20180614124719p:plain
マイニングの処理が終わった後に再度、登録したコントラクトを見ると
getMessageに値が設定されています。


これでスマートコントラクトは一通り完了です。
仕組みと動作はこれでなんとなくわかったんですが…さて困った…
ブロックチェーンの改ざん出来ない特性を生かしたアプリって何かあるのかなー。

google先生に聞いてみると投票システムなんかを作ってる人がいるみたいですね。
確かに改ざんできないから特性を生かしているように感じます。

えっー、これから何を作ればいいんだー。
次回…アプリ現るッ! かもしれない。


シリーズ記事
WindowsでEthereum環境構築はじめました。その1
WindowsでEthereum環境構築はじめました。その2
WindowsでEthereum環境構築はじめました。その3
WindowsでEthereum環境構築にAndroidくわえました。
WindowsでEthereum環境構築でスマートコントラクトはじめました。 ← この記事だよ!
イーサリアムのスマートコントラクトで何ができる?
Androidでmetamask不要のウォレットアプリをビルドする