ポイント版の電子現金システムは、金融機関を経由せずに、一方から直接オンラインで他方に支払うことができます。デジタル署名は部分的な解決策を提供しますが、信頼できる第三者がまだ双花を防止するために必要であれば、意味がありません。ドット対ドットネットワークに基づいて双花問題の解を提案した。ポイントネットワークにタイムスタンプを追加する方法は、トランザクションのハッシュ値を継続的に増加するチェーンに追加することである。チェーンは、ハッシュに基づく作業量証明を用いて増加し、記録を修正するためには、作業量証明を再実行しなければならない。最も長い鎖は観測された事象シーケンスの証明としてだけでなく,自身が最大の計算力池から来た証明としても用いられた。ポイントネットワークの大部分の計算力が協力ノードに掌握されている限り、彼らは攻撃者を超えて最長のチェーンを生成することができる。ネットワーク自体は最小の構造が必要であり、その中のメッセージは最善を尽くしてブロードキャストされ、ノードは任意にネットワークから離れたり、ネットワークに再加入したりして、最長の作業量証明チェーンを受け入れて、彼らがネットワークにいない間に発生したことを確認する。

1.紹介

インターネット上のビジネスはほとんど金融機関が信頼できる第三者として電子決済を処理することに依存しています。ほとんどの取引でシステムは良好に動作していますが、この信頼に基づくパターンにはまだその固有の弱点があります。完全に不可逆な取引は不可能です。金融機関は紛争調停を避けられないからです。調停のコストは取引コストを増加させ、最小の実際取引規模を制限し、小口の一時取引の可能性を遮断し、不可逆サービスに対して不可逆支払能力を提供する喪失により、より広範なコストが発生する。取引が逆転されるので、信頼に対する要求が増えます。商店は彼らの顧客を警戒し、必要ではない情報をできるだけ多く入手しなければならない。一定割合の詐欺は避けられないとされています。これらのコストと支払いの不確実性は直接的に実物の貨幣を使うことによって回避できますが、信頼できる相手がいない通信ルートを通じて支払うことが可能になるメカニズムはありません。

必要なのは、信頼された電子決済システムではなく、暗号証明に基づくものであり、任意の2つの任意の自発的な双方が直接取引することを可能にし、信頼された第三者を必要としない。計算では逆転できない取引は、詐欺から売り手を保護し、従来の信託機構も簡単に実施でき、バイヤーを保護する。本論文では、取引の時間的順序の計算証明として、ドット間分布タイムスタンプサーバを用いて生成される双花問題の解決策を提案した。正直ノードが制御するものが攻撃ノードよりも力が多い限り、このシステムは安全である。

2.取引

私たちは電子マネーをデジタル署名チェーンと定義します。元の転移は、所有者が前の取引と次の所有者のスプーンに署名し、この二つの署名を貨幣の端に置くことによって達成されます。受取人は署名を検証することによってチェーンの所有権を検証することができます。

もちろん、問題は入金者が所有者の一人がデュアルフラワーを行っていないことを確認できないことです。よくある解決策は信頼できる中央権威機構(造幣工場)を導入し、取引が双花されているかどうかを確認することです。取引のたびに、造幣所に返金して新しい貨幣を発行しなければなりません。造幣所から発行された貨幣だけが双花がないと確信できます。この解決策の問題は、貨幣システム全体の運命は造幣工場を運営する会社によって決められています。どの取引も銀行のように通過します。

私たちは前の所有者が以前の取引に貨幣を使っていないことを入金者に知らせる方法が必要です。この目的について言えば、一番早い取引は一番重要ですので、後ほど双花を行ったかどうかは心配していません。取引の有無を確認する唯一の方法はすべての取引を理解することです。造幣工場の模型の中で、造幣工場はすべての取引を知り、どの取引が一番目かを決めます。信頼されていない状態でこの目的を達成するためには、取引は公開されて宣言されなければならない。我々は参加者が受信した事実に基づいて、シーケンスの単一の歴史について合意するシステムが必要である。受取人は証拠が必要で、取引のたびにほとんどのノードがこれが初めて受信されることに同意していることを示しています。

3.タイムスタンプサーバ

提案したソリューションはタイムスタンプサーバーから開始します。タイムスタンプサーバは、複数のプロジェクトからなるブロックをハッシュすることによってタイムスタンプを得て、新聞やUsenetのスレッド「2-5」などのハッシュ値を広く発表する。タイムスタンプは、データがハッシュ値を得る時点に存在することを証明するために使用される。各タイムスタンプのハッシュ値は、前のタイムスタンプを含み、各新しいタイムスタンプは、それ以前のタイムスタンプを強化するチェーンを形成する。

4.仕事量の証明

ポイントをもとに分散タイムスタンプサーバーを実現するには、Adam BackのようなHashcash[6]の作業量証明システムを使う必要があります。新聞やUsenetの書き込みではありません。作業量証明は、ハッシュの後にある値を検索すること、例えば、SHA−256に関連し、得られたハッシュ値は、ある数のゼロビットで開始される。必要な平均作業量は、要求されたゼロビットの数と指数関数的な関係を持ち、答えはハッシュ1回で検証される。

