관리 메뉴

개발이야기

[Mastering Bitcoin] 마스터링 비트코인 내 맘대로 정리 - Ch02 본문

블록체인 /마스터링 비트코인

[Mastering Bitcoin] 마스터링 비트코인 내 맘대로 정리 - Ch02

안성주지몬 2018. 6. 15. 18:46

이번 포스팅은 Ch02 정리입니다!
Ch02에서는 Ch01에서 조금 살펴본 비트코인 거래에 대해 보다 자세하게 분석하고 많이 들어봤을 '채굴'이 무엇인지에 대해 나와있습니다 ! 그럼 천천히 살펴보도록 하죠 ~ 


Ch02 How Bitcoin Works

Bitcoin Overview

Bitcoin Overview (이미지 출처: Mastering Bitcoin ch02)

위 그림은 비트코인에 전반적인 내용이 모두 담겨있습니다. 개인키를 가진 지갑을 소유한 사용자, 비트코인과 달러의 교환, 비트코인 거래 내역들이 모두 담겨있는 블록체인(네트워크 상에서 검증받은), 또한 블록을 검증하는 채굴자(Miner)들이 채굴을 하는 과정들을 모두 보여주고 있죠.  이번 장에서는 네트워크를 통해 전달되는 하나의 거래를 추적하고 어떻게 거래가 이뤄지고 블록에 저장되는지에 대한 매커니즘을 살펴볼 것입니다.

Blockchain Explorer

우리는 blockchain explorer를 사용하여 비트코인의 주소, 거래내역, 블록 정보 등을 살펴볼 수 있다. 이런 Blockchain 정보를 보여주는 사이트는 아래와 같습니다. 
- Blockchian info
- Bitcoin Block Explorer
- insight
- block Block Reader 

