チュートリアル:Azure Blockchain Workbench 用ブロックチェーン アプリケーションを作成するTutorial: Create a blockchain application for Azure Blockchain Workbench

Azure Blockchain Workbench を使用すると、構成とスマート コントラクト コードで定義されたマルチパーティ ワークフローを表すブロックチェーン アプリケーションを作成できます。You can use Azure Blockchain Workbench to create blockchain applications that represent multi-party workflows defined by configuration and smart contract code.

学習内容は次のとおりです。You'll learn how to:

  • ブロックチェーン アプリケーションの構成Configure a blockchain application
  • スマート コントラクト コード ファイルの作成Create a smart contract code file
  • Blockchain Workbench へのブロックチェーン アプリケーションの追加Add a blockchain application to Blockchain Workbench
  • ブロックチェーン アプリケーションへのメンバーの追加Add members to the blockchain application

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

ブロックチェーンの基本Hello, Blockchain!

ここでは、要求元が要求を送信し、レスポンダーが要求に対する応答を送信する基本的なアプリケーションを構築します。Let's build a basic application in which a requestor sends a request and a responder send a response to the request. たとえば、「こんにちは、調子はどうですか?」という要求に対し、「最高です!」という応答を返すことができます。For example, a request can be, "Hello, how are you?", and the response can be, "I'm great!". 要求と応答の両方が、基になるブロックチェーンに記録されます。Both the request and the response are recorded on the underlying blockchain.

アプリケーション ファイルを作成する手順に従うか、サンプルを GitHub からダウンロードできます。Follow the steps to create the application files or you can download the sample from GitHub.

構成ファイルConfiguration file

構成メタデータでは、ブロックチェーン アプリケーションの大まかなワークフローと対話モデルを定義します。Configuration metadata defines the high-level workflows and interaction model of the blockchain application. 構成メタデータは、ブロックチェーン アプリケーションのワークフローのステージと対話モデルを表します。Configuration metadata represents the workflow stages and interaction model of the blockchain application. 構成ファイルの内容の詳細については、「Azure Blockchain Workbench configuration reference (Azure Blockchain Workbench の構成リファレンス)」を参照してください。For more information about the contents of configuration files, see Azure Blockchain Workflow configuration reference.

  1. 任意のエディターで、HelloBlockchain.json という名前のファイルを作成します。In your favorite editor, create a file named HelloBlockchain.json.

  2. ブロックチェーン アプリケーションの構成を定義する次の JSON を追加します。Add the following JSON to define the configuration of the blockchain application.

    {
      "ApplicationName": "HelloBlockchain",
      "DisplayName": "Hello, Blockchain!",
      "Description": "A simple application to send request and get response",
      "ApplicationRoles": [
        {
          "Name": "Requestor",
          "Description": "A person sending a request."
        },
        {
          "Name": "Responder",
          "Description": "A person responding to a request"
        }
      ],
      "Workflows": [
        {
          "Name": "HelloBlockchain",
          "DisplayName": "Request Response",
          "Description": "A simple workflow to send a request and receive a response.",
          "Initiators": [ "Requestor" ],
          "StartState": "Request",
          "Properties": [
            {
              "Name": "State",
              "DisplayName": "State",
              "Description": "Holds the state of the contract.",
              "Type": {
                "Name": "state"
              }
            },
            {
              "Name": "Requestor",
              "DisplayName": "Requestor",
              "Description": "A person sending a request.",
              "Type": {
                "Name": "Requestor"
              }
            },
            {
              "Name": "Responder",
              "DisplayName": "Responder",
              "Description": "A person sending a response.",
              "Type": {
                "Name": "Responder"
              }
            },
            {
              "Name": "RequestMessage",
              "DisplayName": "Request Message",
              "Description": "A request message.",
              "Type": {
                "Name": "string"
              }
            },
            {
              "Name": "ResponseMessage",
              "DisplayName": "Response Message",
              "Description": "A response message.",
              "Type": {
                "Name": "string"
              }
            }
          ],
          "Constructor": {
            "Parameters": [
              {
                "Name": "message",
                "Description": "...",
                "DisplayName": "Request Message",
                "Type": {
                  "Name": "string"
                }
              }
            ]
          },
          "Functions": [
            {
              "Name": "SendRequest",
              "DisplayName": "Request",
              "Description": "...",
              "Parameters": [
                {
                  "Name": "requestMessage",
                  "Description": "...",
                  "DisplayName": "Request Message",
                  "Type": {
                    "Name": "string"
                  }
                }
              ]
            },
            {
              "Name": "SendResponse",
              "DisplayName": "Response",
              "Description": "...",
              "Parameters": [
                {
                  "Name": "responseMessage",
                  "Description": "...",
                  "DisplayName": "Response Message",
                  "Type": {
                    "Name": "string"
                  }
                }
              ]
            }
          ],
          "States": [
            {
              "Name": "Request",
              "DisplayName": "Request",
              "Description": "...",
              "PercentComplete": 50,
              "Value": 0,
              "Style": "Success",
              "Transitions": [
                {
                  "AllowedRoles": ["Responder"],
                  "AllowedInstanceRoles": [],
                  "Description": "...",
                  "Function": "SendResponse",
                  "NextStates": [ "Respond" ],
                  "DisplayName": "Send Response"
                }
              ]
            },
            {
              "Name": "Respond",
              "DisplayName": "Respond",
              "Description": "...",
              "PercentComplete": 90,
              "Value": 1,
              "Style": "Success",
              "Transitions": [
                {
                  "AllowedRoles": [],
                  "AllowedInstanceRoles": ["Requestor"],
                  "Description": "...",
                  "Function": "SendRequest",
                  "NextStates": [ "Request" ],
                  "DisplayName": "Send Request"
                }
              ]
            }
          ]
        }
      ]
    }
    
  3. HelloBlockchain.json ファイルを保存します。Save the HelloBlockchain.json file.

