ビットコインのプロトコルはどのように機能する?

作者: リン・ハーン小さな夢作成日: 2017-01-19 18:30:04,更新日:

ビットコインのプロトコルはどのように機能する?

  • ビットコイン

    さて,Infocoinを離れて,本当のBitcoinプロトコルに移りましょう. Bitcoinと私たちが一歩一歩で構築したInfocoinは,大きな違いはありません.

    ビットコインを使用するには,まずコンピュータに財布をインストールする必要があります. よりよく理解するために,下図はMultibitと呼ばれる財布のスクリーンショットです. 左上角では,ビットコインのバランスが0.06555555ビットコインで,スクリーンショットの当時の取引価格がほぼ70ドルでした.右のスクリーンショットは,この0.06555555ビットコインに保管されている2つの最近の取引を示しています.

    img

    オンラインショップを立ち上げ,顧客にビットコインで支払いを許可することを決めました. 必要なのは,あなたのウォレットプログラムで新しいビットコインアドレスを生成することです. それは自動的に公钥とプライベートキーのペアを生成し,あなたの公钥をハッシュしてあなたのビットコインアドレスを形成します.

    img

    その後,あなたのビットコインアドレスを,あなたに支払いをする人に送信します. あなたはメールボックスを使用したり,直接あなたのウェブサイトに書き込むことができます. これは安全です. あなたの住所がハッシュされた公開鍵に過ぎませんので,あなたは誰にでも安心して公開することができます. ("誰もそれを通してあなたのプライベートキーを得ることができない"). 私は後で説明します. なぜBitcoinアドレスは,公共鍵のハッシュ値を使用するのではなく,公共の鍵自体です.

    支払いをする人は新しい取引を作成する必要があります.0.319ビットコインの実際の取引データを見てみましょう.下記はほぼ元のデータです.ここでは3つの場所が変化しています: 1) データは連続していません. 2) 分かりやすくするために行番号を追加しました. 3) ハッシュデータの長い文字列を省略し,最初の6桁だけ保持しました.

    1.  {"hash":"7c4025...",
    2.  "ver":1,
    3.  "vin_sz":1,
    4.  "vout_sz":1,
    5.  "lock_time":0,
    6.  "size":224,
    7.  "in":[
    8.    {"prev_out":
    9.      {"hash":"2007ae...",
    10.      "n":0},
    11.    "scriptSig":"304502... 042b2d..."}],
    12. "out":[
    13.   {"value":"0.31900000",
    14.    "scriptPubKey":"OP_DUP OP_HASH160 a7db6f OP_EQUALVERIFY OP_CHECKSIG"}]}
    
    • この記事へのトラックバック一覧です.

      第1行,取引のハッシュ値 ((16進法),彼はこの取引を代表するために使用される唯一のマークである.

      2行目は,この取引が最初のバージョンのビットコインプロトコルを使用していることを教えてくれます.

      このトランザクションにはインプットとアウトプットがあります. (トランザクションには複数のインプットとアウトプットがあります)

      第5行はロックタイム (lock_time) で,取引がいつ完了するかを制御できます.現在,ほとんどのビットコイン取引のロックタイムは0で,即座に完了します.

      取引の大きさを教えてくれる第6行はバイトです.

      この項目は,この取引の入力部分を定義しています. 正確に言うと,8〜10行は,この送金する入力の価値が前回の取引の出力の価値から得られたお金であることを教えてくれます. その2007aeは,前回の取引の16進法ハッシュ値です. 上昇する取引を指します. n=0は,前回の取引の最初の出力です.

      この入力部分では,前回の取引で多少のビットコインが次回の取引に移転するとは言っていないことに注意すべきです. 実際,前回の取引でn=0の出力中のすべてのビットコインが移転されています. 例えば,前回の取引で最初の出力 ((n=0) に2つのビットコインがあった場合,これらの2つのビットコインが新しい取引で消費されます. これは,現金20ドルでパンを買うような不便なものに見えます. 解決策は,複数の入力と出力の方法によって解決できる零金メカニズムを提供することです. 次の部分は話します.

      12〜14行,この段落は取引の出力を定義します.具体的には,13行は出出的金額を教えてくれます.ここでは0.319ビットコインです. 14行は比較的複雑です. 注目すべきは,文字列a7db6f...がビットコインの取付アドレスです. この行は実際にはビットコインのスクリプト言語で,スクリプト言語の詳細は述べていません.

      さて,Bitcoinが,先ほどお話ししたシミュレーション番号がどこから来たのかという問題をどのように解決しているかをご覧いただけます. まず,Bitcoinは単一のシミュレーション番号ではなく,ブロックチェーンの上で存在する取引の長い列です. 取引帳簿を保存することでBitcoinを実現することは賢明なアイデアです.

      取引の連鎖を次々と繰り返すことができます. 最終的には,二つの可能性があります. 第一に,最初のビットコイン取引にたどり着く可能性があります. この取引はブロックの中に存在します. このブロックは"Genesisブロック"と呼ばれています. これは特別な取引です. 輸入はなく,50ビットコインの出荷だけです. 言い換えれば,それは最初のBitcoin供給です. Genesisブロックはビットコインクライアントによって区別され,ここで詳細は述べません.

      取引の連鎖を繰り返す第2の結果として,あなたはcoinbaseと呼ばれる取引にたどり着く可能性があります.Genesisブロックを除いて,各ブロックは特別なcoinbase取引から始まります.この取引は,ブロックで取引を検証する鉱夫を報酬にします.これは上記のデータ形式に類似しています.

      上記の記述では,11行にデジタル署名されたものが何なのかがはっきりしていない. 最も明らかな方法は,支払者が取引全体をデジタル署名するようにすることです. 現時点では,そうではありません. いくつかの取引は無視されています. これは取引の一部を可塑性を与えます. つまり,後で変更することができます. しかし,この可塑性には取引の数,支払者や受領者が含まれていません.

  • 複数の輸入と輸出取引があります

    前回のセクションでは,単一の入力と単一の出力を持つ取引データについて説明しました. 実際,ほとんどのビットコイン取引は複数の入力または複数の出力があります. まず,この取引の原始データを見てみましょう.

    1. {"hash":"993830...",
    2. "ver":1,
    3. "vin_sz":3,
    4.  "vout_sz":2,
    5.  "lock_time":0,
    6.  "size":552,
    7.  "in":[
    8.    {"prev_out":{
    9.      "hash":"3beabc...",
    10.        "n":0},
    11.     "scriptSig":"304402... 04c7d2..."},
    12.    {"prev_out":{
    13.        "hash":"fdae9b...",
    14.        "n":0},
    15.      "scriptSig":"304502... 026e15..."},
    16.    {"prev_out":{
    17.        "hash":"20c86b...",
    18.        "n":1},
    19.      "scriptSig":"304402... 038a52..."}],
    20.  "out":[
    21.    {"value":"0.01068000",
    22.      "scriptPubKey":"OP_DUP OP_HASH160 e8c306... OP_EQUALVERIFY OP_CHECKSIG"},
    23.    {"value":"4.00000000",
    24.      "scriptPubKey":"OP_DUP OP_HASH160 d644e3... OP_EQUALVERIFY OP_CHECKSIG"}]}
    
    • この記事の記事へのトラックバック一覧です.

      1行,取引のハッシュ値,この取引の唯一標識として使用される.

      2行目,ビットコインプロトコルのバージョン,第1版.

      この取引には3つの入力と2つの出力があります.

      5行目,ロック時間 (前と同じ) ・

      6行目,取引のバイトサイズ.

      7~19行は,すべての入力を定義し,それぞれが前の取引の出力に対応します. 最初の入力は8~11行です. 内容形式は前と同じです. 2番目の入力は12~15行, 3番目の入力は16~19行です.

      列20から24は,すべての出力を定義し,最初の出力は21と22で,前と同じように,21列は0.01068のビットコインがあると言っている. 22列はビットコインのスクリプト言語である. 文字列e8c30622...は受信者のアドレスである. 第二の出力は23と24列で,形式は同じである.

      奇妙なことに,各出力にはビットコインの数が記録されているが,入力にはない. もちろん,各出力には,その前の取引からどれだけのビットコインが得られるか.通常のビットコイン取引では,すべての入力価値の合計が多くの出力よりも大きい. (ちょうど述べたGenesisブロックとcoinbase取引を除いて),入力の合計が輸出よりも大きい場合,余分なビットコインが取引料として取引中のブロックの鉱夫に提供されます.

      複数の入力と出力の役割はゼロを見つけることです. 私が0.15ビットコインをあなたに与えたいと仮定します. 私は0.2ビットコインを以前受け取ったものを使いたいです. もちろん,0.2ビットコインをすべてあなたに与えたくないので,解決策は0.15ビットコインを送って,0.05ビットコインを自分の別のビットコインアドレスに送るということです.

  • 結論

    ビットコインの基本概念は,説明が完了したとしても. もちろん,私は多くの詳細を省略しています. これは正式な説明書ではありません. しかし,私が説明したいのは,一般的に使用されるビットコインの概念です.

    ビットコインのルールがシンプルで分かりやすいとは限りませんが,それがもたらすすべての結果も理解しやすいとは限りません. ビットコインについて語られることはたくさんあります.

    ビットコインはどの程度匿名なのか?多くの人々は,ビットコインは匿名で使用できると言う.この主張はシルクロードのようなブラックマーケットで形成された.しかし,この主張は虚構である.ブロックチェーンは公開であり,すべてのビットコイン取引を誰でも見ることができることを意味する.また,ビットコインの住所が現実世界の人のアイデンティティと直接一致していないにもかかわらず,コンピュータ科学者は匿名で隠されたソーシャルネットワークを解読するために多くの作業をしてきた.ブロックチェーンは彼らの素晴らしい目標である.近い将来,ほとんどのビットコインユーザーのアイデンティティは比較的自信を持って識別できない場合,私は驚かれる.識別は必ずしも完全に確認されることはないが,十分な可能性のある目標を提供している.さらに,アイデンティティのツールは追溯可能である.この意味では,2011年にシルクロードで麻薬を販売した人々,2020年まで匿名で匿名で暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化された暗号化

    ビットコインでお金持ちになれるのか? そうかもしれない.ティム・オー・ライリーはかつて言いました. お金を稼ぐのは車の中の油田のようなもので,注意を払う必要がある,そうでなければ路面に引っかかってしまうでしょう. しかし,人生はガソリンスタンドの周りを回転するものではありません. ビットコインへの関心は,人生の目的が大きなガソリンスタンドを見つけることだけである人々から来ているようです.

    私が見逃した詳細:この記事でビットコインの背後にある主要な概念を記述しているものの,私は言及していない多くの詳細があります. そのうちの1つは,メルクルツリーと呼ばれるデータ構造に基づいたプロトコル内の素晴らしいスペース節約技です. これは詳細ですが,データ構造が好きなら見学する価値のある非常に素晴らしい詳細です. あなたはBitcoinのホワイトペーパーを通して概要を知ることができます.

    ビットコインスクリプト:この記事では,Bitcoinをオンラインの電子通貨として説明します. しかし,これはより大きな,より興味深い物語のほんの一部です. ご覧の通り,すべてのビットコイン取引にはビットコインスクリプト言語があります. このスクリプトは,この記事で,こんな風に簡略化されています. "Alice は Bob に 10 ビットコインを与えるつもりです". しかし,このスクリプト言語は同時に,より複雑な取引を表すために使用できます. 言い換えれば,Bitcoin はプログラム可能な通貨です.

    この記事の原著者マイケル・ニールセンに 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZで連絡してください. また,ツイッターで彼をフォローしたり,ニューラルネットワークとディープラーニングに関する彼の新しい本の第1章をフォローすることもできます.

    翻訳者の微博:1015にもご参加ください.

雑誌『』から引用


もっと