ビットコイン 仕組み

私は比較的最近ビットコインについて学びましたが、彼はすぐにp2pのアイデアで私を買収しました。 深い私は彼らに埋もれウィキ編集 、このアイデアでより多くの染められ。 その実装は、技術的な観点から見て美しくエレガントです。



ビットコインの検索Habraのは、与え2つの トピックを 。 しかし、これはもっとニュースです。 コメントによると、多くの人々、特にビットコインに直接精通していない人々は、その操作の原則について多くの質問をしていることが注目されます。 また、当て推量の多くは、多くの場合、間違いました。 どういうわけか状況を明らかにするために、この記事を書くことにしました。



本当のお金?



ビットコインについての主な誤解のリストの最初の場所は、ビットコインは別の「紙」であるという考えによって占められています。 したがって、残りのエラーのほとんどを発信:紙のこの作品ならば、彼らは何も価値がありません。 必要なだけ印刷または破棄できます。 彼らは偽造することができます。 コピーできます。



繰り返しますが、これはすべて妄想に過ぎません。 ビットコインの考え方の基本は、だけではなく、金のような、本当のお金を表す別の「一枚の紙」、および金のアナログを作成する欲求を築きます。 それが理想的なお金であるおかげで、金の特性を取り、それらに基づいて電子通貨を作ります。



マイニングの難易度


金はコピーできません-採掘のみ可能です。 しかし、これは時間とリソースの両方で非常にコストのかかるプロセスです。 そのため、金は非常に高く評価されています。 より明確にするために、例を考えてみましょう。



一日中鉱山の金へのハードと1キロの結果得られた人物を仮定します。 彼にとって、採掘された金の価値は、1日の大変な仕事です。 忙しい一日を過ごした後、彼はリラックスして映画館に行くことにしました。 幸運な偶然により、レジ係は金と引き換えにチケットを渡しました。 なんで? レジ係は金が好きですが、つるはしで一日中働くのは好きではないからです。 チケットを与えるために - - 金の1キロと引き換えにそのため、サービスを提供する準備ができています。 実際、彼は1日の勤勉な仕事と交換します。



今、別の状況を想像してください。 金で動作するコピー機を発明しました。 そして、誰でも1分間に1kgの金から10kgを作ることができます。 この状況では、レジ係は自分で金をチケットと交換することはもうありません。なぜなら、彼は自分で好きなだけ簡単に金を印刷できるからです。 ゴールドは、もはや任意の値を持ちません、それはお金として使用することはできません。



ビットコインでは、コインを抽出するプロセスにもリソースと時間が必要です。 しかし、この場合、これらは人的資源ではなく、コンピューター資源です。



従来は、限られたリソース


長い採掘された金、より困難な(高価なリソース)は、彼のプロデュースとなります。 これにより、インフレが確実に制御されます。



ビットコインでは、時間の経過とともに採掘されたコイン全体の速度の関数を導入することにより、同様の動作が実現されます。 この関数は時間と共に反比例し、T。E.であり、速度がゼロまで低下します。 この関数の時間積分を取ると、指数関数が得られます。 このようなもの:



ここでは、コインの総数が2100万に近づいていることがわかります。ビットコインの操作の詳細については後述します。 一方で、あなたは二つのことを知っている必要があります:コインは、約10分ごとに、1パック内のコイン数バッチでシステムに表示されます - 50、そしてそれは4年ごとに半減しています。



マテリアリティ


このプロパティは、非電子通貨ほど金ではありません。 1つの金の延べ棒をサービスまたは製品と2回交換することはできません。 つまり、ある時点で、彼は売り手または買い手になることができます。



このような振る舞いは、物質的な通貨にとっては当然ですが、電子通貨にとってはそうではありません。 この仮想マネーの振る舞いを実現するには、多くの工夫が必要です。 ビットコインでは、この動作はトランザクションメカニズムによって提供されます。 すべてのトランザクションは一緒に連鎖されます。 各トランザクションは、1回の以上の既存の取引からコインを取り出し、誰それらが意図されているために示しています。 したがって、チェーン全体の有効性をいつでも確認できます。



マイニングの複雑さ、限られたリソース、重要性-これらのプロパティ、およびセキュリティのための暗号化の使用により、ビットコインをお金として使用できます。 彼らは、ビットコインコアをベースとしています。 これは単なる取り決めではありません。 それらはすべて、設計システムに組み込まれており、別の方法では機能しません。 まさにこの設計を検討する時です。