Blockchian Explorer 사이트 중 하나인 Blockchain info(이미지 출처 : https://blockchain.info/ko)
Buying a cup of coffee

이제 본격적으로 비트코인 거래에 대해 살펴보도록 하죠.
1장에서 조에게 비트코인을 받았던 앨리스는 비트코인을 가지고 커피를 사려고 한다. 마침 캘리포니아 팔로알토에 있는 밥의 커피가게에서는 비트코인으로도 커피를 구매할 수 있게 되어있습니다. 밥의 POS 시스템은 달러로 나와 있는 가격을 비트코인으로 전환 후 두 가지 통화 단위 ($, BTC)에 대한 가격을 보여줍니다. 

이미지 출처 : Mastering Bitcoin ch02

물론 지갑에서 거래하는 것처럼 위와 같은 지불정보에 대한 QR 코드 역시 제공합니다. QR 코드를 제공하는 이유 중 하나는 지갑의 주소키가 굉장히 길기 때문입니다. 

지불 요청에 대한 QR코드 (이미지 출처 : Mastering Bticoin Ch02)
Bitcoin Transactions

그렇다면 비트코인 거래들은 어떻게 구성되어있을까요.
비트코인 거래는 입력값과 출력값이 있습니다. 입력값은 비트코인 계좌에서 빠져나가는 값이고 출력값은 비트코인 계좌로 들어오는 값입니다. 입력값과 출력값은 항상 같지 않다. 즉 입력값 - 출력값은 0이 아닙니다. 입력값 - 출력값 = 거래 수수료의 값입니다. 거래 수수료는 자신의 거래를 검증하고 새로운 블록에 추가시켜주는 채굴자에게 주는 일정량의 보상입니다. 채굴자는 새로운 블록을 검증하고 생성하면서 일정량의 비트코인을 받고 블록에 추가되는 거래에 대한 거래 수수료를 받게 됩니다. 즉, 두 가지의 보상을 받게 됩니다.  비트코인은 통화량(2100만개)이 정해져 있고 통화량만큼 비트코인이 다 발행이 된다면 더 이상 비트코인을 보상으로 받을 수 없습니다. 그렇게 된다면 채굴자가 받는 보상은 거래 수수료 하나가 남게 되죠.  사토시가 처음 비트코인을 발행하면서 100년이 지나야 통화량이 다 발행되게 설계를 하여 아직 통화량 만큼 발행되는데 시간은 남아있습니다. 하지만 블록체인을 유지하는 채굴자에 대한 보상이 줄어들어 채굴에 대한 동기가 부족해지는 문제에 대해서는 해결책을 고민해야 합니다. 현재는 수수료를 증가하는 정도의 해결책만 나와있을뿐이죠. 

다시 비트코인 거래에 대해 얘기를 해보죠. 

Transaction as Double-Entry Bookkepping (이미지 출처 : Mastering Bitcoin ch02)

위 그림 아래에도 나와 있듯이 Inputs - Outputs 는 거래 수수료에 대한 값입니다. 

(이미지 출처 : Mastering Bitcoin ch02)

위 그림은 이전 거래의 출력값이 다음 거래에서는 입력값이 되는 거래체인의 모습입니다. 앨리스는 비트코인을 조에게 처음 받았고(출력값) 이를 다시 밥의 커피집에서 커피를 구매하는 데 사용했습니다(입력값). 이전 거래에서 생성된 출력값의 암호를 풀 수 있도록 앨리스가 가지고 있는 개인키를 이용해서 서명을 하게 됩니다. 이를 통해 비트코인 네트워크 상에서 앨리스가 돈을 가지고 있다는 사실이 증명이 됩니다. 앨리스가 밥의 커피가게에서 커피를 구매하기 위해 커피값을 보내면 이 출력값은 다시 밥의 서명이 있어야 이 금액에 대해 소비를 할 수 있어야 합니다. 

Common Transaction From

case 1 

가장 흔한 유형 (이미지 출처 : Mastering Bitcoin ch02)

가장 흔하게 볼 수 있는 거래 유형입니다. 하나의 주소에서 다른 주소로 하나의 거래가 이뤄집니다. 현실에서도 그렇듯 어떤 거래에서는 잔액이 발생하는데 위 그림에서 Input 과 같은 주소로 보내는 Ouput1 이 잔액을 처리하는 과정입니다. 


case 2

Input이 여러개인 경우 (이미지 출처 : Mastering Bitcoin ch02)

이 경우는 여러 입력값을 하나의 출력값으로 합치는 경우입니다. 이 거래 같은 경우는 우리가 1000원 짜리 10장을 편의점에서 1만원 짜리 한장으로 바꾸는 거래와 같습니다. 


case 3

Output이 여러개인 경우 (이미지 출처 : Mastering Bitcoin ch02)

마지막 거래 유형은 Output이 여러가지인 경우입니다. 예를들어 여러 직원들에게 월급을 줄 때처럼 돈을 분배해야할 때 사용합니다.


Getting Right Inputs

앨리스는 밥에게 비트코인을 보내기 위해서는 보낼 비트코인과 밥의 주소만 입력하면 됩니다. 그 안에서 처리되는 logic 은 지갑 어플리케이션이 알아서 처리해줍니다. 그렇다면 지갑 어플리케이션은 어떤 logic으로 거래를 처리하게 되는지 살펴보죠.
지갑 어플리케이션에는 지갑 소유주의 키로 잠근 (지출이 예상되는) "Unspent transaction ouput (UTXO)" 에 대한 조금한 데이터베이스를 가지고 있습니다. 따라서 앨리스의 지갑을 살펴보면 조에게 받았던 비트코인에 대한 복사본이 포함되어 있습니다. 흔히 풀노드(Full client)라고 불리는 제네시스 블록부터 지금까지의 모든 블록체인을 가지고 있는 노드가 있습니다. 이 노드는 블록체인상에 있는 모든 거래에서 UTXO에 대한 복사본을 가지고 있습니다. 모든 지갑 소유자들이 풀노드라면 UTXO에 대해 빠르게 검증할 수 있지만 풀노드는 디스크의 용량을 차지하는 문제가 있어 대부분의 지갑 사용자는 라이트 노드이죠. 라이트 노드는 자신의 UTXO 복사본만 가지고 있죠. 따라서 지갑 어플리케이션에 UTXO 복사본이 없을 풀노드에게 요청하여 해당정보를 검색해달라고 비트코인 네트워크에게 요청할 수 있습니다. 아래는 UTXO 값을 모두 조사하는 명령어입니다. 

(이미지 출처 : Mastering Bitcoin ch02)

active= 다음 숫자와 문자들로 구성되어 있는게 앨리스의 주소이다. 이 명령에 대한 결과값은 아래와 같습니다.

(이미지 출처 : Mastering Bitcoin ch02)

결과에서 볼 수 있듯이 앨리스의 비트코인 주소에서 UTXO가 하나 있는데요. 이 Value 값을 보면 1000만 사토시 즉 0.1BTC 이다. 이 UTXO가 바로 조에게 받은 비트코인입니다. 이 정보를 가지고 지갑 애플리케이션은 해당 가치를 새로운 소유주의 주소로 전송하기 위한 거래를 진행할 수 있게 됩니다.

Creating the outputs

거래 출력값은 스크립트의 형태로 만들어지고 스크립트에는 출력값이 밥의 공개키에 대응하는 키를 이용해 서명을 하는 누구나 지불가능하다라는 정보가 들어있습니다. 이때 스크립트란 비트코인 스크립트를 얘기합니다. UTXO 를 소비하기 위해서는 만족해야 하는 조건들이 있는데 이 조건들을 스크립트로 구성한것이 '잠금 스크립트'라 하고 조건을 풀 수 있는 스크립트를 '해제 스크립트'라 합니다. 즉 스크립트는 조건과 조건을 풀 수 있는 logic이 들어가있다고 생각하면 됩니다.

(이미지 출처 : Mastering Bitcoin ch02)

위 그림은 실제 앨리스와 밥의 거래 내역입니다. 실제 커피 값은 0.015BTC이고 앨리스가 가지고 있는 UTXO 값은 0.1BTC입니다. 따라서 잔액 0.085BTC를 다시 앨리스에게 보내는 거래가 필요하고 이는 앨리스의 지갑에서 생성이 됩니다. 이때 0.085BTC를 받는 것이 아닌 0.0845BTC를 받는 거래가 이뤄진다면 이는 차액 0.0005BTC를 거래 수수료로 지불한 것입니다. 

Adding the Transaction to the ledger

앨리스와 밥 사이에서 일어난 거래가 블록에 추가되기 위해서는 비트코인 네트워크로 전송이 되어야합니다. 새로운 거래는 새로운 블록의 일부가 됩니다. 그렇다면 새로운 블록은 어떻게 생성될 것일까요. 블록을 새롭게 생성하는 과정을 '채굴'이라 합니다. 이번에는 '채굴'에 대해 살펴보고 블록체인에 새로운 블록을 추가시키면서 어떻게 신뢰성을 유지할 수 있는지에 대해 살펴 보겠습니다. 

How transaction propagated 
비트코인 네트워크는 P2P 네트워크로 구성되어 있으므로 새로운 거래를 P2P 네트워크 상에 모든 노드에게 전파를 해야합니다. 만약 앨리스의 지갑 어플리케이션이 인터넷의 연결만 되어있다면 P2P 네트워크를 통해 전파될 수 있고 수초내에 대부분에 노드에게 도달될 수 있습니다. 



Bitcoin Mining

거래가 비트코인 네트워크상에 모두 전파되었다고 해서 끝나는 것이 아닙니다. 이제 시작일 뿐이죠. 이 거래가  검증을 받기위해서는 '채굴' 과정을 걸쳐서 블록에 포함되어야 합니다. 채굴과 관련된 설명은 ch08에서 자세하게 설명하고 여기서는 간략하게 채굴에 대해 설명하겠습니다.

채굴의 목적은 두 가지이다.
- 채굴 과정을 통해 새로운 비트코인이 생성된다. 생성되는 비트코인의 양은 정해져 있고 점점 줄어들고 있습니다.(2009년 50BTC, 2012년 25BTC, 2016년 12.5BTC ,다음 반감기 2020년 예상). 이때 생성되는 비트코인이란 채굴자에 대한 보상으로 주어지는 비트코인을 말합니다. 이 비트코인은 채굴자가 생성한 블록의 거래로 들어가게 됨으로서 채굴자에게 보상으로 주어집니다. 

- 채굴 과정은 거래를 담고 있는 블록이 충분한 연산력을 사용하여 승인되었다는 것이 확인되었을 때만 신뢰성을 보장받습니다. 이를 작업 증명(Proof of Work)이라 하죠.

블록체인 채굴을 간단히 설명하면 특정 숫자를 맞추는 게임으로 생각하면 됩니다. 비트코인 네트워크는 숫자를 맞추는 시간을 평균 10분정도로 잡아놓고 있고 만약 10분 이상이 흘렀다면 난이도를 낮추고 10분 이하가 걸렸다면 난이도를 높이는 식으로 블록이 생성되는 시간이 평균 10분이 되도록 하고 있습니다. 비트코인 채굴은 초반에는 CPU를 이용했지만 CPU 보다 연산력이 더 뛰어난 GPU를 사용하다가 이제는 전문 채굴장비인 ASIC을 통해서 채굴이 진행되고 있습니다. ASIC을 통한 채굴로 인해 '채굴의 중앙화'라는 문제점이 생겨나고 있습니다. 


Mining Transaction in Bitcoin

네트워크에 전파된 거래들은 블록체인에 올라가기전에는 검증되지 않습니다. 새로운 거래들이 지갑 같은 여러 애플리케이션에 의해 네트워크 상에 들어오면 비트코인 네트워크 노드들은 각 노드가 가지고 있는 임시풀에 이 새로운 거래들을 추가합니다. 이 임시풀에 있는 거래들은 아직 검증되지 않은 상태입니다. 채굴자들이 새로운 블록을 만들면서 임시풀에 있는 거래들을 새로운 블록으로 추가한 후 새 블록의 유효성을 입증하기 위해 작업증명(POW)을 걸쳐야 합니다. 
이 때 임시풀에 있는 거래들이 새로운 블록에 추가될 때 거래 수수료가 가장 높은 거래부터 우선순위로 블록에 추가되고 몇몇거래는 다른 기준을 바탕으로 추가됩니다. 블록체인에 추가되는 새로운 블록은 하나뿐이므로 이 하나의 블록을 채굴하지 못한 채굴자들은 네트워크로부터 이전 블록을 받게되고 다시 새로운 블록을 채굴하는 과정을 바로 시작합니다. 

채굴과정 (이미지 출처 : https://blog.ragnarson.com/2016/12/01/blockchains-a-brief-introduction.html)

이번 장에서는 거래가 어떻게 이뤄지고 블록에 추가되는지 살펴보았습니다. 다음 포스팅은 Ch04 를 정리하도록 하겠습니다 ~ 다음 포스팅도 기대해주세요!! 


Comments