Ethereumのスマートコントラクトを実行してみよう
はじめに
対象とする読者
Ethereum初学者。
何かしらのプログラミング言語の経験がある方。
記事で説明すること
簡単なスマートコントラクトのコードを例に、コンパイル、デプロイ、実行までを行う手順を説明していきます。
いくつかの方法が考えられますが、ここでは最も簡単に実現できるRemix IDEという環境を使用した手順を紹介します。RemixはWebブラウザ上で動作するIDEで、サイトにアクセスするだけですぐに使用することができます。
この記事ではRemix IDEに最初から用意されているサンプルプログラム1_Storage.solを使用した場合の流れを説明します。
サンプルプログラム
1_Storage.solは、1つの内部変数に対して、getterとsetter関数が用意されているプログラムです。SolidityというEthereum専用のプログラミング言語で記述されています。
pragma solidity >=0.7.0 <0.9.0;
contract Storage {
uint256 number;
function store(uint256 num) public {
number = num;
}
function retrieve() public view returns (uint256){
return number;
}
}
上の行から順に説明します。
pragma solidityはこのソースコードが対応しているSolidityコンパイラバージョンを設定しています。0.7.0以上0.9.0未満の範囲で使用可能、それ以外でコンパイルしようとした場合にはエラーになります。
contractは他のプログラム言語のclassとほぼ同じ概念です。contract Storageには、1つの変数と2つの関数が管理されています。
変数numberには、public、privateの指定がありません。指定がない場合はprivateになり、外部からは直接参照ができない設定となります。
function storeは1つの整数を引数にとり、値を変数numberに代入します。publicの指定があるため、外部から呼び出せる関数となります。
function retrieveは、1つの整数を返します。返却する値はnumberです。
viewはブロックチェーンに対して書き込みを行わない(参照のみ)際に、GAS代(Ether)を消費しないようにする設定です。こちらもpublicが設定されているので、外部から呼び出せる関数です。
コンパイルする
1_Storage.solを開いている状態で、左側のメニューからSolidity Compilerを選択してください。
今回は一番上のCOMPILERのみ確認します。ここではコンパイラのバージョンを選択することができます。バージョンの数字がサンプルプログラムのpragma solidityの範囲に入っていることを確認してください。
確認して問題なければ、下にあるCompile 1_Storage.solをクリックします。
コンパイルが完了すると、下の画像のようなボタンが表示されます。
コンパイルした出力結果がABIとBytecodeです。それぞれクリックするとデータをクリップボードにコピーするこができます。これらはSolidity共通のものですので、他の環境に持っていって実行することができます。
今回は、Remix内で実行しますので、特にこの操作は行いません。
シミュレータ環境にコントラクトをデプロイする
次に左のメニューから、1つ下のDeploy & Run transactionをクリックしてください。
はじめにENVIRONMENTを確認します。デフォルトはJavaScript VMが選択されています。
これは、コンパイル結果をどこにデプロイするのかの選択です。JavaScript VMは、この環境でそのまま実行するシミュレーター動作になります。実際のブロックチェーン環境より高速で動作するので、ちょっとした確認をするためにはこれを使うのが便利です。今回はこの設定のまま使用します。
次にCONTRACTを確認します。先程コンパイルしたStorageが選択されている事を確認します。
内容が問題なければDeployボタンをクリックします。
成功するとDeployed ContractsにStorageが追加されます。
コントラクトを実行する
Deployed Contractsに表示されている、STORAGEコントラクトの表示をクリックすると下の画像ように展開されます。
1_Storage.solでpublicに設定されてた関数のstoreとretriveが表示されていることを確認してください。
ここからコントラクトを実行していきます。
storeの入力欄に100と入力しstoreをクリックして実行します。
成功すると次のようにログが表示されます。実行したアドレスやGAS代等を確認することができます。
次にretriveをクリックして実行します。戻り値として取得した値100が表示されます。
先程と同様にログを確認します。retriveはview(参照のみ)設定のためGASの消費はありません。
まとめ
Ethereumで簡単なスマートコントラクトを実行する例について説明しました。Remix IDEは、実際のブロックチェーンネットワークへのデプロイ等、他にも実践的な用途にも活用することができます。
Discussion