目次


スマートコントラクト開発


概要

スマートコントラクトは主にsolidityという言語を使用して開発します
本ページにあるコードは、すべてsolidityです
solidityはブラウザでコンパイルすることが可能です


コントラクト作成~実行の仕方

コントラクト作成編

  1. solidityをコンパイルできるサイト「browser-solidity」を開く
  2. 画面中央部のエディタにソースコードを書く
  3. とりあえず試しに動かすだけならサンプルコードをコピペしましょう
  4. 画面右の「Compile」タブにある「Start to compile」をクリック
  5. 画面右に緑背景でコンストラクト名が出れば成功
  6. 画面右の「Compile」タブにある「Details」をクリック
  7. 出てきたウィンドウの「BYTECODE」の“object”: の右のダブルクォーテーション内(長い)をコピー
  8. ダブルクォーテーション内をダブルクリックすると簡単に全選択できます
  9. SIKEN COREの「Smart Contract」の「Create」を開き、「Bytecode」のところに貼り付ける
  10. browser-solidity」に戻り、「ABI」をコピー
  11. 「ABI」の文字のすぐ右、バインダーに紙のようなマークをクリックするとコピー
  12. SIKEN COREに戻り、「Interface (ABI)」のところに貼り付ける
  13. ABIは実行するために必要なのでどこかにメモしておきましょう
  14. コンストラクトの入力情報がある場合は、「Constructor」に入力欄ができるので入力する
  15. サンプルコードの場合、入力情報はないため出てきません。
  16. 「Create Contract」をクリック
  17. リザルト画面の「ContractAddress」は実行するために必要なのでどこかにメモしておきましょう
  18. コントラクトが生成されるまで少し待つ
  19. 「取引画面」で、「Contract send」が1検証完了(下図の状態)すれば、コントラクトの生成が完了しているはずです

コントラクト実行編に進んで、もし「Address does not exist (code -5)」と出る場合はもう少し待ちましょう


コントラクト実行編(はじめに)

コントラクトの実行方法には「Call」と「SendTo」の2種類あります。

Call

  1. Callは、コントラクトに情報を記憶しない関数を呼ぶことができます。
  2. 実行が早く、手数料がかかりません。
  3. また、戻り値として数値や文字列を返すことができます。

SendTo

  1. SendTo、コントラクトに情報を記憶する関数を呼ぶことができます。
  2. 例えば、コントラクトに文字列「Hello」を記憶させ、他の人に取得させることも可能です。
  3. ブロックを生成するため実行完了まで時間がかかり、手数料が取られます。
  4. また、戻り値を返すことはできません。(本当に方法がないか調査中・・・)

コントラクト実行編(Call)

  1. SIKEN COREの「Smart Contract」の「Call」を開く
  2. 「Contaract Address」にコントラクトを作成したときに表示された「ContractAddress」を入れる
  3. 「Interface (ABI)」に、コントラクトを作成したときに使用したABIを入れる
  4. 「Function」のプルダウンリストに呼び出せる関数の候補が表示されるので、呼び出したい関数を選ぶ
  5. サンプルコードを使用した場合は、「HelloWorld」を選びましょう
  6. 引数がある関数を選択した場合、下に入力欄ができるので入力する
  7. 「HelloWorld」の場合、引数はないため出てきません。
  8. 「Call Contract」をクリック
  9. 実行結果が出力されます。

コントラクト実行編(SendTo)

  1. SIKEN COREの「Smart Contract」の「SendTo」を開く
  2. 「Contaract Address」にコントラクトを作成したときに表示された「ContractAddress」を入れる
  3. 「Interface (ABI)」に、コントラクトを作成したときに使用したABIを入れる
  4. 「Function」のプルダウンリストに呼び出せる関数の候補が表示されるので、呼び出したい関数を選ぶ
  5. サンプルコードを使用した場合は、「SetMessage」を選びましょう
  6. 引数がある関数を選択した場合、下に入力値を入れる欄ができるので入力する
  7. 「SetMessage」の場合、引数「message」を入力してください。これがコントラクタに記憶されます。
  8. 「Send To Contract」をクリック
  9. ブロックが生成されるまで少し待つ
  10. 「取引画面」で、「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;
    }
}