본문 바로가기
CS/3-2 블록체인

[블록체인] 04. Mechanics of Bitcoin - Transactions, Scripts and Blocks

by 이지이즤 2022. 10. 17.
728x90

 

Cryptography & Cryptocurrencies


채굴 = 퍼즐 풀기 = hash 함수 계산

 * high min-entropy
  : 특정 value가 더 많이 선택되는 등 하지않고 통계 분포가 고름.

 

Hash pointers

 : 어디에 정보(data)가 저장되어있는지 가리킴 + cryptographic hash 정보도 같이 저장되어있음.
  -> 정보 위치 알아낼 수 있음 + hash pointer가 가리키는 곳의 정보 변경 detect 가능.(integrity)

 * Tamper-evident log (조작 가해짐-드러남 저장장소)
  : data 조작하면 다음 block의 hash pointer가 incorrect하게되므로 조작을 detect할 수 있음.

 

Merkle Tree

  머클트리란?

 


Digital signature scheme

  * sk : private(secret) key. 서명하는 데 사용. 주로 256bits 
  * pk : public key. 서명 검증하는 데 사용. 주로 512bits 

  • (sk, pk) := generateKeys( keysize )
  • sig := sign( sk, message )
  • isValid := verify( pk, message, sig ) boolean(T/F)값 리턴 함.

   => verify ( pk , message , sign ( sk , message )) == true 이면 valid signature!
        pk와 sk가 쌍이되고 앞의 message와 뒤의 message가 일치해야 true임.
       
서명은 위조 불가능! (private key를 알아야 verify 통과 가능)

 

ECDSA

 : Elliptic Curve Digital Signature Algorithm (ECC 서명 검증)

 “secp256k1”라는 특정한 타원 곡선 사용.

 - Private key: 256 bits
 - Public key: 512 bits 
 - Message to be signed: 256 bits (SHA-256 applied before signing) 즉, h(M)에 대해 서명함.
 - Signature: 512 bits
 => public key(에 hash적용한 값)를 identity(주소)로 사용함.

Bitcoin Address는 public key를 hash한것임

 


Bitcoin Transactions

 

- account-based ledger
  : 은행 계좌 잔고 체크 방법

- transaction-based ledger
  : 비트코인에서 사용하는 방법!

블록체인 합의 기술

   SK로 서명 -> 채굴자가 PK로 검증(invalid한 transaction 포함한 block은 인정되지 않음.)  

  * bitcoin은 wallet에 있는 게 아니라 block chain의 특정한 address에 있는거임.
    어떤 주소로 bitcoin을 보냈다는 transaction이 longest chain상의 block에 포함되어 있음.
    wallet은 특정한 address에 접근해서 bitcoin 가져올 수 있는 SK를 가지고 있는거임.

 

UTXO based model

: Unspent Transaction Output
  소비되지않은 transaction output을 claim("이 주소의 이 bitcoin은 내 소유야!") 할 수 있음.

 Bitcoin 블록체인 상에는 주소(계좌)의 잔액은 기록되어있지 않음.
 네트워크의 transaction을 따라가며 계산해야 함. 

 

Transaction syntax

 metadata의 hash가 ID로 사용됨.
 input / output은 꼭 1개일 필요는 없음.

 input은 이전 트랜잭션의 결과(Unspent Transaction Outputdp 포함되어 있는 bitcoin)를
 claim(내가 가져다 쓰겠다)하는 게 목적임.

 output은 input으로 가져온 트랜잭션을 어디에 소비할건지 지정함.
 
(sum of all output values sum of all input values)
 : 차액은 transaction fee

 


Bitcoin Scripts

 

 <sig>는 ①을 claim해서 사용하려는 주체가 ②에서 만듦.
 그 주체는 ①output address를 만들 때 사용한 public key와 쌍이되는 private key를 가지고 있음.
 그 private key로 서명을 만듦. (①, ②에 대한 서명)

 

 

 


Bitcoin Blocks

 

- transaction모아서 chain of block을 만드는 이유?
 : block 대비 transaction수가 더 많아서 transaction은 consensus 힘듦.
  좀 더 수월하게 합의 이루기 위해 다량의 transaction 모아서 block 만들어서 block by block 합의 함.

 

Coinbase transaction

- merkle tree에서 left most leaf node
- new coin이 만들어지는 transaction (기존에 없던 거 새로 생김.)
- single input(인풋은 의미 없음. NULL값), single output(채굴자가 block reward받기 원하는 주소)
- input이 이전 output을 clain(redeem)해주는 게 아님. 그냥 null hash pointer임.
- 4년에 한 번씩 보상이 절반으로 줄어듦. 50btc에서 시작해서 지금은 6.25btc (+transaction fee)
- 채굴자는 임의의 값인 coinbase parameter를 넣을 수 있음. (+ 채굴 보상 받을 주소)

 

비트코인 사용법

- bitcoin wallet

 

내부에서는 ...

 

728x90

댓글