手軽に“Solidity”言語でスマートコントラクト開発、開発環境「Remix」ってどう使う?Ethereumではじめる“スマートコントラクト開発”(2)(3/3 ページ)

» 2017年11月22日 05時00分 公開
[町浩二トライデントアーツ]
前のページへ 1|2|3       

複数のコントラクトの連携(簡単なチケット販売機能による例)

 今回のサンプルコードでは、ユーザーアカウントを管理する「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)

 サンプルコードは、こちらからダウンロードしてください。解説はコード内のコメントとして記載しています。

参考:「struct」 と 連想配列

 Solidityによるスマートコントラクトコーディングの特徴の1つとして、「struct」データ構造の定義と連想配列の定義があります。「struct」はアプリケーション内で開発者が自由に定義できるデータ構造です。サンプルコードではAccountやTicketのデータ構造を独自に定義しています。

 連想配列は、配列の識別子に任意の文字を指定することです。Solidityでは、これを「mapping(識別子に使うデータ型 => データ構造) 変数名」構文で定義できます。


他のコントラクトとの連携方法

 サンプルコードでは、Ticketsコントラクトの「buyTicket」ファンクション内で、Accountsコントラクトのpaymentファンクションを呼び出しています。

Accounts acc = Accounts(_contractAddr); //Acountsコントラクトを生成する
acc.payment(_buyerAccId,_buyerAddr,_sellerAccId,_money);
画面9 赤枠を押下することでコントラクトアドレスを取得できる

 上記のコードでは、Accountsコントラクトの実体として「acc」を生成しています。ポイントは、他のコントラクトを利用する際に、そのコントラクトがデプロイされているアドレスを引数として渡す必要があるということです。その後、「acc.payment(引数)」の形でAccountsコントラクト内のファンクションを実行しています。

 Remixではコントラクトのデプロイ後にアドレスのコピーボタンを押下することでコントラクトアドレスを取得できます(画面9)。なおRemixでテストする際にアドレス型のデータを引数に入力する場合は、「“0x2710”」のようにダブルクォーテーションで囲む必要があるので、注意する必要があります。

参考:コーディングのサポートツール

 Remixには構文チェック機能が実装されており、構文に誤りがあれば自動的に指摘してくれます。この機能は非常に便利なのですが、コーディング時にもう1つ有効に活用したいツールがあります。それは、「solidity.readthedocs」です。このサイトはSolidityの開発時に知っておくべき知識を幅広くまとめてくれています。コーディング時に分からないことがあれば、まずこのサイトを訪れることをお薦めします。


DAPPSリストへの登録

 Ethereumのアプリケーションを開発したら、「STATE OF THE DAPPS」に登録することで、DAPPS(分散型アプリケーション)を世界に発表できます(※)。2017年10月現在は、約700のアプリケーションが登録されています。

※DAPPSの申請・公開に当たっては、今回紹介した「Remix」上でのスマートコントラクトコードのコーディングに加えて、Ethereumノード環境の構築、Web画面の作成、これらを連結したテストの実施を通して、動くアプリケーションを作る必要があります。

 STATE OF THE DAPPSの画面右上に表示されている「Submit a DApp」の申請ボタンを押下し、下記の必須情報を入力すれば、公開に向けて申請できます(画面10、11)。

  • DApp Name:アプリケーションの名称
  • Emai:メールアドレス
  • Teaser description:アプリケーションの説明(概要)
  • Full description:アプリケーションの説明(詳細)
  • Website url:デモサイトやサービスサイト(Webベースの画面)のURL
  • DApp founder:開発の母体となる組織
  • Software license:製品のライセンス形式(MITライセンスなど)
  • Project status:DemoやLiveなどの製品開発状況
(画面10、左)申請画面の起動画面、(画面11、右)申請情報の入力画面

 審査の結果は、メールで連絡されます。


 Ethereumの分散アプリケーションの開発は、「Remix」のようなお手軽な開発環境が整っていることに加えて、「STATE OF THE DAPPS」のような公開の仕組みが用意されているので、実験的な取り組みが日々生まれている状況にあります。ぜひ、皆さんもSolidityのコーディングを始めてみてはいかがでしょうか。

著者プロフィール

町浩二

トライデントアーツ株式会社 代表取締役

「一歩先の技術によって社会を豊かに」をテーマに、ブロックチェーン、スマートコントラクトを活用した分散アプリケーションの企画や開発、コンサルティング、ミートアップでの講師などを務める。現在はEthereumとともにInter Ledger Protocolの活用に関する研究を進めている。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。