ビットコイン P2P 電子キャッシュ論文

新しい電子キャッシュシステムに取り組んできた。完全なピアツーピア方式で、信頼できる第三者を必要としない。

論文はこちらで公開している:
http://www.bitcoin.org/bitcoin.pdf

主な特性:

  • 二重支払いはピアツーピアネットワークによって防止される。
  • 造幣局やその他の信頼できる第三者は不要だ。
  • 参加者は匿名でいられる。
  • 新しいコインは Hashcash 方式のプルーフ・オブ・ワークから生成される。
  • 新しいコイン生成のためのプルーフ・オブ・ワークが、二重支払いを防止するネットワークの動力にもなる。

ビットコイン:ピアツーピア電子キャッシュシステム

概要:完全なピアツーピア版の電子キャッシュは、金融機関を経由する負担なしに、オンライン決済を当事者間で直接送金することを可能にする。デジタル署名はソリューションの一部を提供するが、信頼できる第三者が二重支払いの防止に依然として必要であれば、主要な利点は失われる。我々は、ピアツーピアネットワークを用いた二重支払い問題の解決策を提案する。ネットワークは、トランザクションをハッシュベースのプルーフ・オブ・ワークの継続的なチェーンにハッシュ化することでタイムスタンプを付与し、プルーフ・オブ・ワークをやり直さない限り変更できない記録を形成する。最長のチェーンは、目撃されたイベントの順序の証明としてだけでなく、それが最大のCPUパワーのプールから生まれたことの証明としても機能する。正直なノードがネットワーク上のCPUパワーの過半数を支配する限り、彼らは最長のチェーンを生成し、いかなる攻撃者をも凌駕できる。ネットワーク自体は最小限の構造しか必要としない。メッセージはベストエフォートベースでブロードキャストされ、ノードは自由にネットワークを離脱・再参加でき、不在中に何が起きたかの証明として最長のプルーフ・オブ・ワークチェーンを受け入れる。

完全な論文はこちら:
http://www.bitcoin.org/bitcoin.pdf

サトシ・ナカモト

Satoshi Nakamotoの投稿:

新しい電子キャッシュシステムに取り組んできました。完全な ピアツーピア方式で、信頼できる第三者を必要としません。

論文はこちらで公開しています: http://www.bitcoin.org/bitcoin.pdf

我々はそのようなシステムを非常に、非常に必要としているが、私があなたの提案を理解する限り、必要な規模にスケールするようには見えない。

譲渡可能なプルーフ・オブ・ワークトークンに価値を持たせるには、貨幣的価値がなければならないのではないか。貨幣的価値を持つには、非常に大きなネットワーク内で——例えばbittorrentに類似したファイル交換ネットワークのように——移転されなければならないだろう。

二重支払いイベントをタイムリーに検出し拒否するためには、トランザクション内のコインの過去のトランザクションの大部分を持っていなければならないが、素朴に実装すると、各ピアが過去のトランザクションの大部分、あるいは最近発生した過去のトランザクションの大部分を持つ必要があるのではないか。何億人もの人々がトランザクションを行っている場合、それは膨大な帯域幅となる——すべてのノードがすべて、またはその大部分を知らなければならないだろう。

James A. Donaldの投稿:

我々はそのようなシステムを非常に、非常に必要としているが、私があなたの 提案を理解する限り、必要な規模にスケールするようには見えない。

ネットワークがそこまで大きくなるずっと前に、ユーザーは簡易支払い検証(セクション8)を使用して二重支払いをチェックすることが安全であり、これにはブロックヘッダーのチェーンのみ、つまり1日あたり約12KBしか必要としない。新しいコインを作成しようとする人だけがネットワークノードを実行する必要がある。当初はほとんどのユーザーがネットワークノードを実行するが、ネットワークがある程度以上に成長すると、専用ハードウェアのサーバーファームを持つ専門家にますます委ねられることになる。サーバーファームはネットワーク上に1つのノードを持つだけでよく、LANの残りはそのノードに接続する。

帯域幅はあなたが思うほど禁止的ではないかもしれない。典型的なトランザクションは約400バイトだ(ECCはうまくコンパクトだ)。各トランザクションは2回ブロードキャストされる必要があるので、1トランザクションあたり1KBとしよう。Visaは2008会計年度に370億件のトランザクションを処理した。これは1日平均1億件のトランザクションだ。それだけのトランザクションには100GBの帯域幅、つまりDVD12枚分かHD画質の映画2本分、現在の価格で約18ドル相当の帯域幅が必要となる。

ネットワークがそこまで大きくなるには数年かかるだろうし、その頃にはインターネットでHD映画2本分を送ることは大したことではないだろう。

