チケット販売システム:
- 各チケット購入者を識別する。
- チケットの転売防止。
- 未認証のチケットとその複製の防止。
何故NEMを使うのでしょう?
すべてのロジックをブロックチェーンにアップする代わりに、 API によってテスト済みの機能を使用し、価値、認可、トレーサビリティ、そして認証の移転と格納を行うことができます。
残りのコードは オフチェーン のままです。これにより必要に応じてプロセスを変更できるため、固有の不変性リスクが軽減。
各参加者のアカウントを作成
- チケット販売者
- チケット購入者
チケット販売者と購入者を別のアカウントとして表現
build/generated-addresses/addresses.yaml この中からアドレスを選択して作成します。 $ $ nem2-cli profile create Introduce network type (MIJIN_TEST, MIJIN, MAIN_NET, TEST_NET): MIJIN_TEST Introduce your private key: BC9584E192E096220E8F09D716DD2BA2F45CFA910F88F7F7E2BB1DBCEC5DC505 Introduce NEM 2 Node URL. (Example: http://localhost:3000): http://localhost:3000 Insert profile name (blank means default and it could overwrite the previous profile): Profile stored correctly default-> Network: MIJIN_TEST Url: http://localhost:3000 GenerationHash: EE1EBA3D0F18D2468EAADF60791E4F54D82B2DA5859D343CAC583A256F1B9513 Address: SAQSNVT434DLRLRPSL3H3PHVPK3PLC5POJRSVOX5 PublicKey: 73E9CCFC89808AE0430B97F0F60882A4FC33606077926BC47421E2A07FEE820B PrivateKey: BC9584E192E096220E8F09D716DD2BA2F45CFA910F88F7F7E2BB1DBCEC5DC505 Profile stored correctly default-> Network: MIJIN_TEST Url: http://localhost:3000 GenerationHash: EE1EBA3D0F18D2468EAADF60791E4F54D82B2DA5859D343CAC583A256F1B9513 Address: SDQ43FZIEZOYOESCWFELONI77JX3KIK2EICEVCIV PublicKey: 42EE3B5A9A3BE553BDD8B62262D011F33E2FA63E1A21D4FEA478FDA966B24732 PrivateKey: 28711B6FD4E3EAD67967788C57BB55A4CF112A05C2F27ED175B8867281999E90
$ nem2-cli account info
Account: SAQSNV-T434DL-RLRPSL-3H3PHV-PK3PLC-5POJRS-VOX5
-------------------------------------------------------
Address: SAQSNV-T434DL-RLRPSL-3H3PHV-PK3PLC-5POJRS-VOX5
at height: 1
PublicKey: 0000000000000000000000000000000000000000000000000000000000000000
at height: 0
Importance: 3750000
at height: 1404
Mosaics
3cd772a6fec09570: 449949999.9
1e0e497445744578: 3750
$ nem2-cli account generate --network MIJIN_TEST --save --url http://localhost:3000 --profile buyer
New Account: SAYT5E-BHCQVN-T7RCRB-GHHWVP-DVEK4J-TTSNY3-HMFL
Public Key: 85F41F2A3E453FECC9D45C23842102804EAF306688F247C8D2680F0232E9FC84
Private Key: AE6961A1BD30551B960D327AC872F8BB32328AAD384A9A328C7D0D2B256A0212
Stored buyer profile
$ nem2-cli profile list
default->
Network: MIJIN_TEST
Url: http://localhost:3000
GenerationHash: EE1EBA3D0F18D2468EAADF60791E4F54D82B2DA5859D343CAC583A256F1B9513
Address: SAQSNVT434DLRLRPSL3H3PHVPK3PLC5POJRSVOX5
PublicKey: 73E9CCFC89808AE0430B97F0F60882A4FC33606077926BC47421E2A07FEE820B
PrivateKey: BC9584E192E096220E8F09D716DD2BA2F45CFA910F88F7F7E2BB1DBCEC5DC505
buyer->
Network: MIJIN_TEST
Url: http://localhost:3000
GenerationHash: EE1EBA3D0F18D2468EAADF60791E4F54D82B2DA5859D343CAC583A256F1B9513
Address: SAYT5EBHCQVNT7RCRBGHHWVPDVEK4JTTSNY3HMFL
PublicKey: 85F41F2A3E453FECC9D45C23842102804EAF306688F247C8D2680F0232E9FC84
PrivateKey: AE6961A1BD30551B960D327AC872F8BB32328AAD384A9A328C7D0D2B256A0212
上記のようになります。
ブロックチェーンの監視
新しく3つのターミナルを開く。
バリデーションエラーのある アナウンスされたトランザクションの監視、未承認、承認の3つ
$ nem2-cli monitor status
Monitoring SAQSNV-T434DL-RLRPSL-3H3PHV-PK3PLC-5POJRS-VOX5 using http://localhost:3000
connection open
$ nem2-cli monitor unconfirmed
Monitoring SAQSNV-T434DL-RLRPSL-3H3PHV-PK3PLC-5POJRS-VOX5 using http://localhost:3000
connection open
$ nem2-cli monitor confirmed
Monitoring SAQSNV-T434DL-RLRPSL-3H3PHV-PK3PLC-5POJRS-VOX5 using http://localhost:3000
connection open
チケットの作成
チケットを NEM モザイクとして表現。
プロパティ | 値 | 説明 |
---|---|---|
Divisibility | 0 | “0.5 tickets” が送信できないように、モザイクは可分しないようにします。 |
Duration | 1000 | モザイクは 1000 ブロック登録されます。 |
Amount | 1000000 | 作成するチケットの量 |
Supply mutable | True | モザイク供給量は後に変更可能です。 |
Transferable | False | モザイクはモザイク作成者だけに送り返すことしかできません。 |
$ nem2-cli transaction mosaic --amount 1000000 --supplymutable --divisibility 0 --duration 1000
Do you want an eternal mosaic? [y/n]: y
Do you want mosaic to be transferable? [y/n]: n
Transaction announced correctly
Hash: 1E22DC2B58C3ED58099254B15DAF240C1D7F725A1F6ECE94B838CA70A588575A
Signer: DD6EB023BE98FC9FC8E08B0995C1772736545F3C5F2FEACB6ADA60071A2A228E
Your mosaic id is:
Hex: 1799ee6137edb222
Uint64: [ 938324514 395964001]
トランザクション承認後に、 monitor confirmed
に返された mosaicId を確認。
AggregateTransaction: InnerTransactions: [ MosaicDefinitionTransaction: MosaicName:1799ee6137edb222 Divisibility:0 SupplyMutable:true Transferable:false Signer:SAUIIB-CWAI63-6C27OC-PUF7A5-OVYEKF-L3GDTD-3QVN Deadline:2019-08-03 MosaicSupplyChangeTransaction: MosaicId:1799ee6137edb222 Direction:IncreaseSupply Delta:1000000 Signer:SAUIIB-CWAI63-6C27OC-PUF7A5-OVYEKF-L3GDTD-3QVN Deadline:2019-08-03 ] Signer:SAUIIB-CWAI63-6C27OC-PUF7A5-OVYEKF-L3GDTD-3QVN Deadline:2019-08-03 Hash:1E22DC2B58C3ED58099254B15DAF240C1D7F725A1F6ECE94B838CA70A588575A
チケットの送信
転送トランザクション をアナウンスする販売者アカウントに company.ticket
を 1 つ送信します。
転送トランザクションを用意:
const mosaicId = process.env.MOSAIC_ID as string; const address = process.env.ADDRESS as string; const transferTransaction = TransferTransaction.create( Deadline.create(), Address.createFromRawAddress(address), [new Mosaic(new MosaicId(mosaicId), UInt64.fromUint(1))], PlainMessage.create('enjoy your ticket!'), NetworkType.MIJIN_TEST );
プロパティ | 値 | 説明 |
---|---|---|
Deadline | Default | トランザクションがブロックチェーンに取り込まれるまでの最大時間 |
Recipient | SC7A4H…2VBU | 受信のアカウントアドレス |
Mosaics | [1 7cdf3b117a3c40cc] | 送信するモザイクの配列 |
Message | enjoy your ticket | 添付されたメッセージ |
Network | MIJIN_TEST | ローカルネットワーク識別子 |
トランザクションは定義されましたが、まだネットワークへはアナウンスされていません。
ネットワークがトランザクションの信頼性を検証できるように、チケット販売者のアカウントでトランザクションに署名をします。
const privateKey = process.env.PRIVATE_KEY as string; const networkGenerationHash = process.env.NETWORK_GENERATION_HASH as string; const account = Account.createFromPrivateKey(privateKey,NetworkType.MIJIN_TEST); const signedTransaction = account.sign(transferTransaction, networkGenerationHash);
署名が終わったらトランザクションをネットワークへアナウンスすることができます。
const transactionHttp = new TransactionHttp('http://localhost:3000'); transactionHttp .announce(signedTransaction) .subscribe(x => console.log(x), err => console.error(err));
トランザクションが承認されたら、チケット購入者がチケットを受信したことを確認します。
$ nem2-cli account info --profile buyer
Comments