構成ファイルは、複数のセクションに分かれています。The configuration file has several sections. 各セクションの詳細は次のとおりです。Details about each section are as follows:

アプリケーション メタデータApplication metadata

構成ファイルの先頭には、アプリケーションの名前や説明など、アプリケーションに関する情報が含まれています。The beginning of the configuration file contains information about the application including application name and description.

アプリケーション ロールApplication roles

アプリケーション ロール セクションでは、ブロックチェーン アプリケーション内で操作または参加できるユーザー ロールを定義します。The application roles section defines the user roles who can act or participate within the blockchain application. 機能に応じて異なるロールのセットを定義します。You define a set of distinct roles based on functionality. 要求 - 応答シナリオの場合、要求を生成するエンティティである要求元の機能と、応答を生成するエンティティであるレスポンダーの機能は異なっています。In the request-response scenario, there is a distinction between the functionality of a requestor as an entity that produces requests and a responder as an entity that produces responses.

WorkflowsWorkflows

ワークフローでは、コントラクトのステージとアクションを 1 つ以上定義します。Workflows define one or more stages and actions of the contract. 要求 - 応答シナリオの場合、ワークフローの最初のステージ (状態) では、要求元 (ロール) がアクション (遷移) を実行して、要求を送信します (関数)。In the request-response scenario, the first stage (state) of the workflow is a requestor (role) takes an action (transition) to send a request (function). 次のステージ (状態) では、レスポンダー (ロール) がアクション (遷移) を実行して、応答を送信します (関数)。The next stage (state) is a responder (role) takes an action (transition) to send a response (function). アプリケーションのワークフローには、コントラクトのフローを記述するために必要なプロパティ、関数、および状態を含めることができます。An application's workflow can involve properties, functions, and states required describe the flow of a contract.

スマート コントラクト コード ファイルSmart contract code file

スマート コントラクトは、ブロックチェーン アプリケーションのビジネス ロジックを表します。Smart contracts represent the business logic of the blockchain application. 現在、Blockchain Workbench では、ブロックチェーン台帳として Ethereum をサポートしています。Currently, Blockchain Workbench supports Ethereum for the blockchain ledger. Ethereum では、スマート コントラクト用の自力執行権のあるビジネス ロジックを作成するためのプログラミング言語として Solidity を使用します。Ethereum uses Solidity as its programming language for writing self-enforcing business logic for smart contracts.

Solidity のスマート コントラクトは、オブジェクト指向言語のクラスに似ています。Smart contracts in Solidity are similar to classes in object-oriented languages. 各コントラクトには、スマート コントラクトのステージとアクションを実装するための状態と関数を含めます。Each contract contains state and functions to implement stages and actions of the smart contract.

任意のエディターで、HelloBlockchain.sol という名前のファイルを作成します。In your favorite editor, create a file called HelloBlockchain.sol.

バージョン プラグマVersion pragma

ベスト プラクティスとして、ターゲットとする Solidity のバージョンを指定します。As a best practice, indicate the version of Solidity you are targeting. バージョンを指定しておくと、将来の Solidity バージョンとの非互換性を回避するのに役立ちます。Specifying the version helps avoid incompatibilities with future Solidity versions.

HelloBlockchain.sol スマート コントラクト コード ファイルの先頭に次のバージョン プラグマを追加します。Add the following version pragma at the top of HelloBlockchain.sol smart contract code file.

pragma solidity >=0.4.25 <0.6.0;

構成とスマート コントラクト コードの関係Configuration and smart contract code relationship

