Skip to content

Latest commit

 

History

History
233 lines (166 loc) · 11.5 KB

mosaic.md

File metadata and controls

233 lines (166 loc) · 11.5 KB

モザイクとは

モザイクとはnemネットワーク上で定義される通貨であり、それを定義する機能があります。

基軸モザイクであるcat.currencyもモザイクで、定義上は同等な存在となります。

モザイクには作成時に設定できる定義があります。

  • 有効ブロック数(未定義の場合は無期限)
  • 可分性(少数の最小値)
  • 転送許可
  • 供給量変更許可
  • Levy変更許可

モザイクは229bd68b3145ee8fというようなネットワーク上で一意なIDを持ちます。

モザイクの用途

モザイクは単なる通貨としてでなく、意味付け次第でいろいろな使い方ができます。

  • モザイクは独自のサービス用通貨
  • 保有によるフラグ制御や値の表現
  • 発行者と受信者間だけでやり取りされる権利の表現

モザイクをどう使うかはそのサービス開発・提供者の手腕が問われます。

モザイクの作成

create_mosaic.jsを実行してください。

このコードはモザイクが有効であるブロック数を引数にとります。

指定しない場合はduration: undefinedとなり無期限のモザイクとなります。

なお、モザイクの定義にはその定義内容にかかわらず500 cat:currencyが必要です。

$ node mosaic/create_mosaic.js 10000
initiator:    SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
Endpoint:     http://localhost:3000/account/SAFPLKSQJTYGTWKNJ6B66LJV3VRBMUSBQH7Y6ZH4
Mosaic Nonce: 106,164,82,29
Mosaic Hex:   6ffb0f4308e810f6
Blocks:       10000
Endpoint:     http://localhost:3000/mosaic/6ffb0f4308e810f6

connection open
[Transaction announced]
Endpoint: http://localhost:3000/transaction/9F27D1F3ACF54FAAE5A14929109E0BA7F1C08D6128720E58CEEE7E3793AAB03A
Hash:     9F27D1F3ACF54FAAE5A14929109E0BA7F1C08D6128720E58CEEE7E3793AAB03A
Signer:   A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0

[UNCONFIRMED] SAFPLK...
{"transaction":{"type":16717,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063214264,23],"signature":"57454E59580739CD46FB79036DE865713895BBF1578C7030F8456AB997063C0C8F63BBA11B59E9D9F67065B0AF76BAB4F83F79A99D28EA045D4BDAD03AE6EE0D","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","nonce":491955306,"mosaicId":{"id":[149426422,1878724419]},"properties":[{"id":0,"value":[3,0]},{"id":1,"value":[0,0]},{"id":2,"value":[10000,0]}]}}

[CONFIRMED] SAFPLK...
{"transaction":{"type":16717,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063214264,23],"signature":"57454E59580739CD46FB79036DE865713895BBF1578C7030F8456AB997063C0C8F63BBA11B59E9D9F67065B0AF76BAB4F83F79A99D28EA045D4BDAD03AE6EE0D","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","nonce":491955306,"mosaicId":{"id":[149426422,1878724419]},"properties":[{"id":0,"value":[3,0]},{"id":1,"value":[0,0]},{"id":2,"value":[10000,0]}]}}

承認されたらnem2-cliで確認してみましょう。

$ nem2-cli mosaic info -h 6ffb0f4308e810f6 --profile alice
Mosaic:	Hex:	6ffb0f4308e810f6
Uint64:		[ 149426422, 1878724419 ]

divisibility:	0
transferable:	true
supply mutable:	true
block height:	788
duration:	10000
owner:		SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
supply:		0

この時点ではまだ供給量が設定されていません。

定義だけが存在していてモザイクは発行されていない状態なのでsupply 0と表示されています。

次にmutate_mosaic_supply.jsを実行してください。

このコードは第一引数にモザイクIDを、第二引数に供給量を、第三引数にadd(追加)またはremove(削除)を指定します。

モザイクIDには直前に作成したモザイクの16進数文字列を指定してください。

$ node mosaic/mutate_mosaic_supply.js 6ffb0f4308e810f6 10000 add
initiator:  SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
Endpoint:   http://localhost:3000/account/SAFPLKSQJTYGTWKNJ6B66LJV3VRBMUSBQH7Y6ZH4
Mosaic Hex: 6ffb0f4308e810f6
Supply:     10000
Delta:      add
Endpoint:   http://localhost:3000/mosaic/6ffb0f4308e810f6

connection open
[Transaction announced]
Endpoint: http://localhost:3000/transaction/DA19F9479B3B7623005D6C2D9EC1A460DB5285FA039B9DDE4B5D7DDFA806F9E3
Hash:     DA19F9479B3B7623005D6C2D9EC1A460DB5285FA039B9DDE4B5D7DDFA806F9E3
Signer:   A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0

[UNCONFIRMED] SAFPLK...
{"transaction":{"type":16973,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063606945,23],"signature":"E9410E6BDC6B193C1986879ABF1D9ECE50E50F3397AE66087E09BB97B82102A27B87F88D4419D0A3A409EC0B3302A7CA33D800D2253DA22BC09051EF5F280C00","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","mosaicId":{"id":[149426422,1878724419]},"direction":1,"delta":[10000,0]}}