ブロックチェーン



電子決済システムは、どこかで何らかの形でトランザクションを保存する必要があります。 ビットコインでは、すべての情報はブロックのチェーンに保存されます。 ブロックはJSON形式で送信されます。 各ブロックは、ヘッダとトランザクションのリストを含みます。 ヘッダーはいくつかのプロパティで構成され、その中には前のブロックのハッシュが含まれます。 このように、ブロックのチェーン全体は、すべての時間ビットコインのためにすべてのトランザクションを格納します。



ビットコインプログラムの現在のバージョンでは、ブロックチェーンが各クライアントによって完全にダウンロードされるため、システムが完全に分散化されます。 データは決して暗号化されておらず、誰でもすべてのトランザクションを手動で追跡できます。 Bitcoin Block Explorerという特別なサイトもあります。ここでは、ブロックとトランザクションに関するすべての情報を簡単に確認できます。



執筆時点では、チェーン内のブロック数は110 968でしたが、前述したように、この数は約10分ごとに増加するため、参加者の1人が新しいブロックを作成できました。



ちなみに、すべての参加者は、新しいブロックで作業している人と作業していない人の2つのグループに分かれています。 統計によると、これらのグループは1〜3として相関しています。なぜブロックを作成するのか、10分ごとに作成するのか。 レコードトランザクションをブロックします。 各ブロックには、作成中、つまり10分間に発生したすべてのトランザクションが含まれます。



次のように機能します。 ある顧客は、新しいトランザクションを作成し、生成ユニットに従事している他の顧客に送信します。 彼らは、彼のユニットには、このトランザクションを追加し、生成し続けます。 遅かれ早かれ、誰かがブロックを生成できるようになります。 このブロックは封印され(トランザクションは追加されなくなり)、ネットワーク経由で送信されます。 次に、クライアントはブロックとその中のトランザクションの有効性をチェックします。 問題がなければ、トランザクションは承認されたと見なされます。 この時点で、新鮮なユニットは、すべてのクライアントに達しているとチェーンに追加しました。 顧客がユニットの生成を開始し、彼の新しい取引で集めたら - その後、処理が繰り返されます。



ブロックする



ブロックの内容とその生成プロセスをより詳細に検討してください。 ブロックの例は、同じBitcoin Block Explorerにあります。 ブロックは、ヘッダーとトランザクションのリストで構成されます。 ヘッダは、次のプロパティで構成されています。



hash-ブロックヘッダーのSHA-256ハッシュ。 このようなハッシュは非常にランダムであり、その計算時間は予測可能です。 トランザクションなしで、ヘッダーのみがハッシュされることに注意してください。 そのため、トランザクションの数はハッシュ計算時間に大きく影響しません。



-バージョンブロック図。 現時点では、すべてのブロックに1つのバージョンがあります-1。



prev_block-チェーン内の前のブロックのハッシュ。 ブロックハッシュは常にチェーンの前のブロックのハッシュに依存して、このプロパティのため、ブロックの一つで、それを交換、チェーンを偽造することはできません。 ブロックの1つを変更すると、後続のすべてのブロックを再作成する必要があります。



mrkl_root -マークルルート-ハッシュのトランザクションのリスト。 ハッシュユニットは、必ずしもトランザクションに依存しなければならない、彼らは偽造することはできません。 ただし、トランザクション数が多い場合は、直接計算するのに時間がかかります。 したがって、トランザクション自体が最初にハッシュされ、次にそれらのハッシュを使用してブロック全体のハッシュが計算されます。



それは不条理に見えるかもしれません - なぜダブル同じのハッシュを計算します。 しかし、あなたは新しいトランザクションブロックを追加するときに、トランザクション・ハッシュのみが更新されていること、およびブロックヘッダのハッシュは、毎秒何千回も再計算されます。 さらに、定数内のヘッダーのサイズが近いほど、ハッシュを計算する時間をより正確に予測できます。



時間 -のuint32_tは、ユニットの作成を表しています。 最大許容年は2106です。



bits-最も重要なプロパティの1つ。 これは、ターゲットハッシュ値の短縮形です。 それは、この目標値未満である場合、ブロックは、(有効)ハッシュが生成されます。 目標値は、ブロックを作成することの難しさを決定します。 小さなそれは、1回の繰り返しで、適切なハッシュを見つけにくくなります。 このプロパティは2週間ごとに更新されます。