Satoshi Nakamoto

正直なノードがネットワーク上で最も多くのCPUパワーを支配している限り、 最長のチェーンを生成し、いかなる攻撃者も出し抜くことができる。

しかし実際にはそうなっていない。悪者は日常的に10万台以上のマシンのゾンビファームを支配している。スパム送信ゾンビのブラックリストを運用している私の知人は、1日に100万もの新しいゾンビを目にすることが珍しくないと言う。

これはhashcashが今日のインターネットで機能しないのと同じ理由だ——善人は悪者よりはるかに少ない計算能力しか持っていない。

他の点についても疑問はあるが、これが致命的な問題だ。

R’s, John

正直なノードがネットワーク上で最も多くのCPUパワーを支配している限り、 最も長いチェーンを生成し、攻撃者を上回ることができる。

しかし実際には支配していない。悪者は日常的に10万台以上の ゾンビファームを支配している。スパム送信ゾンビのブラックリストを 運用している知人によると、1日に100万台の新しいゾンビが 確認されることも珍しくないという。

これはhashcashが今日のインターネットで機能しない理由と同じだ — 善良な者たちは悪者よりもはるかに少ない計算能力しか持っていない。

その点を指摘してくれてありがとう。

私はその主張を十分に強く表現できていなかった。要件は、善良な者たちが集合的に、単一の攻撃者よりも多くのCPUパワーを持つことだ。

ネットワークを圧倒するには小さすぎる多くの小規模ゾンビファームが存在し、それらはビットコインを生成することで利益を得ることができる。小規模ファームが「正直なノード」となる。(「正直」より良い用語が必要だ。)より多くの小規模ファームがビットコイン生成に向かうほど、ネットワークを圧倒するためのハードルは上がり、より大きなファームも圧倒するには小さすぎることになり、それらもビットコインを生成した方が良いことになる。「ロングテール」理論によれば、小規模、中規模、そして単に大規模なファームを合わせれば、最大のゾンビファームよりもはるかに多くなるはずだ。

たとえ悪者がネットワークを圧倒したとしても、すぐに富を得られるわけではない。彼にできることは、不渡り小切手のように、自分自身が使ったお金を取り戻すことだけだ。これを悪用するには、商人から何かを購入し、発送されるまで待ち、それからネットワークを圧倒してお金を取り戻そうとする必要がある。そのようなカーディング詐欺を試みるよりも、ビットコインを生成する方が多くの利益を得られると思う。そのような巨大なゾンビファームがあれば、他の全員を合わせたよりも多くのビットコインを生成できるだろう。

ビットコインネットワークは、ゾンビファームをビットコイン生成に転向させることで、実際にスパムを減らすかもしれない。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

[武力行使による独占に対するシステムの脆弱性に関する 長い解説は省略。]

政治的問題の解決策を暗号学に求めても見つからないだろう。

その通り、しかし我々は軍拡競争における大きな戦いに勝ち、数年間の新たな自由の領域を獲得することができる。

政府はNapsterのような中央集権型ネットワークの頭を切り落とすことには長けているが、GnutellaやTorのような純粋なP2Pネットワークは持ちこたえているようだ。

Satoshi


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

ビットコインは非常に有望なアイデアだと思う。セキュリティを正直な参加者のCPUパワーが攻撃者のそれを上回るという仮定に基づかせるアイデアが気に入っているんだ。これはロングテールの力を活用する非常に現代的な概念だよ。Wikipediaが始まった時、うまくいくとは思わなかったけど、同じような理由で大成功を収めた。

また、偽造不可能なトークンで、その生産率が予測可能であり、腐敗した当事者によって影響されないものには、潜在的な価値があると思うんだ。これは法定通貨よりも金に類似しているんじゃないかな。Nick Szaboは何年も前に「ビットゴールド」と呼ぶものについて多くを書いていて、これはそのコンセプトの実装となりうる。重量級の非匿名システムの上に軽量な匿名決済スキームを構築する提案もあり、ビットコインを活用して匿名化を可能にすることもできるだろう。

ネットワークが資金力のある攻撃者に容易に圧倒されたり乗っ取られたりしないことが重要だと思う。Satoshiがこれらの質問のいくつかに対処するか、論文の中で既に対処している箇所を示してくれるとありがたいな。

Hal Finney

Ray Dillinger:

「通貨」はコンピューターが年間約35%速くなるため 約35%のインフレ率である …35%のインフレ率はテクノロジーによって ほぼ保証されている

