[basic] 비트코인 백서 읽기 <5> Network, Incentive
이번 챕터에선 거래가 어떻게 블록체인에 기록되는 지 단계별로 살펴보며 지난 내용을 복습하고, 이 과정에서 인센티브 제공을 통해 노드들의 악행을 어떻게 방지하는 지에 대해 설명하고자 합니다.
5. Network
The steps to run the network are as follows:
1) New transactions are broadcast to all nodes.
2) Each node collects new transactions into a block.
3) Each node works on finding a difficult proof-of-work for its block.
4) When a node finds a proof-of-work, it broadcasts the block to all nodes.
5) Nodes accept the block only if all transactions in it are valid and not already spent.
6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash.
거래가 블록체인에 기록되는 과정은 다음과 같습니다:
- 새로운 거래가 모든 노드들에게 전파된다.
- 각 노드는 해당 거래를 묶어 블록을 만든다.
- 각 노드는 논스를 대입하여, 특정 해시를 만들어내는 과정을 수행한다(PoW).
- 특정 해시를 만들어내는 논스를 찾아낸 노드는 해당 블록을 모든 노드들에게 전달한다.
- 노드들은 해당 블록에 포함된 거래들에 이상이 없는지 체크한다(이중지불이 없는지).
- 노드들은 다음 블록 PoW를 진행함으로써 생성된 블록에 대해 동의한 것으로 갈음한다.
여태까지 잘 따라오셨다면 이해가 쉽게 되실 것 같습니다. 6번의 경우, 다음에 생성되는 블록의 PoW 작업엔 이전 블록의 해시가 포함되기 때문에, 다음 블록을 만드는 행위 자체가 이전 블록에 대한 동의로 연결된다는 것만 이해하시면 될 것 같습니다.
Nodes always consider the longest chain to be the correct one and will keep working onextending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof-of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one.
New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one.
노드들은 항상 가장 긴 체인이 맞는 것으로 가정하고(=가장 많은 컴퓨팅 파워가 소모=가장 많은 사람이 투표), 해당 체인을 계속 연장해나갑니다.
이 과정에서 블록이 동시에 생성되기도 합니다. 이는 PoW에서 제시하는 특정 해시가 ‘값’이 아니라 ‘조건’이기 때문인데요. 이를테면 ‘앞에 10자리가 0으로 시작하는 해시’라는 식인 겁니다. 그렇다면, 0000000000abedefg도, 0000000000eed3e도 모두 조건을 만족합니다. 각 해시를 만드는 논스들은 여러 개가 될 수 있기 때문에, 블록도 동시에 생성될 수 있는 거죠.
만약 이처럼 두 개의 블록이 발생하면, 노드들은 가장 먼저 들어온 블록을 기준으로 다음 PoW 작업을 실시하되, 다른 블록도 보존합니다. 다른 블록이 더 길어질 가능성도 있기 때문이죠. 둘 중 길어진 쪽으로 PoW 작업이 이뤄질 것이고 자연스럽게 짧아진 체인은 파기 됩니다.
근데 만약 노드일부가 온라인 접속이 끊겨 새로운 거래 내역이나 새로운 블록 정보를 못 받으면 어떨까요? 특정 노드가 오프라인이 되어도 거래내역을 받은 다른 노드는 PoW를 진행하여 블록을 생성할 것이고, 오프라인이 되었던 노드는 이후 누락된 블록의 정보만 받아와 다시 PoW에 참여하면 그만입니다(tolerant of dropped messages).
6. Incentive
By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended.
The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free.
블록체인에 기여한 댓가로 노드들은 보상을 받을 수 있는데요. 보상은 채굴 보상과 채굴 수수료로 이뤄져 있습니다.
블록 안에는 여러 거래내역들이 포함되어 있습니다. 그 중 첫 번째 거래내역은 새롭게 발행되어 해당 블록을 채굴한 노드에게 일정량의 비트코인을 전달한다는 내용이 담겨있습니다.
이런 보상(및 제공 방식)은 두 가지 기능을 수행하는데요. 먼저 네트워크를 유지하는데 기여한 노드에 대한 보상(an incentive for nodes to support the network)입니다. 장부에 기록하기 위한 PoW에 컴퓨팅 파워를 사용했으니, 이에 대한 보상이 필요한 거죠.
두 번째는 코인 발행 역할을 수행합니다(provides a way to initially distribute coins into circulation). 블록체인엔 중앙화 된 주체가 없어 애초에 보상으로 코인을 지금함으로써 유통량을 늘립니다.
거래 수수료(transaction fee)는 블록체인의 혼잡도에 따라 계산되어 노드에게 제공되는 소량의 보상입니다. 채굴 보상이 종료되어 더 이상 비트코인이 발행되지 않을 경우, 거래 수수료가 블록체인을 유지하는 보상이 될 수 있습니다.
The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth.
이러한 보상 체계는 노드들이 정직한 행동을 하도록 유도할 수 있습니다.
악의를 가진 노드가 다른 노드들보다 더 많은 컴퓨팅 파워를 갖고 있다고 가정해보겠습니다. 악한 노드에겐 컴퓨팅 파워를 활용할 두 가지 방법이 있을 겁니다: 본인의 거래를 되돌리는 블록을 만들거나(defraud people by stealing back his payments), 정상적인 방법으로 채굴을 하거나(using it to generate new coins)
악한 노드가 본인의 거래를 되돌리기로 결정했다고 가정하면 다음과 같은 일이 발생합니다:
- 악의를 가진 A가 1 BTC를 B에게 보내고 대가로 USD를 받기로 함
- ‘1 BTC를 B에게 보낸다’라는 거래를 포함한 블록이 생성(이하 ‘정상 블록’)되고 B로부터 USD를 수령함
- USD를 수령하자마자 1 BTC를 사용하지 않은 새로운 블록(이하 ‘비정상 블록’)을 생성함
- 이후 비정상 블록에 블록을 붙여 더 긴 체인을 만듦
- 해당 체인은 가장 긴 체인이 되므로, 다른 노드들도 해당 체인에 블록을 이어 붙임
- 정상 블록이 포함된 체인은 짧은 체인으로 버려짐(고로, 1 BTC 지출에 대한 거래내역도 버려짐)
그런데 이게 현실적으로 가능할까요? 먼저 51%에 해당되는 컴퓨팅 파워를 확보하는 것 자체가 불가능합니다.
가능하다고 하더라도, 본인이 소유권을 갖고 있는 비트코인에 대해서만 조작이 가능하므로 51%를 확보하기 위해 지출한 비용만큼의 수익을 얻긴 힘듭니다. 51% 공격이 일어났다는 사실이 퍼지는 순간, 악한 노드가 보유한 비트코인 역시 가치가 떨어지기 때문이죠.
이런 수고스러운 악행을 저지르느니, 정상적인 방법으로 채굴해서 보상을 얻는 것이 수지타산에 맞다는 겁니다(more profitable to play by the rules). 그야말로 ‘Can’t be evil’인 셈이죠.
보상 체계를 통해 장부를 기록하는 사람들은 악행을 방지하고, PoW를 통해 참여자들의 대다수가 단일한 장부에 동의하는 과정을 살펴보았습니다. 합쳐서 말하면 ‘선의를 가진 대다수가 단일한 장부에 동의를 했다’라고 할 수 있겠네요.
이렇게 만들어진 장부는 누구나 볼 수 있는 공간, 온체인에 기록됩니다. 수정이 사실상 불가능하다는 얘기입니다. 이제 장부가 무결하다는 것에 동의하시나요?
다음 챕터에선 이러한 블록들을 어떻게 효율적으로 저장하고, 처리되는지 살펴보겠습니다.
👈🏻 이전 게시물: <4> Proof-of-Work
👉🏻 다음 게시물: <6> Reclaming Disk Space, Simplified Payment Verification
<참고자료>
- https://bitcoin.org/bitcoin.pdf (비트코인 백서)
- http://bit.ly/bitcoin_kr (비트코인 백서 한글판)
- https://steemit.com/kr/@yahweh87/22-51
저는 다음 두 채널에서 활동하고 있습니다. 언제든 편하게 와서 소통해주세요.
Treasure Hunt: https://t.me/look4treasure
고로치 같이투자 소통방: https://t.me/gachi2job1