ビットコインはエネルギーによってどのように守られていますか? そして、ナンスとは何ですか? これらの質問やその他の質問は、内で答えられます!
マイニングの仕組みは魅力的です。 人々に説明するとき、彼らの心が吹き飛ばされた瞬間に彼らの顔を見るのを楽しんでいます。 ここで説明しますが、あなたの心が吹くとき、私はあなたのすべての顔を想像しています!
ハッシュ関数から始めなければなりません。 ハッシュ関数がなければ、ビットコインは不可能です。 彼らが最初に何であるかを説明しましょう。パーティーでクールに聞こえるだけでなく、ビットコインがどのように機能するか、特にマイニングだけでなくトランザクションも内部で理解するための基本であるためです。
インターネットを使用するためにTCP/IPがどのように機能するかを理解する必要がないのと同じように、ビットコインを利用するためにビットコインがどのように機能するかを理解する必要はありません。 しかし、続けてください。それは非常に興味深いものであり、理解しやすくするためです。約束します。
ハッシュ関数
以下で説明する回路図から始めましょう…
左側が入力、中央が関数、右側が出力です。 入力は、デジタルである限り、任意のデータにすることができます。 コンピュータが処理できる場合は、任意のサイズにすることができます。 データはSHA256関数に渡されます。 この関数はデータを取得し、ランダムに見える数値を計算しますが、特別なプロパティがあります(後で説明します)。
最初のセキュアハッシュアルゴリズム(SHA)は元々 NSAによって開発されました そして現在、多くの異なるバージョンがあります(ビットコインはSHA256を使用しています)。 これは、非常に複雑ですが指定された方法でデータを混乱させる方法に関する一連の指示です。 指示は秘密ではなく、手作業で行うことも可能ですが、非常に面倒です。
SHA256の場合、出力は256ビットの数値です(偶然ではありません)。
256ビットの数値は、256桁の長さの0進数を意味します。 1進数とは、値がXNUMXまたはXNUMXのXNUMXつの記号で表されることを意味します。XNUMX進数は、他の形式、たとえばXNUMX進数に変換できます。これは、私たちがよく知っているものです。
この関数は256桁の64進数を返しますが、値は通常、XNUMX桁の長さのXNUMX進形式で表されます。
10進数とは、0進数(9〜16)で使用される0の可能な記号の代わりに、9の記号(11〜15に使用される15の記号と、文字a、b、c、d、e、およびf;値はXNUMXからXNUMX)。 例として、XNUMX進数のXNUMXの値をXNUMX進数で表すために、「f」と書くだけで、同じ値になります。 さらに詳しく説明する必要がある場合は、Googleですばやく検索してオンラインで入手できる情報がたくさんあります。
SHA256の動作を示すために、番号1を取得して、 オンラインハッシュ計算機、およびこの出力を取得しました(XNUMX進数):
上のボックスは入力で、下のボックスは結果の出力です。
入力が同じで、SHA256関数が使用されている場合、世界中のすべてのコンピューターが同じ出力を生成することに注意してください。
XNUMX進数に変換された場合、出力されるXNUMX進数は次のようになります(書き込むのにさらに多くの桁が必要になることに注意してください)。
48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,542,720,658,922,315
そして、バイナリに変換すると、次のようになります。
11010111000011010110010011100111111111100110100111111001110000110011101011010111000000001001110111111110101101000111111010101110100011110101101101001001110101010100010001011110001110101001001110000000001111001010010110111011011011110000111010110110100101111010111001101011100110101110011010111001101011100110101110011010111001101011100111
興味深いことに、ここに同じ値があります ベース64.
1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=
SHA256が返す可能性のある最小値はゼロですが、LENGTHは256ビットのままであることに注意してください。 これがゼロの表現方法です。
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
そして、可能な最大の値は次のとおりです。
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
XNUMX進数では、次のようになります。
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935
XNUMX進数では、次のようになります。
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
正確に64個のFがあることに注意してください。
64進数のゼロは、単純にXNUMXつの単一のゼロとして記述できますが、ハッシュ出力の場合、固定サイズの出力の要件を維持するためにXNUMX個です。
0000000000000000000000000000000000000000000000000000000000000000
理解するのに不可欠なハッシュ関数に関するいくつかの事実の要約を次に示します。
- 出力から入力を判別できません
- 入力は任意の長さにすることができます
- 出力は常に同じ長さです
- 同じ入力を指定した場合、出力は常に同じように再現されます。
- 入力に変更を加えると、どんなに小さくても、予測できない大きく異なる出力が発生します。
- 出力は一見ランダムに見えますが、実際には決定論的です(つまり、計算されて再現可能です)
- 出力を予測することはできません。 それは計算することしかできず、これにはコンピューターによる測定可能な量の作業が必要です(そして鉛筆と紙で何時間もかかります!それをしないでください)。
ハッシュとは何かという基本的な概念を理解したので、ビットコインマイニングがどのように機能するかについての説明を理解できます。
ただし、先に進む前に、オンラインハッシュ計算機にアクセスして少し遊んで、ハッシュ関数について私が言ったことを自分でテストすることをお勧めします。 私はこれが好きです。
鉱業
まず、ビットコインの「プルーフオブワーク」が由来する仕事の概念を示すことから始めます。
オンラインハッシュ計算機にアクセスして、「私は50ビットコインを作成し、この金額を自分で支払っています」と入力します。
ピリオドを含め、大文字と小文字を区別して正確に入力してください。 次の出力が得られるはずです。
次に、この支払いメッセージを有効にするためのルールを作成しましょう。ハッシュはXNUMXつのゼロから始める必要があります。 そのためには、なんらかの方法で入力を変更する必要があります。 しかし、あなたが学んだように、与えられた入力に対して出力がどうなるかは予測できません。 ゼロから始まるハッシュを確保するために、どのような変更を加えることができますか?
試行錯誤しながらデータを追加する必要があります。 ただし、入力メッセージの意味も変更したくありません。 それでは、意味のない値を保持する「nonce」と呼ばれるフィールド(割り当てられたセクション)を作成しましょう。
「臨時」という言葉は「一度だけ使われる数字」に由来するはずですが、わかりません。
以下では、追加のフィールド見出しとして「Nonce:」を追加するだけで、ハッシュ出力がどのように変化するかに注意してください。
出力はまだ「0」で始まらないので、ナンセンスを追加しましょう(意味のない「x」を追加しました)。
それでもゼロで始まりません。 ハッシュがゼロで始まるまで、さらにいくつかの文字を試しました。
そこに行きます。 さて、私がこのビットコインのふりバージョンに設定した任意のルールによれば、入力ウィンドウのテキストは、50回のトランザクションでXNUMXビットコインを支払う有効なブロックです。
ビットコインブロックは本質的に元帳のページであることに注意してください。 各ブロックには番号が付けられ、ユーザー間のトランザクションを一覧表示するとともに、新しいビットコインが作成されます。 このレコードはビットコインが住んでいる場所です。
今、新しいルール。 次のブロックでは、前のブロックのハッシュを含める必要があります。 実際のビットコインブロックが持つものに近づくために、少し複雑さを追加し、さらにいくつかのフィールドを追加します。
ハッシュは「0」ではなく「f」で始まるため、nonceフィールドでいくつかの値を試す必要があります。
今回は運が良かったので、たった22回の試行で適切なナンスを見つけました。 最初のブロックでは16回の試行が必要だったことを思い出してください。 ここにはある程度のランダム性がありますが、取得しようとしているのが1つのゼロだけであれば、一般に有効なハッシュを見つけるのはそれほど難しくありません。 最初のハッシュ桁には16の可能な値があるため、0分のXNUMXの確率で、入力フィールドに変更を加えると、最初のハッシュ桁が「XNUMX」になります。
ビットコインのフィールドはこのようなものですが、私が追加していない詳細があります。 これは単にポイントを説明するためのものであり、必ずしもビットコインブロックがどのように見えるかを正確に詳述するためのものではありません。
次の「難易度調整」を説明するために必要な時間フィールドを次のブロックに追加します。
上記はブロック番号1です。 前のブロックのハッシュが含まれていますが、今は時間を含め始めています。 私が見つけたナンスは、ハッシュをゼロから開始することに成功しました(ハッシュターゲットが満たされるまで、「XNUMX」を入力し続けました)。
ここで、ビットコインのブロックチェーンとマイニングに関するいくつかの興味深い概念を説明し始めることができます。
ブロックを獲得する
マイニングプロセスは競争力があります。 有効なブロックを最初に作成した人は誰でも、設定されたブロック報酬を自分で支払うことができます。 少し後に同じブロック番号を生成するマイナーは何も取得しません—そのブロックは拒否されます。 なぜそうなるのかを説明すると、今は流用が多すぎるので、付録で説明します。
ブロックXNUMXが見つかり、すべての人(すべてのビットコインノード)にブロードキャストされた後、すべてのマイナーは、ブロックXNUMXのバージョンであったはずの作業を停止します。 彼らは、成功したブロックXNUMXの上に構築を開始し(ブロックハッシュを新しいブロックにプルすることによって)、ブロックXNUMXに適したナンスを見つける作業を開始します。 勝者は結果を公開し、全員がブロックXNUMXなどの作業を開始します。
ブロックごとに、新しいビットコインが作成され、これまでの総供給量をまとめて構成しています。 鉱夫が多い場合、統計的にはブロックがより速く生成され、したがってビットコインがより速く生成されると予想する必要があります。 問題ですね
時間の経過とともに発行が予測可能なビットコインの限られた供給を求めて、中本聡はこの問題を考え、平均10分間隔でブロックの生産を維持するために負のフィードバックループを導入しました。 どのように? あなたが方法を考えることができるかどうか見てください。 しばらく一時停止して熟考してください—同じ天才的な解決策を思い付くことができるかどうかを確認し、あきらめたときに読み進めてください。
ノード:「有効な」ブロックについて言及します。 だから何? 誰がチェックしていますか? ビットコインノードはです。 ビットコインノードはこれまでのところブロックチェーンのコピーを保持し、一連のルールに従って、新しいブロックがルール内にあることを確認し、そうでないブロックを拒否します。 ルールはどこにありますか? コード内。 ビットコインコードをダウンロードするコンピューターはノードです。
難易度調整
新しいビットコインブロックを作成する平均時間は、2016ブロックごとにすべてのノードによって計算されます(これが時間フィールドが必要な理由です)。 これは、ノードが従うプロトコルとルールの一部です。 有効であるために各ブロックハッシュが開始しなければならないゼロの数を調整するために式が適用されます。
厳密には、調整されるのはゼロの数ではなく、ハッシュが下になければならない目標値ですが、先行ゼロのことを考えると説明が簡単になります。
ブロックの生成が速すぎる場合、ハッシュターゲットは、すべてのノードが同じように従う(コード内にある)事前定義されたルールに従って調整されます。
私の例では簡単に言えば、他の人が私と競争していて、ブロックの発生が速すぎて、架空の計算によると、XNUMX番目のブロックにはXNUMXつではなくXNUMXつのゼロが必要だとします。
XNUMXつのゼロを取得するのに少し時間がかかりますが、他にも多くの人が私と競合していると想像しているので、誰かがブロックを見つけるのにかかる合計時間は目標に保たれます。
次のブロックは次のとおりです。
時間に注意してください。 前のブロックから10分以上経過しました(デモの時間を作ったところです)。 10分の目標は確率的です。 次のブロックがいつ見つかるかは正確にはわかりません。
1つのゼロが表示されるまで、キーボードを16分間いじりました。 これは、単一のゼロを見つけるよりも指数関数的に困難でした。 連続してXNUMXつのゼロを見つける可能性は、XNUMX分のXNUMXです。2、または1分の256の確率。
より多くの人々が新しいビットコインのマイニングと競争に参加する場合、最終的にはXNUMXつのゼロが必要になります。
前のブロックのハッシュを含む最後の実際のビットコインブロックを調べました。 ハッシュは次のとおりです。
000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1
それは19個のゼロです! 1分の16があります19 試行するたびにそのようなブロックを見つける可能性。 ビットコインマイナーは、世界中で集合的に、毎秒多くの試行を行います。
200秒あたりの試行回数は、「ハッシュレート」と呼ばれます。 現在、世界の推定ハッシュレートは19秒あたり10億テラハッシュをわずかに下回っています(XNUMXテラハッシュはXNUMX兆ハッシュです)。 XNUMX秒あたりの試行回数が多いため、ハッシュがXNUMX個のゼロで始まるブロックが約XNUMX分ごとに見つかります。
将来的には、より多くのマイナーが参加するにつれて、ハッシュレートが上がり、ブロックがより速く検出され、ビットコインの難易度は20のゼロを必要とするように調整され、ブロックの生成が約10分に戻ります。
半減
ビットコインが最初に開始されたとき、50ビットコインがすべてのブロックで生成されました。 ビットコインブロックチェーンのルールでは、210,000ブロックごとに報酬が半分に削減されると指定されています。 この瞬間は「半減」と呼ばれ、およそ10年ごとに発生します。 半分にすることと、2140分間隔でブロックを維持する難易度調整を組み合わせると、0.00000001年頃、ブロック報酬は1、つまりビットコインの最小単位である21サトシになり、これ以上半分にすることはできません。 マイニングは停止しませんが、ブロック報酬はゼロになります。 その瞬間から、今後新しいビットコインは作成されず、ビットコインの数は数学的に計算可能であり、XNUMX万コインに十分に近いです。 これが総供給量を知る方法です—プログラムで設定されます。
ブロック報酬がゼロの場合でも、鉱夫は取引手数料を稼ぐために働き続けるように動機付けられます。
ブロック報酬はどのくらい正確に半分にカットされますか? これは、ノードによって保持されているコードにあります。 彼らは、鉱山労働者が210,000ビットコイン以上を自分で支払う25以降の新しいブロックを拒否することを知っています。 そして、鉱山労働者が420,000ビットコイン以上を自分で支払う12.5以降のブロックを拒否します。
取引手数料
これまでのところ、XNUMXつのトランザクション(マイナーが報酬を受け取るトランザクション)で架空のブロックのみを示してきました。 これは「コインベーストランザクション」と呼ばれます。
Conbaseという会社にちなんで名付けられたわけではありません。つまりCoinbaseです。 同社は、コインベースの取引にちなんで名付けられましたが、その逆ではありません。 混乱しないでください。
コインベースの取引に加えて、お互いに支払いをする人々の取引があります。 想像上の例を次に示します。
今回はわざわざ実際のハッシュを見つけることはしませんでした(実際にはブロック200,001で報告された実際のハッシュです)。 楽しみのために作ったノンスですが、そこにメッセージを埋め込むことができることに注意してください。
サトシは、その日の新聞の見出しの後に、最初のビットコインブロック(ジェネシスブロック)に「銀行のXNUMX番目の救済の瀬戸際にいる首相」という言葉を有名に含めました。
ここでのポイントは、132のトランザクションが含まれていることです(すべてが表示されているわけではありません)。 トランザクション#132を見てください–アドレスからの2.3ビットコインは別のアドレスと2.1番目のアドレスに0.1ビットコインの金額をXNUMXビットコイン支払っています(私はアドレスの長さを短くするためにドットを使用しました)。
したがって、2.3ビットコインのソースは合計2.2ビットコインを支払います(2.2 + 0.1 = 2.2)。 0.1ビットコインが不足していますか? いいえ、後で説明するように、違いは鉱夫によって主張されます。
マイナーは、ブロック報酬として25ビットコインを自分で支払うことができます(210,000ブロックが経過したため、報酬は50から25に半分になりました)。 しかし、見てみると、コインベースのトランザクションは27.33880022です。 追加の2.33880022ビットコインは、ブロック内の他の132のトランザクションから取得されます。入力はすべて、出力の合計よりもわずかに大きくなります。 したがって、鉱夫はこの「放棄された」ビットコインを自分への支払いとして主張するようになります。 これらは、鉱夫に支払われる取引手数料と見なされます。
ブロックスペースには限りがあります。 ビットコインが新しいとき、ユーザーは無料でトランザクションを送信でき、マイナーはそのトランザクションをブロックに含めます。 しかし、今ではより多くのユーザーがいて、次のブロックに進むことは競争力があるので、ユーザーは、他の人よりも自分のトランザクションを選択するように鉱夫を誘惑するために、トランザクションに料金を含めます。
したがって、ブロック報酬が着実に減少し、XNUMX年ごとに半分になり、最終的にはゼロになった場合でも、鉱夫はこの方法で報酬を受け取ります。
ある日、鉱夫への報酬が十分でなく、ビットコインが失敗する原因になると示唆する人もいます。 この懸念は徹底的に明らかにされており、ここでは繰り返しません。
ブロックを書き直すことはできますか?
これは非常にまれであり、その理由を理解する価値があります。 次に、ビットコイントランザクションが不変(不変)である理由を理解します。
前のブロックのハッシュが現在のブロックに含まれていることを前に説明しました。 つまり、古いブロックでトランザクションを編集すると、その編集されたブロックのハッシュが変更されます。 ただし、そのハッシュは次のブロックに記録されるため、次のブロックも更新する必要があります。 ただし、その次のブロックに記録されているハッシュを変更する場合は、そのハッシュを変更する必要があります。
ハッシュが変更されるたびに、これらの素敵なゼロがすべて失われ、ランダムに見えるハッシュが残ることに注意してください。ゼロを元に戻すには、すべての作業を再度実行する必要があります。 編集しようとしたブロックに対してこれを行う場合は、次のブロック、および次のブロックの作業を最後までやり直す必要があります。 ビットコインのルールでは、ブロックの最長チェーンが実際のビットコインレコードであるため、古いブロックで停止することはできません。 10ブロック前に戻ってブロックを編集すると、最長のチェーンはなくなります。 10個のブロックを追加してから、もう少し追加する必要があります。これらの10個のブロックを作成しているときに、実際のチェーンが少し長くなった可能性があるためです。 あなたは本当のチェーンを追い抜くために競争しなければなりません。 成功すると、新しいバージョンが実際のバージョンになります。
編集されたブロックから最新のブロックまで全世界の集合的なハッシュ作業を繰り返すことは、ビットコインを編集する上での障壁です。 ありそうもないゼロをすべて含むハッシュを作成するためにエネルギーが消費され、ビットコインを編集するにはそのエネルギー消費を繰り返す必要があります。 これが、ビットコインのマイニングに使用されるエネルギーが「無駄」にならない理由です。 中央当局を信頼する必要なしに元帳を不変にするために、編集からビットコインを守るためにあります。
XNUMX人の鉱夫が同時にブロックを見つけた場合はどうなりますか?
これは実際には時々発生し、常に次のように分類されます。
すべてのノードは、最初に新しいほぼ同時のブロックのいずれかを受け取り、そのブロックを受け入れて、すぐ後に到着するブロックを拒否します。 これによりネットワークが分割されますが、これは一時的なものです。
説明のために、ブロックのXNUMXつを青、もうXNUMXつを赤と呼びましょう(これらには色がなく、私に耐えてください)。
その後、鉱夫は次のブロックで作業しますが、チェーンを延長するブロックについては分割されます。
勝った鉱夫が青い鎖を使ってブロックを見つけたとしましょう。 それらはすべてのノードに新しいブロックを送信し、最長のチェーンが明らかになります。 赤いチェーンを受け入れたノードは、それをドロップして青いチェーンを採用します。
赤いチェーンで作業していたすべてのマイナーは停止し、青いチェーンである長いチェーンで作業するようになります。 赤い鎖は死んでいます。
付録
準優勝のマイナーのブロックが無効である理由
ブロック700,000がMINER-Aによってマイニングされたと仮定します。 700,000秒後、MINER-Bは別のバージョンのブロック30も作成しました。 MINER-Bがこの代替をブロードキャストすると、すべてのノードは、MINER-Aによるブロックをすでに確認して受け入れているため、それを拒否します。 さらに、その700,001秒間に、MINER-Cがブロック700,000を検出したとします。 MINER-Bの競合する700,001番目のブロックが現在のチェーン(最大XNUMX)を拡張しないことを考えると、その理由で拒否されます。
さらに興味深いのは、MINER-Bが競合バージョンの700,001ではなくブロック700,000で作業していた場合、最終的に代替ブロック700,001を見つける必要があるのと同じくらい、有効なブロック700,000をマイニングする可能性があったことです。 したがって、マイナーが新しいブロックを見つけたらすぐに、次のブロックに努力する必要があります。
ただし、MINER-Aが検出してから700,000秒後にMiner-BがブロックXNUMXを検出した場合、地理的な場所とインターネット速度に応じて、一部のノードがMINER-Aのブロックを最初に表示し、他のノードがMINER-Bのブロックを最初に表示する可能性があります。 その場合、一時的なフォークがあり、一部のマイナーは一方のバージョンを拡張するために作業し、他のマイナーはもう一方のバージョンを拡張するために作業します。 「ブルーチェーン」および「レッドチェーン」記述子を使用して前に説明したように、最終的には、バージョンのXNUMXつが他のバージョンよりも先に拡張され、満場一致で有効なバージョンになります。
これはArmanTheParmanによるゲスト投稿です。 表明された意見は完全に独自のものであり、必ずしもBTCIncまたは Bitcoin Magazine.
- 000
- 11
- 2016
- 420
- 9
- 私たちについて
- 従った
- Action
- 住所
- アルゴリズム
- すべて
- 既に
- 量
- 別の
- アプローチ
- 周りに
- 権威
- 利用できます
- 平均
- 救済
- さ
- ビット
- Bitcoin
- Bitcoinマイニング
- ビットコイントランザクション
- ブロックチェーン
- ボックス
- BTC
- BTC Inc
- ビルド
- コール
- 原因となる
- 変化する
- 点検
- コード
- coinbase
- コイン
- 会社
- コンペ
- コンピューター
- コンセプト
- 含まれています
- 可能性
- 作成
- 電流プローブ
- データ
- 中
- 死んだ
- 詳細
- DID
- 異なります
- デジタル
- 数字
- そうではありません
- ダウン
- ダウンロード
- Drop
- エネルギー
- 誰も
- 例
- 伸ばす
- 顔
- 顔
- スピーディー
- フィードバック
- 費用
- フィールズ
- 最後に
- 名
- フォーク
- 形式でアーカイブしたプロジェクトを保存します.
- フォワード
- 発見
- フル
- 楽しいです
- function
- 未来
- 創世記
- 受け
- GitHubの
- 行く
- でログイン
- グーグル検索
- ゲスト
- ゲストのポスト
- 半減
- ハッシュ
- ハッシュレート
- ハッシュ
- こちら
- 認定条件
- How To
- HTTPS
- 含まれました
- 含めて
- 情報
- 関心
- インターネット
- IT
- join
- 保管
- 既知の
- 最新の
- 主要な
- 学んだ
- 元帳
- 限定的
- リスト
- 少し
- 場所
- 長い
- 見
- 問題
- 意味
- 百万
- マインド
- 鉱夫
- 鉱業
- 最も
- ネットワーク
- ノード
- 番号
- オンライン
- 意見
- 注文
- その他
- 支払われた
- 支払う
- 支払い
- のワークプ
- プレイ
- プレンティ
- 可能
- 問題
- プロセス
- 作り出す
- 生産された
- 生産
- 守る
- 提供します
- 引き
- すぐに
- レース
- 受け取ります
- 推奨する
- 記録
- 必要とする
- の提出が必要です
- 結果
- 収益
- ルール
- ラン
- 前記
- 聡
- 聡中本
- を検索
- 安全に
- 見て
- セッションに
- 簡単な拡張で
- サイズ
- 小さい
- So
- スペース
- split
- start
- 開始
- 成功した
- 首尾よく
- 供給
- ターゲット
- 一時的
- test
- 世界
- 考え
- 介して
- 時間
- top
- トランザクション
- 取引
- 信頼
- わかる
- users
- 通常
- 値
- この試験は
- 何ですか
- Wikipedia
- 以内
- 無し
- 言葉
- 仕事
- ワーキング
- 作品
- 世界
- 世界の
- 価値
- 年
- 年
- ゼロ