ハードウェア速度の向上には対処している:「ハードウェア速度の向上とノードの運用への関心の変動を時間の経過とともに補正するため、プルーフ・オブ・ワークの難易度は1時間あたりのブロック数の平均を目標とする移動平均によって決定される。生成が速すぎる場合、難易度が上がる。」

コンピューターが高速化し、ビットコインの生成に投入される総計算能力が増加すると、難易度は総新規生産量を一定に保つように比例して上昇する。したがって、将来毎年どれだけの新しいビットコインが生成されるかは事前にわかっている。

新しいコインが生産されることは通貨供給量が計画的に増加することを意味するが、必ずしもインフレになるわけではない。通貨供給量の増加が利用者数の増加と同じ率で増加すれば、物価は安定する。需要ほど速く増加しなければ、デフレが起こり、通貨の初期保有者はその価値の上昇を目にすることになる。

コインは何らかの方法で最初に分配されなければならず、一定の生成率が最良の方式と思われる。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

Hal Finneyの投稿:

ブロードキャストされたトランザクションがすべてのノードに到達しなくても 大丈夫で、やがてブロックチェーンに入ると述べられていますが、これはどのように 実現されるのでしょうか——「次の」ブロックを作成するノード(hashcashの 衝突を最初に見つけたノード)がそのトランザクションを聞いておらず、 その後さらにいくつかのブロックがそのトランザクションを聞いていない ノードによって追加された場合はどうなるのでしょうか?トランザクションを聞いた すべてのノードは、次の衝突を見つけるのに十分幸運になるまでそのトランザクションを 保持し、ブロックに組み込もうとするのでしょうか?

その通り、ノードはトランザクションをブロックに入るまでワーキングセットに保持する。トランザクションがノードの90%に到達した場合、新しいブロックが見つかるたびに、そのブロックに含まれる確率は90%だ。

あるいは例えば、ノードが最も速く成長するチェーンを見極めるために 2つ以上のチェーンを保持しており、チェーンAのブロックが届いたが、 そこにチェーンBにあるコインの二重支払いが含まれている場合はどうですか? これはチェックされるのでしょうか?(誰かが二重支払いを試み、 2つの異なるノードセットが同じコインの2つの異なるトランザクションを 受信した場合に起こりえます。)

それをチェックする必要はない。先行する分岐のトランザクションが有効となり、もう一方は無効となる。誰かがそのような二重支払いを試みた場合、1つのみの支払いが常に有効となり、他は無効となる。

トランザクションの受取人は通常、この種の可能性が解決されるまでの時間を確保するため、おそらく1時間以上トランザクションを保持する必要がある。コインは即座に再度使うことができるが、商品の発送などの行為を行う前には待つべきだ。

また、優秀な攻撃者がすべての正直な参加者よりも多くの計算能力を 集めることができた場合、二重支払いやトランザクションの取り消しが 正確にどのように達成されるのかも理解できません。彼が新しいブロックを 作成し、最長のチェーンに追加できることはわかりますが、チェーン内の 古いトランザクションをどのように消去したり追加したりできるのでしょうか? 攻撃者が新しいブロックを送信する際、正直なノードが何も消去されて いないことを確認するための整合性チェックはありませんか?この攻撃の より詳しい説明があれば、攻撃者にとっての利得と、単に計算能力を使って 正直に新しいコインを鋳造することとの比較を判断するのに役立つでしょう。

攻撃者は末尾にブロックを追加するのではない。自分のトランザクションが含まれるブロックまで遡り、そのブロックとその後のすべてのブロックをやり直さなければならない。さらに、その作業中にネットワークが末尾に追加し続けるすべての新しいブロックもやり直す必要がある。彼は歴史を書き換えているのだ。彼の分岐がより長くなれば、それが新しい有効なチェーンとなる。

これは重要なポイントに触れている。たとえその場にいる全員が不正を目にしていたとしても、その事実を利用する方法はない。

最長のチェーンが常に有効なものと見なされることは絶対に必要だ。その場にいたノードは、ある分岐が先にあり別の分岐に置き換えられたことを覚えているかもしれないが、その場にいなかった者にこのことを納得させる方法はない。ある分岐が最初だったと主張する派閥、別の分岐が最初だったと見た派閥、そして後から参加して何が起きたか見ていない派閥——このような分裂は許されない。CPUパワーのプルーフ・オブ・ワーク投票が最終決定権を持たなければならない。全員が同じページに留まる唯一の方法は、何があろうと最長のチェーンが常に有効であると信じることだ。

支払いトランザクションに関して、コインの受取人はどのようなチェックを 行う必要がありますか?コインの移転の全履歴を遡って、リスト上の すべてのトランザクションが「タイムスタンプ」ブロックチェーンに リンクされていることを確認する必要がありますか?それとも最新のもの だけでよいのですか?