私たちのタイムスタンプネットワークについて、作業量証明メカニズムは、ブロック内でnonce値をインクリメントし、各nonceに対して、ハッシュ値が要求されるゼロビット数を満たすまで、ブロック全体のハッシュ値を計算する。CPUが作業量証明書を満足させるために努力していると、その作業をやり直さないとブロックを変えられない。その後のブロックはチェーンに入れられた後、このブロックを変えるための作業量はリフォーム後のブロックの作業を含めます。

仕事量証明の仕組みも多くの政策決定の中でどれが代表かを決める問題を解決しました。多くの定義がIPアドレスの一票に基づいている場合、多くのIPを割り当てることができる人はシステムを破壊することができる。作業量証明書は本質的にCPU一票です。ほとんどの決定は最長のチェーンによって表されています。これは最も多くの仕事量を証明する仕事が含まれています。ほとんどのCPUの能力が誠実なノードによって制御されると、誠実なチェーンは最も速くなり、競争チェーンを超えるようになります。過去のブロックを修正するには、攻撃者は後のブロックの工事証明を全部やり直して、誠実なノードの仕事を追い越さなければなりません。後に続くブロックが追加されると、より遅い攻撃者が追いかける確率が指数的に減少することを示します。

ハードウェア速度の増加を補償するために、時間の経過とともに、動作ノードに対する関心の変動を行うために、作業量証明の難しさは、1時間当たりの変化の平均数に依存する。ブロックの発生が速すぎると、難易度が高くなります。

5.ネットワーク

ネットワークを実行する手順は以下の通りです。

(1)新規取引はすべてのノードにブロードキャストされる。

(2)各ノードは、新しい取引をブロックに収集する。

(3)各ノードの作業は、困難なブロックの作業量証明を見つけることである。

(4)ノードが作業量証明を発見すると、ブロックは全てのノードにブロードキャストされる。

(5)ブロック内のすべての取引が有効で未払いの場合にのみ、ノードはブロックを受け入れる。

(6)ノードは、チェーン上で次のブロックを作成することによって、ブロックが受け入れられたことを表し、新規作成ブロックのプリアンブル・ハッシュとして受信ブロックのハッシュを使用する。

ノードは常に最も長い鎖が正しいと考え、それを拡張し続ける。二つのノードが同時に次のブロックの異なるバージョンをブロードキャストしている場合、いくつかのノードが先にこの1つまたは複数のブロックを受信することができる。その場合、彼らは最初のブロックの上で働いていますが、他の枝が長くなるのを防ぐために他の枝を保存します。次の作業量が発見され、一つの分岐が長くなると、平均が崩れます。別のブランチで動作するノードは、この長いブランチに切り替わる。

新しい取引の放送は必ずしもすべてのノードに届くとは限らない。彼らが多くのノードに到着すれば、近いうちに一つのブロックに入ります。ブロック放送もメッセージの紛失を容認します。ノードがブロックを受信していない場合、次のブロックを受信したとき、ブロックを逃したことを認識し、要求します。

6.激励

慣例によれば、ブロック内の最初の取引は特殊な取引であり、生成された貨幣はブロックの生成者に帰属する。これは、ノードがこのネットワークをサポートし、発行元、投入流通方式を提供しています。中央機構が発行していないためです。安定的に一定量の新貨幣類を増やし、金を掘って鉱夫の消耗資源を掘り起こしてから流通分野に投入する。我々の機構では,これはCPU時間と電力消費である。

取引費は激励にもなります。取引の出力値がその投資価値より小さい場合、差額は取引費用となります。当該取引を含むブロックの追加激励として。予定数量の貨幣がすでに流通に入ったら、激励は完全に取引費用に移行できます。インフレは全くありません。

インセンティブは、ノードが誠実であることを奨励するのに役立つかもしれない。もし欲張りな攻撃者が、すべての誠実なノードよりも多くのCPU計算力を組み立てることができれば、彼は選択に直面しなければならない。計算力を使って彼の支払いを盗み、詐欺を実現したり、新しい貨幣を生成したりする。彼はルールによってカードを出すほうがより有利だということを発見すべきです。このような規則は彼が獲得した新しい貨幣が他の人よりも多くなります。規則を破るのではなく、自分の財産の有効性を損なうのです。

7.ディスク空間の回収

新しい取引がチェーンに入れられ、そのチェーンの後に十分なブロックが拡張された後、取引が取り消されないことが確認された場合、ディスクの空間を節約するために、その取引の前の取引記録をなくすことができる。ブロックのハッシュを破壊しないで実現するために、トランザクションはMerkleツリー[7][2][5]にハッシュされ、Merkleツリーの根だけがブロックハッシュに含まれる。古いブロックはこのような剪定によってサイズを圧縮することができます。Merkleツリーの他に、他の内部ハッシュを保存する必要はない。

