비트코인
블록체인
![]()
첫 등장
- 서브프라임 모기지로 금융 시스템에 대한 불신이 커짐
- Oct 31, 2008: Cryptography mailing list에서 사토시 나카모토가 비트코인 백서 업로드
- 신뢰 주체 x, 탈중앙화: 중개자 없이
- 발행량 고정
- 공개 원장, 개방형 금융 시스템: 투명성
- 누구나
bitcoin client(bitcoin core가 75% 점유중)를 다운 받아 네트워크에 참여할 수 있다.
- 누구나
- Feb 3, 2009: 비트코인 네트워크 시작, 첫 블록 생성
Transaction
- state를 바꾸는 모든 action
- 비트코인에서는 송금의 의미
- 복수의 input -> 복수의 output
- 입력값의 총합 = 출력값의 총합 + 거래 수수료
- 거래 수수료는 채굴자에게 지급 (
coinbase transaction: 채굴자에게 보상으로 지급되는 트랜잭션)
- 거래 수수료는 채굴자에게 지급 (

- transaction의 output이 다른 transaction의 input으로 사용됨.
- 남은 돈은 송급자(혹은 다른 계좌)에게 반환
UTXO (Unspent Transaction Output): 아직 사용되지 않은 transaction output- UTXO의 집합이 현재 네트워크의 상태를 나타냄
- 현재 10GB를 넘는 정도의 양
- 딱 한번 사용 가능:
이중지불 공격방지 - 지갑의 잔액은 UTXO의 총합
- input으로 사용하는 트랜잭션이 매번 바뀌면서 서명도 매번 바뀜
- UTXO의 집합이 현재 네트워크의 상태를 나타냄
네트워크 전파 과정
- 트랜잭션을 비트코인 p2p 네트워크에 전파
- 트랜잭션을 mempool에 저장
- 노드마다 mempool이 다를 수 있음
- 채굴자들이 블록에 담을 트랜잭션 선택(갯수 제한 o)
- 일반적으로 수수료가 높은 트랜잭션이 우선적으로 선택됨
- 블록이 생성되면 네트워크에 전파
Key, Address
해시 함수:임의의 길이의 데이터를고정된 길이의 값으로 바꾸어 주는 함수- H(x)가 주어졌을 때, x를 찾는 것이 어려움
- H(x) == H(y)인 x, y를 찾는 것이 어려움
- 입력값의 작은 변화가 출력값에 큰 변화를 일으킴(
Avalanche effect)
- 사용자의 개인 키와 공개키를 이용해 해시함수로 서명하여 거래에 대한 소유권을 증명

script언어를 통해 로직 구현turing incompleteness: 반복문 지원 x. 기본적인 기능만 제공(ex: 서명 확인,time lock)

- 트랜잭션의 input에서 이전 UTXO를 자신의 private key로 해제. 이전의 UTXO가 자신의 것임을 증명(unlock)
- 트랜잭션의 output에서 UTXO를 생성하여 현재 자신이 보내는 수취자의 public key로 잠금(lock)
Node
Full Node: 블록체인 전체를 저장, 검증, 네트워크 참여- 이중 일부가 Mining Node
SPV Node(Light Node): 블록체인 전체를 저장하지 않고, 필요한 정보(블록 헤더, 머클 트리)만 이용하여 거래 검증(Full Node에 의존)
Block
- header
- 타임스탬프
- 이전 블록의 해시값
- Merkle root: 블록에 포함된 트랜잭션들의 해시값을 트리 구조로 결합하여 만든 값
- Difficulty, nonce: 채굴자가 찾는 값, 블록 해시값이 특정 조건을 만족하도록 조정하는 값
- body: 블록에 포함된 트랜잭션 리스트
Concensus
Nakamoto Consensus
- 누가 새로운 블록을 만들게 할까?(
Decentralization): proof-of-work- 채굴자가 블록 헤더의 nonce 값을 조정하여 블록 해시값이 target 이하를 만족하도록 하는 작업
- target:
평균 10분마다블록이 생성되도록 조정되는 값. 2016개 블록(10분 기준 2주)마다 재설정- \(\text{newTarget} = \text{oldTarget} \times \frac{\txt{actual time of last 2015 blocks}}{\text{20160 miniutes}}\)
- 값이 작으면 문제가 어려워지고, 값이 크면 문제가 쉬워짐
- 10분 유지: fork 가능성을 줄이기 위해
- incentive: 50BTC부터 시작하여 210000개 블록마다(4년) 절반으로 감소. 대략 2140년이 되면 모두 발행.
- target:
- 채굴자가 블록 헤더의 nonce 값을 조정하여 블록 해시값이 target 이하를 만족하도록 하는 작업
- 딱 하나의 장부만 존재하도록 어떻게 보장할까?(
security): longest chain rule- 특정 노드가 hashrate 51% 이상 차지하면 공격 가능(
51% attack)
- 특정 노드가 hashrate 51% 이상 차지하면 공격 가능(