受取人はブロックチェーン内の十分な深さまで遡って検証するだけでよく、多くの場合2トランザクションの深さだけで十分だ。それ以前のすべてのトランザクションは破棄できる。

タイムスタンプノードはトランザクションをチェックして、コインの前の トランザクションがチェーンに含まれていることを確認し、チェーン内の すべてのトランザクションが有効なコインを表すというルールを 強制していますか?

その通り、まさにそうだ。ノードはブロックを受信すると、その中のすべてのトランザクションの署名を以前のブロック内のトランザクションと照合してチェックする。ブロックは前のブロックまたは同一ブロック内の有効なトランザクションに依存するトランザクションのみを含むことができる。トランザクションCは同一ブロック内のトランザクションBに依存し、Bはより前のブロック内のトランザクションAに依存することができる。

多くの質問をして申し訳ありませんが、先ほど述べたように、これは非常に 有望で独創的なアイデアのようであり、このコンセプトがさらに発展する のを楽しみにしています。アイデアのよりプロセス指向の記述、 各種オブジェクト(コイン、ブロック、トランザクション)のデータ構造の 具体的な詳細、メッセージに含まれるデータ、このシステムで発生する 各種イベントの処理手順のアルゴリズム的記述があると役に立つでしょう。 実装に取り組んでいるとのことですが、より形式的なテキストによる システムの記述が次のステップとして有益でしょう。

ご質問をありがたく思う。実は私はこれを逆の順序で行った。すべての問題を解決できると自分を納得させるために、まずすべてのコードを書き、その後論文を書いた。詳細な仕様を書くよりも先にコードをリリースできると思う。あなたが空白を埋めた仮定のほとんどは、すでに正しい。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

核心的なコンセプトは、多数のエンティティが誰がどのビットコインを 所有しているかについて完全で一貫した情報を保持するということだ。

しかし、一貫性を維持するのは厄介である。誰かがあるトランザクションを あるメンテナーに報告し、別の誰かが別のトランザクションを別の メンテナーに伝えた場合に何が起こるかが明確でない。トランザクションは 過去のすべてのトランザクションのグローバルに共有されたビューに 組み込まれるまで有効であることがわからず、過去のすべてのトランザクションの グローバルに共有されたビューがグローバルに共有されていることは、 ある程度の時間が経過し、多くの新しいトランザクションが到着した後に しかわからない。

これをどのように行うか説明していたのに私が理解できなかったのか、 それともできると確信していたが詳細については少し曖昧だったのか?

プルーフ・オブ・ワークチェーンが同期化問題の解決策であり、誰も信頼することなくグローバルに共有されたビューが何であるかを知る方法だ。

トランザクションはネットワーク全体に素早く伝播するため、同じトランザクションの2つのバージョンがほぼ同時に報告された場合、先にスタートした方がより多くのノードに最初に到達するという大きな優位性を持つ。ノードは最初に見たものだけを受け入れ、2番目に到着したものを拒否するため、より早いトランザクションの方がより多くのノードによって次のプルーフ・オブ・ワークへの組み込みに取り組まれる。実質的に、各ノードはどのトランザクションを最初に見たかについての見解を、プルーフ・オブ・ワークの作業にそれを含めることで投票している。

トランザクションがまったく同時に届き、均等に分割された場合は、どちらが先にプルーフ・オブ・ワークに入るかに基づく運の問題であり、それが有効なものを決定する。

ノードがプルーフ・オブ・ワークを発見すると、新しいブロックはネットワーク全体に伝播し、全員がそれをチェーンに追加して次のブロックの作業を開始する。もう一方のトランザクションを持っていたノードは、受け入れられたチェーンに基づきそれが無効となったため、ブロックへの組み込みを試みるのを中止する。

プルーフ・オブ・ワークチェーン自体が、グローバルに共有されたビューから生まれたことの自明な証拠だ。ネットワークの過半数だけが、このような困難なプルーフ・オブ・ワークのチェーンを生成するのに十分なCPUパワーを共同で持っている。ユーザーはプルーフ・オブ・ワークチェーンを受信すると、ネットワークの過半数が何を承認したかがわかる。トランザクションがチェーン内の数リンク前のリンクにハッシュされると、それはグローバルな履歴に確固として刻み込まれる。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

あるノードがプルーフ・オブ・ワークに 正直で正当な単一支払いのトランザクション群を組み込み、 別のノードがプルーフ・オブ・ワークに 同様に正直で正当な単一支払いの 別のトランザクション群を組み込み、 両方のプルーフがほぼ同時に 生成されたとする。

