今回のサンプルコードでは、ユーザーアカウントを管理する「Accounts」コントラクトとチケットの販売を管理する「Tickets」コントラクトという2つによって処理を実行します。Ticketsコントラクトでチケット売買機能を実行する際に、Accountsコントラクトの機能でユーザー間のお金のやりとりを行うイメージです。処理の概要を記します。
# | ユーザーのアクション | コントラクト | ファンクション | 引数 | 戻り値 |
---|---|---|---|---|---|
1 | 口座を新規作成する(売買用に2つの口座を作成) | Accounts | createAccount | 口座アドレス(数字) | 口座番号 |
2 | 口座に入金する(2つの口座にそれぞれ入金) | Accounts | deposit | 口座番号、口座アドレス、入金額 | 処理結果(boolean) |
3 | 口座情報を確認する(3つの口座それぞれを確認) | Accounts | getAccountInfo | 口座番号 | 口座アドレス、口座残高 |
4 | チケットを発行する(2つの口座の一方が販売者、もう一方を購入者とする) | Tickets | issueTicket | 口座番号、チケット名、チケット価格、チケット発行枚数 | チケット番号 |
5 | チケットの情報を確認する | Tickets | getTicketInfo | チケット番号 | 発行者の口座番号、チケット名、チケット価格、チケット発行枚数、販売枚数 |
6 | チケットを購入する | Tickets | buyTicket(Accountコントラクトの「payment」ファンクション(後述)をコール) | チケット番号、購入者の口座アドレス、購入者の口座番号、発行者の口座番号、購入金額 | 処理結果(boolean) |
サンプルコードは、こちらからダウンロードしてください。解説はコード内のコメントとして記載しています。
Solidityによるスマートコントラクトコーディングの特徴の1つとして、「struct」データ構造の定義と連想配列の定義があります。「struct」はアプリケーション内で開発者が自由に定義できるデータ構造です。サンプルコードではAccountやTicketのデータ構造を独自に定義しています。
連想配列は、配列の識別子に任意の文字を指定することです。Solidityでは、これを「mapping(識別子に使うデータ型 => データ構造) 変数名」構文で定義できます。
サンプルコードでは、Ticketsコントラクトの「buyTicket」ファンクション内で、Accountsコントラクトのpaymentファンクションを呼び出しています。
Accounts acc = Accounts(_contractAddr); //Acountsコントラクトを生成する acc.payment(_buyerAccId,_buyerAddr,_sellerAccId,_money);
上記のコードでは、Accountsコントラクトの実体として「acc」を生成しています。ポイントは、他のコントラクトを利用する際に、そのコントラクトがデプロイされているアドレスを引数として渡す必要があるということです。その後、「acc.payment(引数)」の形でAccountsコントラクト内のファンクションを実行しています。
Remixではコントラクトのデプロイ後にアドレスのコピーボタンを押下することでコントラクトアドレスを取得できます(画面9)。なおRemixでテストする際にアドレス型のデータを引数に入力する場合は、「“0x2710”」のようにダブルクォーテーションで囲む必要があるので、注意する必要があります。
Remixには構文チェック機能が実装されており、構文に誤りがあれば自動的に指摘してくれます。この機能は非常に便利なのですが、コーディング時にもう1つ有効に活用したいツールがあります。それは、「solidity.readthedocs」です。このサイトはSolidityの開発時に知っておくべき知識を幅広くまとめてくれています。コーディング時に分からないことがあれば、まずこのサイトを訪れることをお薦めします。
Ethereumのアプリケーションを開発したら、「STATE OF THE DAPPS」に登録することで、DAPPS(分散型アプリケーション)を世界に発表できます(※)。2017年10月現在は、約700のアプリケーションが登録されています。
※DAPPSの申請・公開に当たっては、今回紹介した「Remix」上でのスマートコントラクトコードのコーディングに加えて、Ethereumノード環境の構築、Web画面の作成、これらを連結したテストの実施を通して、動くアプリケーションを作る必要があります。
STATE OF THE DAPPSの画面右上に表示されている「Submit a DApp」の申請ボタンを押下し、下記の必須情報を入力すれば、公開に向けて申請できます(画面10、11)。
審査の結果は、メールで連絡されます。
Ethereumの分散アプリケーションの開発は、「Remix」のようなお手軽な開発環境が整っていることに加えて、「STATE OF THE DAPPS」のような公開の仕組みが用意されているので、実験的な取り組みが日々生まれている状況にあります。ぜひ、皆さんもSolidityのコーディングを始めてみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.