Wait a moment...

【NEM技術勉強会】7.2.3 解決明細書 7.2.4 レシートハッシュ【カタパルト白書】

nem125xem (5)
451
0
2020-03-07 11:00:11
【NEM技術勉強会】7.2.3 解決明細書 7.2.4 レシートハッシュ【カタパルト白書】

そろそろ【カタパルト白書】という呼び名を【シンボル白書】にしたほうがいいのかどうか、悩み始めた目指せ北海道です。今日はネームスペース(エイリアス)の解析に関するレシートステートメント=明細書についてです。XEMBookさんのコメントによると、モザイクのネームスペースはコロコロ変わることがあるので、レシートがとても役に立つのだとか。ブロックチェーンの骨格が台帳とするなら、さしずめレシートは個々の領収書みたいなものなのですかね。


7.2.3 解決明細書

 

解決明細書は、エイリアス(ネームスペース)の解決結果を調査するのに非常に便利に使える。たとえひとつのブロックの中でエイリアスの参照先が変更されたとしても、クライアントがそれを解決できるようになる。理論的には、未解決のエイリアスが、1ブロックの中に2つ存在したとしても、それぞれの使いみちが違っていれば、きちんと異なる値(モザイクまたはアドレス)に行き着くことができる。そのために、明細書は未解決の(モザイクやアドレス)値と、それを解析したひとつまたはそれ以上の解決結果を含んでいる。

 

明細書には2種類あり、アドレスとモザイクを参照する2タイプのエイリアスに対応する。図15は、モザイクの解決明細書のバイナリーレイアウトであるが、アドレスに関する明細書のレイアウトもこれに準拠している。違いは、解決後の値が、モザイクでIDは8バイト(0dc67fbe1cad29e3など)で、アドレスなら25バイト(40文字のアドレスにエンコードされる前のバイナリーアドレス)であることくらいである(原稿ではUnresolvedもResolvedもアドレスなら25バイトであるように書かれていますが、Unresolvedがエイリアスidを指すなら8バイトで固定ではないかと思います)。

 

図15:モザイク解決明細書のレイアウト

(a) モザイク解決明細のバイナリーレイアウト (b) 解決結果のバイナリーレイアウト

MosaicId Unresolvedがネームスペースidで、MosaicId Resolvedがモザイクidを指すと思われます

 

解決明細書のデータにも、桁揃えはない。なぜなら、ブロックの生成中には書き込まれるのみであり、読み出しは行われないからである。トランザクション明細同様に、桁揃えすることにサーバー負荷軽減のメリットはない。解決明細書のハッシュは、すべての明細データからサイズフィールド(他のデータから取得可能)を取り除いたもので生成される。

 

この解決明細書は、エイリアス解決の操作があったときだけ生成されるという点が重要である。つまり、エイリアスが登録されたり、変更されたブロックでは、そのブロック内で「使用」されなければ、エイリアス解決はなされないため明細書も生成されない。一方、エイリアスが使用されるために解決されれば、それがなされた時のブロックに解決明細書が含まれることになる。

 

7.2.4 レシートハッシュ

 

ブロックのレシートハッシュを計算するために、ブロックに含まれるすべての明細書が集められる。そしてすべての明細書のハッシュからマークル木が構成されるが、その順番は以下のようになる。

 

  1. レシートソース順でソートされたトランザクション明細のハッシュ
  2. 解析前のアドレス順でソートされたアドレス解決明細のハッシュ
  3. 解析前のモザイクid順でソートされたモザイク解決明細のハッシュ

 

ネットワークの全体設定にnetwork:enableVerifiableReceiptsがセットされていれば、このようにして生成されたマークル木のルートハッシュが、ブロックのレシートハッシュになる。クライアントは、ある明細(のハッシュ)が、特定のブロック内で生成されたかどうかを確かめるためには、マークル木を解析すればよい。


シンボルでモザイクidやアドレスとネームスペースを紐付ける機能ができて便利になったと思っていましたが、ここでもレシートが大活躍なんですね。あるモザイクにネームスペースを紐づけたら、そのブロックにトランザクションが書き込まれるだけと思っていました。でも実際は、ネームスペースを使ってモザイクを送金するとエイリアス解決がされ、レシートが発行されて、結果が明細書としてブロックに書き込まれるようです。ネームスペースやモザイクには使用期限があり、モザイクに紐付けられたネームスペースも1つとは限らないため、あるネームスペースがどのモザイクを参照しているのかが、わかりにくくなりました。もしレシートと明細書がなければ、モザイクが送られてくるたびに、過去のブロックをさかのぼってのエイリアス解析をノードに依頼しないとならくなるでしょう。ノードはそれを見越してレシートという形で保存しているとも言えますね。レシートの詳細は開発者文書に詳しく記載されています。また、Planethoukiさんがレシートハッシュを実際に求めてみたQiita記事を書いてくれていてすごく参考になりました。ShizuiNetにとっても大切なネームスペースですので、きちんと理解したいのですが、なかなかにややこしい。あと、いろいろ調べてVがversion, Tがtypeじゃないかということも分かってきました。

 

目指せ北海道

この記事を書いた人
趣味はバイクでツーリングしながら、ブログを書いたり、動画配信したりすること。暗号通貨はまだまだ初心者。 nemlogに何を書こうかいろいろ考えたのですが、まずはバイクで動画配信をするための工夫や楽しさ、充実感などを伝えられたらと思ってはじめました。ラズパイをバイクに積載して、ボタン一つでYoutubeライブ配信できるシステムを作りました。それを発展させて、XEMの価格を常時監視、取引するボットも作って活用してます。子供の頃から技術書を読むのが好きなので、NEMの白書を訳したりもしています。 本業は再生医療研究者です。歯の神経の中にいる「歯髄(しずい)細胞」を活用して新しい医療を開拓するために、しずい細胞プロジェクトを推進中。細胞の流通(トレーサビリティー)管理にNEMを使っています。管理システムの名称は「ShizuiNet」。NEM.ioのAlexさん、Jeffさんと名刺交換&握手できたのが心の宝物。