블록체인

[블록체인] 비트코인-머클트리(Merkle tree)

윤밥밥 2023. 12. 17. 15:35

비트코인에서는 transaction을 저장하기 위해 머클 트리를 사용한다.

머클 트리


즉 머클트리란 위와 같이 트랜잭션을 해쉬한 것들을 합쳐서 해쉬하여, 정보를 저장하는 방법이다.
여기서 최상위 머클트리 루트 해쉬 값으로, 아래를 모두 구할 수 있다는 것이 아니다.
이는 아래 트랜잭션 중 하나를 누가 임의로 수정하면, 공격자가 수정했음을 알아 차려 회복할 수 있게 하는 방법이고, 이를 최상위 루트 값만 들고 있어, 저장하는 정보에 무리가 가지 않도록 하기 위해서 존재한다.

HA는 Hash(TxA)를 sha256으로 해쉬한 것, 결과는 256bit이다.
즉 TxA를 해쉬한 값을 한번 더 해쉬한 게 HA이다.
HA+HB는 두 스트링을 이어 붙인 것이다.

이를 통해 아래 Tx를 임의로 바꾸면 해시값이 달라지므로 머클트리에서 끊어지게 된다.
또한 HB 트랜잭션이 변경되었는 지 확인하려면 depth만큼만 확인하면 된다.

예를 들면 이와 같이 HK를 확인하려면 HL, HIJ, HMNOF, HABCDEFGH의 도움만 받으면 된다.

Mining

  • 채굴은 비트코인을 견고하게 만들며, 중앙 권력없이 네트워크 합의를 가능하게 한다.
  • 채굴 보상과, transaction fee는 채굴자가 채굴을 하는 동기를 제공한다.
  • 트랜잭션이 블록체인에 포함되었다 == confirm되었다.
  • 시작이 지날수록 block reward는 감소하고 있고, 이를 transaction fee가 대체하게 될 것이다.

finding valid blocks

  • 보류된 transaction pool에서 타당한 transaction들을 골라 merkle tree로 구성한다.
  • 이전 블럭을 가리키는 header와 함께 block을 만든다.
  • 문제를 푸는 nonce를 찾는다.

# mining과정에서 nonce를 푸는 과정은 모두 똑같은 퍼즐을 푸는 거 아니야?
아니다. 왜냐하면 어떤 트랜잭션을 포함시키는 지, 트랜잭션의 순서에 따라 hash값이 달라지므로 모두 다른 퍼즐을 푸는 것이다.
또한 transaction에 코인을 받을 주소를 명시하기에 달라진다.

참고로 돈을 받을 마이너의 주소는 머클트리 가장 왼쪽에 기입한다.
이를 coinbaseTransaction이라고 한다.
이 트랜잭션은 기존에 존재하던 코인을 사용하는 것이 아니므로 input이 필요없다.