State Hash その2追記


はじめに

State Hash その2 要素が1つだけの場合のsubCacheMerkleRootsの計算の追記です。

RocksDBにはまだあった

元の記事でFastNoSQLのスクショをあげていました。

このとき、DBにはdefaultしか表示されてませんでしたが、まだありました。

height_groupingとpatricia_treeというDBがありました。

これらについては、実はslackの方で教えてもらっていたのですが、GUI上には出てこなかったのでスルーしてました。

表示する

Load databaseをクリック。

赤くなってるやつを右クリックしてLoad content of databaseをクリック。

赤くなってないやつを右クリックしてset defaultをクリック。

赤いやつを右クリックしてLoad content of databaseをクリック。

みてみる

height_grouping

height_groupingには0レコード。これは確か有限期間のモザイクを指定していた場合にレコードができていたような気がします。

Jaguar0625さんに教えてもらった言葉を引用します。

"height_grouping" (key: height, value: list-of-mosaic-ids-expiring-at-height): this is secondary index (can be computed from 1)

patricia_tree

Jaguar0625さんに教えてもらった言葉を引用します。

"patricia_tree" (key: hashed-mosaic-id, value: hashed-mosaic-entry) OR (key: hashed-tree-node, value: tree-node): the tree nodes composing the patricia tree (can be computed from 1)

patricia_treeは2レコード。

rootレコードにはsubCacheMerkleRootが入っていました。

key: root
value: 5d8eead5907130d297c322698f3d201a78d629cac87487a0f4f890c1277b250c

もう一つのレコードはleaf node。

key: 5d8eead5907130d297c322698f3d201a78d629cac87487a0f4f890c1277b250c
value: ff4014979a1134c38c8a5c7c7e3669ce7aa98c2d46225f77645a1fc6e7a30ff5c5dab6bcae57d970e08bc94701a8333f081b633554fe5282ab2d841d17f9b93e9b2d

このPatricia Treeはただひとつのleaf nodeをもっているので、そのkeyがsubCacheMerkleRootと一致しています。

valueを分解します。

ff      // ffならleaf node, 00ならbranch node
40      // 後に続くnibbleの数 0x40 = 64nibble = 32byte
14979a1134c38c8a5c7c7e3669ce7aa98c2d46225f77645a1fc6e7a30ff5c5da    // hashed mosaic id
b6bcae57d970e08bc94701a8333f081b633554fe5282ab2d841d17f9b93e9b2d    // hashed mosaic entry

このような情報が入っていました。

このleaf nodeのhashは以下の計算式で求められます。これは、keyと一致します。

sha3(20 + hashed mosaic id + hashed mosaic entry)
  (= 5d8eead5907130d297c322698f3d201a78d629cac87487a0f4f890c1277b250c)

おわりに

頭が混乱してきました。

シリーズ

State Hash その1 subCacheMerkleRootsからstateHashの計算

State Hash その2 要素が1つだけの場合のsubCacheMerkleRootsの計算

State Hash その2追記

State Hash その3 要素が2つの場合のPatricia Tree