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 에서 Guide 되는 추천 Confirmation 숫자가 있습니다.

0-Confirmation

User Experience 를 위해서, Block Confirm 을 기다리지 않고, Block 에 기록되기 전의 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 이전 블록 해시 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 의 개수 입니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 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.