その場合はどうなるのか?

両方ともブロックをブロードキャストする。すべてのノードは両方を受信して保持するが、最初に受信した方にのみ取り組む。正確に半分が一方を先に受信し、残りの半分がもう一方を先に受信したとしよう。

短時間で、すべてのトランザクションは伝播を完了し、全員がフルセットを持つことになる。各側で作業しているノードは、自分の側に欠けているトランザクションの追加を試みる。次のプルーフ・オブ・ワークが発見されると、そのノードが取り組んでいた前のブロックの分岐がより長くなり、同点が解消される。どちらの側であっても、新しいブロックにはトランザクションのもう半分が含まれるため、いずれの場合でも分岐にはすべてのトランザクションが含まれることになる。分岐が2回連続で起こるという起こりにくいイベントの場合でも、2回目の分岐の両側にはいずれにせよフルセットのトランザクションが含まれる。

トランザクションがブロックに入るまで1回かそれ以上の追加サイクルを待つ必要があっても問題ではない。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

さらに、提案されたシステムでは、誰がどのコインを持っているかを 追跡する作業はシニョリッジによって賄われており、 これはインフレを必要とするため、機能させることはできない。

インフレの問題で困っているなら、代わりにトランザクション手数料に調整するのは簡単だ。こう簡単なことだ:任意のトランザクションのアウトプット値をインプット値より1セント少なくする。クライアントソフトウェアが意図した支払い額より1セント多くトランザクションを自動的に書くか、受取人側から差し引くことができる。ノードがブロックのプルーフ・オブ・ワークを見つけた時のインセンティブ値は、ブロック内の手数料の合計になる。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

では、競争に負けたコインはどうなるのか?

…2番目に来た人がコインを失う可能性が高いのは 少し厳しい。

同じトランザクションの複数の二重支払いバージョンがある場合、1つだけが有効となる。

支払いの受取人は、それが有効であると信じる前に1時間ほど待たなければならない。ネットワークはそれまでにあらゆる二重支払いの競争を解決する。

無効となった二重支払いを受け取った人は、そもそもそれを持っていたとは思っていなかった。彼のソフトウェアではトランザクションが「未確認」から「無効」に変わったと表示されていたであろう。必要に応じて、UIはトランザクションがブロックチェーン内で十分に深くなるまで非表示にすることもできる。

さらに、あなたの事象の記述は、タイミングとコイン生成に 制約があることを示唆している——ネットワーク全体が 新しいコインのニュースがネットワーク全体に広まるのに 必要な時間と比較して、ゆっくりとコインを生成するということだ

それを明確にできなかったならすまない。ブロック間の目標時間はおそらく10分になるだろう。

すべてのブロックには作成時刻が含まれる。時刻が36時間以上ずれている場合、他のノードはそのブロックに取り組まない。直近の62430ブロックの期間が15日未満の場合、ブロックの生成が速すぎるため、プルーフ・オブ・ワークの難易度が倍になる。全員が同じチェーンデータで同じ計算を行うため、チェーン内の同じリンクで全員が同じ結果を得る。

我々は支払い者に、分岐の競争が解決される 時間ではなく、支払いがネットワーク全体に広がる 時間において、トランザクションが有効であることの 確信を持たせたい。

即時の取り消し不能性は機能ではないが、既存のシステムよりはるかに高速だ。紙の小切手は1〜2週間後に不渡りになることがある。クレジットカードのトランザクションは60〜180日後まで異議を申し立てられる。ビットコインのトランザクションは1〜2時間で十分に不可逆的となりうる。

あるノードが自分に関係のないすべての支払いを 無視している場合、そのノードには何の不利な結果もない。

私が最近投稿したトランザクション手数料ベースのインセンティブシステムにより、ノードは受信したすべての有料トランザクションを含めるインセンティブを持つことになる。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

全員がXを知っているだけでは十分ではない。全員が 全員がXを知っていることを知り、さらに 全員が全員が全員がXを知っていることを知っていることを 知っている必要もある ——これはビザンチン将軍問題と同様に、 分散データ処理の古典的な難問である。

プルーフ・オブ・ワークチェーンはビザンチン将軍問題の解決策だ。その文脈で言い換えてみよう。

何人かのビザンチン将軍がそれぞれコンピューターを持ち、王のWi-Fiのパスワードをブルートフォースで突破して攻撃したいと考えている。パスワードは一定の文字数であることがわかっている。ネットワークに十分な刺激を与えた後、ボットネットのノード数を素早く数え、全員が同じ数を持ち、他の全員もそうであることを確信できなければならない。プルーフ・オブ・ワークチェーンがこれを達成する方法だ。

