Leo's Garage

Mastering Bitcoin 2nd - Programming The Open BlockChain Ch.2 본문

BlockChain/Mastering Bitcoin

Mastering Bitcoin 2nd - Programming The Open BlockChain Ch.2

LeoBehindK 2018. 8. 3. 11:30
728x90
반응형



두번째 Chapter의 제목은 다음과 같다.




How Bitcoin Works





이번 장에서는 Bitcoin이 어떻게 거래(Transaction)되고 그 거래가 검증될 때 필요한 과정(Mining)에 대하여 설명할 것이다.





Transactions, Blocks, Mining, and the Blockschain


Instead of a central trusted authority, in bitcoin, 

trust is a achieved as an emergent property from

the interactions of different participants in the 

bitcoin system


Ch.1에서도 언급된 내용이지만, Bitcoin은 중앙 신뢰 기관 대신에 서로 다른 참여자들의 상호작용을 통해 'emergent Property"를 얻는다고 한다. 

'emergent property'를 직역하면 뭔가 번뜩이면서 나타나는 자산이라고 할 수 있다. 아마도 저자는 Bitcoin을 보면서 기존에 없었던 새로운 자산을 이런식으로 표현하고 싶었던 것 같다.





Bitcoin Overview




위 그림은 자세히 보면  Bitcoin의 전반적인 활동들을 모두 담고 있다.

Bitcoin과 달러의 교환, 채굴자를 통한 Mining 그리고 개인과 개인의 거래 등등, Ch.2에서는 실제 저자가 Bitcoin Network 상에서 거래한 내용을 추적하면서 어떻게 거래가 이루어지는 확인할 것 이다.

* Popular Blockchain explorers