これは次のように発生します。 過去2週間に生成されたブロックの数が計算され、標準(10分ごとに1ブロック)と比較されます。 ブロックが多すぎると、複雑さが増します。 小さい - ブロックが小さすぎる場合。 したがって、システムは、ユーザの数と、結果として、コンピュータの総電力を増加するように構成されています。



nonce-ゼロから始まり、ハッシュの計算が繰り返されるたびに増加する数値。 実際には、ハッシュが目標値よりも小さくなりません限り、あまり起こります。 各新しいハッシュにブロックヘッダの特性の少なくとも1つ異なるように、異なっています。



たとえば、バージョンが変わることはありません。 前のブロックのハッシュは、誰かが私たちの先を行き、新しいブロックを生成するときに更新されます。 トランザクションが追加されると、マークルルートが更新されます。 時間-数秒ごと。 ビット(目標値、難易度)-2週間ごと。 これはすべて長すぎます。 プロパティの1つが更新されてnonceが存在するまで待機しないため。



仮定の状況を考えてみましょう。 すべてのナンス値が検証されており、どれも適切ではありません。 この間、他のプロパティは変更されていません。 Nonceオーバーフローが発生し、再びゼロから開始します。 さらに、ハッシュが繰り返されることが判明しました。 トランザクションの1つの特別なプロパティを変更し、オーバーフローナンス後に、このような状況を避けるために。 その後、マークルのルートハッシュを更新し、ブロックヘッダが繰り返されるべきではありません。



n_tx-リスト内のトランザクションの数。



size-ブロックのサイズ(バイト単位)。



取引



トランザクションは、リスト形式のブロックに含まれています。 彼らは、ブロックのように、鎖状に並んでいます。 各トランザクションはどこに送信することが(現在のトランザクションから)お金を取る場所を示す、とすべきです。



宛先を指定するために、その公開鍵が使用されます。 受取人が受け取ったお金を使用できるように、彼は前の取引からお金を取り、別の住所にリダイレクトする新しいトランザクションを作成する必要があります。 人が送金に他人のお金ではなく自分のお金を使用していることを証明するには、取引にデジタル署名を残す必要があります。 その後、いつでもシステム内のすべてのトランザクションが有効であることを確認できます。



実際には、これはすべて次のプロパティを使用して実装されます。



hash-トランザクション全体のハッシュ。 トランザクションが2回ハッシュされることがわかります。 トランザクションハッシュ計算中に初めて。 ハッシュ計算部間に二度目。 さらに、各ブロックは前のブロックのハッシュを参照し、各トランザクションは前のトランザクションのハッシュを参照します。 トランザクションを変更し、何らかの奇跡によってそのハッシュが壊れない場合、他のすべてのハッシュは壊れ、変更されたブロックチェーンはすべてのクライアントによって拒否されます。



ver-トランザクションスキームのバージョン。 これまでのところ、変更されたことはないため、どこでも1に等しくなります。



vin_sz-お金が新しい住所に送金される以前のトランザクションの数。 1つ以上。



vout_sz -お金を転送するにアドレスの数。 一つ以上。



lock_time-まだ使用されておらず、0に等しいすべての場所。アイデアは、保留中のトランザクションを作成して、現在の生成されたブロックではなく、たとえば前方のブロックに追加することです。 このプロパティを追加する前にトランザクションをスキップしなければならないブロックの数を示していることがわかります。 これにより、トランザクションを変更し、しばらくの間再署名することができます。



size-バイト単位のトランザクションサイズ。 トランザクションサイズはJSON形式です。



in-トランザクション入力(ソース)のリストが含まれます。 前のトランザクションの出力( prev_out )が入力として使用されます。 各出力には次のプロパティがあります。



hash-前のトランザクションのハッシュ。



n-トランザクションには複数の出口がある場合があるため、どれにお金がかかるかを示す必要があります。 このため、このプロパティが存在します。 これは、0から始まる、前のトランザクションの出力のシリアル番号が含まれています。



scriptSig-このプロパティでは、送信者は、他人の送金ではなく、自分のお金を正確に送金していることを証明する必要があります。 これを行うために、彼は以前のトランザクションの受信者の公開鍵、つまり受信者でなければならないため、彼自身の鍵を示します。 また、同氏は付け加えたECDSAの彼の秘密鍵を作った同じトランザクションの署名を。 これは彼がいない誰か他の人の、自分のお金を処分することを証明しています。



