Chapter 2. How Bitcoin Works
Transactions, Blocks, Mining, and the Blockchain
이번 장에서는
한 건의 거래가 발생해서 블록체인에 기록될 때까지, 비트코인 네트워크에서 어떤 일들이 일어나는 지를 살펴봅니다(high level로).
Bitcoin Overview
그림 2-1은 눈에도 확 안 들어오고, 지금 수준에서는 별로 도움이 안 될 것 같습니다. 패스~
이번 장의 예들은 비트코인 네트워크의 실제 거래를 기반으로 하고 있기 때문에 블록체인 탐색기에서 실제로 볼 수 있습니다.
A blockchain explorer is a web application that operates as a bitcoin search engine.
블록체인 탐색기를 검색 엔진으로 비교하네요. 그럼 블록체인 탐색기가 킬러 앱인거야?
Popular blockchain explorers include - Bitcoin Block Explorer, BlockCypher Explorer, blockchain.info, BitPay Insight
Buying a Cup of Coffee
1장에서 등장했던 앨리스는 친구 조로 부터 0.10BTC를 송금받았습니다.
앨리스는 밥의 카페에서 커피 한 잔을 0.015 BTC로 구매하려 합니다.
앨리스는 그림 2-2 지불요청 QR 코드를 스캔해서 지불 내용을 읽고 전송 버튼을 눌러 지불을 승인합니다.
Bitcoin Transactions
In simple terms, a transaction tells the network that the owner of some bitcoin value has authorized the transfer of that value to another owner. The new owner can now spend the bitcoin by creating another transaction that authorizes transfer to another owner, and so on, in a chain of ownership.
간단히 설명하자면, 거래는 어떤 사람이 자신이 보유한 비트코인의 일부를 다른 사람에게 전송하는 것을 승인했다고 비트코인 네트워크에 말해 주는 것과 같습니다.
새로운 소유자는 같은 방법으로 또 다른 거래를 만들어 비트코인을 사용할 수 있습니다.
이러한 과정이 반복되면서 소유권의 체인이 만들어집니다.
Transaction Inputs and Outputs
하나의 거래는 하나 이상의 '입력값'과 하나 이상의 '출력값'으로 구성됩니다.
입력값의 총합이 출력값의 총합보다 커야 합니다. 입력값과 출력값의 차이는 '거래 수수료'가 됩니다. 거래 수수료란 원장에 거래를 포함시킨 채굴자가 수거하는 소액의 지불금입니다.
그림 2.3
- 입력값 4개 출력값 3개짜리 거래
- 입력값의 총합은 0.55 BTC이고 출력값의 총합은 0.50 BTC
- 거래수수료는 0.05 BTC(입력값 총합 - 출력값 총합)
Transaction Chains
그림 2.4
- 앨리스가 밥의 카페에서 커피 값을 지불 할 때(두 번째 거래) 이전 거래(첫 번째 거래)의 출력값을 입력값으로 사용
- 첫 번째 거래는 앨리스가 현금을 주고 친구인 조에게서 비트코인을 구매한 것, 두 번째 거래에 사용되기 전까지는 앨리스가 보유한 키로 잠겨 있게 됨
- 두 번째 거래는 앨리스가 밥의 카페에서 커피 값을 지불한 것, 이전 거래를 참조하여 입력값을 만들고 커피 한 잔을 구매하는 데 필요한 출력값을 만듬. 커피 값을 지불하고 남은 금액이 크기 때문에 잔액을 돌려 받는 출력값을 추가적으로 만듬
- 첫 번째 거래의 출력 주소는 앨리스, 두 번째 거래의 입력값으로 사용되기 위해서는 앨리스의 키로 서명해야 함
- 이들 거래들은 조에서 시작해서 앨리스를 거쳐 밥을 거쳐 조셉에 이르기 까지의 거래 사슬을 나타냄
Making Change
입력값은 쪼갤 수 없기 때문에 그림 2.4의 두 번째 거래에서와 같이 잔액이 남는 경우가 있습니다. 입력값과 출력값의 차이가 커서 이것을 모두 수수료로 사용하기에는 아까운 경우지요.
Common Transaction Forms
그림 2.5
- 가장 일반적인 거래 유형
- 어떤 한 주소에서 다른 한 주소로의 거래
- 원 소유주에게 돌려줘야 하는 잔액이 존재하는 경우, 하나의 입력값과 두개의 출력값이 발생
그림 2.6
- 하나의 출력값을 만들기 위해 다수의 입력값이 필요한 경우
- 지불과정에서 잔액으로 받은 작은 단위의 금액을 정리하기 위해 지갑 앱에서 때때로 이 유형의 거래가 시행
그림 2.7
- 하나의 입력값으로 다수의 수신인에게 줄 수 있는 여러 개의 출력값으로 배분하는 경우
- 예) 기업체에서 직원들에게 급여를 지불
Constructing a Transaction
Getting the Right Inputs
거래를 구성하려면 먼저 올바른 입력값을 구해야 합니다. 대부분의 지갑들은 이를 위한 로직을 가지고 있습니다.
지갑의 유형에 따라 입력값을 구하는 방법이 다릅니다.
- 풀노드 클라이언트 - 모든 소비되지 않은 출력값의 복사본에서 사용자의 소비되지 않은 출력값을 추적
- 경량 클라이언트 - 자신의 소비되지 않은 출력값만을 추적
- 소비되지 않은 출력값 복사본을 보관하지 않는 경우 - API를 사용해서 풀노드에게 요청, 예시 2-2
Creating the Outputs
거래를 구성하려면 출력값을 생성해야 합니다.
A transaction output is created in the form of a script that creates an encumbrance on the value and can only be redeemed by the introduction of a solution to the script.
출력값은 스크립트 형태로 만들어지고, 스크립트에 대한 해결책이 제공되는 경우에만 사용할 수 있습니다. 스크립트에 대한 해결책은 공개키에 대응하는 키로 서명하는 것입니다.
Adding the Transaction to the Ledger
거래는 258바이트 크기로 거래에 필요한 모든 정보를 포함합니다.
이제 해당 거래는 블록체인의 일부가 되기 위해 비트코인 네트워크로 전송되어야 합니다. 비트코인 네트워크는 P2P 네트워크이므로 연결된 다른 클라이언트들에게 전송하면 됩니다.
The purpose of the bitcoin network is to propagate transactions and blocks to all participants.
비트코인 네트워크의 목적은 거래와 블록을 모든 참여자들에게 전파하는 것입니다.
비트코인 네트워크 노드들은 이전에 보지 못한 유효한 거래를 전송받으면 즉시 연결된 다른 노드로 해당 거래를 전달합니다. 이런 과정을 통해 거래는 몇 초 만에 비트코인 네트워크의 대부분 노드들에 전달됩니다.
Bitcoin Mining
거래가 블록체인의 일부가 되려면 검증되고 채굴이라는 과정을 통해 블록에 포함되어야 합니다.
The bitcoin system of trust is based on computation. Transactions are bundled into blocks, which require an enormous amount of computation to prove, but only a small amount of computation to verify as proven.
비트코인 시스템의 신뢰는 계산에 기반합니다. 거래들은 블록 단위로 묶이고, 증명을 위해서는 막대한 양의 계산이 요구됩니다. 하지만 증명되었음을 확인하는 데에는 적은 계산양만 있으면 됩니다.
The mining process serves two purposes in bitcoin:
- Mining nodes validate all transactions by reference to bitcoin’s consensus rules. Therefore, mining provides security for bitcoin transactions by rejecting invalid or malformed transactions.
- Mining creates new bitcoin in each block, almost like a central bank printing new money.
채굴의 두 가지 목적
- 채굴 노드들은 비트코인의 합의 규칙을 참조하여 모든 거래들을 검증합니다. 따라서 채굴은 유효하지 않거나 잘못된 거래를 거부함으로 비트코인 거래에 대한 security를 제공합니다.
- 채굴은 중앙 은행이 새로운 돈을 발행하는 것처럼 각 블록 내에서 새로운 비트코인을 생성합니다.
Mining achieves a fine balance between cost and reward. 멋진 문장을 2판에서 새로 만들어 냈네요.
Mining uses electricity to solve a mathematical problem. A successful miner will collect a reward in the form of new bitcoin and transaction fees. However, the reward will only be collected if the miner has correctly validated all the transactions, to the satisfaction of the rules of consensus. This delicate balance provides security for bitcoin without a central authority.
*수학적 문제를 푸는 비용과 문제를 풀었을 때 주는 보상 사이의 균형(매우 섬세한)은 중앙 권위 없이도 비트코인에 대한 security를 제공합니다.
채굴 과정을 스도쿠에 비교 - 혼자서 푸는 것이 아니라 수많은 사람이 경쟁방식으로 같은 문제를 풀 때를 생각
- 누군가가 해결책을 찾으면 리셋
- 해결책을 찾는 데 10분 정도가 되도록, 줄과 칸의 숫자를 늘리거나 줄여서 난이도를 자동적으로 조절
- 문제 해결에는 많은 노력이 필요하지만, 완성된 퍼즐이 맞는지를 검증하는데에는 노력이 많이 필요하지 않음
노력이 많이 필요하지만, 완성된 퍼즐을 검증하는 데에는 노력이 많이 필요하지 않음
이 비유 정말 맘에 들지 않나요? 저는 대단히 대단히 맘에 듭니다.
The “puzzle” used in bitcoin is based on a cryptographic hash and exhibits similar characteristics: it is asymmetrically hard to solve but easy to verify, and its difficulty can be adjusted.
비트코인에 사용된 "퍼즐"도 암호화 해시에 기반하고 있고 스도쿠처럼 비대칭적인 특징을 보여줍니다. 풀기는 어렵지만 검증하기 쉽고 난이도 조절도 쉽습니다.
Mining Transactions in Blocks
새로운 거래들이 사용자 지갑과 여러 앱들로부터 네트워크로 끊임없이 들어옵니다. 네트워크로 전송된 거래는 블록체인에 올라가기 전까지는 검증된 것이 아닙니다.
각 노드들은 임시 풀을 갖고 있는데 이 새로운 거래들(미검증 거래들)을 추가합니다.
채굴자들은 임시 풀에서 미검증거래들을 선택해 새 블록에 추가합니다. 블록 추가의 첫 번째 기준은 거래 수수료가 높은 것을 우선하는 것입니다.
채굴자는 네트워크로부터 이전 블록을 받게 되면 즉시 새로운 채굴을 시작합니다. 이전 블록을 받았다는 것은 이미 다른 채굴자가 채굴에 성공했다는 것을 의미합니다.
채굴자는 새 블록에다 거래들과 이전 블록의 지문(해시)을 채운 후 새로운 블록에 대한 작업증명 계산을 시작합니다.
채굴자는 자신의 블록 안에 특별한 거래 하나를 포함하는데, 이는 자신 소유의 비트코인 주소에 새롭게 생성된 비트코인을 보상으로 받는 거래입니다.
아래 두 문단에서 굵은 글씨체로 강조한 부분에 대해 깊이 있게 생각해 봅시다.
Because this new block is built on top of block #277316 that contained Alice’s transaction, it added even more computation to the blockchain, thereby strengthening the trust in those transactions.
The blocks mined after the one that contains Alice’s transaction act as further assurance, as they pile on more computation in a longer and longer chain.
보통 6회 이상의 승인이 이루어진 블록은 취소가 불가능하다.
비트코인 클라이언트들은 거래가 유효하고 사용가능한지를 독자적으로 검증할 수 있습니다.
풀노드 클라이언트는 비트코인이 블록 내에서 처음 발생하여 점차 이 거래에서 저 거래로 이동해서 최종적으로 밥의 주소에 도달할 때까지 추적할 수 있습니다.
경량 클라이언트인 경우 SPV(Simplified Payment Verification)라 불리는 단순지불검증을 할 수 있습니다. 해당 거래가 블록체인 내에 있고 그 후 채굴된 블록이 여러 개 있다는 점을 확인합니다.
오오 비트코인 파헤치기네요!! 저도 학회에서 스터디하면서 공부했지만, 너무 오래됐던 참인데 다시 한 번 상기시킬 좋은 기회감사합니다!! ㅎㅎㅎㅎ소통해요!! 팔로우하고 갑니다!
저도 팔로우 했습니다~~