[[wiki:smartcontract]] =======スマートコントラクト開発======= ======概要====== スマートコントラクトは主にsolidityという言語を使用して開発します\\ 本ページにあるコードは、すべてsolidityです\\ solidityはブラウザでコンパイルすることが可能です\\ \\ \\ ======コントラクト作成~実行の仕方====== **コントラクト作成編**\\ - solidityをコンパイルできるサイト「browser-solidity」を開く\\ - 画面中央部のエディタにソースコードを書く\\ - とりあえず試しに動かすだけならサンプルコードをコピペしましょう\\ - 画面右の「Compile」タブにある「Start to compile」をクリック\\ - 画面右に緑背景でコンストラクト名が出れば成功\\ - 画面右の「Compile」タブにある「Details」をクリック\\ - 出てきたウィンドウの「BYTECODE」の"object": の右のダブルクォーテーション内(長い)をコピー\\ - ダブルクォーテーション内をダブルクリックすると簡単に全選択できます\\ - SIKEN COREの「Smart Contract」の「Create」を開き、「Bytecode」のところに貼り付ける\\ - browser-solidity」に戻り、「ABI」をコピー\\ - 「ABI」の文字のすぐ右、バインダーに紙のようなマークをクリックするとコピー\\ - SIKEN COREに戻り、「Interface (ABI)」のところに貼り付ける\\ - ABIは実行するために必要なのでどこかにメモしておきましょう\\ - コンストラクトの入力情報がある場合は、「Constructor」に入力欄ができるので入力する\\ - サンプルコードの場合、入力情報はないため出てきません。\\ - 「Create Contract」をクリック\\ - リザルト画面の「ContractAddress」は実行するために必要なのでどこかにメモしておきましょう\\ - コントラクトが生成されるまで少し待つ\\ - 「取引画面」で、「Contract send」が1検証完了(下図の状態)すれば、コントラクトの生成が完了しているはずです\\ コントラクト実行編に進んで、もし「Address does not exist (code -5)」と出る場合はもう少し待ちましょう\\ \\ ====コントラクト実行編(はじめに)==== コントラクトの実行方法には「Call」と「SendTo」の2種類あります。\\ \\ **Call** - Callは、コントラクトに情報を記憶しない関数を呼ぶことができます。 - 実行が早く、手数料がかかりません。 - また、戻り値として数値や文字列を返すことができます。\\ **SendTo** - SendTo、コントラクトに情報を記憶する関数を呼ぶことができます。 - 例えば、コントラクトに文字列「Hello」を記憶させ、他の人に取得させることも可能です。 - ブロックを生成するため実行完了まで時間がかかり、手数料が取られます。 - また、戻り値を返すことはできません。(本当に方法がないか調査中・・・) ====コントラクト実行編(Call)==== - SIKEN COREの「Smart Contract」の「Call」を開く - 「Contaract Address」にコントラクトを作成したときに表示された「ContractAddress」を入れる - 「Interface (ABI)」に、コントラクトを作成したときに使用したABIを入れる - 「Function」のプルダウンリストに呼び出せる関数の候補が表示されるので、呼び出したい関数を選ぶ - サンプルコードを使用した場合は、「HelloWorld」を選びましょう - 引数がある関数を選択した場合、下に入力欄ができるので入力する - 「HelloWorld」の場合、引数はないため出てきません。 - 「Call Contract」をクリック - 実行結果が出力されます。 ====コントラクト実行編(SendTo)==== - SIKEN COREの「Smart Contract」の「SendTo」を開く - 「Contaract Address」にコントラクトを作成したときに表示された「ContractAddress」を入れる - 「Interface (ABI)」に、コントラクトを作成したときに使用したABIを入れる - 「Function」のプルダウンリストに呼び出せる関数の候補が表示されるので、呼び出したい関数を選ぶ - サンプルコードを使用した場合は、「SetMessage」を選びましょう - 引数がある関数を選択した場合、下に入力値を入れる欄ができるので入力する - 「SetMessage」の場合、引数「message」を入力してください。これがコントラクタに記憶されます。 - 「Send To Contract」をクリック - ブロックが生成されるまで少し待つ - 「取引画面」で、「Contract send」が1検証完了(下図の状態)すれば、コントラクトの生成が完了しているはずです 「SetMessage」を使用した場合、「GetMessage」関数を"Call"してみましょう。 ブロックの生成が完了していれば、先ほど設定したメッセージが取得できます。 ---- ======サンプルコード====== pragma solidity ^0.4.16; // solidityのバージョン contract sample { // コントラクト名「sample」 string private mssg; // コントラクトに情報を記憶させるための変数 // 関数 : HelloWorld // 説明 : 文字列"HelloWorld"を返却します。 // 呼び出し方 : Call // 引数 : なし // 戻り値 : HelloWorld!! function HelloWorld() pure public returns (string message) { return "HelloWorld"; } // 関数 : SetMessage // 説明 : コントラクトに引数で渡した文字列を記憶します。 // 呼び出し方 : SendTo // 引数 : message : 記憶する文字列 // 戻り値 : なし function SetMessage(string message) public { mssg = message; } // 関数 : GetMessage // 説明 : 関数「SetMessage」で記憶させた文字列を返却します。 // 呼び出し方 : Call // 引数 : なし // 戻り値 : 関数「SetMessage」で記憶させた文字列 function GetMessage() public constant returns (string message) { return mssg; } // 関数 : Sum // 説明 : 引数の合計を返却します。 // 呼び出し方 : Call // 引数 : data1 : 足し算する数1 // : data2 : 足し算する数2 // 戻り値 : data1 + data2 の結果 function Sum(uint128 data1, uint128 data2) public pure returns (uint256 result) { return data1 + data2; } }