Satishi Nakamoto가 2009년 발표한 대표적인 Public BlockChain 시스템
ECDSA 기반의 전자 서명 알고리즘 이용
9000개 이상의 Full Node로 구성된 네트워크 보유
평균 10분마다 새로운 블록을 채굴
↪PoW 난이도 조절을 통해 채굴 속도를 조절하며 이를 통해 stale block의 양을 줄이며, 51% Attack도 방지할 수 있다
통화 발행을 2,100만개로 제한
↪인플레이션 방지를 위함으로 추측하며 그 이후의 채굴자에게는 Tx Fee가 수수료로 돌아간다
한 블록의 평균 크기는 1.29Mbyte
↪한 블록당 약 2000개의 트랜잭션이 포함된다
타원 곡선(Secp256k1)을 이용해 개인 키, 공개 키 사용
타원 곡선 :
Private Key () : ~ 사이의 랜덤한 숫자
Public Key () :
↪ : 타원 곡선 상의 고정된 점
↪ : 타원 곡선 상의 곱하기 연산
🖊이 부분은 이전게시글의 ECDSA부분을 참고하면 된다.
위에서 본 Public Key는 520bi, 즉 65Byte의 크기를 갖게 되는데 이럴 경우 블록에 담기에는 너무 큰 크기를 갖기 때문에 암호 해시를 이용해서 생성한다
📌 Public Key 의 구조는 prefix 8bit, x좌표 256bit, y좌표 256bit로 총 520bit가 된다
Public Key를 이용하여 주소로 변환하는 과정
출처 : oreilly
Base58Check Encode 과정
출처 : oreilly
Base-58
↪숫자와 알파벳 중 햇갈릴 수 있는 0
, O
, I
, l
네 개의 문자들을 제거한 58가지 문자로 인코딩하는 방법
Prefix
↪8bit이며 주소의 버전을 의미하며 자세한 목록들은 여기서 확인 가능하다
Checksum
↪에러를 체크할 수 있는 해싱된 코드이며 Payload 뒤에 붙여준다.
Bitcoin Script Language의 약자로 대표적인 특징으로 튜링 불완전성언어로 반복문의 기능이 없다는 점과 Stack기반의 프로그래밍언어로, 입력이 맞으면 TRUE, 그렇지 않으면 FALSE를 저장한다
📌 BSL에 관한 자세한 정보는 위키피디아에서 확인 가능하다
비트코인에서의 트랜잭션은 화폐의 흐름을 표기
{
"version": 1,
"locktime": 0,
"vin": [{
"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
"vout": 0,
"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787e c3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295 }],
"vout": [{
"value": 0.01500000,
"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value": 0.08450000,
"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
}]
}
Input : 트랜잭션 id와 포함한 Signature, Locking Script(scriptPubKey) 등이 포함되어 있다
Output : 트랜잭션 결과로 가져갈 금액과 Unlocking Scrript(scriptSig)가 포함되어 있다
Tx fee : 트랜잭션을 포함한 블록을 채굴할 마이너에게 지급되는 fee로 입력금액 - 출력금액
으로 계산된다
📌 각 Node들이 Tx를 검증하기 위한 자세한 CheckList는 여기서
Independent Verification of Transactions
항목을 통해 확인 가능하다.
Unspent Transaction Outputs의 약자로 미사용 트랜잭션 출력 값을 의미한다 따라서 사용자의 총 잔고는 UTXO의 총합을 의미한다고 볼 수 있다.
예시를 들자면 A와 B가 나에게 각각 2,000원을 보내주었다고 했을 때 나의 잔고는 4,000원이 아닌 2,000원 두개가 된다.
다시 내가 C에게 3,000원을 보낼 경우 2,000원 두 개를 트랜잭션에 등록하여, 3,000원은 C에게, 1,000원은 나의 잔고로 등록이 된다.
트랜잭션이 등록되고 블록에 올라가기 전에는 Mempool에 등록되며 이를 통해 비트코인은 이중지불에 대한 방지를 할 수 있으며 거래에 대한 유효성을 검증하는데 사용된다.
📌 Miner에게 돌아가는 채굴의 보상은 기존의 UTXO의 거래 수수료와 Coinbase Tx의 합으로 가져가가며, 비트코인의 총 발행량인 2,100만개 이후에는 Coinbase Tx는 없이 순수 거래 수수료만 채굴 보상으로 받을 수 있다.
Routing
: 트랜잭션과 블록을 검증 및 전파하며 다른 Peer와 연결을 유지
BlockChainDB
: 블록체인의 전체 혹은 헤더를 저장
Mining
: 새로운 블록을 추가 및 PoW알고리즘 수행
Wallet
: 사용자의 화폐, 주소, 키 관리 및 트랜잭션 생성
Full Node : Routing
, BlockChainDB
, Mining
, Wallet
기능을 모두 갖고 있는 노드
SPV Node : Simplified Payment Verification Node로 Routing
, Wallet
기능을 갖고 있다
Solo Miner : Routing
, BlockChainDB
, Mining
기능을 갖고 있으며 채굴을 주 목적으로 하는 Node
Mining Node : Pool protocol server에 의해 관리되는 Mining
기능만 갖고 있는 Node
SPV Node 와 Full Node 상호작용 단계
- 특정
SPV Node
A가 다른SPV Node
B에게 보내는Trancsaction
을 생성 후 네트워크에 전파Transaction
이 B에게 전다르 되면 정상적으로 전파된 것으로 확인가능하며Transaction
은 Pool에 저장된다- A가 B에게 보내는
Transaction
이 포함된 블록을 후보 블록으로 생성한Miner
가 채굴에 성공할 경우 네트워크에 전파- 다른
Full Node
들도 블록을 검증하고SPV Node
B는 다른Full Node
에게 블록 헤더를 수신
↪SPV Node
B가Full Node
에게 자신의Transaction
이 포함 되었는지를 확인하기 위해 특정Transaction
만을 요청하면Full Node
는SPV Node
B를 특정할 수 도 있다. 이 때Bloom Filter
를 이용한다
nonce : 비트코인 PoW
의 정답을 의미하며 nonce
를 찾은 Miner
가 Coinbase
를 포함한 Tx Fee
를 받아간다. Miner
들이 nonce
를 찾는 것은 어렵지만 주변 다른 Node
들이 nonce
를 검증하는 것은 쉽다는 특징이 있다
Target : 비트코인 PoW
의 문제를 의미하며 Miner
는 Target
보다 작은 해시값을 찾아야 한다.
Difficulty : 비트코인 PoW
Target
의 난이도를 의미한다. 블록은 평균 10분에 1개가 채굴됙게 되는데 2,016개의 블록마다 채굴 평균속도가 길경우, Difficulty
가 내려가고, 빠를경우 Difficulty
가 올라간다
📌 각 Node들이 Block을 검증하기 위한 자세한 CheckList는 여기서
Validating a New Block
항목을 통해 확인 가능하다.
만약 같은 height의 Block을 동시에 찾았다면 그것을 전파받은 Node들은 각자 검증 후 그 이후의 height의 Block을 채굴하며 최종적으로 제일 height가 높은 블록을 모두에게 전파한다. 이 과정에서 모두에게 전파되지 못한 블록들을 Orphan Block이라고 하며 이런 시스템 때문에 Block이 Chain에 올라가더라도 최종적으로 승인이 되기 위해선 6개의 Block이 올라가야 거래가 확정되며 Coinbase Tx도 100개의 Blcok 이후에 승인된다.