비트코인 거래 개념
입력값(비트코인 계좌에서 빠져나가는 값) =/= 출력값(비트코인 계좌로 들어오는 값)
→ 입력값 - 출력값 = 거래 수수료의 값
* 거래 수수료: 자신의 거래를 검증하고 새로운 블록에 추가시켜주는 채굴자에게 주는 일정량의 보상.
채굴자는 2가지의 보상 획득:
1. 새로운 블록을 검증하고 생성하며 일정량의 비트코인 획득
2. 블록에 추가되는 거래에 대한 거래 수수료 획득
비트코인은 통화량이 정해져 있음(2100만개) → 통화량만큼 비트코인이 다 발행되면 더 이상 비트코인을 보상으로 받을 수 없게 됨. 그러면 채굴자가 받는 보상은 거래 수수료 하나 뿐.
지갑 어플리케이션의 거래 처리 로직
1. Getting right inputs
UTXO(Unspent transaction output)에 대한 데이터베이스가 지갑 어플리케이션에 저장
→ 지금까지 받았던 비트코인에 대한 복사본 포함
풀노드(Full Client): 제네시스 블록부터 지금까지의 모든 블록체인을 가지고 있는 노드.
블록체인 상에 있는 모든 거래에서 UTXO에 대한 복사본을 가지고 있음.
→ 모든 지갑 소유자들이 풀노드라면 UTXO에 대해 빠르게 검증할 수 있지만, 디스크 용량의 한계로 대부분의 지갑 사용자는 라이트 노드
라이트노드: 자신의 UTXO 복사본만 보유. 복사본이 없을 경우 풀노드에 요청하여 해당 정보의 검색을 비트코인 네트워크에 요청 가능
2. Creating the outputs
채굴
채굴: 블록을 새롭게 생성하는 과정. 블록체인에 새로운 블록을 추가하는 과정에서 신뢰성 유지 방법 존재.
P2P 네트워크 상의 모든 노드에 새로운 거래를 전달해야 함. 거래 결정 과정: 1. 비트코인 네트워크 상의 모든 노드에 거래 내역 전파 → 2. 거래 검증을 위해 채굴 과정을 거쳐서 블록에 포함되어야 함. 채굴 과정에서 작업증명(Proof of Work)으로 충분한 연산량 기반의 승인임이 확인되는 것이 필요함 정리하자면, 거래가 네트워크에 전파 --임시풀에 저장--> 블록체인에 로드(채굴자들이 새로운 블록을 생성하여 추가) -> 검증(새 블록의 유효성 검증을 위해 작업증명(POW)을 거침)
비트코인 채굴: (초반) CPU 사용 → GPU 사용 → ASIC(전문 채굴장비) 사용 ← 채굴의 중앙화 문제 발생
위조 여부 검증
비트코인 네트워크에서 디지털 키, 비트코인 주소, 디지털 서명 기반으로 확인
지갑
지갑: 기본 사용자 인터페이스로 사용되는 응용 프로그램. 사용자의 돈에 접근, 키 & 주소 관리, 잔액 추적, 트랜잭션 생성 및 서명을 제어함. 데이터 구조라고도 볼 수 있음.
- 비결정적 지갑: 모든 키의 복사본을 보관해야해서 지갑을 자주 백업해야 함. 주소 재사용 문제 존재.
- 결정적 지갑: 개인키 생성의 기반이 되는 단방향 공통 시드(Common seed)가 존재. 시드를 사용하여 키 복구가 가능하믈 생성 시 한 번만 백업해도 됨.
- HD 지갑: 부모키가 자식 키들을 파생시킴. 계층적으로 키를 생성해 매 거래마다 새로운 주소 생성 -> 개인 정보 보호 .
Root seed(단일 시드)로부터 HD 지갑을 만듦. 많은 키, 주소 관리에 용이한 매커니즘
공개키에 대응되는 개인키에 접근하지 않고 공개키 생성 가능
BIP-32 표준
- 연상기호(mnemonic): 시드 생성 + HD 지갑 <- BIP-39
연상기호를 사용해 백업 및 복구
비트코인 지갑 구현 시 BIP-32, BIP-39, BIP43, BIP44 표준에 따라
연상기호로 인코딩된 시드 사용해서 HD 지갑 구축해야 함
지갑 기술
- Mnemonic Code Words (BIP-39)
- Generating mnemonic words