1. ブロックチェーンの基本概念
1. 開発経緯
ビットコインの誕生:
2008年、サトシ・ナカモトというペンネームの人が「ビットコイン:ピアツーピア電子キャッシュシステム」という論文を発表した。
2009 年 1 月 3 日、サトシ ナカモトはビットコイン クライアント プログラムを開発、実行し、最初のマイニングを実施し、ビットコインの最初のバッチを取得しました。 50 ビットコイン
ビットコインは、第三者の介入を必要としない暗号原理に基づいた電子決済システムです。
2. ブロックチェーンの定義
ブロックチェーンは、データ ブロックを時系列で結合するチェーン データ構造であり、改ざんや偽造ができない分散型台帳であることが暗号的に保証されています。
3. ブロックチェーンの特徴
ブロックチェーンの特徴: オープンで透過的、追跡可能で改ざん不可能、高いシステム可用性、ユーザーの匿名性
4. ブロックチェーンの分類
ブロックチェーン技術には、パブリック チェーン、コンソーシアム チェーン、プライベート チェーンという 3 つの主要なタイプのチェーンがあります。これらは、アクセス権、分散化の程度、使用例など、多くの点で異なります。
パブリックチェーン | アライアンスチェーン | プライベートチェーン | |
---|---|---|---|
アクセス許可 | オープンなネットワークで誰でも参加可能 | 承認されたノードまたはエンティティのみがネットワークに参加できます | 単一の組織またはエンティティのみが制御します |
分散化 | 高度に分散化されており、各ノードはブロックを検証してマイニングすることができます | 適度な分散化。ネットワークは複数のエンティティのグループによって共同管理されます。 | 部分的に分散化されており、ネットワーク制御は単一のエンティティ内にあります |
安全性 | コンセンサスアルゴリズムを通じてセキュリティと透明性を保証 | 当事者間に確立された信頼関係に依存する | セキュリティはネットワーク管理者によるアクセス制御と管理に依存します |
例 | ビットコインとイーサリアム | ハイパーレジャーファブリック、R3 Corda | 一部の企業が内部で使用しているブロックチェーン システム |
- パブリック チェーンは、誰でも利用できる分散型ネットワークです。
- コンソーシアム チェーンは、認可された団体が参加する適度に分散されたネットワークです。
- プライベート ブロックチェーンは、単一のエンティティまたは組織によって完全に制御されるネットワークです。
ブロックチェーンの不可能な三角形: 分散化、効率、セキュリティを同時に最適化することはできず、これら 3 つのバランスが取れており、互換性がなければなりません。
不可能な三角形の原理によれば、ブロックチェーン システムにおいてこれら 3 つの目標の最適な状態を同時に達成することは困難です。ある側面を改善すると、他の側面にも影響を与えることがよくあります。例えば:
- 分散化が進むとスケーラビリティが低下する可能性があります: 検証に参加するノードが増えると、トランザクションが遅くなり、スケーラビリティの問題が発生する可能性があります。
- 効率の向上を追求すると、セキュリティや分散化が犠牲になる可能性があります。 スループットの向上は、セキュリティや分散化の低下を意味する可能性があります。
5. ブロックチェーンアーキテクチャ
ブロックチェーンは、アプリケーション層、契約層、インセンティブ層、コンセンサス層、ネットワーク層、データ層で構成されています。
アプリケーション層: 最上位のアプリケーション
コントラクト層: スマート コントラクトとスクリプト コード
インセンティブ層:デジタル通貨発行メカニズムなど
コンセンサス層: PoW、PoS コンセンサスメカニズム
ネットワーク層: P2P ネットワーク、検証メカニズム
データ層: トランザクションデータ、チェーン構造、タイムスタンプ、マークルツリー、暗号化など。
2.P2Pと暗号化
1.P2P
P2P は Peer-to-Peer、ピアツーピア ネットワークであり、CS アーキテクチャと比較すると、次のような特徴があります。
1. サーバーがありません
2. エンドシステム間の直接通信
3. ノードは段階的にインターネットに接続します
4. ノードは IP を変更する可能性があります
P2P ネットワークを使用すると、集中サーバーが失われます。では、ファイルをダウンロードする場所をどうやって知るのでしょうか?インデックスを作成するにはどうすればよいですか?
P2P ネットワークには通常3 つのインデックス付け方法があり、それぞれ P2P ネットワーク アーキテクチャに対応しています。
1.集中インデックス。集中インデックスでは、コンテンツとファイル転送は分散されますが、コンテンツの位置付けの傾向は高度に集中化されています。
2.フラッディング インデックス、フラッディング クエリは完全に分散されたアーキテクチャであり、各ノードは共有ファイルに対してクエリを実行します。インデックス、およびインデックスのみクエリがヒットすると、逆パスを使用してクエリ ノード アドレスが返されます。
3.階層型カバレッジ ネットワーク、階層型カバレッジは集中クエリとフラッディング クエリの間の方法です
2.未確認動物学
ハッシュ関数は暗号化における特別かつ重要な暗号アルゴリズムであり、一方向関数であり、その動作中に情報エントロピーが失われます。
ハッシュ関数は、任意の長さのメッセージを固定長のハッシュ値に変換できます。
さらに、インターネット上には次のようなオンライン ハッシュ計算ツールが多数あります。オンライン ハッシュ計算
優れたハッシュ関数には次の特性が備わっている必要があります。
1. 任意の長さのデータ ブロックを操作できる
2. 固定長の出力を生成できる
3. 任意の長さの入力が与えられた場合、出力の計算は比較的簡単です
4. 特定のハッシュ値について、元のデータを見つけることは計算上不可能です (一方向性)
5. メッセージとそのハッシュ値について、同じハッシュ値を計算するための別のメッセージを見つけることは不可能です (衝突耐性)
ハッシュ関数は、デジタル署名やファイルの整合性のチェックに一般的に使用されます。
1. 対称暗号化
対称暗号化とは、暗号化と復号化に同じキーを使用することを指し、主な暗号化アルゴリズム コードは DES と AES です。
DESキーの長さは 64 ビットですが、8 ビットごとがパリティ チェックに使用され、長さが短いため、実際の有効ビット数は 56 ビットになります。簡単に解読できます。総当たりでクラックされたため、現在は安全とは見なされません。
AESキーの長さは 128、192 などで、DES よりも安全で現在広く使用されています。
つまり、DES と AES はどちらも対称暗号化アルゴリズムですが、キーの長さが短く、ブルート フォース攻撃に対する脆弱性があるため、DES は AES に取って代わられました。 AES はキーの長さが長く、セキュリティが高いため、実際のアプリケーションではより一般的であり、より安全で信頼性の高い暗号化標準とみなされています。
2.非対称暗号化
非対称暗号化は、対称暗号化とは異なり、暗号化と復号化に公開キーと秘密キーのペアのキーを使用する暗号化方法です。この暗号化方式は公開鍵暗号とも呼ばれます。
送信者は受信者の公開キーを使用してデータを暗号化でき、対応する秘密キーを持つ受信者のみがデータを復号化できます。
ただし、対称暗号化と比較すると、非対称暗号化は速度が遅く、効率も低くなります。
一般的な非対称暗号化アルゴリズム: RSA、ECC
3.デジタル署名
電子署名とは、ネットワーク通信において元の情報に付加される付加データであり、ハッシュ関数や非対称暗号を総合的に応用したものです。
4. リングサイン
定義: リング署名は、署名者の匿名性を維持できるデジタル署名の一種です。これにより、署名者は自分の秘密キーを使用して、署名者の身元を明かさずにユーザーのグループ間で署名を生成できます。
仕組み: リング署名では、署名者は自分の身元を明かさずに署名を生成できます。署名の検証者は、署名が特定のグループのメンバーからのものであることだけを知っていますが、グループのどのメンバーであるかを確認することはできません。
リング署名の署名者は、公開鍵のセットと公開鍵の 1 つの秘密鍵を所有します。
アプリケーション: リング署名は、匿名投票、プライバシー保護トランザクション、本人確認、その他のシナリオで使用でき、匿名の署名と確認が可能です。
デジタル署名とリング署名の主な違いは匿名性です。デジタル署名はメッセージの信頼性と送信者の身元を確認するためのものですが、リング署名は署名の匿名性、つまり署名者の身元が明らかにされないことを保証するものです。
5. 閾値署名
-
定義: しきい値署名は、複数の署名者 (組織や複数の個人など) が秘密キーを必要とせずに共同で署名を生成できるようにするマルチパーティ セキュリティ プロトコルです。集中的に保存されます。
-
仕組み: しきい値署名では、秘密キーはnt 人未満の署名者は署名プロセスを完了できないことを意味します。
-
利点: しきい値署名は、単一のエンティティが秘密キー全体を所有する必要がなく、代わりに秘密キーを分散して保存し、単一障害点を減らし、セキュリティと回復力を強化します。攻撃の潜在的なリスク。
-
アプリケーション: しきい値署名は通常、金融取引、複数当事者の承認操作、複数署名ウォレットなど、複数当事者の参加と高度なセキュリティが必要なシナリオで使用されます。 。
-
デジタル署名は、単一のエンティティが秘密キーを使用してデータに署名することです。
-
しきい値署名 は、連携する複数のエンティティによって署名される署名であり、一部のエンティティの承認のみが必要です。
3. コンセンサスアルゴリズム
1. コンセンサスの定義
分散コンピューティング理論では、コンセンサスとは、計算プロセス中に必要な特定のデータ値に関する合意を指します。
ブロックチェーンでは、コンセンサスとは、すべてのコンセンサス ノード (参加している検証ノード) が同じ順序でトランザクションを実行し、台帳に書き込むことを意味します。
悪意のあるノードを持つシステムをビザンチン障害と呼びます。それ以外の場合は非ビザンチン障害と呼ばれます。同様に、ビザンチン障害に対処できるコンセンサス アルゴリズムはビザンチン フォールト トレラントと呼ばれます。それ以外の場合は非ビザンチン フォールト トレラントです。 。
2.PoWアルゴリズム
PoW(Proof-of-Work、プルーフ・オブ・ワーク)はビットコインで使用されるコンセンサスアルゴリズムです
ビットコインコンセンサスの目的は、各ノードの台帳に一貫性を持たせることです。
すべてのノードは、ワークロード プルーフを通じてアカウンティング権をめぐって競合します。ワークロード プルーフを提供する最初のノードは、自身のブロック (請求書) をネットワーク全体にブロードキャストします。他のすべてのノードがそれが正しいことを確認した後、ブロックを自身のブロックチェーン (台帳) に同期します。 )。
Proof of work は難しい問題として具現化できますが、この難しい問題を選択するには 3 つの条件があります。
1. 問題の条件が比較的複雑である
2. 計算結果を確認するのに非常に便利です
3. 各ブロックのパズルは異なります
3.PoSアルゴリズム
PoS (プルーフ・オブ・スタック) プルーフ・オブ・ステーク
PoWはProof of Workを巧みに利用して魔女攻撃を防ぐことに成功していますが、PoWによるリソースの浪費も無視できず、時代の要請に応じて登場したのがPoSです。
PoS は、人々がより多くのお金を保有するほど、悪を行う可能性は低くなると考えています。
PoS は通貨の年齢を巧みに利用して、会計上の権利を取得する確率を測定します。同時に、ブロックがマイニングされると、このノードの通貨年齢がクリアされます
コイン年齢 = 保有通貨量 * 保有時間
しかし、PoS は依然としてリソースを浪費し、簡単にウェルスセンターを形成するため、健全なシステムとは言えません。
4.DPosアルゴリズム
DPoS (委任されたプルーフオブステーク、委任されたプルーフオブステーク)
DPoS では、すべてのノードが課金ノードと通常ノードに分割されます。
合意プロセス:
1. ノードが会計ノードの候補となることを申請します。
2. すべての通貨保有ノードが投票に参加し、n 個の会計ノードを選択します。
3. n 個の会計ノードが順番に会計に参加します
4. アカウンティングの各ラウンド後にアカウンティング ノードを調整し、不正なノードやアカウンティングを完了できなかったノードを削除します。
DPoS はマイニングによるリソースの浪費を回避しますが、アカウンティング権は少数のノードの手にのみあるため、分散化の本来の目的に違反するとの疑問が持たれています。
5.VRF
PoW、PoS、および DPoS のアルゴリズムの核心は、ブロックを記録してパッケージ化するノードをランダムに選択し、他のすべてのノードがブロックを検証して受け入れることです。
VRF 自体はコンセンサス アルゴリズムではなく、ランダムなメカニズムです
ランダム メカニズムは: を満たす必要があります。
1. 魔女の攻撃に抵抗する能力
2. ランダムな結果はネットワーク全体で統合されます
3. ランダムな結果は予測不可能です
4. ランダムな結果を検証できる
ブロックチェーンでは、VRF (Verifiable Random Function) を使用してブロックプロデューサーを選択するには、通常、次のプロセスが含まれます。
-
ノードの登録と認証: まず、ネットワーク内のノードを登録し、その身元を証明する必要があります。通常、ノードはブロック生成への参加への関心を示すために、このプロセスに参加するために一定量の担保を提供するか、一定数のトークンを保有する必要があります。
-
VRF の使用: ノードがネットワークに登録されると、VRF を使用して乱数を生成できます。この乱数は通常、ノードの秘密キーといくつかのランダムな入力に基づく関数演算の結果です。この数値は予測不可能であると考えられます。
-
検証プロセス: ノードが乱数を生成した後、その乱数をネットワークに送信し、他のノードが乱数の合法性と正確性を検証します。他のノードは、VRF の公開キーと乱数の生成に必要な入力を使用して、この乱数の有効性を検証することで、このノードによって生成された乱数の正当性を確認できます。
-
ブロック ノードを選択します: 検証に合格すると、ネットワークは生成された乱数に基づいて次のブロック ノードとしてどのノードが選択されるかを決定できます。通常、ブロックノードを選択するための条件は、乱数と一定の間隔の大きさに関連する可能性があります。たとえば、ブロックを生成するために最小の乱数を持つノードを選択します。
VRF を使用することにより、ブロックチェーン ネットワークはランダムだが検証可能なブロック生成メカニズムを実装できます。この方法では、乱数によって公平性と攻撃耐性が確保され、他のノードはこの乱数の正当性を検証できます。 VRF は、集中管理を回避しながらブロックプロデューサーを選択するための効果的かつ安全な方法と考えられています。
4. ビットコインの概要
1. ビットコインの概念
ビットコインは、一連の概念とテクノロジーに基づいて構築されたデジタル通貨エコシステムです。
ビットコインは、暗号化と分散システムにおける数十年にわたる研究の集大成を表しています。
ビットコインには 4 つの重要なイノベーションが含まれています。
2. ビットコインの仕組み
ビットコイン システムは、ユーザー、トランザクション、マイナーで構成されます。
ビットコイン トランザクション: ビットコインのこの部分の所有者が新しい所有者への転送を承認したことをネットワーク全体に通知します。
ビットコイン トランザクションは次の 3 つのカテゴリに分類できます:
1.一般取引 2.回収取引 3.流通取引
ビットコイントランザクションの構築は通常、次の 3 つのプロセスを経ます。
1. トランザクション入力の取得 2. トランザクション出力の作成 3. トランザクションのブロードキャスト
4. トランザクションがブロードキャストされた後、検証と計算のためにビットコイン P2P ネットワークを通じて各ノードに送信されます。
トランザクションは、プルーフ・オブ・ワークを見つけたマイナーによってブロックにパッケージ化された後でのみ、ブロックチェーンの一部になります。
さらに、一般に、ブロックは 6 回以上確認されると取り消し不能とみなされます。
ブロックチェーンの深さと高さの違い:
「深さ」は通常、ブロックチェーン内の最新のブロックに対する特定のブロックの距離を指します。現在の最新ブロックを基準とした特定のブロックのブロック番号を表します。たとえば、最新のブロックの高さが 100 で、特定のブロックの高さが 90 である場合、その特定のブロックの深さは 10 (最新のブロックの高さからその特定のブロックの高さを引いたもの) になります。
深さは、トランザクションの確認の数を説明したり、ブロックチェーン上のトランザクションの位置を決定したりするために使用できます。トランザクションがブロックチェーン内のより多くのブロックに含まれるようになると、トランザクションの深さが増します。これは通常、トランザクションがより多くのブロックによって確認されることを意味します。
「高さ」は通常、ブロックチェーン全体におけるブロックチェーン内の特定のブロックの位置または番号を指します。ブロックチェーン内のブロックの順序またはシリアル番号を表します。たとえば、最初のブロック (ジェネシス ブロック) の高さは 0 で、新しいブロックが追加されるたびに、ブロックチェーンの高さは 1 ずつ増加します。
したがって、ブロックチェーンの高さはブロックチェーンの長さ、つまり現在のブロックチェーンにすでに含まれているブロックの数を表します。
概要: 深さは最新のブロックに対する特定のブロックの距離を指し、高さはブロックチェーン全体におけるブロックの順序または数を表します。深さはブロックチェーン内のブロックまたはトランザクションの相対位置を表すために使用され、高さはブロックチェーン内の絶対位置を表します。
5. ビットコインコアクライアント
1. 指定した高さブロックのハッシュ値を取得する
bitcoin-cli getblockhash <index>
2. 指定したブロックの情報を取得する
bitcoin-cli getblock <hash>
3. コアクライアントステータス情報の表示
ビットコイン-cli getinfo
4. コマンドリストを表示する
bitcoin-cli ヘルプ
5. トランザクション情報を 16 進数で返します
bitcoin-cli getrawtransaction <txid>
6. シリアル化されたトランザクション情報をデコードする
ビットコイン-cliデコードロウトランザクション
7. 新しいビットコインアドレスを作成する
bitcoin-cli getnewaddress
8. 指定したアドレスに対応する秘密鍵を取得します
bitcoin-cli dumpprivkey <アドレス>
9. すべてのピアノードの接続情報を取得します。
ビットコイン-cli getpeerinfo
bitcoin-cli getblockhash <index> # 获取指定高度区块的哈希值
bitcoin-cli getblock <hash> [verbosity] # 获取指定区块的信息
bitcoin-cli getinfo # 查看核心客户端状态信息
bitcoin-cli help # 查看命令列表
bitcoin-cli help getblockhash # 查看特定命令说明
bitcoin-cli getrawtransaction <txid> # 查看十六进制返回交易信息
bitcoin-cli decoderawtransaction <hexstring> # 查看解码后的交易信息
bitcoin-cli getnewaddress # 创建新的比特币地址
bitcoin-cli dumpprivkey address # 获取指定地址对应的私钥
bitcoin-cli getpeerinfo # 列出全部对等节点连接信息
6.キーとアドレス
1. 公開鍵と秘密鍵
秘密鍵は楕円曲線乗算によって計算され、公開鍵が得られます。
楕円曲線の掛け算の特徴は、一方向の計算は簡単ですが、逆方向の計算はできないことです。
各ビットコイン アカウントには秘密キーと公開キーが含まれています。秘密キー (k) はランダムに生成された番号です。プライベート付き
鍵を作成するには、楕円曲線数を使用してこの一方向暗号化関数を乗算し、公開鍵 (K) を生成します。公開鍵 (K) を使用すると、
次に、一方向暗号化ハッシュ関数を使用して、ビットコイン アドレス (A) を生成できます。秘密鍵、公開鍵、ビットコインアドレス
それらの関係を次の図に示します。
1.秘密鍵
ビットコイン秘密キーの生成は基本的に 1- 2 256 2^{256} です。2256
オリジナルの秘密鍵生成方法: コインを使用して秘密鍵をランダムに生成できます。コインを 256 回投げると、表は 1 としてカウントされ、裏は 0 としてカウントされます。
このようにして、ビットコインの秘密鍵として 256 ビットの 2 進数を取得できます。
WIF形式の秘密キー:
WIF (ウォレット インポート フォーマット) は、さまざまなビットコイン ウォレット間で秘密キーをインポートするための標準形式です。 WIF 形式の秘密キーは、秘密キー情報の管理と送信を容易にするために元の秘密キーをエンコードしたものです。
WIF 形式の秘密キーの主な特徴は、認識しやすく使用しやすい形式で秘密キーを表すことです。通常、秘密キーのネットワーク (メインネットやテストネットなど) を示す文字で始まり、その後に秘密キーのハッシュ (Base58 エンコード) が続きます。この形式には秘密キーだけでなくチェックサムやその他の情報も含まれているため、識別と 16 進数の秘密キーへの変換が容易になります。
WIF 形式で秘密キーを使用すると、ユーザーは秘密キーを公開することなく、秘密キーをビットコイン ウォレットに簡単にインポートし、ビットコイン トランザクションで使用できるようになります。
2.公開鍵
ビットコイン公開鍵は暗号アルゴリズムを通じて生成されます
K = k * G K=k * GK=k∗G
秘密鍵から公開鍵を計算します。これは不可逆的な処理です。楕円曲線の乗算は、暗号学におけるトラップドアと呼ばれる機能です。一方向の計算は簡単ですが、逆方向の計算は不可能です。計算。これは、ビットコインの所有権を示す偽造不可能で安全なデジタル署名の基礎です。
公開キーの形式:
従来の公開キーは通常、接頭辞 04 の後に 2 つの 256 ビット数値が続き、1 つは x 座標、もう 1 つは y 座標で表されます。
圧縮する方法は?
結局のところ、x と y は楕円曲線の関係を満たすため、y 座標を計算するために x を保存するだけで済みますが、y の符号も保持する必要があります。
そこで、圧縮方法が出てきました!
y 座標が奇数の場合、圧縮された公開鍵のプレフィックスは 03 になります。
y 座標が偶数の場合、圧縮された公開鍵のプレフィックスは 02 です。
2. ビットコインアドレス
公開キーはダブル ハッシュまたは Hash160 の後に公開キー ハッシュに変換でき、公開キー ハッシュは Base58check でエンコードされた後にビットコイン アドレスに変換できます。具体的なプロセスは次のとおりです。
Base64 表現は、26 個の小文字、26 個の大文字、0 ~ 9 の 10 個の数字、および 2 個の文字 + と /! で構成されます。
Base58 は Base64 のサブセットですが、Base58 は誤読や混乱を招きやすい Base64 の部分文字列を破棄します。つまり、Base は 0 (ゼロ)、O (大文字の O)、l (小文字の L) を含まない部分文字列で構成されます。 ). , I (大文字の i) は、大文字、小文字、数字の 4 文字で構成されます。
Base58 エンコード プロセス:
3. 高度なキーとアドレス
10 年前にタイムスリップして、大量のビットコインを購入したとします。秘密鍵を安全に保管し、何年も経って価値が上がるのを待つにはどうすればよいでしょうか?
1. 長いパスワードを使用して WIF でエンコードされた秘密キーを暗号化し、WIF 形式の秘密キーと長いパスワードを別のペーパー ウォレットに保存できます。
2. さらに、マルチ署名テクノロジーも使用できます。これには、トランザクションを実行するための承認に複数の秘密キーの使用が必要です。
3. 秘密キーをパブリック ネットワーク上に公開したり、暗号化されていない環境に公開したりしないでください。
7. ビットコイン取引の原則
1. 基本的な考え方
UTXO: 支出トランザクションの出力
実際、ビットコインシステムには残高という概念はなく、ウォレットアドレスに対応する利用可能なすべてのUTXOが存在します。
ビットコインは実際にはトランザクションを次々に保存し、最終的には常に未使用のトランザクション出力、つまり UTXO のみが残ります。
取引の種類は主に通貨創造取引と通常取引に分けられます。
2. 取引の紹介
トランザクションにはトランザクション入力とトランザクション出力が含まれます
トランザクション入力には、トランザクション ID (txid)、出力インデックス (vout)、ロック解除スクリプト (scriptSig)、およびシリアル化 (シーケンス) が含まれます。
トランザクション出力には複数の出力が含まれており、各出力はトランザクション金額 (値) とロック スクリプト (scriptPubKey) に対応します。
さらに、Bitcoin Core クライアントでデコードすることで、特定のトランザクション構造を表示できます。手順は次のとおりです。
bitcoin-cli getrawtransaction txid # 查看txid对应的系列化后的原始交易数据
bitcoin-cli decoderawtransaction <origin data> # 即可查看对应的交易数据结构
さらに、トランザクションの合計インプットから合計アウトプットを差し引いたものが各トランザクションのトランザクション手数料であり、ネットワークのセキュリティを確保するための Bitcoin Miner の努力を補償し、同時にトランザクションの急増を防ぐために使用されます。
1. ビットコインスクリプト言語
ビットコイン トランザクション スクリプト言語は script と呼ばれます。これはスタック実行に基づく逆ポーランド式言語です。非チューリング完全です。各トランザクションが検証されると、各入力と対応する出力のロック解除スクリプト scriptSig と対応する出力のロック スクリプト scriptPubKey はトランザクションが支払い条件を満たしているかどうかを判断するために一緒に実行されます。
ロック解除スクリプトは署名と公開キーで構成され、ロック スクリプトには主に演算子と公開キーが含まれます。公開キー ハッシュ (以下に示すように):
ビットコイン スクリプト言語はチューリング完全ではないため、トランザクション検証メカニズムが脆弱性として使用されることはありません。それの利点!
3. タイムロック
時間ロックは相対時間ロックと絶対時間ロックに分けられ、それぞれトランザクション レベルとスクリプト レベルの時間ロックに分けられます。
スクリプト レベルのタイム ロックは、トランザクション レベルのタイム ロックと組み合わせて使用する必要があります。たとえば、CLTV トランザクション レベルのタイム ロックを使用するには、Time ClockLockTimeVerify Drop をロック スクリプトに追加する必要があります。検証中、フィールドの nLockTime は、使用する前に CLTV に対応する時間よりも大きい必要があり、そうでない場合、トランザクションは検証に合格できません。
相対時間のロック原理も同様です。
8. ビットコインネットワーク
1. ネットワークモデル
1.CSアーキテクチャ
エンド ユーザーがリクエストを開始し、サーバーが各リクエストを処理します。
2.P2Pアーキテクチャ
同じネットワーク内のすべてのコンピュータは相互にピアであり、各ノードは共同してネットワーク サービスを提供します。特別なノードはありません。
ビットコインが P2P モデルを使用する理由:
1.シンプルなトポロジ
2. ビットコイン自体はピアツーピアのデジタル現金システムとして設計されています
3.ノード機能
ノード機能: ウォレット、マイニング、完全なブロックチェーンの保存、ルーティング
ウォレット:ウォレットアドレスに関連するUTXOを収集し、残高を計算し、トランザクションを構築します
マイナー: トランザクションを収集し、ブロックヘッダーを作成し、ブロック報酬とトランザクション手数料を取得します。
ネットワーク: ルーティング機能。すべてのノードにこの機能があり、実際にはトランザクションを検証して伝播します。
ブロックチェーン: 完全なブロックチェーン情報を保存
4.ノードの種類
1. 通常のフルノード
完全かつ最新のブロックチェーン データがダウンロードされている限り、それは完全なノードです
2. ビットコインコアフルノード
これは最も完全な機能を備えたノードであり、まずフルノードであり、ウォレットとマイナー機能も備えています。
3.SPVノード
ライト ノードとも呼ばれますが、完全なブロックチェーン情報を持たず、フル ノードから必要なトランザクション データをリクエストする必要があります。ウォレットとネットワークの機能のみがあります。
4. 独立したマイニングノード
主にマイニング、トランザクションの収集、ブロック ヘッダーの作成、送信報酬とトランザクション手数料の取得を行います
2. コミュニケーションプロセス
先ほど 4 つのノード タイプについて説明しましたが、ネットワークに参加する新しいノードはどのようにしてビットコイン ネットワークに接続するのでしょうか?どのような条件が必要なのでしょうか?
通信プロセスは次のとおりです。
1. DNS シード ノードを介してピアノードを検出する
2. ポート 8333 でピアノードの 1 つと TCP 接続を確立します (このポートはビットコインによって使用されます)。
3. 接続を確立するとき、新しいノードはまずバージョン情報 (バージョン番号、ブロック番号、時刻) をピアノードに送信します。
4. バージョン情報を受信したピアノードは、自分のバージョン情報がローカルのバージョン情報と互換性があるかどうかを確認し、互換性がある場合は、接続を確認するための verack メッセージを送信します。
5. 接続が確立された後、新しいノードは、自身の IP アドレスを含む Addr メッセージを隣接ノードに送信します。さらに、getaddr メッセージを隣接ノードに送信して、他のノードの IP アドレス リストの返却を要求することもできます。ピアノード。
さらに、すべてのオンライン ノードは次の 2 つのタスクを定期的に実行する必要があります。
1.新規ノード参加時のレコメンド作業
2. 定期的にメッセージを送信し、90 分以内に通信すると接続が切断されたものとみなされます。
3. ブルームフィルター
1. SPVノードとフルノードの比較
ここで、SPV ノードは、ブロックチェーン全体を保存せず、ウォレット アドレスに関係するトランザクションのみを収集および検証することに注意してください。ブロックチェーン全体をダウンロードせずに支払いと残高を確認します。
では、完全なブロックチェーン情報がなければ、SPV ノードはどのようにしてトランザクションの存在と合法性を検証できるのでしょうか?
SPV は、特定のトランザクション情報を受信すると、まずブルーム フィルターを使用してフィルタリングし、それが関心のあるアドレスかどうかを確認します。ブルーム フィルターを正常に通過すると、検証のためにフル ノードからメルケル パスを要求します。特定のトランザクションの合法性 さらに、ブルーム フィルターを使用すると、対象のアドレスを外部に公開することなく、SPV ノードのプライバシーを大幅に保護することもできます。
ブルーム フィルターは、SPV ノードがピア ノードから受信したトランザクションをフィルタリングするために使用され、SPV ノードが関心のあるアドレスやキーを公開せずに関心のあるトランザクションのみを選択します。
2. ブルームフィルター
ブルーム フィルターは、要素がセットに属しているかどうかを迅速にチェックするために使用されるデータ構造であり、ハッシュ関数とビット配列に基づいて設計されています。
ブルーム フィルターには次の特徴があります。
- 効率的なメンバー チェック: は、要素がセット内に存在してもよいか、セット内に存在してはならないかを迅速に判断できます。
- 占有スペースが少ない: 使用するスペースが少なく、同じ数の要素を保存するのに他のデータ構造よりも必要なスペースが少なくなります。
- ハッシュ関数: ブルーム フィルターは複数のハッシュ関数を使用して要素をハッシュし、結果をビット配列の複数のビットにマッピングします。
- 誤判定があります: 一定の誤判定率があります。つまり、セットに属さない要素がセットに属していると誤認される可能性がありますが、誤判定はありません。起こる。
基本的な操作には挿入と検査が含まれます。
- 挿入 (追加): 挿入される要素について、複数回ハッシュし、対応するビット配列位置を 1 としてマークします。
- チェック: チェック対象の要素について、同じ回数ハッシュし、対応するビット配列の位置がすべて 1 であるかどうかをチェックします。いずれかの位置が 1 でない場合、その要素は集合内にあってはなりませんが、すべての位置が 1 であれば、その要素は集合内に存在しても構いません (誤判定の可能性があります)。
ブルーム フィルターの一般的な用途には、ネットワーク キャッシュ、スペル チェック、重複送信の防止などが含まれます。この場合、誤検知に対する許容度が考慮される必要がある要素となります。
9. ブロックとチェーン
1. 基本的な考え方
ブロックは、ブロックチェーンに含まれるトランザクション情報を集約するコンテナー データ構造です。
ブロックはブロック ヘッダーとブロック本体で構成されます。ブロック ヘッダーはわずか 80 Byte、ブロック本体のサイズは不明です。主にトランザクション情報が記録され、各ブロックのサイズは 1MB を超えません。
ブロックヘッダーには、バージョンプロトコル、以前のブロックのハッシュ値、タイムスタンプ、難易度ターゲット、マークルツリールート、乱数などが含まれます。
1. ブロック識別子
ブロック識別子には主にブロックヘッダのハッシュ値とブロック高さが含まれます。
ブロック ハッシュ値はブロックを一意かつ明確に識別でき、どのノードも ブロック ヘッダー をハッシュするだけでハッシュを計算できます。 a> でブロックのハッシュ値を取得できます。さらに、ブロック ヘッダーのハッシュ値はこのブロックのデータ構造には含まれていませんが、通常は迅速な検索のためにインデックス データベース テーブルにメタデータとして保存されることに注意してください。
ブロックの高さ: ブロックチェーン内のブロックの位置によって識別されます。
単一のブロックは常に明確で固定されたブロックの高さを持ちますが、その逆は当てはまらず、ブロックの高さが必ずしも単一のブロックを識別するとは限りません。
ここで考えてみましょう。ブロックのハッシュ値はブロックを一意に識別できるので、ブロックの高さはブロックを一意に識別できるでしょうか。
あはは、もちろんここでは不可能です。複数のマイナーが合法なブロックを同時に掘り出す可能性があり、その場合フォークが発生し、同じブロックの高さを持つ複数のブロックが生成され、ブロックがチェーンされます。それ自体にもメインブロックチェーンとバックアップチェーンなどがあります。
2. ジェネシスブロック
ブロックチェーンの最初のブロックはジェネシス ブロックと呼ばれ、すべてのブロックの共通の祖先です。つまり、どのブロックからでも問題ありません。レベルを上げていくと、最終的にジェネシス ブロックを見つけることができます。
各ブロックの最初のトランザクションは Coinbase トランザクションです。ビットコインを発行しているため、トランザクション入力はありません。したがって、トランザクション入力にカスタマイズされたデータを追加できます。以前、その中で愛と告白を表現する人もいました。
ジェネシスブロックの Coinbase トランザクション入力には、「タイムズ紙 2009 年 1 月 3 日、首相は銀行に対する 2 回目の救済の瀬戸際にある」という文が含まれており、この文はその日のタイムズ紙の一面記事のタイトルでした。この文は人々に独立した通貨制度の重要性を伝えています。
3.マークルツリー
ビットコイン ブロックチェーンの各ブロックには、ブロック内のすべてのトランザクションが含まれており、マークル ツリーで表されます。
マークル ツリーはハッシュ バイナリ ツリーであり、迅速な誘導とトランザクションの大規模なデータ整合性のために使用されるデータ構造です。
マークル ツリーはバイナリ ツリーであるため、偶数のリーフ ノードが必要です。要約する必要があるトランザクションの数が奇数のみの場合は、最後のトランザクションがフォームにコピーされます。偶数の葉ノード。
さらに、特定のトランザクションがブロックに含まれていることを証明するには、トランザクションを計算するだけで済みます。 l o g 2 N log_{2}N log2 N*32 バイトのハッシュ値は、特定のトランザクションからツリーのルートまでの認証パスまたはメルケル パスを形成します。トランザクションの数が増加するにつれて、その量は増加します。特に計算は重要です。
マークル ツリーを使用すると、ノードはブロック ヘッダー (80 バイト/ブロック) をダウンロードするだけで、大量のブロックを保存または送信することなく、完全なノードを介してマークル パスを通じてトランザクションの存在を認証できます。チェーン内のコンテンツ。
10. マイニングの仕組み
1. マイニングの概要
実際、マイニングという言葉は少し誤解を招きやすいのですが、一般的な意味でのマイニングは貴金属の抽出に似ているため、人々は各ブロックを作成した後に得られる報酬に注目します。マイニングの行動はこの報酬によって動機付けられますが、マイニングの主な目的はこの報酬や生成される新しいコインではありません。マイニング プロセスにより新しいコインが作成されますが、マイニングは最終的な目標ではなく、動機付けの手段であり、マイニングを通じて分散型セキュリティを実現できます。
マイニングは、トランザクションの検証と清算を行う分散型トランザクション清算メカニズムです。
平均して、ビットコイン システムでは 10 分ごとにブロックが生成されます。このブロックには、前のブロックから現在までの期間に発生したすべてのトランザクションが含まれます。これらのトランザクションは順番にブロックチェーンに追加されます。
マイニングによりシステムのセキュリティが保証され、マイナーはマイニング プロセス中に 2 種類の報酬を受け取ります: 新しいブロックを作成するための新通貨報酬と、ブロック内のすべてのトランザクションに対するトランザクション手数料です。
これらの報酬を受け取るために、マイナーは暗号ハッシュ アルゴリズムに基づいた数学パズルの完成を競い合います。プルーフ・オブ・ワークとして知られるこれらのパズルの答えは、マイナーが多大な計算作業を行った証拠として新しいブロックに配置されます。プルーフ・オブ・ワークのコンテストでは、勝者に報酬が与えられ、ビットコインのセキュリティ モデルの基礎であるブロックチェーン上での会計権限が与えられます。
さらに、報酬メカニズムは利益逓減モードで設計されています。マイナーが新しいブロックを作成することで得られるビットコインの数は 4 年ごとに半分に減ります。2140 年以降、新しいビットコインは生成されなくなります。コイン作成の報酬に加えて、マイナーは取引手数料も競います。各取引には取引手数料が含まれる場合があります。取引手数料は、各取引のインプットとアウトプットの差額です。
乱数は 32 ビットであるため、すべての乱数を試しても要件を満たす解決策が見つからない可能性があります。この時点で、コインベースのトランザクションにデータ実装を追加できます。その後、乱数を 0 から再試行し、事後順序でも解決策が見つからない場合は、タイムスタンプを更新することもできます。
2.採掘難易度調整
簡単に言うと、ネットワーク全体の計算能力に応じてマイニングの難易度が動的に調整され、問題が解決すれば、ネットワーク全体の計算能力が上がるにつれて、マイニングの難易度はどんどん簡単になっていきます。後の期間でブロックを掘るのにかかる時間は 10 分よりはるかに短く、要件を満たしていません。したがって、ビットコインの難易度はネットワーク全体の計算能力に応じて動的に調整されます。
特定の難易度の調整は、最新の 2016 ブロックに費やされた時間を 20160 分と比較することによって計算されます。
簡単に言うと、ネットワークがブロック生成サイクルが 10 分より速いと判断した場合はマイニングの難易度が上がり、そうでない場合は難易度が下がります。
この式は次の形式で要約できます:
3. マイニング方法
マイニングは、初期の CPU マイニングから GUP マイニング、そして ASIC マイニングまで 4 つのプロセスを経て、現在ではコンピューティング パワーを使ってマイニングを行っています。 、
ビットコイン ネットワーク全体のコンピューティング レベルは指数関数的に増加し続けているため、単一のデバイスや少量のコンピューティング能力では、ビットコイン ネットワーク上でビットコイン ネットワークによって提供されるブロック報酬を得ることができません。ネットワーク全体の計算能力が一定レベルまで上昇すると、報酬を獲得できる確率が低すぎるため、少ない計算能力を組み合わせて共同運用できる手法を開発する人たちが現れ、この手法を用いて開設されたウェブサイトが次のとおりです。マイニングプールと呼ばれます!
マイナーがマイニング プールに参加すると、成功したブロック生成に対する報酬は、個々のマイナーではなく、マイニング プールのビットコイン アドレスに支払われます。マイニングプールに参加するマイナーは、候補ブロックの検索の作業負荷を分割し、マイニング貢献度に基づいてシェアを獲得します。マイニングプールは、シェア獲得の目標値をより高く(難易度を低く)設定します。通常はビットコインよりも高くなります。ネットワークの難易度は終了します。 1000分の1以下です。
シェアの取得の難易度を低く設定することで、マイニング プールは各ワーカーが完了した作業量を測定でき、ワーカーがマイニング プールの難易度よりも低いブロック ヘッダーのハッシュ値を見つけた場合、ワーカーはその作業を完了したことを証明します。割り当てられた共有: 結果を見つけるために必要なハッシュ計算。
11. ビットコインの応用
1.基本モジュール
アプリケーションが適切かつ長期的に機能するために、ビットコインはアプリケーションを作成するための基本的な構成要素として使用できる一連の保証を提供します。
これらには次のものが含まれます。
1.二重支出を防ぐ: UTXO が二重に支出されないようにする
2.不変: トランザクションがブロックに記録され、十分な確認ブロック (6 つ以上) が追加されると、トランザクション データは改ざん不可能であると見なすことができます
3.中立: どのノードも有効なトランザクションを作成するのに十分な手数料を支払うことができます
4.安全なタイムスタンプ: 現在(過去または現在のいずれか)から離れすぎるタイムスタンプを持つブロックを拒否します。将来)
5.認可: デジタル署名により認可が保証されます
6.監査可能性: すべてのトランザクションは公開されており、監査可能です。
7.責任: トランザクション入力 = トランザクション出力 + トランザクション手数料
8.期限切れになりません: 有効なトランザクションは期限切れになりません
9.公平性: 署名を破棄してトランザクションを変更することはできません
10.トランザクションのアトミック性: トランザクションは検証および確認されるか、されないかのいずれかです
11**.固定額面**: 取引出力は固定額面であり、分割できない単位です。
12.定足数: 複数の署名により権限のある人の数が強調されます
13.時間ロック: 相対時間ロックと絶対時間ロックをサポート
14.複製性: トランザクションが作成され、有効であることが確認された後、トランザクションはコピーされ、ネットワーク全体にブロードキャストされます。あ>
15.偽造防止: ビットコインは何もないところから作成したり偽造したりすることはできません
16.一貫性: ブロックの深さが深いほど、変更される可能性は低くなります
17.外部ステータスを記録できる: 各トランザクションは、OP_RETURN を通じてデータを送信して、外部システムのステータス変化を表すことができます
18.予測可能な発行量: 合計 2,100 万ビットコイン未満
これらの基本モジュールに基づいて、いくつかの典型的なアプリケーションがあります。
1.デジタル公証 (不変性 + タイムスタンプ + 永続性)
デジタル指紋はトランザクションを通じてブロックチェーンに送信され、ファイルがアーカイブされた時点で存在していたことを証明できます (セキュリティ タイムスタンプ)。デジタル指紋はいつでも変更できず (不変性)、証拠は永久に保存されます (永続性)。
2.支払いチャネル (クォーラム + タイムロック + 二重支出なし + 有効期限なし + 監査可能 + 承認)
タイムロック付きのクォーラム 2-2 マルチシグは、支払いチャネルでのトランザクションの決済に使用され、どちらかの当事者が許可したあらゆる慣行で保持または使用できます。その後、両当事者は、より短い実用的なロックで二重支出決済確認トランザクションを作成できます。
2.代表的な用途
1. カラーコイン
カラーコインとは、ビットコイントランザクションを使用して、ビットコイン以外の外部資産の作成、所有権の確認、移転を記録するテクノロジーを指します。
カラーコインは、第三者が保有するデジタルおよび物理資産を追跡し、カラーコイン所有権証明書を通じて取引を行うために使用されます。
例えば:
紙幣に自動車引換券であることを記録することで、この紙幣に自動車の資産情報を記載し、自動車の所有権の売買という目的を達成するために取引することができる。同様に、外部資産の移転を実現するために、ビットコイン取引に情報の種類を記録することができます。
今日の主流のカラー コイン: オープン アセットとコル
さらに、これら 2 つのシステムにおける染色コインの使用は互いに分離されており、互換性がなく、通常のシステムでは染色コインを使用することはできません。
カラーコインの本質:
染色コイン トランザクションは、本質的には合法的なビットコイン トランザクションです。特別なことは、トランザクションの出力には、任意のデータを入力できるデータ フィールドを含む OP_RETURN トランザクションが含まれていることです。染色通貨は、このデータ フィールドにデータを記録します。 。
また、一般的なブロックチェーンブラウザは染色通貨プロトコルをサポートしていないため、このデータを解析することはできませんが、染色通貨ブラウザでは対応する染色通貨プロトコルの解析が可能です。
2. シンプルな支払いチャネル
ビットコイン システムは 10 分ごとにブロックを生成するため、各ブロックのサイズは 1MB で、最大 2,000 ~ 3,000 のトランザクションが存在しますが、ビットコインの 1 秒あたりの最大トランザクション数はわずか 7 であり、ユーザーのニーズを満たすには程遠いです。公共。こうして決済チャネルが誕生しました。
支払いチャネル: 2 者間の相互信頼を必要とせずに、ビットコイン ブロックチェーンの外側で 2 者間でビットコイン トランザクションを交換するためのメカニズム。
状態チャネル: 支払いチャネルは状態チャネルであり、変更された状態は仮想通貨の残高です。
支払いチャネルを確立するプロセスは次のとおりです:
1. 資金取引: 取引の 2 者間でステータス チャネルを確立し、ロックされたステータスがチャネルの初期残高となります。
2. コミットメントトランザクション: 双方が署名済みトランザクションを交換します。どちらの当事者も決済をブロックチェーンに送信できますが、決済する前にチャネルが閉じられるまで待ちます。複数のコミットメント トランザクションが存在する可能性があり、最新のコミットメント トランザクションが前のトランザクションを無効にする可能性があります。
3. 決済トランザクション: 協力が終了すると発生し、チャネルの最終状態を表します。
3.トラストレスチャネル
シンプルな支払いチャネルは、双方が協力し、取引の失敗や不正行為の試みがない理想的な状況の下で構築されます。
しかし、実際の状況では、これはそれほどスムーズにはなりません。たとえば、次のようになります。
誰かが支払いチャネルの支払い後にオフラインになった場合、チャネル内の資金を引き出すことはできません。さらに、どの当事者もブロックチェーンに利益をもたらすトランザクションを送信できます。たとえば、1 時間のビデオを購入しましたが、ブロックチェーンに送信したものは 30 分の料金でした。これを回避するにはどうすればよいですか? これについてはどうでしょうか?状況?
現時点では、信頼できないチャネル
を使用する必要があります。中心的な考え方は次のとおりです。消費者が署名するとき資金調達トランザクション、返金トランザクション (最初のコミットメント トランザクション) が確立され、ロック時間が長くなります。さらに、次に示すように、新しく生成された各コミットメント トランザクションのロック時間は短くなります。
ただし、多くの欠点もあります。
1. チャネルが最初にオープンされたときに最大時間ロックを確立し、チャネルの耐用年数を制限します
2. コミットメント トランザクションのタイム ロック間隔は 1 ブロックに設定されており、参加者は常に警戒し、オンラインに留まってリアルタイムで監視し、いつでも正しいコミットメント トランザクションを送信できるように準備しておく必要があります。
3. 両当事者間の約束された取引には数量制限もあります。
4. 非対称の取消可能なコミットメント
中心となるアイデアは、キーを取り消してトランザクションをコミットすることで、ビットコインとトランザクションの所有権を非同期的に制御することです。
その非対称性は、各人が保有するコミットメント取引では相手方に即座に金額を支払うことになるが、資金を受け取るには一定期間待つ必要があるという事実に反映されています。つまり、コミットメントトランザクションを一方的にブロードキャストすると、自分自身が不利になる可能性があります。
さらに、取り消しキーがあり、これを使用すると、詐欺を受けた側がチャンネルの残高全体を手に入れて悪者を罰することができます。
この設計構造により、チャネルは無期限に開いたままにすることができ、数十億の中間コミットされたトランザクションを保持できます。
シンプルな支払いチャネル | 順序のない信頼チャネル | 非対称の取消可能なコミットメント | |
---|---|---|---|
説明する | 欺瞞のないシナリオに適しています | 不正行為や切断の問題を解決できる | 不正行為や切断の問題を解決できる |
アドバンテージ | 単純 | 切断や不正行為の問題を心配する必要はありません | チャンネルは無制限に使用できます |
欠点がある | BTCの損失を引き起こしやすい | 2 者間でコミットされたトランザクションが制限され、チャネルの存続期間が制限されます。 | なし |
5. ハッシュタイムロック契約
おめでとうございます。ブロックチェーンに関するほぼすべての基礎知識を学習しました。ブロックチェーンは、さまざまなテクノロジーと統合できる新しいテクノロジーです。現在、ほとんどのブロックチェーンはまだ人間と連携して使用されています。主に、主に決済機能を実現しています。将来的には、ブロックチェーンはモノと結合され、それに比例して、ブロックチェーンはモノのインターネットおよび5Gと結合され、デバイスの情報データはモノのインターネットを通じて収集され、5G技術を通じてブロックチェーンのバックエンドストレージに送信されます。