取引記録がないブロックのヘッダは80バイトぐらいです。10分ごとにブロックが発生すると仮定すると、毎年80バイト*6*24*365=4.2 MBとなります。2008年以前には、コンピュータシステムは一般的に2 GBのメモリがあり、ムーア法則はメモリが毎年1.2 GBの速度で増加すると予測しています。だから、すべてのブロックヘッドをメモリに入れなくても大丈夫です。

8.支払検査の簡略化

支払いは、完全なネットワークノードを実行しないで検証することができる。ユーザは最も長いチェーンのブロックヘッドコピーを保持するだけで、最も長いチェーンを持っていることを確認するまで、彼は継続的にクエリを開始することができます。このチェーン上のあるブロックはユーザーの取引先のMerkle分岐に接続することができます。ユーザーは自分でこの取引の有効性を確認することができませんでしたが、この取引をチェーンにリンクすることによって、彼はノードがそれを受け入れたことを見られます。その後、新たなブロックがリンクされています。これは取引がネット全体で確認されたことを示しています。

したがって、誠実なノードがネットワークを制御する限り、検証は確実であるが、ネットワークが攻撃者によって制御されるなら、検証は比較的に脆弱である。ネットワークノードは自分で取引を検証することができるので、攻撃者がネットワークを持続的に制御できる限り、簡略化された方法はハッカーによって捏造された取引に翻弄されます。このような状況を防止するためのポリシーは、ネットワークノードが無効ブロックを検出したときにアラームを発行し、無効ブロックまたはトランザクションの完全な情報をダウンロードするようにユーザに指示し、不一致を確認することである。収益業務が頻繁な企業は、より独立した安全性とより高速な検証を得るために、自分のノードを実行したいかもしれない。

9.合併と分割価値

単独で貨幣を処理することは可能ですが、一円ごとに単独で取引するのは難しいです。価値を分割して結合させるために、取引は複数の入力と出力を含む。一般的に、大きなプリアンブル取引からの単一入力または複数の小さなプリアンブル取引からのまとめ入力があり、最大2つの出力が可能である。一つはお支払いに用いられ、もう一つはお釣りを元に戻すためのものである。

各取引は前の複数の取引に依存しています。この複数の取引は前のより多くの取引に依存しています。これは問題ではありません。このようなメカニズムでは、検査前のすべての取引履歴を展開する必要はない。

10.プライバシー

従来の銀行業務パターンは、当事者と信頼できる第三者の情報取得を制限することにより、ある程度のプライバシー保護を実現しています。このメカニズムでは、すべての取引を公開するので、この方法はできないが、プライバシーは依然として保護され、別の方向で情報の流れを遮断することができ、すなわち公開鍵の匿名性を維持する。公衆はある人が他の人に金額を送っているのを見ることができますが、取引を誰の情報にも接続できませんでした。これは証券取引所の情報開示メカニズムと似ています。取引時間、個人取引の規模は全部記録され、公開されていますが、当事者は誰ですか?

追加の予防措置として、各トランザクションは共通の所有者に向けられないように、新しい鍵のペアを使用しなければならない。多点入力の取引では、いくつかの連絡は依然として避けられず、必然的に彼らの入力が同じ所有者であることを示しています。リスクは、鍵の所有者が明らかにされた場合、他の取引も所有者に属することを明らかにすることができる。

11.計算方式

次のシナリオを考慮して、攻撃者は、正直なチェーンよりも速い速度で別のチェーンを生成しようとする。このようにして完成しても、システムは任意の変更に開放されません。例えば、無作為の創造価値や攻撃者に属さないお金を得ることができます。ノードは、支払いとして無効な取引を受け入れない。誠実なノードは、無効な取引を含むブロックを永遠に受け入れない。攻撃者は自分の取引を変えて、最近使ったお金を取り戻すしかないです。

正直なチェーンと攻撃者チェーンの間の競争は、二叉樹がランダムに移動すると定性的に決められます。成功した事件は誠実なチェーンブロックであり、+1をリードしています。失敗した事件は攻撃者のチェーンがブロックを延長しています。

攻撃者が与えられた遅れから追いつく確率は、ギャンブラーの破産問題に似ています。無限信用のギャンブラーを仮定して、赤字からの潜在的な無限の試みを開始し、損失を埋める。彼が欠損を埋める確率、すなわち攻撃者が誠実なチェーンに追いつく確率を計算できます。

p=誠実ノードが次のブロックを見つける確率

q=攻撃者が次のブロックを見つける確率

qz=攻撃者が後ろのzブロックから追いつく確率

p>qを仮定すると、成功確率は、攻撃者が追跡する必要があるブロックの数が増加すると指数関数的に減少する。勝算は攻撃者側ではないので、もし彼が十分な幸運がないならば、彼のチャンスはどんどん小さくなります。

私たちは今新しい取引の受取人を検討していますが、どれぐらい待つべきですか?発起人が取引を変更できないことを十分に確認できます。発起人が攻撃者だと仮定して、彼は受け取った人に一定の時間内に彼がすでに支払ったことを信じてもらいたいです。そして、貨幣を自分に返します。その時