avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

ビットコイン プロトコルの仕組み (パート 2)

作成日:: 2017-01-19 18:30:04, 更新日::
comments   0
hits   1831

ビットコイン プロトコルの仕組み (パート 2)

  • #### ビットコイン

さて,Infocoinを離れて,本当のBitcoinのプロトコルに移りましょう.

ビットコインを使用するには,まずコンピュータにウォレットをインストールする必要があります. 分かりやすくするために,下記はMultibitと呼ばれるウォレットのスクリーンショットです. 画面の左上隅で,ビットコインの余剰額が0.06555555ビットコインで増加しているのがわかります.

ビットコイン プロトコルの仕組み (パート 2)

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

ビットコイン プロトコルの仕組み (パート 2)

ビットコインのアドレスを メールで送ったり ウェブページに直接載せたりできます. 安全なことです. アドレスがハッシュされたパブリックキーで, 誰にも公開してはいけません. (誰もあなたのプライベートキーを取得することはできません). ビットコインのアドレスはなぜ,パブリックキーではなく,パブリックキーのハッシュ値を使用するのか, 後で説明します.

支払いを準備している人は新しい取引を作成する必要があります. 0.319ビットコインを実際の取引データに変換してみましょう. 以下は,ほぼ原始データです. 3つの場所の変更があります: 1) データは連続化されていません.

  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進制),この取引を表現する唯一の標識である.

    この取引は,第1バージョンのBitcoinプロトコルを使用していることが示されています.

    3行目と4行目で,この取引には,入力と出力があることがわかります.

    5行目には,この取引がいつ完了するかを制御するために使用できるロックタイム (lock_time) があります.現在,ほとんどのビットコイン取引のロック時間は0です.つまり,すぐに取引を完了します.

    この取引の大きさは何バイトで,注意してください,これは取引のお金ではありません.

    7から11の行は,この取引のインプットを定義します.正確には,8から10の行は,送金するこのインプット値が,前の取引のアウトプット値から得たものであることを教えてくれます. 2007ae…は,前の取引の16進制のハッシュ値で,上向きに取引を指します.

    ここで注目すべきは,入力の部分では,前回の取引からどれだけのビットコインが次へ渡されるかについて言及していない点です. 実際,前回の取引でn=0の出力中のすべてのビットコインが移されている点です. 例えば,前回の取引の最初の出力で (n=0) に2つのビットコインが含まれていた場合,この新しい取引でこの2つのビットコインが消費されます. これは,$20の現金でパンを買うような不便に見えます. 解決策は,お金を探すためのメカニズムを提供することです. これは,複数の入力と出力によって解決できます. 次のセクションで説明します.

    12から14の行は,取引の出力を定義している.具体的には,13は出力されたお金の量を示している.これは0.319ビットコインである.14の行は,より複雑で,注意すべきは,文字列a7db6f…は,ビットコインの受信アドレスである.この行は,実際には,ビットコインのスクリプト言語の一部であり,ここではスクリプト言語の詳細について詳しく述べません.あなたはa7db6f…が受信アドレスであることを知るだけで行います.

    さて,ビットコインが,私たちが先ほど話したのシリアル番号がどこから来たのかという問題をどのように解決したかを見ることができます. 第一に,ビットコインは,単一のではなく,ブロックチェーンに存在する一連のトランザクションです. 取引口座を保存することで,ビットコインを実現することは非常に賢いアイデアです.

    取引の鎖を繰り返して見直すことができます. 最終的に,二つの可能性があります. まず,あなたは最初のビットコイン取引に行き,その取引はブロックの中に存在します. このブロックは,Genesis block (初期ブロック) と呼ばれています. これは,入力がなく,50ビットコインの出力を持つ特別な取引です.

    取引の鎖に沿って往復する2つ目の結果として,あなたが”coinbase“と呼ばれる取引にたどり着く可能性があります. ゲネシスブロックを除いて,各ブロックは特別な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行目や4行目には,この取引には 3つの入力があり, 2つの出力があります.

    5行目,ロックタイム ((前と同じ) でした) でした.

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

    7~19行は,すべての入力を定義し,それぞれが,この前の取引の出力に対応する.最初の入力は8~11行である.その内容形式は,以前のものと同じである.第二の入力は12~15行であり,第三は16~19行である.

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

    奇妙なことに,出力にはビットコインの量があるが,入力はそうではない.当然,各入力は,その前の取引からどのくらいのビットコインを得ることができるのか.通常のビットコイン取引では,すべての入力の価値の合計は,出力よりも大きい (Genesisブロックとcoinbase取引を除く).出力よりも大きい場合は,余剰ビットコインは,取引手数料として,この取引場所のブロックの鉱夫に提供されます.

    複数の入力と出力で 0 を探すのです. 0.15 のビットコインをあなたに渡したいと仮定しましょう. 前に受け取った 0.2 のビットコインを消し去ることができます. もちろん,0.2 のすべてをあなたに渡したくないので,解決策は,0.15 のビットコインをあなたに送って,0.05 のビットコインを私の別のビットコインアドレスに送ることです.

  • 結論

