P2P プロトコルがビットコイン マイニングの集中化を解決しようとする方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

P2Pプロトコルがビットコインマイニングの集中化を解決する方法

ビットコインマイニングプールは集中化に依存していますが、P2Poolおよびその他のプロトコルは、サードパーティへの信頼の必要性を減らすことを目指しています。

前の記事、私はビットコインマイニングにおける分散化と集中化の性質と、それをほとんど定性的な意味で概念化する方法について書きました。 この記事では、プールの調整からエネルギー生産に至るまで、マイニングスタック全体を分析し、マイニングスタックのさまざまなレイヤー間の関係と、分散化を最大化する可能性を理解しました。エネルギー生産に向かうほど、その層に意味のあるレベルの地方分権化をもたらすことはより困難で資本集約的になります。

この記事では、マイニングプールとマイナーの調整のトピックをさらに深く掘り下げて、ブロックチェーンに追加するブロックをマイニングするために協力する独立所有のマイニング操作を容易にするつもりです。

マイニングプールの作成

ボタンをクリックするだけで、ラップトップのCPUでブロックをすべて自分で確実にマイニングできるようになった時代から、マイニングは長い道のりを歩んできました。 当時は実質的な設備投資や専門知識を必要としないアマチュアの趣味の努力でしたが、今日では大規模な設備投資が必要な数十億ドルの専門市場です。 まったく違う球技です。

鉱業の性質におけるこの変化の自然な結果のXNUMXつは、非常に早い段階でのマイニングプールの作成でした。 マイニングが効果的にラップトップを隅で実行したままにしていたとき、ブロックを見つけるタイミングの変動と予測不可能性はそれほど大きな問題ではありませんでした。最終的には、ラップトップを実行し続けるための電力コストは実際には経済的ではありませんでした。重要性。

物事がGPUとASICに移行すると、前もって材料投資コストが発生し、それらを動作させ続けるためにはるかに大きな電力コストが発生しました。 ブロックを見つけるときのその予測不可能性は、設備投資の見返りを取り、利益を上げて操業しようとする鉱夫にとって、はるかに大きな問題になりました。 ここでマイニングプールが登場します。

これにより、マイナーは同じブロックで一緒に機能する有効なブロックヘッダーを見つけるために協力し、コインベースの報酬をマイニングプールに送信します。マイニングプールは、見つけるために行った作業量に応じて、参加しているすべてのマイナーに比例して分配します。ブロック。 これは、マイニングプールに「シェア」を投入することで証明されます。 ネットワークの難易度の目標を満たしていないが、マイナーが嘘をついておらず、実際にハードウェアを実行していて有効なブロックを見つけようとしていることを証明するのに十分な高さのブロック。

マイニングプールの集中化

一元化されたマイニングプールは、個々の鉱夫にとって大きな意味を持ちます。 これらは、ブロックに含めるトランザクションを選択する(または、さらに重要なことに、除外する)プロセスの集中化のポイントです。 これにより、各マイニングプールのオペレーターは、ブロックチェーンで処理することを選択したトランザクションを完全に制御できます。マイニングハードウェアの実際の所有者は、基準に同意しない場合にプールを離れる場合を除いて、それについて発言することはできません。オペレーターは設定を選択します。

彼らはまた、それらの鉱夫がプールからそれらを撤回することを選択するまで、個々の鉱夫のビットコインを保管し、プールオペレーターをカストディアンとして機能させ、プールを使用する鉱夫を詐欺するか、政府から個々の鉱夫の資金を差し押さえるか、KYCを適用するよう圧力をかけられる可能性がありますそれらへの要件。

では、この問題に対処するためにどのような解決策がありますか?

P2Pool:元の分散型マイニングプール

P2プール 元の分散型マイニングプールプロトコルです。 これはピアツーピアプロトコルであり、マイナーは、難易度の目標を満たす有効なブロックを見つけるために協力してマイニング報酬を分割するために、それらの間で調整します。 この調整は、プロトコル設計が「シェアチェーン」と呼ぶものを使用して実現されます。

