Gift history
Please access after login.


Wait a moment...

【NEM技術勉強会】8.4 ブロックジェネレーションハッシュ 8.5 ブロックのHit値とTarget値【Symbol白書】

970
0
2020-03-15 09:58:14
0.00 mXYM
(0)

前回の続きです。0.9.6.3では、8.4として独立した章になりました。

今回は、NIS1の時も非常に難儀したハーベストアカウント選択基準についての詳細です。NIS1で、インポータンスとハーベスト確率の関係については、Proof of Fortune;つまりくじ引きのようなものというお話をしました。Symbolにおいても、その印象は変わりませんが、前よりも詳しめに説明されているので、分かる範囲で解説していきます。


8.4 ブロックジェネレーションハッシュ

 

ブロックのジェネレーションハッシュ(generation hash, gh)は、前のブロックのジェネレーションハッシュと、ブロックに書き込まれたVRF証明から、新しいハッシュを生成する:

 

 

ジェネレーションハッシュを、VRFによってランダムで予測不能な値にすることができる。他のすべての情報を使ったとしても、次のハーベストアカウントを予測できないようにするのである。ブロックがネットワークに(承認のために)送り込まれるまで、ジェネレーションハッシュはハーベストアカウント以外にとって不明な値になる。そうすることで、最良の(最高のブロックスコアを持つ)ブロックがネットワークに投入されるまでは、次のジェネレーションハッシュをそのジェネレーションハッシュから予測することはできないことになり、つまり、前のブロックが確定する時点まで次のブロックのための計算はできないことになる(あたりまえのようですが、これまではある程度の予測はできる仕様でした)。

 

VRF公開鍵は、ブロックがハーベストされるまでに登録されていなければならない。そうでなければ、攻撃者によって、VRFのスキャンがおこなわれ、ブロックハーベスト時に最大のhit値を生み出す余裕を与えてしまうからである。その結果、攻撃者は複数のブロックを用意してhit値を上げようとする試みも不可能になる(target値ではなくhit値を上げることで、ブロックの難度を上げる事によって、他のアカウントがハーベストできなくする事で、秘密裏にフォークさせたチェーンを伸ばす時間を稼ぐなどの攻撃が考えられます)。

 

8.5 ブロックのhit値とtarget値

そのアカウントが、ある時刻(t)にハーベストする権利を持つかどうかの判定には、以下の2つの数値の比較をする。

  • hit: ブロックごとの目標値
  • target: ハーベストアカウントごとの力量(攻撃力?)。前のブロック生成時刻から経過した時間とともに増大する。

hit < targetとなった時に、そのアカウントはブロックを生成することができるようになる。target値は、時間に比例して増加するため、すべてのアカウントが高いhit値を持つジェネレーションハッシュを作ってしまってなかなかハーベストに到達しない場合でも、いつかはブロックは生成される。

 

委任ハーベストの場合は、委任先のアカウントの代わりに、委任元(オリジナル)アカウントのインポータンス値が用いられる。

 

targetの計算方法は以下のとおりである(脚注;丸め誤差の問題を避けるため、この計算には浮動小数点演算ではなく256-bit整数演算を用いる):

ブロック時間の急激な変化を緩和するには、設定によって以下の計算を追加することもできる(脚注;丸め誤差を避けるため、この計算には浮動小数点ではなく128-bitの固定小数点演算を用いる。上位112bitは整数部分を表し、下位16bitが小数点以下を表す。log2(e)は、14426950408/10000000000(約1.44くらいです)で近似する。power値が一定値を下回って(smoothingが)大きな負数になってしまう場合は、smoothingは0に設定する)。;

一方、hitは254|ln(gh/2256)|を64bitで近似した数値である。ここでghは、(アカウントごとに異なる)新しいジェネレーションハッシュである(脚注;この計算でも、丸め誤差を避けるために、浮動小数点演算ではなく128-bitの整数演算を用いる。この場合、log2(e)は14426950408889634/10000000000000000で近似する)。

 

まずは、上記のhit値を計算する式を変形してみよう:

 

gh/2256は常に1より小さいため(ghはハッシュ値なので32バイトの整数=256-bitの整数値になる。よって常に2256よりは小さくなる)、対数を取ると必ず負の値になる。また、log2(gh/2256)はlog2(gh) - log2(2256)と書くことができる。

 