ビットコインの背後にある基本概念は説明済みです。もちろん,私は多くの詳細を無視しました。これは公式な説明書ではありません。しかし,私が説明したいのは,一般的に使われているビットコインの背後にある概念です。

ビットコインの背後にあるルールは単純で分かりやすいですが,そのルールによって生じる全ての結果も分かりやすいとは限りません. ビットコインについて語るべきことはたくさんあります. 後日記事で説明します.

ビットコインは匿名で利用できるのか? 多くの人が,ビットコインは匿名で利用できるという.この主張は,シルクロードのような闇市場で形成されたという.しかし,この主張は虚構である.ブロックチェーンは公開されているので,誰でもビットコインの全ての取引を見ることができる.ビットコインのアドレスが,現実世界の人物の身元と直接に一致することはないが,コンピュータ科学者は,匿名性の秘密を隠すためのソーシャルネットワークを解読するために多くの仕事をしている.ブロックチェーンは,彼らの素晴らしい目標である.近い将来,ほとんどのビットコインのユーザーの身元が,比較的自信を持って識別できないなら,私は驚かれるだろう.この識別は,完全に確認されなくても,十分な可能性のある目的を提供している.それに加えて,身元は,追溯されるだけであり,2011年にシルクロードを宣伝した人々は,現在でも2020年に発見できるだろう.これらの匿名性の秘密とは対照的に,コンピュータ科学者は,ブロックチェーンの技術が透明である,または匿名性の秘密を隠すための技術である,と言う. (私は,この秘密は,米国やNSAを含む,他の多くの国において,匿名性やセキュリティのためのツールである,と知っているとしても,非常に奇妙なことになるだろう.

ビットコインで金持ちになれるのか? そうかもしれない,ティム・オ・レイリーはかつてこう言った. 稼ぐことは車のガソリンスタンドのようなもので, 気をつけないと路辺に困るだろう. しかし,人生はガソリンスタンドの周りを回るのではない! ビットコインに対する関心の大半は,大きなガソリンスタンドを見つけることだけを目標とする人々から来ているようだ.

私が見逃した細部:この記事では,ビットコインの背後にある主要な概念が説明されていますが,私が言及していない多くの細部があります. その一つは,プロトコル内の素晴らしいスペースを節約する技です. これは,Merkle treeと呼ばれるデータ構造に基づいています. これは細部ですが,データ構造が好きなら,非常に素晴らしい細部です.

ビットコインのスクリプト: この記事では,オンラインの電子通貨としてのビットコインを説明しています。 しかし,これはより大きな,より興味深い物語のほんの一部に過ぎません。 ご覧の通り,ビットコインの取引には,ビットコインのスクリプト言語があります。 このスクリプトは,この記事では,このような文言に簡素化されています.

この記事の著者,マイケル・ニールセンのツイッター (Twitter) にもフォローできます. また,ニューラルネットワークとディープ・ラーニングに関する新刊の第1章にも注目してください.

翻訳者の微博に注目してください:1015

ジュン・ブ・ さんの記事より