エーテル坊の時限爆弾が爆発するたびに、二つの問題が私たちの前に現れます。
一番目の問題は「いつブロックを出すかが遅くなります。それは我慢できません。
二つ目の問題は、「今回はどれぐらい遅れたらいいですか?」この短文の中で,私は第二の問題のために簡単で取るに足らない解答を提出した。
難度爆弾はどれぐらい遅延されますか?私の提案は「ブロック高さNでハード分岐を実行する必要があると与えられた場合、難易度爆弾をNブロックに延期する(安全性を高めるために、より少なくてもよい)。
この文章で難度を説明するつもりはないですが、どう計算すればいいですか?
次の写真は前の文章の中にすでに現れています。難易度の計算式が挙げられています。
(図中のテキスト:現在の難易度値dcは前の難易度値dpと2つの部分で加算されます。
第一部は、現在のブロックと前のブロックとの間の時間間隔に基づいて難易度を調整する。
令s=tsc-tsは、s<10の場合、上式の因子max(x)の計算結果が1である(整除法を採用すると仮定する)。
この場合、ブロックの出が速すぎると難度が高くなり、ブロック速度が低下します。
10<=s<20で因子max(x)が0になると、sが目標時間の14秒近くになると、難易度が調整されなくなることを確認します。
s>=20の場合、因子max(x)の値は-99に徐々に減少し、これによって難易度が下がり、ブロック速度が高くなります。
式の中の第二部分は前のブロックのブロック番号に基づいています。
指数で100,000を割り算することにより、100,000のブロックを周期とするステップ関数を作成しました。
第二部つまり私たちがよく言っている難度爆弾です。
第二部分がないと難度爆弾は語れません。
)この公式をよく観察して、二つの部分からなるように注意してください。
公式の第一部は、私が「調整」(またはA部分)と呼びます。
この部分は現在のブロックの難易度を調整することにより、前ブロックのブロック時間のずれを修正します。
この調整は、難易度を下げるか、または難易度を上げるかは、前のブロックを生成するのにかかる時間によって異なります。
上の図の最初の括弧はこの部分を強調表示しています。
時間をかけてその原理を調べてください。
A部分の実際の効果は設計目標と完全に一致しており、その作用はハッシュ率の変動を抑えてネットワークの運行に与える影響である。
下記のグラフから、計算式のA部分の役割が予想通りであることが分かります。
A部分が正常に動作するように設計されているからこそ、ハッシュ率の影響は排除されています。だから、時限爆弾を遅らせる方法を考える時、計算力の実際の規模を考慮する必要はないと思います。
つまり、計算力が低すぎて難度の爆弾を爆発させないとブロック時間が長くなり、計算力が高すぎて難度の爆弾の効果を緩和できないということです。
以上の分析を考慮して、私の結論は、公式のA部分はブロック時間の減速に関係がないということです。
式の第二部分(つまり爆弾を引き起こすB部分)は、すべてのトラブルを引き起こす元凶です。
これからの分析はあなたに信じさせます。この二つの部分を別々に処理することができます。
これらの分析によって、A部分はブロックに影響を与えないことが分かりやすくなりました。B部分の爆弾はブロック時間が長くなる原因になります。
それ以外にも、爆弾を取り外すのがどんなに簡単かが分かります。分岐するたびに、簡単に時期を0にリセットすればいいです。
データを生成してフォーマットしてデータを処理する第一歩はデータを取得することです。
RStudioとRというデータプログラミング言語を使って、下記のグラフを構築します。
Rの言語にあまり詳しくないなら、ぜひ調べてみてください。これは素晴らしいプログラミング言語です。
まずエーテル坊のハッシュ率を見てみます。
日平均のハッシュ率の第一のグラフは、エーテル坊の主なネットワークの日平均ハッシュ率を示しています。その中のデータはEtheScaから来ています。
データはどのように収集し、作成したのか分かりませんので、これらのデータの真実性は保証できません。
このリンクをクリックして関連データを見ることができます。
討論:上の図から明らかに分かるように、エーテル坊のハッシュ率はエーテル円の価格の起伏とともに変化している。
この図はエーテル坊の価格の動きを思い出させます。
2017年夏、ハッシュ率は一気に上昇し、2018年第1四半期にピークに達しました。
2016年10月のハッシュ率の起伏は当時の悪名高いDDos攻撃によるもので、上図中の2つのグレーの垂線は2つの硬い分岐、すなわちビザンチン硬分叉(2017年10月)とコンスタンティノープルの硬分叉(2019年1月)を表しています。
この図はしばらくここまで分析しますが、ブロックチェーンの難易度データについてはこれからも言及します。
オリジナルの難易度データの最初の難度データに基づくグラフは、PaityのRPCでgetBlockを呼び出して返したデータを示しています。
まず、以下にいくつかの標準的な統計情報を示します。エーテル难度値の集計は0,016,970,000,000,000,000,000である。最小値は0,111,700,000,000,000,000である。141,926,000,000,000,000,000である。中央値は1,649,000,000,000,000,000,000である。平均値は2,687,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000議論:上図のデータは8,920,000ブロック目に生成されます。
こんなに多くのデータ記録を処理するのは「R」言語にとって手のひらを返すほど簡単ですが、データマイニングの反復性を考慮して、私たちは100個のデータの中から1つの記録をサンプルとして抽出しました。最終的には約9,000個の記録を得て、上図に展示しています。
前の文と一致して、上の図の灰色の垂線も硬い分岐を表します。
赤い線の高さ(y(x)=difficulty at block.x)は、与えられたブロックを表すときの難易度の値です。
難易度の高い爆弾を分解する効果が分かりやすくなります。
前の文のハッシュ率に関するグラフを見てください。2016年秋のDDos攻撃では、難易度とハッシュ率の関係が見られます。
難易度の爆弾が取り外されていないと、実際に難易度の高いところから赤い糸を上に向けて伸ばし続けます。2つの硬い分岐に対しても同じ操作をしています。これはハッシュ率の変化のグラフと驚くべき一致です。
言い換えれば、ハッシュ率と難しさは緊密に結びついています。これは非常に合理的です。
これは難しい計算式の中のA部分の設計の目的ですから。
その存在は、直接に異なるハッシュ率に従って難易度値を調整するためである。
鉱山労働者の行動は難度爆弾の解体によって変わることはないかもしれません。
彼らの採掘設備は難度爆弾が取り壊される前と同じように運行し続けています。
唯一の変更は、ブロックの平均時間が短くなります。
次のグラフの分析に入る前に、注意するところがあります。
ビザンチンの前の部分をよく見てください。
難易度レベルには4、5回の一方向の垂直上昇が見られます。
実は、毎回の難易度のジャンプ幅は前回の2倍です。
これらのジャンプは私たちが言っている難度爆弾です。
グラフの他の部分に目を合わせましょう。
討論:私達は100,000個のブロックを一つのグループとして、垂線で上の図を分離します。
あなたの目を大きく開けて、よく見てください。難易度ジャンプを表す曲線は私達が作った垂線(分離線)と完全に重なり合います。
これらの境界線の間で、難易度は上昇し続けますが、上昇速度は線上の上昇幅より遥かです。
難度の爆発的な増加は2017年のハッシュ率の上昇と一致しています。
毎回の連続的な「爆発」にも注目しているかもしれません。毎回の爆発時の難易度の増分は前回の倍になります。
これらのジャンプの周期性は現在起こっていることを理解するために特に重要であることが証明されています。
本明細書の残りのグラフでは、難易度計算式の第一部分(すなわち、A部分または「調整」)と第二部分(つまり、B部分または「爆発」)を分離することを目標としています。
これからの困難な爆弾に対処する方法をよく理解してくれるように助けてくれます。
各ブロックの難易度の変化は次のグラフにあります。各連続ブロック間の難易度の変化を見てみます。
その計算式はy(x)=ブロックxの難易度値であり、ブロックx-1の難易度値(y(x)=diffublockux=diffublockux-diffuxuyiusu 1)で議論されています。上記のように、A部分の計算は、ブロック時間が14秒で維持されるように難しいレベルの近くで「徘徊」されます。
上の図は、赤い青色の表現データを使用することによって、このような「徘徊」現象を明らかにする。
図中の「成長」部分(赤色領域)は、難易度の順方向変化を表しています。すなわち、難易度が高くなり、ブロック収量が低くなり、ブロック時間が遅くなります。
図中の「収縮」部分(青色領域)は難度の負の変化を表しています。すなわち、難易度が低くなり、ブロックが加速し、生産量が増加します。
難易度は常に0の値で調整されます。
言い換えれば、この部分の計算は、ブロック時間の安定を維持するために、A部分の計算は、得られたブロック時間を一定の値、14秒に維持する。
あなたにとって、この絵は難しい爆弾を初めて見た直感的な表現かもしれません。
明らかに、毎回爆発する時の難易度は前の倍です。
しかし、この図の表現はまだはっきりしていないと思います。
たとえば、なぜ同じ模様がコンスタンティノープルの間にはっきり再現されなかったのですか?実は、ハッシュ率が大幅に向上したからです。
この部分の計算はブロックの時間を14秒に維持することができますが、システムの往復の変動はもっと激しいです。
これはまた、なぜ我々はコンスタンティノープルの分岐近くに難しい爆弾を識別することができないのかを説明しています。
他の措置がありますか?私達にもっとはっきり見えるようにしてください。もちろんですこの方法は確かに存在します。次のグラフで発表します。
この部分の最後のグラフは、ブロック全体の難易度に対する難易度変化率を示しています。
計算式はy(x)=(ブロックxの難易度値-ブロックx-1の難易度値)ブロックx-1の難易度値です。
前のグラフは難易度の元の変化を示しています。
このグラフは標準化の難しさの変化を示しています。これによって、計算力の増加による影響がなくなります。難易度計算式の2つの異なる部分、AとBの部分がより明確に見えます。
以下はブロックごとの難易度の相対的変化のグラフです。検討します。今、なぜ私が前の中で難度の爆弾を議論する時、計算力が逆になるのかを心配しているということが分かりますよね。
このグラフからは、ブロックの生産は計算力の増加(または減少)に影響されないことがよく分かります。
数式のA部分は、得られたブロックの速度と生産量を一定の状態に維持する。
時限爆弾が爆発する前に難易度(平均化と標準化後のデータから見て)はほとんど影響を受けません。
ここにはもう二つの面白いことがあります。(1)上の図の中から爆弾がグラフの一番右側から頭をもたげるのが見えます。頭をもたげる距離はビザンチンとコンスタンティノープルの距離よりずっと短いです。(2)グラフの下の縞模様は計算式の中でA部分の10を割るからです。部分的に形成されています。(3)より高いハッシュ率は「台頭」を遅らせているように見えます。例えば、ラクレットがコンスタンティノープルで分岐する前に述べたように、私たちは上記の文章にも書いたことがあります。
この絵については、まだたくさんの分かち合いがあります。いつか振り返って書き続けます。
でも、これからはもっといい方法を提供したいです。
爆弾を除去する方法はまず、タイミング爆弾を心配すると同時に計算力の変動が逆効果になるということを改めて強調したいと思います。
計算式の中のA部分はすでに計算力の増加(または減少)の影響を除外しました。
これはまさにA部分の存在意義です。
ほぼ完全に平坦な難易度の増分(当時のブロックの高さに対して)は、A部分の動作がほぼ完全であることを証明しています。
明らかに、ハッシュ率はブロック時間に影響がないことが分かりました。しかし、この点はすでに分かりました。これも難しい設計の目的です。
爆弾は上記の公式の末尾の付加価値によって定義されています。2^(floo(現在のブロック番号100,000)-2)(floo(x)は下方向の整数です。つまり、xより大きくない最大整数、例えばfloo(3.14)=3)の上の式は2を底とするべき関数です。
令p=floo(現在のブロック番号100,000)は上の式を2 pに書き換えることができます。
(あなたは疑問に思うかもしれませんが、式子の最後の-2は食べられましたか?いいえ、計算値を小さくするだけです。
)最終的には、時間pをステップ長とするステップ関数を得た。
しかし、コア開発者が爆弾を2回リセットしたことを覚えてください。間違いなくリセットという意味です。彼らは爆弾計算のサイクルの起点をリセットしました。
これはGo言語コードを使用して計算に使用される擬似ブロックを作成することによって達成される。
今のところ、偽のブロックは過去に爆弾をリセットする効果があるようです。
下図の修正後のグラフはこの時期の真実を示しています。
上の図は赤い色で本当のブロック番号を表しています。その範囲は0から8,920,000までです。
偽ブロック番号(緑で表される)は最初に赤色の実ブロック番号と一致しています。ビザンチン分岐が発生するまで、偽ブロック番号は過去の3,000,000ブロックにリセットされます。
その後、偽ブロック番号はほんとうのブロック番号と平行に成長し、コンスタンティノープルが分岐するまで、偽ブロック番号は再びリセットされる(今回は5,000,000ブロックリセットされた)。
下の表にリセット後の情報が載っていますが、何か変わったところがありますか?ブロック番号をリセットして疑似ブロック番号をキャンセルする期間は、ビザンチン4,370,000,000,0001,370,00013コンスタンティブルク7,280,0005,000,0002,280,00022イスタンブール9,069,000,0009,000,00069,000,00013,000,000,000,ビザンチンの分岐後の疑似ブロック番号は1,370,000で、この値を100,000を除いたら13,000になります。
つまり、ハッシュ率調整後、各ブロックの難易度は追加的に213%増加した。
コンスタンティノープルに行くと、疑似ブロック番号は2,280,000にリセットされます。つまり、時期は22になります。これは各ブロックの難易度が222を追加したことを意味します。
これはなぜ私たちが予想していたより早く爆弾が爆発したのかと思います。
私たちは前回リセットした時、リターンが足りなかったからです。
今回のリセット時限爆弾の推奨値は69,000個のブロックをキャンセルし、時期を0にします。
これこそリセットが必要な正確な数量です。
どのようにタイミングをうまくリセットするのか、難しい爆弾はタイミングをリセットしなければならないたびに、非常に簡単な方法で正確な値にリセットされます。
この方法によって、ほとんどの難度爆弾と関連する問題はなくなります。
難易度爆弾をリセットする際に後退するブロック数を、フォークのFOKuBLOCKUMBER(分岐ブロック番号)と同じに設定するだけでいいです。
このようにすれば、疑似ブロック番号は0に近く設定され、時期も0になります。
ブロック生産速度の減速は主に時限爆弾の存在によるものであるため、上記のように「台頭」効果は完全に予測できるようになる。
B部分の計算は疑似ブロック番号に完全に依存している。
コンスタンティノープルで分岐した時にこのようにすれば、時限爆弾はそんなに速く爆発しません。
ブロック番号をリセットして、疑似ブロック番号をキャンセルした時、ビザンチン4,370,0004,370,000コンスタンティブルク7,280,280,000イスタンブール9,069,00009,069,00000結論を読みました。ありがとうございます。
この文章が難度の爆弾に興味を持つ人の注意を引くことができるといいです。
多くの人が難易度計算問題に困惑しているのを見ました。
私から見れば、人々の考えは複雑すぎます。
以下は、本明細書の簡単なまとめについてです。(1)B部分の指数特性はブロックの生産速度に関係しています。(2)計算式のA部分はブロックの出に有害な影響を及ぼさない代わりに、実際には積極的な役割を果たしています。(3)時期やダミーブロックを0にリセットすることは二つの利点があります。(a)タイミング爆弾を最大限遅らせることができます。(b)爆弾の再現を非常に予測できるようにする。
この文章に対して何か意見があれば、教えてください。
私はすでにみんなにこれらの内容を理解してもらいました。
(完)(文内では多くのハイパーリンクが提供されていますので、原文を読んでEthFasサイトで取得してください。)