絶対値計算をはずして(常に負なのでひっくり返す)、scale値を定義して書き換えると:

さらに簡略化して:

実際の計算は、新しいジェネレーションハッシュ(gh)の上位32-bit(最初の4バイトが00000000でない場合)を使っている。特殊なケースについては、別に定める。

 

また、hit値は指数関数的な分布をしている。よって、インポータンスを多くのアカウントに分散しても、新しいブロック生成にかかる時間には影響がない。


ごちゃごちゃしていますが、total chain importance (i) = 1、block difficulty  (b) = 1014、smoothing = 1で試しに計算してみたところ、

 

target = 1.66tx * 1015 (x = アカウントのインポータンス)

 

くらいになるようです。前のブロック生成後10秒(t = 10)で、自分のインポータンスがx = 0.00001の時、targetは1.66 * 1011って感じで計算できます。

 

さて、hitについてもなぜ254をかけているのかとか、log2(e)は何のためかなどについての説明は特にありませんので、実際に適当な数値を設定して計算してみましょう。scale = 0.693、254 = 1.8 * 1016と近似して、hit式は、

 

hit = 1.24(256-log2(gh)) * 1016

 

となります。y = 256 - log2(x)のグラフを描いてみると:

 

横軸(x)はghを10進数に変換した値で最大値は2256 -1(約1.15 * 1077)になります。ハッシュ値はランダムに生成されると仮定すると、その9割は1.15 * 1076以上となり、その場合yは大体3.5未満になることが分かります。つまりhit値の9割は1.24 * 3.5 *1016 = 4.34 * 1016未満になるということです。

 

仮にインポータンス1を持つひとつのアカウントがハーベストをおこなうとすると、

 

target = 1.66t * 1015

 

ですので、26〜27秒以内には、hit < targetを満たして、ハーベストできると思われます。インポータンスを多数のアカウントに分散しても、このブロック生成時間は変化しないので、計算時間を含めて15秒で新しいブロック生成をするには、NIS1に比べてちょっとだけdifficultyを下げる必要があるのかなという感じですね。

 

目指せ北海道

Writer
歯の神経の中にいる「歯髄(しずい)細胞」を再生医療に活用するための研究をしています。実用化に何度もチャレンジし失敗する中で、再生医療に足りないものは細胞のトレーサビリティだと気づきました。そして、ブロックチェーン技術に興味を持ち、細胞の流通や製造管理のためにmijin-catapult と Symbolを使ったハイブリッドシステム「ShizuiNet」を設計しました。現在、その実用化検証と運用をするための大学発ベンチャー起業を目指しています。Symbolメインネットノード(symbol.shizuilab.com)を運用中。

Login required to post comment
Loading...
https://symbol-sakura-16.next-web-technology.com:3001,https://symbol.harvest-monitor.com:3001,https://hideyoshi-node.net:3001,https://harvest-01.symbol.farm:3001,https://criptian-xym-node.net:3001,https://35665.xym.stir-hosyu.com:3001,https://yuna.keshet.finance:3001,https://keshet01-symbol-paradise.com:3001,https://keshet03-symbol-paradise.com:3001,https://keshet04-symbol-paradise.com:3001,https://cryptocat-xym-node.com:3001,https://misaki-xym.com:3001,https://ik1-305-12844.vs.sakura.ne.jp:3001,https://17107.xym.stir-hosyu.com:3001,https://23639.xym.stir-hosyu.com:3001,https://sym-main-01.opening-line.jp:3001,https://sym-main-02.opening-line.jp:3001,https://sym-main-03.opening-line.jp:3001,https://sym-main-04.opening-line.jp:3001,https://sym-main-05.opening-line.jp:3001,https://sym-main-06.opening-line.jp:3001,https://sym-main-07.opening-line.jp:3001,https://sym-main-08.opening-line.jp:3001,https://sym-main-09.opening-line.jp:3001,https://sym-main-10.opening-line.jp:3001,https://symbol-node-01.kokichi.tokyo:3001,https://50038.xym.stir-hosyu.com:3001,https://27423.xym.stir-hosyu.com:3001,https://angel.vistiel-arch.jp:3001,https://xym.stakeme.tokyo:3001,https://00-symbol-node.yagiyoshi.com:3001,
6BED913FA20223F8,051FAEC15105C808,73019335A785A3AE,5289A9B0DBB7EB25,6B245EAF1302E444,2C4A4893229DD0A9,