各将軍は最初に受信した攻撃ブロックを、取り組んでいるチェーンに追加し、次のブロックの解決を開始する。最初にブロックを解いた将軍がそれをブロードキャストし、他の全員がそれを自分のチェーンに追加する。チェーンが成長し、数ブロック後には、将軍は攻撃データが他の将軍が持っているものと同じであると確信できる。チェーン内の計算量が、全員が協力して作業しなければ生み出せないものであることがわかる。

プルーフ・オブ・ワークチェーンが、あなたが質問したすべての同期化、分散データベース、グローバルビューの問題を解決する方法だ。

Hal Finneyの投稿:

各候補チェーンに関連付けた別々の 保留トランザクションリストをノードが保持する必要があると思う。 … また、任意の時点でノードはいくつの候補チェーンを 追跡する必要があるのか平均的に尋ねたい。

幸いにも、現在の最良ブランチに対する保留トランザクションプールのみを維持すれば十分だ。新しいブロックが最良ブランチに到着すると、ConnectBlockがそのブロックのトランザクションを保留トランザクションプールから削除する。別のブランチがより長くなった場合、フォークまでのメインブランチに対してDisconnectBlockを呼び出し、ブロックのトランザクションを保留トランザクションプールに戻し、新しいブランチに対してConnectBlockを呼び出し、両方のブランチに含まれていたトランザクションを吸い上げる。このような再編成は稀で浅いものになると予想される。

この最適化により、候補ブランチは実際にはほとんど負担にならない。ディスク上に存在するだけで、メインチェーンにならない限り注意を払う必要がない。

あるいはJamesが先に提起したように、ネットワークブロードキャストが 信頼性はあるが潜在的に遅いフラッディングアルゴリズムに依存している場合、 パフォーマンスにどのような影響があるか?

ブロードキャストはほぼ完全に信頼できるだろう。TCP送信が今日ドロップされることはめったにないし、ブロードキャストプロトコルにはしばらく後に他のノードからデータを取得するリトライメカニズムがある。実際にブロードキャストが予想より遅いことが判明した場合、リソースの無駄を避けるためにブロック間の目標時間を増やす必要があるかもしれない。ブロックを生成するのにかかる時間よりもはるかに短い時間でブロックが伝播することを望んでいる。そうでなければ、ノードは廃れたブロックの作業に時間を費やしすぎることになる。

コンピュータがランダムに支払いを送信し、ランダムにパケットをドロップする自動テストを実行する予定だ。

  1. ビットコインシステムが社会的に有用で価値あるものであると判明し、 ノードオペレーターが自分たちの努力が世界への有益な貢献だと感じる (人々が善い目的のために計算資源を提供する様々な「@Home」計算 プロジェクトに類似)。

この場合、単純な利他主義がネットワークを適切に 稼働させ続けるのに十分であるように思われる。

適切に説明できれば、リバタリアンの視点にとって非常に魅力的だ。ただ、私は言葉よりコードの方が得意なのだが。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

できるだけ早くソースコードをリリースするよう急いでいる。これらの実装に関する疑問をすべて解消する参考になるだろう。

Ray Dillinger (Bear) の投稿:

コインが使われる際、買い手と売り手は(ブラインド化された) トランザクション記録にデジタル署名する。

署名するのは買い手のみであり、ブラインド化はない。

誰かが二重支払いをした場合、トランザクション記録の ブラインドを解除して不正者の身元を明らかにすることができる。

身元は使用されず、償還請求への依存もない。すべては予防だ。

これはかなり標準的なカットアンドチューズアルゴリズムで行われ、 買い手は秘密分散を使ったいくつかのチャレンジに応答する

チャレンジも秘密分散もない。基本的なトランザクションはセクション2の図に示されているものだ。前のトランザクションの公開鍵を満たす(買い手の)署名と、次回使用時に満たす必要がある(売り手の)新しい公開鍵だ。

作業中に延長しようとしているチェーンと同じ長さだが、 最後の数「リンク」が取り組んでいるチェーンと共通でない リンクであるチェーンを受信することもある。 これらは無視する。

その通り、長さが等しい場合は、最初に受信したものを保持することで同点を解消する。

二重支払いが含まれている場合、二重支払いの「証拠」となる 「トランザクション」を作成し、プールAに追加し、 ブロードキャストして作業を続ける。

そのような「二重支払いの証拠」の報告は必要ない。同じチェーンに両方の支払いが含まれている場合、そのブロックは無効であり拒否される。