トランザクションリストエントリ(中)の後、M、出力(OUT)のリストを示す。E.受信者。 各出力には次のプロパティがあります。



value-新しい住所に送金される金額が含まれています。 それらは以前のトランザクションからのものです。 したがって、この数はその量を超えてはなりません。 たとえば、1つのトランザクションから10枚のコインを受け取り、別のトランザクションから20枚のコインを受け取り、25を新しいアドレスに送信します。 残り5枚のコインがでていないために、我々は変化として自分自身に送信します。 したがって、トランザクションには2人の受信者が存在し、そのうちの1人は自分自身です。 値は常に小数を避けるためにnanomonetahに指定されています。



scriptPubKey-このプロパティは、 scriptSigとともに、修正されたForthライクな言語でスクリプトを作成します。 ScriptPubKeyには、言語の演算子と、トランザクション受信者の公開キーのハッシュが含まれています。 スクリプトは、トランザクションの有効性をチェックします。 このようなシナリオを使用すると、受取人がお金を受け取るための条件を説明する豊富な機会が得られます。 たとえば、受信者にECDSAの代わりにパスワードを指定させることができます。



トランザクションの入力時の合計金額は、出力時の合計金額と常に等しくなります。 そうでなければ、お金はどちらか空中から生じたか、循環から消えています。 しかし、最初はお金の数が指数関数的に増加していることを示すグラフがありました。 それでは、システム内の新しいお金はどこから来ますか?



私の好みのために、お金の問題は、簡単かつエレガントに実現されています。 リスト内の最初のトランザクションの各ブロックは、特別なトランザクションです。 常に1つの入力があり、 scriptSigプロパティの代わりにcoinbaseプロパティがあります。 このプロパティには何でも含めることができます。



トランザクションの出力も常に同じです。 これは、このトランザクションを収容するブロックを、生成された人に50枚のコインにリダイレクトします。 これは、ブロックの生成に費やした時間とリソースに対する一種の報酬です。 チェーン内に新しいブロックを作成することにより、クライアントはビットコインの作業に貢献します。



4年ごとにこの賞は半分になるため、流通しているコインの総数は安定します。 その後、攻撃者がプログラムの修正版を使用してブロックを作成し、自分に50コインを割り当てたとしても、このブロックは他の正直なクライアントによって拒否されるため、チェーンに追加されません。



システムの安定性は、公式クライアントを実行しているユーザーの数に基づいています。 それらのほとんどがある限り、ビットコインは危険にさらされていません。



おわりに



作業証明は、達成が困難であるが検証が容易な作業の結果です。 ビットコインネットワークは、この原理に基づいています。 ハッシュ(作業の結果)を一瞬で確認できます。 そして、それを拾うために、それは多くの作業を要します。



ここで、金の類推を思い出すことができます。金の抽出には多くの時間とリソースが必要です。 しかし、あなたが金になる前に、あなたはほとんどすぐにそれを理解することができます。 この意味で、ビットコインにもその価値があります。 しかし、これをコンピューターがハッシュの選択中に使用したドルまたは電気料金の価格として理解しないでください。



ドルでの価格は少し異なります。 これはビットコインに固有のものではなく、市場によってのみ決定されます。 結局のところ、金自体は特定の価格をドルで保証するものでもありません。 金とドルを交換したい人によってのみ保証されます。



金の元の価格は、それを得る人々によってのみ決定されます。 採掘された金について、彼はそれを採掘する努力を補うことができるほど多くを要求しました。 そしてその後、市場は金の価格に影響を与え始めます。



ビットコインが市場に参入すると、その価値はシステムの信頼レベルによってのみ決定されます。 より多くの人々が信頼すればするほど、彼らはビットコインをより多く購入し、より多くのドルを投資し、その結果、より高価なビットコインになります。



人々がビットコインを信頼する前に、彼らはこのシステムに十分なセキュリティがあるかどうか、そしてそれがお金として使用できるかどうか、つまり最初にリストしたお金の特性を持っているかどうかを知る必要があります。 ビットコインの原則で確認だけrazobravshitのために知っています。



この記事の後、ビットコインの信頼レベルが少なくともわずかに上昇することを願っています。



All Articles