Blockchain Workbench では、構成ファイルとスマート コントラクト コード ファイルを使用してブロックチェーン アプリケーションを作成します。Blockchain Workbench uses the configuration file and smart contract code file to create a blockchain application. 構成の定義内容とスマート コントラクトのコードとの間には関係があります。There is a relationship between what is defined in the configuration and the code in the smart contract. アプリケーションを作成するには、コントラクトの詳細、関数、パラメーター、および型が一致する必要があります。Contract details, functions, parameters, and types are required to match to create the application. Blockchain Workbench では、アプリケーションを作成する前にファイルを検証します。Blockchain Workbench verifies the files prior to application creation.

コントラクトContract

HelloBlockchain.sol スマート コントラクト コード ファイルに contract ヘッダーを追加します。Add the contract header to your HelloBlockchain.sol smart contract code file.

contract HelloBlockchain {

状態変数State variables

状態変数は、各コントラクト インスタンスの状態の値を格納します。State variables store values of the state for each contract instance. コントラクトの状態変数は、構成ファイルで定義されているワークフローのプロパティと一致する必要があります。The state variables in your contract must match the workflow properties defined in the configuration file.

HelloBlockchain.sol スマート コントラクト コード ファイルでコントラクトに状態変数を追加します。Add the state variables to your contract in your HelloBlockchain.sol smart contract code file.

    //Set of States
    enum StateType { Request, Respond}

    //List of properties
    StateType public  State;
    address public  Requestor;
    address public  Responder;

    string public RequestMessage;
    string public ResponseMessage;

ConstructorConstructor

コンストラクターでは、ワークフローの新しいスマート コントラクト インスタンスの入力パラメーターを定義します。The constructor defines input parameters for a new smart contract instance of a workflow. コンストラクターの必要なパラメーターは、構成ファイルでコンストラクター パラメーターとして定義します。Required parameters for the constructor are defined as constructor parameters in the configuration file. パラメーターの数、順序、型は両方のファイルで一致する必要があります。The number, order, and type of parameters must match in both files.

コンストラクター関数では、コントラクトを作成する前に実行するビジネス ロジックを記述します。In the constructor function, write any business logic you want to perform prior to creating the contract. たとえば、状態変数を開始値で初期化します。For example, initialize the state variables with starting values.

HelloBlockchain.sol スマート コントラクト コード ファイルでコントラクトにコンストラクター関数を追加します。Add the constructor function to your contract in your HelloBlockchain.sol smart contract code file.

    // constructor function
    constructor(string memory message) public
    {
        Requestor = msg.sender;
        RequestMessage = message;
        State = StateType.Request;
    }

関数Functions

関数とは、コントラクト内のビジネス ロジックの実行可能ユニットです。Functions are the executable units of business logic within a contract. 関数の必要なパラメーターは、構成ファイルで関数パラメーターとして定義します。Required parameters for the function are defined as function parameters in the configuration file. パラメーターの数、順序、型は両方のファイルで一致する必要があります。The number, order, and type of parameters must match in both files. 関数は、構成ファイルで Blockchain Workbench ワークフローの遷移に関連付けます。Functions are associated to transitions in a Blockchain Workbench workflow in the configuration file. 遷移とは、コントラクトで定められるとおりアプリケーションのワークフローの次のステージに進むために実行されるアクションです。A transition is an action performed to move to the next stage of an application's workflow as determined by the contract.

関数で実行するビジネス ロジックを記述します。Write any business logic you want to perform in the function. たとえば、状態変数の値を変更します。For example, modifying a state variable's value.

  1. HelloBlockchain.sol スマート コントラクト コード ファイルでコントラクトに次の関数を追加します。Add the following functions to your contract in your HelloBlockchain.sol smart contract code file.

        // call this function to send a request
        function SendRequest(string memory requestMessage) public
        {
            if (Requestor != msg.sender)
            {
                revert();
            }
    
            RequestMessage = requestMessage;
            State = StateType.Request;
        }
    
        // call this function to send a response
        function SendResponse(string memory responseMessage) public
        {
            Responder = msg.sender;
    
            ResponseMessage = responseMessage;
            State = StateType.Respond;
        }
    }
    
  2. HelloBlockchain.sol スマート コントラクト コード ファイルを保存します。Save your HelloBlockchain.sol smart contract code file.

Blockchain Workbench へのブロックチェーン アプリケーションの追加Add blockchain application to Blockchain Workbench