ブロックに十分なプルーフ・オブ・ワークがない場合も同様だ。そのブロックは無効であり拒否される。それについてレポートを回覧する必要はない。すべてのノードがそれを確認し、リレーする前に拒否できる。

2つの競合するチェーンがあり、それぞれが同じトランザクションの異なるバージョンを含み、一方が資金をある人に、もう一方が同じ資金を別の人に送ろうとしている場合、どちらの支払いが有効かを裁定するのがプルーフ・オブ・ワークチェーンのすべてだ。

我々は二重支払いを「監視」してアラームを鳴らし不正者を捕まえるのではない。単にどちらの支払いが有効かを裁定するのだ。トランザクションの受取人は、解決のための時間を確保するために数ブロック待つ必要がある。不正を試みる者はすべて好きなだけ二重支払いを同時に試みればよいが、数ブロック以内に支払いの1つが有効となり、他は無効となる。メインチェーンに既に支払いが存在すれば、後の二重支払いは即座に拒否される。

まだチェーンに入っていないが、すべてのノードのプールに既にある場合でも、2番目の支払いは既に最初の支払いを持っているすべてのノードによって拒否される。

新しいチェーンが受け入れられた場合、現在のリンクの追加を 諦め、プールLからすべてのトランザクションをプールAに 戻し(作業開始以降に受信または作成したトランザクションとともに)、 新しいチェーンのリンクの一部であるトランザクション記録を プールAから除外し、新しいチェーンの延長を 再度試みて作業を開始する。

その通り。新しいトランザクションが入るたびにリフレッシュも行うので、LはほぼすべてのA内のものを常に含んでいる。

CPU集約型のデジタル署名アルゴリズムで 新しいブロックLを含むチェーンに署名する。

これは署名ではなく、Hashcash方式のSHA-256プルーフ・オブ・ワーク(ゼロの部分的プリイメージ)だ。

「チェーン」が最も速い3〜4ノードだけによって追加された リンクのみで構成されないことを保証するメカニズムはあるか? ブロードキャストされたトランザクション記録がその3〜4ノードを 容易にすり抜け、それらのノードがチェーンを支配し続けると、 トランザクションが追加されない可能性がある。

これをCPU集約型のデジタル署名として考えている場合、長い操作を最初に完了する競争であり、最も速い者が常に勝つと考えているかもしれない。

プルーフ・オブ・ワークはHashcash方式のSHA-256衝突発見だ。毎秒数百万回のハッシュを行うメモリレスプロセスであり、毎回小さな確率で見つかる。最も速い3〜4ノードの優位性は、総CPUパワーに占めるシェアに比例するだけだ。誰でもいつでも解を見つける確率は、CPUパワーに比例する。

トランザクション手数料があるため、ノードは受信したすべてのトランザクションを受け入れて含めるインセンティブを持つ。作成されたコインの総数が所定の上限に達すると、ノードは最終的にトランザクション手数料のみで報酬を受ける。

また、チェーンにリンクを追加する作業要件は、 前の週にそのチェーンに追加されたリンクの数に応じて (再び指数関数的に)変動し、コイン生成率 (したがってインフレ)を厳密に制御すべきである。

その通り。

これをスケールさせるにはコインの集約が必要だ。 誰かが単一額面のコイン10枚を引退させ、 額面10の新しいコイン1枚を作成する「証明可能な」 トランザクションが必要だ。

すべてのトランザクションがこれだ。セクション9、価値の結合と分割を参照。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

Ray Dillingerの投稿:

1つの方法は、コインの受取人に非対称鍵ペアを生成させ、 その半分をトランザクションとともに公開することだ。 後でコインを使うためには、非対称鍵ペアの もう半分の所有を証明する必要がある。 おそらく新しい売り手が提供する鍵に署名することで。

その通り、ECCデジタル署名だ。すべてのトランザクションで新しい鍵ペアが使用される。

個人を識別するニムという意味での疑似匿名ではないが、少なくともコインの次のアクションがそのコインの所有者からのものであると識別できるという意味では、少し疑似匿名的だ。

うーん。それで快適かどうかわからない。協力しないノードを 識別して排除する努力がないということですか?これは 問題やDoS攻撃の可能性につながると思う。

誰かを識別することに依存はしていない。あなたが言ったように、それは無駄であり、ソックパペットで簡単に破られる。

誰かが本物であることを確立するクレデンシャルは、CPUパワーを提供する能力だ。

いつまで…何まで?トランザクションが取り消し不能になったことを 誰がどのようにして知るのか?「数」ブロックとは3?30? 100?ノード数に依存するのか?ノード数に対して 対数的か線形的か?

