手軽に“Solidity”言語でスマートコントラクト開発、開発環境「Remix」ってどう使う?:Ethereumではじめる“スマートコントラクト開発”(2)(3/3 ページ)
Ethereumでスマートコントラクトを開発する場合、何を準備して開発すればいいのだろうか。本稿では、コンパイラ兼統合開発環境である「Remix」をサンプルコードと一緒に紹介する。
複数のコントラクトの連携(簡単なチケット販売機能による例)
今回のサンプルコードでは、ユーザーアカウントを管理する「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);
上記のコードでは、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などの製品開発状況
審査の結果は、メールで連絡されます。
Ethereumの分散アプリケーションの開発は、「Remix」のようなお手軽な開発環境が整っていることに加えて、「STATE OF THE DAPPS」のような公開の仕組みが用意されているので、実験的な取り組みが日々生まれている状況にあります。ぜひ、皆さんもSolidityのコーディングを始めてみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- スマートコントラクトって何? 「競合との協業」という新たなビジネスの地平を開ける仕組みである理由とは
本連載では、「Ethereum」を使った契約の条件確認や履行などを自動で行う「スマートコントラクト」の開発方法を紹介していきます。第1回目は、スマートコントラクトとは、どのような仕組みで、どのような場面で使えるのかを紹介します。 - ブロックチェーンは「取引コストゼロ」の世界を実現しようとしている
本特集では金融業界がFinTechでビジネスを拡大するために必要な技術要件を浮き彫りにし、一つ一つ解説していく。今回は、FinTechの潮流の中で、特に注目を浴びているキーワード「ブロックチェーン」についてのセミナーの模様を紹介する。その応用分野は狭義の「金融」にとどまらない。流通やヘルスケア、音楽、ゲーム、さらには「契約」全般など、幅広い可能性を秘めたブロックチェーンの可能性を探る。 - ブロックチェーン技術「Ethereum」とは何か、アプリのアーキテクチャはどう変わるのか
リクルートテクノロジーズの社内ラボで行っている、主に非金融領域に対するブロックチェーンの活用に向けたR&Dを紹介する連載。今回は、スクリプティング機能をより広汎に使える形にしたブロックチェーンの構築を目指したオープンソースソフトウェア「Ethereum」を利用し、「履歴書データベース」として実装した課程と、その結果を紹介。