Counterpartyの勉強のために、Counterpartyのトランザクションを読んでみます。
今回の題材はSpells of Genesis関連のトランザクションの中から選択した、独自トークンの発行を行うIssuanceというトランザクションタイプです。
エンコード方法は何パターンかあるようなのですが、今回は以下のmultisigを使ったものを選択しました。
https://www.blockscan.com/txInfo/11603601
- データの準備
OP_1
02a8d23b56ec9dfad3ffd52f83ac86bef27fc6b11775fec2f682a7d16e31c0272e
03a5998b49075640bd89ff6f0e849b693d99aafbf1145eea9bb2e1f2753fa4e3da
02076aee3ebdd93955b70ee616de7867aa451a990ad53e0eaad0893626f231721d
OP_3
OP_CHECKMULTISIG
2行目から4行目に公開鍵の様なものが3つありますが、この内、最初の2つはダミーで、Counterpartyで利用するデータが格納されています。
2つのダミー公開鍵を、それぞれ前後1byteずつ削って結合させます。
a8d23b56ec9dfad3ffd52f83ac86bef27fc6b11775fec2f682a7d16e31c027a5998b49075640bd89ff6f0e849b693d99aafbf1145eea9bb2e1f2753fa4e3
これは暗号化されているので、複合化するためにvinの最初のtxidを探してきます。
24b10dd846507572b21e15a78c990cf7f993f13ec8623ca738cf9fe1f12ddf99
見つけてきたtxidをパスワードとして、ARC4でデコードします。
これがCounterparty用の生データです。
3d434e5452505254590000001400000000039ff05d00000006fc23ac0001000000000000000000265370656c6c73206f662047656e657369732f4d6f6f6e
- 不要なデータ?
3d
- CNTRPRTY
434e545250525459
- トランザクションタイプ
00000014
0x14=20はISSUANCEを指します。
- Asset_ID
00000000039ff05d
10進数に直すと60813405で、これが1ならXCPで、1ではない場合は以下のように変換します。
まず、AからZまでが入った配列を用意し、ここからindexが0ならA、1ならBという具合にアルファベットを取り出します。
IDを26で割った余りがindex、余りを切り捨てた整数値が次の計算用データとなり、次の計算用データが0になるまで繰り返します。
60813405 / 26 = 2338977 余り 3 D
2338977 / 26 = 89960 余り 17 R
89960 / 26 = 3460 余り 0 A
3460 / 26 = 133 余り 2 C
133 / 26 = 5 余り 3 D
5 / 26 = 0 余り 5 F
出来上がったDRACDFを反転したものがAsset名になります。
FDCARD
00000006fc23ac00
10進数に直すと30000000000で単位がsatoshiなので、300FDCARDになります。
01000000000000000000265370656c6c73206f662047656e657369732f4d6f6f6e
内、頭の11byteは文字数などが入っているようなので、それ以降を文字列に変換します。
Spells of Genesis/Moon
なお、文字数が足りないときはvoutを2つ持たせて、追加のDescriptionデータに使えるようです。
OP_1 038dd23b56ec9dfad3ffb24ea3dbe7cc965fa3419508b88eb2c75bf2c231c127a6 02a5998b49075640bdafac1f6be8f71a1df6ccdbb671308fe8db92dd3850cb8d4f 02076aee3ebdd93955b70ee616de7867aa451a990ad53e0eaad0893626f231721d OP_3 OP_CHECKMULTISIG
18434e5452505254596761206361726420666f7220464c444300000000000000000000000000000000000000000000000000000000000000000000000000
2つ目のデータを同じ様にデコードし、本来トランザクションタイプが入る10byte以降の部分を文字列に変換すると以下になります。
ga card for FLDC
一つ目のDescriptionと連結するとDescriptionが完成します。
Spells of Genesis/Moonga card for FLDC
以下ブロックエクスプローラのAsset Infoを確認すると、Descriptionが正しくデコードされていることが分かります。
https://www.blockscan.com/assetInfo/FDCARD
これで基本的なCounterpartyのトランザクションデータの作りが分かりました。
multisig以外のエンコード方法や、LOCKのトランザクションについては、また別の機会に検証してみたいと思います。
出来上がったDRACDFを反転したものがAsset名になります。
- Quantity
00000006fc23ac00
10進数に直すと30000000000で単位がsatoshiなので、300FDCARDになります。
- Description
01000000000000000000265370656c6c73206f662047656e657369732f4d6f6f6e
内、頭の11byteは文字数などが入っているようなので、それ以降を文字列に変換します。
Spells of Genesis/Moon
なお、文字数が足りないときはvoutを2つ持たせて、追加のDescriptionデータに使えるようです。
OP_1 038dd23b56ec9dfad3ffb24ea3dbe7cc965fa3419508b88eb2c75bf2c231c127a6 02a5998b49075640bdafac1f6be8f71a1df6ccdbb671308fe8db92dd3850cb8d4f 02076aee3ebdd93955b70ee616de7867aa451a990ad53e0eaad0893626f231721d OP_3 OP_CHECKMULTISIG
18434e5452505254596761206361726420666f7220464c444300000000000000000000000000000000000000000000000000000000000000000000000000
2つ目のデータを同じ様にデコードし、本来トランザクションタイプが入る10byte以降の部分を文字列に変換すると以下になります。
ga card for FLDC
一つ目のDescriptionと連結するとDescriptionが完成します。
Spells of Genesis/Moonga card for FLDC
以下ブロックエクスプローラのAsset Infoを確認すると、Descriptionが正しくデコードされていることが分かります。
https://www.blockscan.com/assetInfo/FDCARD
これで基本的なCounterpartyのトランザクションデータの作りが分かりました。
multisig以外のエンコード方法や、LOCKのトランザクションについては、また別の機会に検証してみたいと思います。
0 件のコメント:
コメントを投稿