P2Poolのマイナーは、ネットワークの難易度の目標を満たさないブロックを取得し、プールが機能している単一のブロックのすべてのコピーで構成される独自のブロックチェーンを効果的にマイニングします。 集中型モデルでマイニングしていることを証明するためにブロックがプールに変わる、より小さな難易度の目標を達成すると、そのブロックを残りのマイナーにブロードキャストします。 P2Poolの「共有の難易度」は、鉱夫がおよそXNUMX秒にXNUMX回共有を見つけるように目標とされていました。

読者は、個々の鉱夫への支払いがどのように機能するのか疑問に思っていると思います。 コインベーストランザクションは、P2Pool内の個々のマイナーごとに出力が作成され、コインベーストランザクションから直接資金を分割するように構成されています。 P2Poolのマイナーは、自分自身とプールに参加しているすべての人へのすべての支払いが正しいこと、およびシェアチェーンにシェアを提供した各マイナーが、追加された新しいシェアごとに作業に対して正しく支払われることを確認します。 一部の参加マイナーが最新のシェアで全員への支払いを正しく構成していない場合、P2Poolの他のすべてのマイナーは、自分の支払いにそれらを含めるのをやめ、公平に行動しないためにそのマイナーをプールから効果的に「排除」します。

この設計は、いくつかのスケーリングの問題を引き起こしました。そのため、もう使用されていません。 P2Poolへの参加が増えると、シェアチェーン内の共有の総難易度の目標も大きくなります。これは、およそ2秒に2回を目標としています。 これは、小規模な鉱夫の場合、XNUMX秒以内にシェアチェーンの難易度に到達することがより困難になることを意味します。 これは、小規模な鉱夫の場合、PXNUMXPoolの総ハッシュ率が増加するにつれて、収入の変動または予測不可能性が増加することを意味します。 これはまた、より多くのマイナーがPXNUMXPoolに参加するのとほぼ同時に、より多くのマイナーがシェアチェーンの競合するシェアを見つけているため、古いブロックの数が多くなり、取得するだけの個々のマイナーの観点から「無駄な作業」につながります。それらのシェアがシェアチェーンに含まれている場合は補償されます。

他の主なスケーラビリティの問題は、コインベーストランザクション自体から個々のマイナーに直接送られる支払いにあります。 各マイナーは、シェアチェーンに含まれるマイニングしたシェアに比例して支払われるため、P2Poolの各マイナーは、コインベーストランザクションに追加された新しい出力を必要とします。

これには2つの結果があります。 まず、鉱夫はP2Poolが検出するすべてのブロックで、小さくて価値の低いUTXOを与えられます。これには、後でそれらの出力を凝縮するコストや、コインを使うときにはるかに大きなトランザクションのコストを負担するコストが伴います。従来のプールから一定期間後に撤退する場合、単一のUTXOではなく、多数の個別のUTXOが発生します。 XNUMX番目:新しいコインベースの出力はそれぞれ、他の人のトランザクションによって消費される可能性のあるブロックスペースを占有し、PXNUMXPoolの手数料収入を増やしています。 これは、プロトコルに参加している鉱山労働者にとっては二重の苦痛です。

これらの2つの問題は、プロトコルがゆっくりと消滅し、最終的には使用されなくなった状態に陥る原因となりました。 正確で最近の統計を追跡するための私の最善の努力からのすべての兆候(マイニングプールのシェアを追跡する多くの古いブロックエクスプローラーは何年にもわたってシャットダウンしました)から、PXNUMXPoolによってマイニングされた最後のブロックがオンになっていたようです 2019 年 2 月 12 日.

支払いチャネル支払いを伴うP2Pool

2017年、SegWitのアクティベーションがロックインされてからXNUMXか月後、ChrisBelcherは 提案 一方向の支払いチャネルと鉱夫への支払いを処理するハブのグループを使用して、P2Poolのスケーラビリティを向上させるため。

この提案の主な目的は、XNUMXつの異なる方法で鉱夫のお金を失う大規模なコインベース取引の問題に対処することです。 大まかに言うと、コインベーストランザクション全体をハブに支払い、支払いチャネルを個々の鉱夫に開放し、コインベーストランザクションからの資金を請求する機能が補償対象の鉱夫にアトミックにリンクされていることを保証するという考え方です。支払いチャネルを介した彼らのシェア。

