【和訳】Hyperledger Composer Playground チュートリアル

# はじめに

和訳第一弾。

[Hyperledger Composer Playground Tutorial](https://hyperledger.github.io/composer/latest/tutorials/playground-tutorial) の和訳です。
ガバガバ和訳でも英語読むよりマシという方は御覧ください。
関連チュートリアルに関しても（たぶん）上げます。
当方 Hyperledger Composer について学び始めたばかりであるため、指摘等大歓迎です。

---

本チュートリアルでは、以下の項目について段階を踏んで説明します。

- ビジネスネットワークの設定
- 資産、参加者、トランザクションの定義
- 参加者、資産の作成によるネットワークのテスト
- ある参加者から別の参加者への資産所有権の変更するトランザクションの送信によるネットワークのテスト

ここでは、オンラインの Playground の利用を想定しています。

# Step 1. Playground を開く

[Playground](https://composer-playground.mybluemix.net/) を開きます（既に開発環境を構築している場合はローカルバージョンの利用も可能です）。

**My Business Networks** ページでは、接続可能なビジネスネットワークの要約と接続時に使用するIDが表示されています。ネットワークの構築に時間がかかる場合があります。

# Step 2. ビジネスネットワークの新規作成

ビジネスネットワークを一から構築します。ネットワークには設定項目として、名前と、オプションで説明があります。新規ネットワークのベースとして既に存在するテンプレートか、自身でインポートしたテンプレートの利用を選択可能です。

1. **Deploy a new business network** をクリックします。
2. 名前を **tutorial-network** に設定します。
3. 任意で説明欄を入力します。
4. ベースとなるネットワークを選択する必要があります。今回は一から構築を行うので、 **empty-business-network** を選択します。
5. 準備完了です。Deployをクリックします。

**NOTE:** ローカルの Playground を使用し、実際の Fabric に接続する場合はページ下部の追加情報を参照してください。

# Step 3. ビジネスネットワークへの接続

Step 2. でビジネスネットワークを作成、デプロイしたので、 tutorial-network のための admin ネットワークカードがウォレットに表示されています。ウォレットにはデプロイされている複数のネットワークに接続するためのネットワークカードを登録することができます。

外部のブロックチェーンに接続する場合、ネットワークカードはネットワークに接続するために必要となるすべてのものを表現しています。ネットワークカードは接続詳細、認証のための資料、メタデータを含みます。

ネットワークに接続するには、ネットワークカード下部の **Connect now** をクリックしてください。

# Step 4. modelファイルの追加

Connect now をクリックすると **Define** タブが表示されています。このタブは、 **Test** タブを利用してテストを行う前に、ビジネスネットワーク定義を構成するファイルを作成、編集する場所です。

empty business network テンプレートを選択したので、提供されたテンプレートファイルを修正する必要があります。最初に、 model ファイルの修正を行います。 model ファイルには資産、参加者、トランザクション、ビジネスネットワーク上のイベントが定義されています。

モデリング言語の詳細は [こちら](https://hyperledger.github.io/composer/latest/reference/cto_language.html)

1. modelファイルをクリックし表示します。
1. modelファイルを以下の内容に変更します。

    ```model.cto
    /**
     * My commodity trading network
     */
    namespace org.example.mynetwork
    asset Commodity identified by tradingSymbol {
        o String tradingSymbol
        o String description
        o String mainExchange
        o Double quantity
        --> Trader owner
    }
    participant Trader identified by tradeId {
        o String tradeId
        o String firstName
        o String lastName
    }
    transaction Trade {
        --> Commodity commodity
        --> Trader newOwner
    }
    ```

このモデルには、資産タイプである **Commodity** と、参加者タイプである **Trader** と、商品の所有者を変更するためのトランザクションタイプである **Trade** が定義されています。

# Step 5. トランザクション処理を行うscriptファイルの追加

モデルを定義したので、トランザクションロジックを定義可能となりました。Composer はビジネスネットワークのロジックをJavaScriptの関数を用いて表現します。この関数はトランザクションが処理のために送信された時に自動で実行されます。

トランザクション処理関数記述方法の詳細は [こちら](https://hyperledger.github.io/composer/latest/reference/js_scripts.html)

1. **Add a file...** をクリックします。
2. **Script file** を選択し、**Add** をクリックします。
3. script ファイルを以下の内容に変更します。

    ```script.js
    /**
     * Track the trade of a commodity from one trader to another
     * @param {org.example.mynetwork.Trade} trade - the trade to be processed
     * @transaction
     */
    async function tradeCommodity(trade) {
        trade.commodity.owner = trade.newOwner;
        let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
        await assetRegistry.update(trade.commodity);
    }
    ```

この関数は、 **Trade** トランザクション（trade）に渡された **newOwner** プロパティに基づいて商品の **owner** を変更します。その後、変更された商品を **Commodity** インスタンスを利用して資産レジストリに戻します。

# Step 6. アクセス制御

Access control ファイルはビジネスネットワークのアクセス制御の定義を行います。今回のネットワークはシンプルなので、アクセス制御はデフォルトのまま変更の必要はありません。デフォルトでは現在の参加者である **networkAdmin** に対して、ネットワークへの完全なアクセスとシステムレベルの操作を許可しています。

複数の model や script ファイルを持つことができますが、どのビジネスネットワークも access control ファイルは一つしか持つことができません。

access control ファイルの詳細は [こちら](https://hyperledger.github.io/composer/latest/reference/acl_language.html)

# Step 7. 更新したビジネスネットワークのデプロイ

model 、script 、access control ファイルが揃ったので、ビジネスネットワークのデプロイとテストを行います。

**Deploy changes** をクリックし、ネットワークのアップデートを行ってください。

**NOTE:** ローカルの Playground を使用し、実際の Fabric に接続する場合はページ下部の追加情報を参照してください。

# Step 8. ビジネスネットワーク定義のテスト

参加者（今回のケースでは Trader ）、資産（ Commodity ）をいくつか作成し、Trade トランザクションを用いて商品の所有者変更を行って、ビジネスネットワークのテストを行う必要があります。

**Test** タブをクリックして開始します。

# Step 9. 参加者の作成

まずはじめに、二人の参加者をビジネスネットワークへ追加します。

1. **Trader** タブを選択し、右上の **Create New Participant** をクリックします。
2. Trader の構造体が表示されます。わかりやすいデータが必要なため、以下の内容に書き換えます。

    ```json:Trader1
    {
      "$class": "org.example.mynetwork.Trader",
      "tradeId": "TRADER1",
      "firstName": "Jenny",
      "lastName": "Jones"
    }
    ```

3. **Create New** をクリックし、参加者を作成します。
4. 新規 Trader が作成され、表示されました。Trade トランザクションのテストには、もうひとり参加者が必要です。以下のデータを利用して作成してください。

    ```json:Trader2
    {
      "$class": "org.example.mynetwork.Trader",
      "tradeId": "TRADER2",
      "firstName": "Amy",
      "lastName": "Williams"
    }
    ```

次のステップへ進む前に両方の Trader が存在していることを確認してください。

# Step 10. 資産の作成

Trader を二人作成しました。 Trade のために、資産を作成します。作成方法は参加者作成と似通っています。以下で作成する商品には、 tradeId が **TRADER1** の Trader がその商品を所有していることを示す owner プロパティが存在しています。

1. ページ左側の ASSET 配下にある **Commodity** を選択し、 **Create New Asset** をクリックします。
2. 以下の内容に書き換えます。

    ```json:Commodity
    {
      "$class": "org.example.mynetwork.Commodity",
      "tradingSymbol": "ABC",
      "description": "Test commodity",
      "mainExchange": "Euronext",
      "quantity": 72.297,
      "owner": "resource:org.example.mynetwork.Trader#TRADER1"
    }
    ```

3. 作成後、Commodityタブへ追加されているか確認してください。

# Step 11. 参加者間で資産を転送する

二人の参加者とひとつの資産を作成したことにより、Trade トランザクションのテストが可能になりました。

トランザクションは、 Hyperledger Composer ビジネスネットワークにおけるすべての変更の基盤となります。このチュートリアルの後に自分自身で試したい場合は、別のビジネスネットワークを My Business Network ページから作成し、より高度なビジネスネットワークテンプレートを使用してください。

Trade トランザクションのテスト手順は以下のとおりです。

1. 左側の **Submit Transaction** をクリックします。
2. Transaction Type を Trade に設定します。
3. トランザクションデータを以下の内容に書き換えます。

    ```json:Trade
    {
      "$class": "org.example.mynetwork.Trade",
      "commodity": "resource:org.example.mynetwork.Commodity#ABC",
      "newOwner": "resource:org.example.mynetwork.Trader#TRADER2"
    }
    ```

4. **Submit** をクリックします。
5. ASSET タブを開き、資産の所有者が TRADER1 から TRADER2 に変更されていることを確認してください。 owner が **resource:org.example.mynetwork.Trader#TRADER2** となっているはずです。
6. ビジネスネットワークにおけるトランザクションの全履歴を見るために、左側の **All Transactions** をクリックしてください。送信されたトランザクションのリストが表示されます。参加者や資産の作成のように UI を用いて実行した特定のアクションは、ビジネスネットワークのトランザクションとして定義されていなくてもトランザクションとして実行されていることがわかります。これらのトランザクションは「システムトランザクション」と呼ばれ、すべてのビジネスネットワークに共通のものであり、 Hyperledger Composer ランタイムに定義されています。

# ビジネスネットワークからのログアウト

1. **My Business Network** ページへ移動します。
2. 右上に **admin** と表示されています。これは、現在の ID を一覧表示しています。ログアウトするためには、 **admin** をクリックし、ドロップダウンメニューから **My Business Networks** を選択します。

# 実際の Fabric へのビジネスネットワークの配置

ローカルで Playground を使用すると、ブラウザのローカルストレージで機能する「 Web Browser 」への接続を利用することも、通常「 hlfv1 」と呼ばれるグループ内の実際の Fabric への接続を利用することもできます。

実際の Fabric へ接続している場合は、 PeerAdmin ロールと ChannelAdmin ロールを持つカードを既に作成しているはずです。これは、多くの場合 PeerAdmin と呼ばれます。このカードは Composer を用いてネットワークのデプロイと更新を行うために利用されます。

実際の Fabric へネットワークをデプロイする際に、 **Deploy** ボタンを押す前に **Network Administrator** の詳細を入力する必要があります。

**CREDENTIALS FOR NETWORK ADMINISTRATOR** 項目があります。シンプルな開発用 Fabric と多くのテストネットワークでは、以下の ID とシークレットを指定できます。

- 登録 ID ：admin
- 登録シークレット：adminpw

ID とシークレットを指定したら、 **Deploy** ボタンを押し、本チュートリアルの Step 3. から再開してください。

カスタム、または商用 Fabric を利用している場合は、 Fabric の管理者にネットワーク管理者詳細について問い合わせてください。

# 実際の Fabric へ接続した際のビジネスネットワークのアップデート

実際の Fabric を使用し、 **Deploy Changes** をクリックした際に、ドロップダウンリストからインストールカードとアップデートカードを指定するように求めるポップアップダイアログが表示されます。通常は、初期ネットワークデプロイの際に使用したものと同じ PeerAdmin カードを指定します。不明な場合は、 Fabric 管理者に連絡してください。

カードを選択し、 **Upgrade** ボタンをクリックします。実際の Fabric では完了までに数分かかる場合があります。

チュートリアルの Step 8. から再開してください。

# What's next?

完全な開発環境を用いた [Developer Tutorial](https://hyperledger.github.io/composer/latest/tutorials/developer-tutorial.html) をおすすめします（ IDE での開発、 REST API の生成、スケルトン Web アプリケーションの生成を含む）。まだ開発環境がない場合は、上記チュートリアル実行前に [開発環境のインストール](https://hyperledger.github.io/composer/latest/installing/development-tools.html) が必要となります。