はじめてのアプリケーションを作成

このガイドでは NEM 開発サイクルを紹介します。NEM ビルドイン機能 を組み合わせたあと、あなたは初めてのトランザクションをブロックチェーンへ送ることになります。

背景

チケット二次市場は、再販市場としても知られており、最初の販売者からチケットを購入した後に個人間で行われるチケット交換です。最初の販売者は、イベントウェブサイト、オンラインチケット販売プラットフォーム、イベントの入口にあるショップまたは売店であったりします。

最初の販売者ではない人からチケットを購入しても、必ずしもそのチケットの料金をさらに支払うという意味ではありません。これは最初の販売者が、問題の解決のために何もできない、偽造もしくは複製されたチケットを購入してしまう、被害者となる機会です。

私達は何を解決したいのでしょう?

../_images/getting-started.png

認証モデル

チケット販売者はシステムのセットアップを望んでいます:

  1. 各チケット購入者を識別する。
  2. チケットの転売防止。
  3. 未認証のチケットとその複製の防止。

何故 NEM を使うのでしょう?

ブロックチェーンテクノロジーはこのようなケースに適用できます:

  • 様々な参加者が関係します。
  • 参加者はお互いに信頼する必要があります。
  • 不変のイベントの集合を追跡し続ける必要があります。

NEM は フレキシブルなブロックチェーン テクノロジーです。すべてのアプリケーションロジックをブロックチェーンにアップロードする代わりに、 API 呼び出し によってテスト済みの機能を使用して、価値、認可、トレーサビリティ、そして認証の移転と格納を行うことができます。

残りのコードは オフチェーン のままです。これにより必要に応じてプロセスを変更できるため、固有の不変性リスクが軽減されます。

それではコードを見ていきましょう

1. 各参加者のアカウントを作成

まず、私達が解決したい問題の渦中にいるアクタを認識します:

  • チケット販売者
  • チケット購入者

チケット販売者と購入者を分けた アカウント として表現することにしました。各アカウントは一意であり、アドレスによって識別されます。アカウントは、適切な秘密鍵によって変更することができる、ブロックチェーン上の金庫にアクセスします。

テストネット cat.currency を保有したアカウントの読み込みは済ませましたか?まだ終わっていないのであれば 入門セクション に戻ってください。この作成したアカウントはチケット販売者を表します。

  1. 以下のコマンドを実行した後、このような行がスクリーンに表示されているはずです:
$> nem2-cli account info


New Account: SCVG35-ZSPMYP-L2POZQ-JGSVEG-RYOJ3V-BNIU3U-N2E6

[...]

Mosaics

0dc67fbe1cad29e3: 1000000
  1. アカウントは 1,000,000 cat.currency を保有しています。もし mosaics の次の行が空の場合は、 前のガイド に従ってください。
  2. チケット販売者を識別するための2つ目のアカウントを作成します。
$> nem2-cli account generate --network MIJIN_TEST --save --url http://localhost:3000 --profile buyer

2. ブロックチェーンの監視

アカウントはトランザクションを通じてブロックチェーンの状態を変更します。アカウントが正しく構成されているトランザクションをアナウンスすると、サーバーは OK のレスポンスを返します。

OK のレスポンスを受信することは、トランザクションが正当であることを意味するわけではなく、まだブロックには含まれていないことを意味します。トランザクションをアナウンスする前に監視を始めておくのがよいでしょう。

新しく3つのターミナルを開いてください:

  1. 最初のターミナルはバリデーションエラーのある アナウンスされたトランザクションの監視 をします。
$> nem2-cli monitor status
  1. 未承認 の監視はトランザクションがネットワークに到着したことを確認できますが、まだブロックには含まれてません。
$> nem2-cli monitor unconfirmed
  1. トランザクションが含まれると confirmed の下に表示されるでしょう:。
$> nem2-cli monitor confirmed

3. チケットの作成