コインベーストランザクションと支払いチャネル間のアトミック性の目標を達成するには、コインベーストランザクションの出力スクリプトをカスタマイズする必要があります。 Belcherの提案では、次のXNUMXつの支出条件を持つマルチブランチスクリプトとして構成されています。

  • XNUMXつのうちのXNUMXつのマルチシグ。 キーXNUMX:ハブ(Hc)。 キーXNUMX:ブロックを見つけた鉱夫(Mc)。
  • 単一のキーとハッシュロック。 キー:ハブ(H)。 ハッシュロック:ハブ(X)によって生成されたランダムな値。
  • 単一のキーとタイムロック。 キー:ブロックを見つけた鉱夫(M)。 タイムロック:XNUMXか月のCSV相対タイムロック。

これらの支出条件のいずれかを使用して、コインベーストランザクションの出力のロックを解除できます。 次に、鉱夫への支払いチャネルスクリプトを見て、XNUMXつのことがどのように相互作用するかを確認しましょう。

  • 1つのうちの1つのマルチシグ。 キーXNUMX:ハブ(HcXNUMX)。 キーXNUMX:マイナー(McXNUMX)。
  • 1つのマルチシグとハッシュロック。 キー1:ハブ(HuXNUMX)。 キーXNUMX:マイナー(MuXNUMX)。 ハッシュロック:コインベース(X)で使用されるハブによって生成されるランダムな値。

それでは、これらXNUMXつのものがどのように相互作用するかを見ていきましょう。

マイナーがシェアチェーンに追加するシェアを生成している間、ハブは進行状況を監視します。 ハブは、共有ごとにチャネルの状態を更新し、共有を提出するマイナーが、実行している作業量に比例して支払いを行います。 ただし、ハッシュロックのプリイメージを使用する必要があるXNUMX番目のスクリプトパスの署名のみを提供します。これにより、デフォルトでは、ハブが最初のパスの署名を提供しないと、ハブがコインベースを使用しない限り、これらの資金を請求できなくなります。ハッシュロック付きのスクリプトパスを使用してそれ自体で出力します。これにより、プリイメージを公開する必要があります。

これで、最終的にP2PoolのマイナーのXNUMX人が有効なブロックを見つけて、ネットワークに公開します。 この時点で、ハブはすべての支払いチャネルをマイナーで更新し、チャネルの最初のスクリプトパスに署名を提供できるため、各マイナーはチャネルを閉じて、ハッシュロックを必要とせずにいつでも獲得した報酬を収集できます。プレイメージ。

この時点で、ブロックを見つけたマイナーは、コインベースの最初のスクリプトパスに署名し、ハブがコインベースから資金を請求できるようにします。 その鉱夫には、鉱業報酬からわずかなボーナスが与えられ、協力して署名するように奨励されます。 ただし、マイナーが協力を拒否した場合、ハブはハッシュロックパスを使用して単独で支出し、プレイメージを公開して、すべてのマイナーが報酬の公平な分配を収集できるようにすることができます。

これには、すべてのチャネルをチェーン上で強制的に閉じるという欠点があり、マイニングを続行するには再開する必要があります。 最後のオプションは、ハブオペレーターが支払いの処理を停止することを選択した場合、または消えた場合に存在します。 XNUMXか月後、ハブが協力に応答しなかった場合、またはコインをハッシュロックパスで使用した場合、ブロックを見つけたマイナーは完全に自分で資金を請求できます。

これにより、Belcherが提案した改善により、脅威モデルに関してXNUMXつの特定の問題が残ります。 ブロックに含めるトランザクションを決定すると、個々のマイナーがマイニングしているブロックテンプレートに含めることを選択したものに基づいて、ブロック報酬の合計のどれだけが変動する可能性があります。

支払いチャネルを導入する場合、これはエラーのマージンを作成します。つまり、実際のマイニングブロックの報酬は、マイニングハブがマイナーへの支払いチャネルでコミットするものと等しくありません。 実際の料金見積もりがブロック報酬よりも小さい場合、ハブは、より少ない金額で共同支出パスを使用して支払いチャネルを更新することができ、ハッシュロックパスでコインベースの出力を要求しない限り、鉱夫は、鉱業の報酬が実際にあったものと一致するより少ない支払いを受け入れる以外に選択肢はありません。

