MainNetの地域乗数のテスト

世界地図

チームは、MainNetの前に地域乗数の最終テストを実行して、期待どおりに動作することを確認しています。

2週間前に、地理的なビンの更新を発表しました。これは、地域の乗数のテストに反映されると発表しました。その時が来ました。先週のデータを使用して、すべての地域の新しい乗数を計算しました。

これらの乗数を使用して、さまざまなリージョンでノードを実行するための遅延係数を相殺する必要があります。  

これは不完全なシステムです。ノードが1つしかない中東のような地域は、一般的なパフォーマンスを適切に説明していない結果を読み取っています。北アフリカのような他の地域にはノードがまったくないため、その値を推測する必要があります。

しかし、さらに大きな課題は、正しい乗数がリージョンのノード数の関数であるということです。ネットワークを設計するとき、リージョン内のすべてのノードがチーム内のノードの中で最も高い乗数を経験するように作成しました。これは、ノードオペレーターがラウンドに参加しないように動機付けられるケースが決してないようにするためです。その結果、特定のリージョンの正しい乗数は、そのリージョン内のノード数の関数になります。

これは、ネットワークの拡大と縮小に応じて、乗数を定期的に更新する必要があることを意味します。以下に示すように、乗数の計算は比較的規則的であるため、ある時点でチェーン上に統合し、時代ごとに自動的に計算できる可能性があります。 

このソリューションでは、乗数の処理方法も調整する必要があります。元々、チーム内のすべてのノードは同じ乗数を継承していました。これにより、非常に奇妙な乗数が発生したため、すべてのノードが独自の乗数の平均であり、チーム内で最高になるようにアルゴリズムを調整しています。

乗数の計算

乗数を計算するときは、生の数値、つまり乗数を除くすべての時代に各ノードが獲得したポイント数から始めました。私たちはすべてが公平であることを望んでおり、各ノードランナーが他のすべてのノードとチームを組むように動機付けられることを望んでいます。したがって、私たちの目標は、完全に参加することで、ネットワーク内の完全な「ポイント」を確実に獲得できるようにすることです。

続行する前に、いくつかの定義:

  1. Mᵢ–ビン内のすべてのノードの乗数 .
  2. Aᵢ–ビンの調整されたポイント値 .
  3. Pᵢ–ビンから少なくとも1つのノードが存在する確率  チームに含まれ、任意のビンのノード< 含まれていません。


計算は、実際のネットワークデータによってシードされます。先週、ノードごとの時代のcMix操作で獲得した平均ポイントを取得しました。次に、これを「正規化」して、Aᵢと呼ばれるビンの調整済みポイント値を生成しました。

このシステムの目標は、将来のAsがすべて1になるような乗数を作成することです。

ビンは、Aによって最小から最大の順に並べられます。ポイントを計算する場合、すべてのノードの乗数は、それらの乗数の平均であり、チーム内で最も高くなります(iも最も低くなります)。 

平均が最も低い領域であるBin0が他のすべての領域を上書きするため、Bin0の乗数は次のように計算できます。

私たちの目標は、すべてのチームのすべてのノードの乗数と調整も平均して最大1になるようにすることです。 Mₙはn番目の順序のビンの乗数であり、Aₙはn番目の順序のビンの正規化された平均であるためです。これは簡単に解決できます。

ビン1の次の乗数は、ビン1のノードがビン0のノード(M0ビン乗数を使用)で選択される確率と、ビン1のノードがビンのノードとチーム化されない確率として計算できます。 0(M1チーム乗数を使用):

ビン2についても同じ計算を行うことができます。

これらの方程式は、どのビンでも解くことができ、乗数で定義できます。ビン2の場合、乗数を計算するための変換は次のとおりです。

これは、任意のチーム乗数Binnの合計を使用して一般化できます。

再帰的定義に加えて、確率を正しくするのは難しいです。 5ノードのチームの各選択は、ネットワーク内のノードの合計からの置換なしのランダムな抽選で構成されます。この種の選択は、超幾何分布によって記述されます。ほとんどの場合、この分布は、バイナリ機能を備えたオブジェクト(この場合はノード)をカウントする単純なケースに適用されます(たとえば、BFTコンセンサスレルム:ビザンチン/正直ノード)。ただし、cMixでは、ノードを12のビンに分割しました。これにより、問題が多次元のビンに変わります。つまり、多変量超幾何分布を計算する必要があります。幸いなことに、乗数の仕組みの性質上、たとえばビン2からノードを選択する場合、チーム内の他のノードがより高い乗数を持つビンであるかどうかは関係ありません。これは、計算する必要のあるすべての確率が類似していることを意味します。つまり、すべてのビンのノードがなく、ビンiのノードが少なくとも1つあるチームが必要です。 <i. We include a spreadsheet in our resources below which show how to do this in detail.

エラー

このソリューションには、A値の不一致の大部分が、選択確率に影響を与えるラウンドにかかる時間の変動が原因であるという事実のために、いくつかのエラーがあります。シミュレーションで説明されているこのソリューションは、3%以内で正しいです。将来の作業では、ポイントの変動の原因を分解して、それらをより適切にモデル化し、このエラーを減らすことができます。

資力:

ビンのリスト:

 https://docs.google.com/spreadsheets/d/1z9kvEW7XXcHYxUSPpXkoA1Cv9trIbY4VkPzaWzJEN_I/edit#gid=2056956216

スケジューリングアルゴリズム: https://git.xx.network/xx_network/primitives/-/blob/dev/region/ordering.go

乗数の計算:

https://docs.google.com/spreadsheets/d/1d2HcuCVorKDkUppBam-dk-_PJ8ukPp8ja18DyE_VYJQ/edit?usp=sharing

計算を確認するためのシミュレーション用のPythonスクリプト:

https://git.xx.network/-/snippets/3

人気