Qaupot Blog
Software Engineering, Trip

この文書はコンピューター工学知識が一部必要です。

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を元で成立します。

  1. 各々のBlockは前のBlockのHashを持ちています。
  2. もし、Height 2 Blockから改変が発生すると、Height 2 BlockのHashが改変されます。
  3. Height 2 Block Hashが改変すると,Height 3 Blockが持ちているHeight 2 BlockのHashも改変されなければなりません。
  4. 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

  • この文書は韓国語文書から翻訳されています。韓国語文書が原文になります。
이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.