マイニング報酬が見積もりよりもわずかに高かった場合でも、ハブが不正に扱うマイナーはいつでも簡単に離れることができるため、これを反映するようにマイナーへのチャネルを更新することがハブの最善の利益になります。 ハブが欠陥を見つけて追加の報酬を維持することが理にかなっている唯一のエッジケースは、誰かが異常に高い鉱夫料金を支払った場合ですが、その状況を除いて、ハブと鉱夫の間の不一致に適応することはハブと鉱夫の利益になります報酬の見積もりと実際のブロック報酬。

2番目の問題は、ハブがDDoS攻撃を受け、P50Poolが機能しないように強制できる中心点であるという事実です。 Belcherの提案には、複数のハブを使用し、各コインベーストランザクションを異なるブロックから異なるハブに送信することが含まれます。 ただし、これには、鉱夫が使用しているすべてのハブからチャネルを開く必要があります。これは、鉱夫に流動性を提供するためにブロック報酬の650倍(約XNUMX BTC)を必要とするハブの推定では、非常に資本効率が悪くなります。

ブレイドプール:別の反復

入力します ブレイドプール (警告:リンクはGitHubからの直接PDFダウンロードです)。 Braidpoolは、BobMcElrathとKulpreetSinghからの提案であり、支払いチャネルを使用したBelcherの提案に基づいています。 Belcherの提案に残された未解決の問題を改善するために導入されたXNUMXつの主要な変更があります。

3つ目は、ハブとマイナーが相互に通信する方法の変更です。 彼らは、プールにブロードキャストする各共有に、マイナーにTorvXNUMXアドレスを添付させることを提案しています。 このようにして、ハブはDoS攻撃の影響を受けやすいネットワークエンドポイントを公開することなく動作できます。

ハブオペレーターは、マイナーに接続してチャネルを開いたり更新したりできるため、マイナーが単一の攻撃ポイントを回避するために複数のハブを使用する必要がなくなります。 これにより、Braidpoolは単一のハブで動作できるようになり、システム全体がより堅牢で資本効率が高くなります。

P2P プロトコルがビットコイン マイニングの集中化を解決しようとする方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。
出典:Braidpoolホワイトペーパー

XNUMX番目の変更は、シェアチェーンの代わりに有向非巡回グラフ(DAG)を使用することです。 シェアチェーンの問題は、共有時間の目標がXNUMX秒であるため、プールのサイズが大きくなるにつれて共有に必要な難易度が高くなり、小規模な鉱夫にとっては困難になることでした。 イーサリアムのようなDAGを使用すると、単一の共有が共有チェーンに組み込まれ、他の共有が孤立するゼロサムゲームではないため、マイナーは、所有するハッシュレートと方法に基づいて調整できる共有の難易度を動的に設定できます。頻繁に彼らはそれとの共有を見つけることができます。

DAG構造には、実際に見つかったビットコインブロック間で参加したすべての人が含まれ、DAGに提供した作業に基づいて、すべての人に比例して報酬が分配されます。 これにより、プールが大きくなるにつれて、個々の鉱夫の分散のスケーリングの問題が解決されます。

これらのXNUMXつの変更を除けば、残りの構造はBelcherの提案とまったく同じであり、コインベースとチャネルスクリプトは同じです。

最終的な考え

一部の読者は、なぜBetterhashがこの記事で触れられなかったのか疑問に思うかもしれません。 ブロックに含めるトランザクションの選択を分散化する一方で、プールのすべての機能を完全に分散化するわけではありません。最も重要なのは、資金を処理するプールの管理上の性質です。 これにより、鉱山労働者がプールで承認されていない取引を選択している場合、鉱山労働者は資金の支払いを拒否することで強制を受けることができます。 したがって、私はそれを分散型マイニングプールとは見なしませんが、敵対的な環境では状況をわずかに改善しますが、完全に敵対的な環境ではありません。

この記事は、P2Poolを中心としており、スケーリングの制限を改善するための反復を提案しています。 本全体を書かないために、私は他の既存または潜在的なデザインに触れていません。 それに到達でき次第、マイニングプールを分散化するための他のメカニズムに入るフォローアップ記事を書く予定です。

忍によるゲスト投稿です。 表明された意見は完全に独自のものであり、必ずしもBTCIncまたは Bitcoin Magazine.

タイムスタンプ:

より多くの Bitcoin Magazine