Ethereumでの乱数ジェネレーターのプログラミング

画像







Ethereumでスマートコントラクトを開発する場合、マイナーはブロックハッシュを選択することで結果に影響を与える可能性があるため、ランダム性のソースとしてブロックハッシュに依存することは通常信頼できないと考えられます( プライベート情報とランダム性を参照してください、コントラクトで乱数を取得するには?







特定の数のブロックハッシュ(またはブロックハッシュから生成されたいくつかの数)でブロックハッシュを推測する必要があるゲームで、採掘者が勝つ可能性を高める機会はどれほど素晴らしいですか?







0から9の範囲の乱数を推測する確率は1/10です







簡単にするために、ブロックハッシュも0〜9の数値であるとします。







つまり、ブロックのハッシュに応じて0〜9の数値を取得する、つまり、ブロックのハッシュを0〜9の数値にするとします。

たとえば、次のように:







function blockHashToNumberFrom0to9(uint blockNumber) public view returns (uint){ uint random_number = uint(block.blockhash(blockNumber))%10; return random_number; }
      
      





私は、ネットワーク内の5番目のブロックごとにマイニングされるような処理能力を持つマイナーであるとします。 私のチャンスは、次のブロック2/10を採掘することです。

たとえば、最大規模のプールの1つ( https://etherscan.io/stat/miner?range=1&blocktype=blocksを参照)は、プール内のすべての参加者が共通のロト率に同意し、結果に影響を与えようとする方法を見つけました。 この場合、もちろん、採掘収入の損失の可能性を無視する必要があります。







賭けをしたとしましょう。結果に影響を与えたいと思います。







ランダムハッシュでブロックを単純にマイニングする場合、これは結果に影響しませんが、最初の可能なブロックを計算し、それを拒否し、次のブロックまで正しいブロックを見つけることができると仮定します。 ネットワークの他の部分がこのブロック番号のブロック(1つ)をマイニングするよりも速く、異なるハッシュを持つ2つの有効なブロックを見つける可能性はありますか?







連続して2つのブロックを見つける可能性:2/10 * 2/10 = 4/100







2番目のブロックが必要なブロックになる可能性はどのくらいですか?







次のように推論します。







オッズは、同じ数が1/10 * 1/10 = 1/100になることです。







別の数字が1-1 / 100 = 99/100になる可能性







可能性としては、この番号が99/100に必要な番号になります。9= 11/100







これらのイベントが一致する可能性があります。つまり、ネットワークの残りが1つを見つける前に2つのブロックを連続して見つけ、2番目のブロックが必要なブロックになります。4/ 100 * 11/100 = 44/10000







合計で、自分でブロックを選択すると、ゲームでのチャンスが44/10000増えます。







0.1 + 0.0044 = 0.1044







つまり、10%ではなく勝つ確率は10.44%になります







可能性としては、ネットワークの他の部分が見つけるよりも早く3番目の有効なブロックを見つけ、このブロックが必要なブロックになるなどです。 同じ方法で計算されます:分子が単位により多くなり、分母がより多く10になる分数によって確率が表示されるオッズを追加します。 これは合計で確率を1/10000以上増加させることはありません。つまり、小数点以下2桁に丸めると、同じ数になります:〜10.44%

ネットワーク内の10ブロックごとのプレイヤーマイナーの場合:〜10.11%







しかし、「ネットワークの残りの部分がこのブロック番号のブロック(1つ)をマイニングするよりも速く、異なるハッシュを持つ2つの有効なブロックを見つける可能性がありますか?2/10 * 2/10 = 4/100」という事実から、通常、このマイナーによって2つのブロックが連続して検出されます。 これがネットワークの他の部分が見つけるよりも速く行われる可能性はさらに低くなります。







したがって、結果が1つのブロックのハッシュではなく、特定の数の連続したブロックのハッシュによって設定されている場合(たとえば、36の2桁の数字が72の連続したブロックのハッシュから取得される場合、「36 of 5」ロットを実装します)、結果に影響を与えるマイナーの能力はさらに低くなります。 したがって、複数の連続したブロックのハッシュをランダム性のソースとして使用する場合、個々のマイナーが結果に影響を与える可能性は非常に低いため、現金(ETH)の賞金の引出しについて話している場合でも、ほとんどの場合無視されます。







そのような推論がいかに正しいかは、コミュニティの意見にとって興味深いでしょう。







UPD:

私には重要なポイントのようです。








All Articles