セクション11が攻撃下での最悪のケースを計算している。通常、5〜10ブロックで十分だ。盗むためにネットワーク規模の攻撃を仕掛ける価値のないものを売っている場合、実際にはもっと少なくできる。

しかし身元がない場合、既に二重支払いで得た 商品(ウェブサイトへのアクセス、ダウンロードなど)を 受け取っていれば、支払いが無効になっても 彼らにとってデメリットはない。その魔法の「数ブロック」 (何ブロックかどうやって知るのか?)が経過するまで 支払い済みとして扱わなければ、商人は「無効な」コインを 掴まされることになる。

消費者はコインを使って、使った目的のことができるまでに 1時間かかるなら、そうしないだろう。 商人は、顧客の二重支払いによりコインが無効であることが わかっても顧客にチャージバックする方法がなければ、 そうしないだろう。

これはバージョン2の問題であり、ほとんどのアプリケーションでかなり満足のいく解決が可能だと考えている。

競争はトランザクションをネットワーク上で最初に広めることだ。6次の隔たりを考えれば——指数関数的に広がる。遅れてスタートした競合者が、最初のトランザクションがネットワーク全体を席巻する前に非常に多くのノードを獲得するチャンスはほとんどなく、わずか2分程度しかかからない。その2分間、商人のノードは二重支払いトランザクションを監視できる。二重支払い者は商人に知られずに代替トランザクションを世界にブラストすることはできないため、開始前に待つ必要がある。

本物のトランザクションが90%に到達し、二重支払いトランザクションが10%に到達した場合、二重支払い者は支払わずに済む確率がわずか10%で、90%の確率でお金が使われてしまう。ほとんどの種類の商品に対して、詐欺師にとって割に合わない。

情報ベースの商品、例えばウェブサイトへのアクセスやダウンロードは転売不可能だ。ウェブサイトへのアクセスやダウンロードを盗んで生計を立てることはできない。それを盗むならファイル共有ネットワークに行けばいい。ほとんどの即時アクセス製品は盗む大きなインセンティブがない。

商人が実際に盗難の問題を抱えている場合、顧客に2分待ってもらうか、メールで何かを待ってもらうことができ、多くの商人は既にそうしている。本当に最適化したい場合で、大きなダウンロードの場合、トランザクションが二重支払いとして戻ってきたらダウンロードの途中でキャンセルできる。ウェブサイトへのアクセスの場合、通常は顧客に5分間アクセスさせて、拒否された場合はアクセスを遮断しても大した問題ではない。多くのそのようなサイトにはそもそも無料トライアルがある。

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com

James A. Donaldの投稿:

幸い、現在の最良の分岐のための 保留トランザクションプールだけを保持すれば十分だ。

これは我々が知っている、つまり通信と データストレージが正常に動作している誠実で 行儀の良いピアが、現在の最良の分岐が何であるかを 知っていることを要求する——

ノードは自分が持っている最良の分岐の保留トランザクションプールだけを持てばよいということだ。現在最良の分岐だと考えている分岐のことだ。それがブロックを作ろうとしている分岐であり、プールが必要なのはそのためだけだ。

ブロードキャストはおそらくほぼ完全に 信頼できるだろう。

各メッセージが少なくとも1回は到着すると 仮定するのではなく、頻繁に到着に失敗する メッセージによって伝えられる場合でも 情報が到着するようなメカニズムを 作る必要がある。

ピアネットワーキングのブロードキャストメカニズムはカバーできていると思う。

各ノードは隣接ノードに、持っている新しいブロックとトランザクションのハッシュのインベントリリストを送信する。隣接ノードはまだ持っていないアイテムを要求する。タイムアウト後にアイテムが届かない場合、そのアイテムを持っていた別の隣接ノードにリクエストする。すべてまたはほとんどの隣接ノードが最終的に各アイテムを持つはずなので、1つとの通信が失敗しても、他の任意のノードから1つずつ試して取得できる。

インベントリ-リクエスト-データのスキームは少しレイテンシを導入するが、余分なデータブロックを送信キューに入れないことで帯域幅を節約し、最終的にはスピードの向上に役立つ。

あなたにはそのような設計のアウトライン と提案があり、それは大きな前進だが、 悪魔は細かい詳細に宿る。

コーディングしながらこの1年半でそれらの細かい詳細をすべて検討してきたと思うが、多くの詳細があった。機能的な詳細は論文ではカバーされていないが、ソースコードは近日公開する。メインファイルはお送りした。 (現時点ではリクエストに応じて提供可能、完全リリースは近日中)

Satoshi Nakamoto


The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com