1. Bitcoin Block Explorer (https://blockexplorer.com)
2. BlockCypher Explorer (https://live.blockcypher.com)
3. blockchain.info (https://blockchain.info)
4. BitPay Insight (https://insight.bitpay.com)

위 4가지 사이트에서 Bitcoin Transaction 내역을 조회 할 수 있다.








Buying a Cup of Coffee




자 이제 우리는 한 Bitcoin 거래를 추적하기로 한다. 
사실 Ch.1에서 언급하지 않았지만 저자는 가상의 인물 Joe로 부터 Alice에게 0.1 Bitcoin을 전송했다. (Ch.1에서 Alice는 Joe에게 현금(달러)를 주고 새로운 지갑을 만들어 0.1 Bitcoin을 받았다.)

Bob's Cafe는 최근 POS(Point-of sale System)을 통해 Bitcoin 거래 옵션을 추가하였는데 그의 가게에는 커피 한잔의 가격에 대해 아래와 같이 달러와 그에 해당하는 Bitcoin가격이 같이 Display 된다. 





(사실 저는 저런 가격을 본 적이 없습니다. ㅠㅠ 언제죠 저게 ㅎㅎ)

거래 함에 있어서 Bitcoin은 지불정보를 포함한 QR code도 제공합니다.





위 주소로 절대 Bitcoin을 보내지마세요! 돌려받지 못합니다.





상기 내용은 BIP-21로 정의된 QR코드 실행 시 URL이다.

자 이제 Alice는 그녀의 스마트폰을 이용하여 QR Code를 입력하였고,  Bob's Cafe에서 커피 한 잔을 구매할 것을 승인하였다. 몇 초 후 Bob은 해당 거래가 등록됨을 보았다.

이 다음 세션부터 우리는 Transaction에 대하여 좀 더 자세하게 보기로 한다. 


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.



Bitcoin 거래는 어떻게 이루어질까

Bitcoin 거래에는 두가지 요소가 있다. 바로 입력과 출력이다.
그렇다면 거래 시 입력값-출력값은 항상 0이 될 것인가? 그렇지 않다. 
입력값 - 출력값의 차액은 바로 수수료이다.

이 거래 수수료 개념은 바로 우리의 거래를 검증해 줄 제 3자인 채굴자에게 돌아가는 보상이다. 채굴자는 Bitcoin 거래를 검증하면서 두 가지 보상을 받게 되는데 새로운 블록을 검증, 생성 시 Brand new bitcoin을 받고 또 거래 수수료를 받게 된다.

이러한 시스템이 바로 검증 참여자를 불러일으키고 Bitcoin 생태계가 운영될 수 있게 만드는 장치이다.





위에서 볼 수 있다시피 입력과 출력이 다르다. 바로 저 차이가 거래 수수료





위의 그림을 보게 되면 Joe가 Alice에 0.1BTC를 전송, Alice가 Bob에게 0.015BTC를 전송, 그리고 Bob이 Gopesh에게 0.01BTC를 전송하는 것을 볼 수 있다. 이러한 연결이 바로 Transaction Chain이다.

여기서 Joe가 Alice에게 보낸 입력값을 가지고 Bob과 거래를 하기 위해서는 Alice의 개인키가 필요하다. 이 말은 Alice가 해당 금액을 가지고 있는지를 Alice의 개인키를 통해 검증해야한다는 말이다.





Common Transaction Forms






가장 일반적으로 많이쓰이는 거래 형태이다. 





여러 입력을 합쳐서 거래하는 방식이다. 마치 우리가 잔돈을 모아서 거래하는 것과 같은 개념이다.





마지막은 한 번에 여러 주소로 전송하는 방식이다. 이는 마치 우리가 월급을 받을 때를 떠올리면 이해가 빠를 것이다.



Getting the Right Inputs



Alice가 Bob에게 거래할 때 필요한 정보는 Bob의 Bitcoin주소와 금액 뿐.
그렇다면 지갑 어플리케이션은 어떻게 이러한 거래를 처리할 수 있을까?

지갑 어플리케이션에는 지갑 소유주의 Private Key(개인키)로 잠궈둔 
(지출하기로 예상되는) "Unspent Transaction Output(UTXO)"에 대한 정보를 가지고 있다. 그러므로 Alice의 지갑 어플리케이션에는 Joe로 부터 전달받은 Transaction Output의 복사본을 가지고 있다. 

만약에 Bitcoin Full Node에서 돌아가는 지갑 어플리케이션이라면 모든 거래에 대한 UTXO의 복사본을 가지고 있다. 모든 노드의 블록을 가지고 있는 Full Node 지갑 소유자라면 UTXO에 대한 검증을 빠르게 할 수 있지만 Full Node를 모두 저장하려면 대략 160GB 가량 사용해야되기 때문에 대부분의 지갑 사용자들은 Light Node만을 가지고 있다.

이럴 경우 Bitcoin 네트웍에 Full node 사용자에게 UTXO를 검증해달라고 요청해야한다. 







위 명령어는 Alice의 Bitcoin 주소에 대해 모든 UTXO를 검증해달라고 요청하는 명령어이다. 




명령에 대한 결과는 위와 같다. 결과를 보면  Alice의 UTXO는 하나이다. 내용을 보면 10000000사토시, 즉 0.1BTC이다. 이 UTXO가 바로 Joe에게서받은 그것이다. 자 이제 지갑 어플리케이션은 해당 금액을 새로운 주인에게보내기 위한 거래를 실행할 수 있다.






Creating the Outputs



거래 출력값은 스크립트 형태로 구성되며, 스크립트 출려값에는 아래와 같은 내용이 담겨 있다.


This output is payable to whoever can present a 

signature from the key corresponding to Bob's

public address



이 스크립트는 Bitcoin 스크립트를 의미한다. UTXO를 사용하기 위해서는 만족시켜야하는 조건들이 있는데 이 조건들을 구성한 스크립트를 '잠금 스크립트'라고 하고 조건을 풀 수 있는 스크립트를 '해제 스크립트'라고 한다.즉, 스크립트는 조건과 조건을 푸는 로직으로 구성되어 있다.




위의 거래내역은 실제 Alice가 Bob에게 보낸 거래 내역이다. 보면 UTXO는0.1BTC이고 Bob에게 0.015BTC를 보냈기 때문에 0.085BTC를 다시 
Alice에게 보내야한다. 하지만 이 때 Alice는 0.0845BTC를 받았고 이는 거래수수료를 차감한 금액이기 때문이다.

Adding to Transaction to the ledger

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


How transaction propagated



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


Bitcoin Mining

거래가 Bitcoin 네트웍 상에 퍼졌다고 끝나는 것이 아니다. 이 거래가 문제가 없는지 검증을 받아야하는 절차가 남아있다. 채굴과 관련하여 자세한 사항은 Ch.8에서 하고 여기서는 간단하게 설명하기로 한다.

채굴의 목적은 두 가지이다.
- 채굴 과정을 통해 새로운 Bitcoin이 생성된다. 생성되는 Bitcoin의 양은 정해져 있고 점점 줄어들고 있다.이때 생성되는 Bitcoin이란 채굴자에 대한 보상으로 주어지는 Bitcoin을 말한다. 이 Bitcoin은 채굴자가 생성한 블록의 거래로 들어가게 됨으로서 채굴자에게 보상으로 주어진다. 

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

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

Mining Transaction in Bitcoin

네트워크에 전파된 거래들은 블록체인에 올라가기전에는 검증되지 않는다. 새로운 거래들이 지갑 같은 여러 애플리케이션에 의해 네트워크 상에 들어오면 Bitcoin 네트워크 노드들은 각 노드가 가지고 있는 임시풀에 이 새로운 거래들을 추가한다. 이 임시풀에 있는 거래들은 아직 검증되지 않은 상태이다. 채굴자들이 새로운 블록을 만들면서 임시풀에 있는 거래들을 새로운 블록으로 추가한 후 새 블록의 유효성을 입증하기 위해 작업증명(POW)을 걸쳐야 한다. 이 때 임시풀에 있는 거래들이 새로운 블록에 추가될 때 거래 수수료가 가장 높은 거래부터 우선순위로 블록에 추가되고 몇몇거래는 다른 기준을 바탕으로 추가된다. 블록체인에 추가되는 새로운 블록은 하나뿐이므로 이 하나의 블록을 채굴하지 못한 채굴자들은 네트워크로부터 이전 블록을 받게되고 다시 새로운 블록을 채굴하는 과정을 바로 시작한다.
 
이번 장은 거래가 어떻게 이루어지고 블록이 어떻게 형성되는지 살펴보았다. 다음 장은 약간 흐름이 이상하긴 한데 'Bitcoin Core'를 내려받고 PC에서 돌려보는 것을 해보도록 하겠다.

728x90
반응형
Comments