Blockchain Workbench にブロックチェーン アプリケーションを追加するには、アプリケーションを定義する構成ファイルとスマート コントラクト ファイルをアップロードします。To add a blockchain application to Blockchain Workbench, you upload the configuration and smart contract files to define the application.

  1. Web ブラウザーで、Blockchain Workbench の Web アドレスに移動します。In a web browser, navigate to the Blockchain Workbench web address. たとえば、https://{workbench URL}.azurewebsites.net/ です。Web アプリケーションは、Blockchain Workbench をデプロイすると作成されます。For example, https://{workbench URL}.azurewebsites.net/ The web application is created when you deploy Blockchain Workbench. Blockchain Workbench の Web アドレスを調べる方法については、「Blockchain Workbench Web URL (Blockchain Workbench の Web URL)」を参照してください。For information on how to find your Blockchain Workbench web address, see Blockchain Workbench Web URL
  2. Blockchain Workbench 管理者としてサインインします。Sign in as a Blockchain Workbench administrator.
  3. [アプリケーション] > [新規] の順に選択します。Select Applications > New. [新しいアプリケーション] ウィンドウが表示されます。The New application pane is displayed.
  4. [Upload the contract configuration](コントラクトの構成のアップロード) > [参照] の順に選択して、作成した HelloBlockchain.json 構成ファイルを探します。Select Upload the contract configuration > Browse to locate the HelloBlockchain.json configuration file you created. 構成ファイルは自動的に検証されます。The configuration file is automatically validated. [表示] リンクを選択すると、検証エラーが表示されます。Select the Show link to display validation errors. アプリケーションをデプロイする前に検証エラーを修正してください。Fix validation errors before you deploy the application.
  5. [Upload the contract code](コントラスト コードのアップロード) > [参照] の順に選択して、HelloBlockchain.sol スマート コントラクト コード ファイルを探します。Select Upload the contract code > Browse to locate the HelloBlockchain.sol smart contract code file. コード ファイルは自動的に検証されます。The code file is automatically validated. [表示] リンクを選択すると、検証エラーが表示されます。Select the Show link to display validation errors. アプリケーションをデプロイする前に検証エラーを修正してください。Fix validation errors before you deploy the application.
  6. [デプロイ] を選択して、構成とスマート コントラクト ファイルに基づいてブロックチェーン アプリケーションを作成します。Select Deploy to create the blockchain application based on the configuration and smart contract files.

ブロックチェーン アプリケーションのデプロイには数分かかります。Deployment of the blockchain application takes a few minutes. デプロイが完了すると、新しいアプリケーションが [アプリケーション] に表示されます。When deployment is finished, the new application is displayed in Applications.

注意

また、Azure Blockchain Workbench REST API を使用してブロックチェーン アプリケーションを作成することもできます。You can also create blockchain applications by using the Azure Blockchain Workbench REST API.

ブロックチェーン アプリケーション メンバーの追加Add blockchain application members

コントラクトを開始し、アクションを実行するアプリケーション メンバーをアプリケーションに追加します。Add application members to your application to initiate and take actions on contracts. アプリケーション メンバーを追加するには、Blockchain Workbench 管理者である必要があります。To add application members, you need to be a Blockchain Workbench administrator.

  1. [アプリケーション] > [Hello, Blockchain!] の順に選択します。Select Applications > Hello, Blockchain!.
  2. アプリケーションに関連付けられているメンバーの数がページの右上隅に表示されます。The number of members associated to the application is displayed in the upper right corner of the page. 新しいアプリケーションの場合、メンバーの数はゼロです。For a new application, the number of members will be zero.
  3. ページの右上隅にある [メンバー] リンクを選択します。Select the members link in the upper right corner of the page. アプリケーションの現在のメンバーが一覧表示されます。A current list of members for the application is displayed.
  4. メンバーシップ一覧で、 [メンバーの追加] を選択します。In the membership list, select Add members.
  5. 追加するメンバーの名前を選択するか、入力します。Select or enter the member's name you want to add. Blockchain Workbench テナントに存在する Azure AD ユーザーのみが一覧に表示されます。Only Azure AD users that exist in the Blockchain Workbench tenant are listed. ユーザーが見つからない場合は、Azure AD ユーザーを追加する必要があります。If the user is not found, you need to add Azure AD users.
  6. メンバーのロールを選択します。Select the Role for the member. 最初のメンバーのロールには [要求元] を選択します。For the first member, select Requestor as the role.
  7. [追加] を選択して、メンバーとそのロールをアプリケーションに追加します。Select Add to add the member with the associated role to the application.
  8. 別のメンバーを [レスポンダー] ロールとしてアプリケーションに追加します。Add another member to the application with the Responder role.

Blockchain Workbench でのユーザー管理の詳細については、Azure Blockchain Workbench でのユーザーの管理に関するページを参照してください。For more information about managing users in Blockchain Workbench, see managing users in Azure Blockchain Workbench

次のステップNext steps

このハウツー記事では、基本的な要求と応答のアプリケーションを作成しました。In this how-to article, you've created a basic request and response application. アプリケーションを使用する方法については、次のハウツー記事に進みます。To learn how to use the application, continue to the next how-to article.