チケットを NEM モザイクとして表現しています。 モザイク はブロックチェーン上で、モノ、チケット、クーポン、株式そして暗号通貨のような、あらゆる資産を表現します。それらは作成時に定義される変更可能なプロパティを持ちます。例えば 転送可能プロパティを false に設定します。これは、チケットの転売を防止するために、チケット購入者がモザイクの作成者だけに送り返すことしかできないことを意味します。

  1. ticket という名前のモザイクを作成します。
$> nem2-cli transaction mosaic --amount 1000000 --supplymutable --divisibility 0 --duration 1000
プロパティ 説明
Divisibility 0 “0.5 tickets” が送信できないように、モザイクは可分できないようにします。
Duration 1000 モザイクは 1000 ブロック登録されます。
Amount 1000000 作成するチケットの量
Supply mutable True モザイク供給量は後に変更可能です。
Transferable False モザイクはモザイク作成者だけに送り返すことしかできません。
  1. トランザクションが承認された後に、 monitor confirm タブに返された mosaicId をコピーします。
$> ...  MosaicId:7cdf3b117a3c40cc ...

4. チケットの送信

NEM の中で最も一般的なアクションの1つである、 転送トランザクション をアナウンスする販売者アカウントに company.ticket を1つ送信します。

  1. 転送トランザクションを用意します。次の属性は転送トランザクションを形作ります:
プロパティ 説明
Deadline Default トランザクションがブロックチェーンに取り込まれるまでの最大時間
Recipient SC7A4H-7CYCSH-4CP4XI-ZS4G2G-CDZ7JP-PR5FRG-2VBU 受信のアカウントアドレス
Mosaics 1 [7cdf3b117a3c40cc] (ticket) 送信するモザイクの配列
Message enjoy your ticket 添付されたメッセージ
Network MIJIN_TEST ローカルネットワーク識別子
import {
    Account, Address, Deadline, UInt64, NetworkType, PlainMessage, TransferTransaction, Mosaic, MosaicId,
    TransactionHttp
} from 'nem2-sdk';

const transferTransaction = TransferTransaction.create(
    Deadline.create(),
    Address.createFromRawAddress('SC7A4H-7CYCSH-4CP4XI-ZS4G2G-CDZ7JP-PR5FRG-2VBU'),
    [new Mosaic(new MosaicId('7cdf3b117a3c40cc'), UInt64.fromUint(1))], // Replace with your mosaicId
    PlainMessage.create('enjoy your ticket'),
    NetworkType.MIJIN_TEST
);

トランザクションは定義されましたが、まだネットワークへはアナウンスされていません。

  1. ネットワークがトランザクションの信頼性を検証できるように、まずチケット販売者のアカウントでトランザクションに署名をします。
const privateKey = process.env.PRIVATE_KEY;

const account = Account.createFromPrivateKey(privateKey, NetworkType.MIJIN_TEST);

const signedTransaction = account.sign(transferTransaction);
  1. 署名が終わったら、トランザクションをネットワークへアナウンスします。
const transactionHttp = new TransactionHttp('http://localhost:3000');

transactionHttp.announce(signedTransaction).subscribe(
    x => console.log(x),
    err => console.log(err)
);
$> nem2-cli transaction transfer --recipient SD5DT3-CH4BLA-BL5HIM-EKP2TA-PUKF4N-Y3L5HR-IR54 --mosaics 7cdf3b117a3c40cc::1 --message enjoy_your_ticket
  1. トランザクションが承認されたら、チケット購入者がチケットを受信したことを確認します。
$> nem2-cli account info --profile buyer

次は?

提案されたユースケースは解決できたでしょうか?

✅ 各チケット購入者の識別: 各購入者のNEMアカウントの作成

✅ チケットの転売防止: 転送不可能なモザイクの作成

✅ 未認証なチケットとその複製: 一意なモザイクの作成

NEM ビルドイン機能 の学習を続けたり、 自己ペーストレーニング で練習する。