[CONFIRMED] SAFPLK...
{"transaction":{"type":16973,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063606945,23],"signature":"E9410E6BDC6B193C1986879ABF1D9ECE50E50F3397AE66087E09BB97B82102A27B87F88D4419D0A3A409EC0B3302A7CA33D800D2253DA22BC09051EF5F280C00","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","mosaicId":{"id":[149426422,1878724419]},"direction":1,"delta":[10000,0]}}

承認されたらもう一度nem2-cliで確認します。

$ nem2-cli mosaic info -h 6ffb0f4308e810f6 --profile alice
Mosaic:	Hex:	6ffb0f4308e810f6
Uint64:		[ 149426422, 1878724419 ]

divisibility:	0
transferable:	true
supply mutable:	true
block height:	788
duration:	10000
owner:		SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
supply:		10000

今度はsupplyに指定した量が表示され、aliceが持っているモザイクとしても現れました。

$ nem2-cli account info  --profile alice
Account:	SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
-------------------------------------------------------

Address:	SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
at height:	298

PublicKey:	A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0
at height:	382

Importance:	0
at height:	0

Mosaics
3f859f237d36c3ae:	9058
6ffb0f4308e810f6:	10000

これでモザイクの定義が完了しました。

このモザイクは基軸モザイクのcat.currencyと同様に、他のアカウントへ転送することができます。

コード解説

const definitionTx = MosaicDefinitionTransaction.create(
  Deadline.create(),
  nonce,
  mosId,
  MosaicProperties.create({
    duration: blocks ? UInt64.fromUint(blocks) : undefined,
    divisibility: 0,
    transferable: true,
    supplyMutable: true,
    levyMutable: false
  }),
  NetworkType.MIJIN_TEST
);

モザイク定義はMosaicDefinitionTransactionオブジェクトを作成します。

MosaicProperties.createによってモザイクの性質プロパティを設定しています。

durationを設定しない、またはundefinedを渡すと、無期限のモザイクとして設定することができます。

続いて、供給量の指定のコードです。

const supplyType = delta === 'remove'
  ? MosaicSupplyType.Decrease
  : MosaicSupplyType.Increase

const supplyTx = MosaicSupplyChangeTransaction.create(
  Deadline.create(),
  mosId,
  supplyType,
  UInt64.fromUint(absSupply),
  NetworkType.MIJIN_TEST
);

モザイクID、追加または削除の固定値、供給量を指定してMosaicSupplyChangeTransactionオブジェクトを作成します。

これらのトランザクションを発信して、承認されれば独自モザイクを利用する準備が整います。

モザイク定義と供給量をアトミックに定義する

前述のネームスペースのように、アグリゲートトランザクションでトランザクションをまとめることで、定義と供給量の設定を一括で行うことができます。

create_mosaic_with_supply.jsを実行してください。

このコードは第一引数に供給量を絶対値で指定してください。

第二引数にはモザイク有効期間を引数にとりますが、指定しない場合はduration: undefinedとなり無期限のモザイクとなります。

$ node mosaic/create_mosaic_with_supply.js 1000
initiator: SAFPLK-SQJTYG-TWKNJ6-B66LJV-3VRBMU-SBQH7Y-6ZH4
Endpoint:  http://localhost:3000/account/SAFPLKSQJTYGTWKNJ6B66LJV3VRBMUSBQH7Y6ZH4
Nonce:     202,218,131,213
MosaicHex: 29c7073f2019365f
Blocks:    Infinity
Supply:    1000
Endpoint:  http://localhost:3000/mosaic/29c7073f2019365f

connection open
[Transaction announced]
Endpoint: http://localhost:3000/transaction/1B3EE2AFC0236FE8A64A03AECBEC07253A82A29C8578C0657B60162323D39AC7
Hash:     1B3EE2AFC0236FE8A64A03AECBEC07253A82A29C8578C0657B60162323D39AC7
Signer:   A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0

[UNCONFIRMED] SAFPLK...
{"transaction":{"type":16705,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","transactions":[{"transaction":{"type":16717,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","nonce":3582188234,"mosaicId":{"id":[538523231,700909375]},"properties":[{"id":0,"value":[3,0]},{"id":1,"value":[0,0]}]}},{"transaction":{"type":16973,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","mosaicId":{"id":[538523231,700909375]},"direction":1,"delta":[1000,0]}}],"cosignatures":[]}}

[CONFIRMED] SAFPLK...
{"transaction":{"type":16705,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","transactions":[{"transaction":{"type":16717,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","nonce":3582188234,"mosaicId":{"id":[538523231,700909375]},"properties":[{"id":0,"value":[3,0]},{"id":1,"value":[0,0]}]}},{"transaction":{"type":16973,"networkType":144,"version":36865,"maxFee":[0,0],"deadline":[4063915490,23],"signature":"1A29846388E6D90E1166B8853FD7F7BC00D3DE3000C60E88D498D46A18AF7D5DB34E707968098C354012CC2A4B8919441FE60046C13486BFAD8FCDF87D1C100B","signer":"A29FE98485D2841C7C68A2B521156EE5D0170FF6AFF2ED3BF4E908500EC083B0","mosaicId":{"id":[538523231,700909375]},"direction":1,"delta":[1000,0]}}],"cosignatures":[]}}

前述の作業をアグリゲートトランザクションを用いて一括で行っているだけなので詳細は省略します。

作成されたモザイクの定義と供給量の存在を確認してみてください。