この文書はコンピューター工学知識が一部必要です。
Block
BlockchainはBlockとChainの合成語
Blockchain P2P NetworkのMinerはネットワーク中のTransactionを集めてBlockに書き込みます。 作ったBlockは一つのChain(Linked List)で連結されます。
BlockはP2P Networkの参加者Node互いにデータの同期を取る為の単位だと言うことができます。
例)このNodeは101番Blockまでのデータを保有します。連結された他のNodeは105番Blockまで保有します。
Linked List With Blocks
Blockchainの一番重要な特性はデータの改変が不可能になっていることでしょう。
この特性はLinked Listを元で成立します。
- 各々のBlockは前のBlockのHashを持ちています。
- もし、Height 2 Blockから改変が発生すると、Height 2 BlockのHashが改変されます。
- Height 2 Block Hashが改変すると,Height 3 Blockが持ちているHeight 2 BlockのHashも改変されなければなりません。
- Height 3 Blockの内容が変更されていますから,Height 3 BlockのHashが変わります。この変更はまたHeight 4 Blockに影響します。
前のBlockが変更されたら、次の全Blockを改変しなければなりません。
言い換えれば、Blockchain中、先に作ったBlockほど変造が難しいなります。
Unique Chain
Blockchainは一つのChainのみNetwork中で承認されます。
Blockがどれほど同期を取ったのかで暫く分岐が発生するのができますが、最後には一つのChainを選ぶ事になっています。
一般的にはLongest Chain Rule(もっともHeightが大きなChain)を使用します。
Confirmation
特定Blockの後、どれだけBlockが繋がっているかをConfirmationだと呼びます。
- Minerが前BlockをConfirmしていますから,前BlockのHashを持ちる次のBlockを作っています。
この特性で、Confirmationを多数貰ったBlockならば、このBlockは改変されないことだと考えることができます。
このようアプローチは曖昧な定義を持ち、ConfirmationはTrade offの特性を持ちます。
- Confirmationが多いほど、安全なBlockへ(変わらない)アプローチができます。
- Confirmationが少ないほど,Blockが早くConfirmして、Transactionも早くConfirmしますが,Blockが改変する可能性が高くなります。
明確な答えは難しいですが、各BlockchainでガイドされているおすすめConfirmation数が有ります。
0-Confirmation
User Experienceの為,Block Confirmをスキップして、書き込み前のTransactionを直ちにConfirmすることが有ります。
これを’0 Confirmation’と呼びます。サービスでリミットとかUTXOを使用することで具現できます。
例)
- 入金TransactionがConfirmされる時まで出金できません。
- Bitcoin Transaction作る時、ユーザのTransactionをInputとして作ります。Inputが無効ならば(他の場所で消費されたら)このTransactionも無効になります。
Bitcoin Raw Block
Little Endianに注意しましょう。
Bitcoin Height 0 Raw Block Header
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c
Name | Byte | Description | Example |
---|---|---|---|
Version | 4 | バージョン | 01000000 |
Previous Block Hash | 32 | Prev Block Hash | 000000 ... |
Merkle Root | 32 | Merkle Root | 3ba3edfd ... |
Time | 4 | Block生成時間 | 29ab5f49 |
Bits | 4 | 難易度目標 | ffff001d |
Nonce | 4 | 乱数 | 1dac2b7c |
Bitcoin Height 0 Raw Block
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000
Headerの次1 Byte (01)はBlock中Transaction数です。
Reference
- この文書は韓国語文書から翻訳されています。韓国語文書が原文になります。