참새님 돌아오셔서 너무 반가운 마음에 리스팀 했습니다.ㅎㅎ
팔로우하시구 참새님 글 많이 읽어보세요.^^
평일에는 진득이 앉아서 글 쓰기가 힘드네요.ㅎ 개인적인 사정도 좀 있고 해서 좀 쉬었습니다!
다시 달려야죠. 쉬면서 제가 쓴 글을 다시 읽어보면서 생각도 좀 해봤는데..
역시 재미없네요.ㅠㅠ 말투도 자꾸 바뀌고 누구한테 쓰는건지.ㅎㅎ
원래 재미있는 사람은 아니니 우선 비트코인 백서는 쓰던데로 달리겠습니다.!
ㄱㄱ~
우선 제 이전 글 링크부터!
비트코인 백서부터 시작합니다
비트코인 백서부터 시작합니다(2)
비트코인 백서부터 시작합니다(3)
비트코인 백서부터 시작합니다(4)
5. 네트워크
네트워크의 동작은 다음과 같은 과정으로 이루어진다:
1) 새로운 거래 내역이 모든 노드에 알려진다.
2) 각 노드들은 새로운 거래 내역을 블록에 취합한다.
3) 각 노드들은 그 블록에 대한 작업증명을 찾는 과정을 수행한다.
4) 어떤 노드가 작업증명을 성공적으로 수행했을 때, 모든 노드에게 그 블록을 전송한다.
5) 노드들은 그 블록이 모든 거래가 이전에 쓰이지 않고 유효한 경우에만 승인한다.
6) 노드들은 자신이 승인한 블록의 해시를 이전 해시로 사용하여 다음 블록을 생성하는 과정을 통해 그 블록이 승인되었다는 의사를 나타낸다.
노드들은 항상 가장 긴 체인을 옳은 것으로 간주하며 그 체인이 계속 확장하도록 작업을 수행한다.
비트코인 네트워크의 기본 작동방식에 관한 내용입니다. 거래가 발생할 때 그 거래를 어떤 식으로 처리하느냐에 관한 가장 기본적인 내용입니다. 이 단락에서 어느 정도까지 언급을 해야하는지 고민을 좀 해봤는데(줏어들은 건 있어가지고..ㅠㅠ) 거래시스템의 기본적인 부분만 우선 다뤄볼까 합니다.
우선 @tintom님과 @easyblockchain 님의 글을 링크하겠습니다.
@tintom/2fgvq8
@easyblockchain/2odxha-1
@tintom 님의 그림으로 거의 모든 게 설명되는 거 같네요.ㅎ 감사드립니다~
저두 쉽게 이해를 해보겠습니다. 우선 제가 친구A 에게 1BTC를 보내는 거래(transaction)을 만듭니다. 이런 거래를 저만 만드는게 아니겠죠? 비트코인의 블럭 생성기간은 10분이니 10분 동안 많은 거래가 만들어질 것입니다.(요새 같은 때야 어마아머하겠죠. 그래서 scale에 관한 문제가 나오는 것이구요) 이 1), 2)번이 바로 이 내용입니다. 거래가 발생하면 새로운 거래내역들은 모든 노드에게 알려지고 노드들은 10분동안 발생한 모든 새로운 거래내역을 블록에 담으려는(취합하는) 과정을 거칩니다.
그리고 블럭에 담는 행위가 바로 블럭을 생성하는 것입니다. 비트코인의 블럭 생성은 3)번의 설명과 같이 작업증명 과정(POW)를 통해 이루어지죠.
하나의 노드가 이 블럭생성(적절한 해쉬값을 찾는 것)에 성공하면 그 블럭에 10동안 일어난 모든 거래내역(transactions)들을 닮고 내가 1등임을 알리는 행위(모든 노드에게 그 블록을 전송)를 합니다. 이것이 4)번 설명입니다.
그럼 다른 노드들은 이 눔이 제대로 할 거 다하고 1등이 됐는지를 확인을 해야겠죠. 그 확인 과정이 5)번 입니다. 블록에 들어가는 모든 거래내역들이 이전에 쓰이지 않고(이중지불문제) 유효한 경우에만(그 전에 해쉬값과 차이가 없는지 비교) '그래 니가 만든 블럭을 인정해 줄게' 라고 하면서 자신도 그 블록을 수용(승인)하게 되는 것입니다.
마지막으로 '이번엔 졌지만 담엔 내가 만든다' 라는 각오로 얼릉 자신이 승인한 블럭의 해시를 가져와 다음 블록을 만들 준비를 하는거죠. 이 과정을 통해 전 블록이 승인되었다는 것을 표시하는 것이구요. 이것이 6)번입니다.
비트코인 블럭체인의 불변의 진리 가장 긴 체인이 가장 옳다. 그리고 그 체인에 덧붙이는 블럭을 만들기 위해 채굴을 한다. (요샌 하드포크가 하도 일어나서 아닌 거 같기도 하지만..)
제가 이해한 이 6번의 과정은 이렇습니다. 물론 이렇게 간단하지 않습니다. 들어가면 들어갈 수록 공부할 게 많아지는 블럭체인이니까요.
만약 두 개의 노드가 서로 다른 버전의 다음 블록을 동시에 알리게 될 경우, 어떤 노드들은 둘 중 하나를 먼저 전달받게 된다. 이러한 경우 각 노드들은 자신이 먼저 받은 블록에 대해 작업을 수행하지만, 체인의 다른 갈래도 더 길어질 경우에 대비하여 저장해둔다. 체인의 어느 한쪽 갈래가 더 길게 생성되는 작업증명이 알려지면 체인 갈래의 길이는 더 이상 대등하지 않게 되고, 각 노드들은 체인이 더 긴 갈래로 작업을 전환한다.
새로운 거래 내역 알림이 꼭 모든 노드에까지 전달될 필요는 없으며, 많은 노드에 전달될수록 더 빨리 블록에 포함될 것이다. 블록 알림은 또한 누락되는 경우에도 취약하지 않다. 만약 한 노드가 블록을 받지 못했을 경우, 다음 블록을 받고 하나가 빠졌음을 알아차려 다시 요청해 받을 것이다.
이번에 비트코인 플래티넘(?) 포크가 있다고 해서 일하는 틈틈히 코인댄스를 구경한 적이 있습니다. 몇 번째 블록에서 하드포크가 된다기에 우찌 되나 보고 있었죠. 근데 저는 분명 10분의 1블록이 생성된다고 알고 있었는데 1분 간격으로 2개가 생성되는 경우도 있었습니다.(궁금하신 분은 함 들려보세요.ㅎㅎ) 이게 바로 저 첫문장에 관한 내용이구나 생각했습니다.
그리고 스승님이신 @yellowboy님에게 질문한 결과!
"하드포크가 발생되는 경우를 크게 두 가지로 보면요. 첫번째는 동시에 수학문제를 풀었을 경우입니다. 만약 1부터 100가지의 공 중 3을 먼저 뽑는 사람에게 블록 생성 권한을 주겠다라고 했으면, 마이닝 업체는 3을 뽑고 블록을 전세계에 보내야 합니다. 이럴 경우, 블록이 한꺼번에 이동하는 것이 아니라 주변 이웃노드에 전파하고, 그 이웃노드가 주변에 전파하는 식으로 전 세계적으로 전파하는 것입니다. 그런데, 물리적으로 정 반대인 나라에서 동시에 수학문제를 풀었다고 한다면, 옳은 블록이 두 개가 되는 것입니다. 한국 블록 A 미국 블록 B라고 가정 해보죠. 이러할 경우 한국 블록은 아시아 권으로 형성되어 있고, 미국 블록은 남미 권으로 형성되었다고 가정했을 때, 이 체인이 합쳐지는 경우는 A와 B 중 그 다음블록을 누가 먼저 형성하는 지에 따라 달려있습니다. 그 블록을 C라고 했을 때, 한국 블록체인에서 먼저 수학문제를 풀면 AC 블록이 되는 것입니다. 이 때 B는 버려지는 것이고요"
라고 하시네요. 답변 다시 한번 감사드리며~~
이렇게 될 경우에 A와 B는 우선 자신의 블럭이 가장 긴 블럭인지 알 수가 없기 때문에 아닌 경우에 대비하여 체인의 다른 갈래도 저장해둔다는 말이겠죠. 그리고 위에 설명과 같이 AC가 가장 긴 블럭이 된 경우 B도 다시 AC체인에서 블록 생성을 시작한다는 것이구요.(이렇게 이해를 하고 나니 채굴풀이 70% 중국에 있는데, 그리고 중국 밖으로 전송되는 네트워크가 느리다고 하는데 저 북미 쪽 애들은 고생이 많겠네요...)
새로운 거래내역이 많은 노드에 전달될수록 당연히 더 빨리 블록에 포함되겠죠. 어떤 노드가 블럭을 생성할 지 모르는 상황에서 더 많은 노드가 그 거래내역을 안다는 것은 블럭에 담길 가능성을 높이는 일이니까요. 한 노드가 블럭이 생성되었음을 전달받지 못하고 다음 블럭을 받았을 경우도 전체 노드와의 비교를 통해 다시 받을 수 있다는 것은 비트코인 블럭체인이 기술적으로 지원해주는 부분이라고 이해합니다. 다른 의미가 있는지는 좀더 알아봐야겠네요.
모든 풀노드들의 블럭체인은 같을테니 그것과 비교해서 빠진 부분은 알아서 채울 수 있다는 의미로 해석합니다.
6. 보상
블록의 첫번째 거래 내역은 약속에 의해 최초 블록 생성자에게 새로운 돈을 소유할 수 있게 해주는 특별한 거래가 된다. 이렇게 하면 돈을 발행하는 중앙기관 없이도 네트워크를 구성하는 모든 노드들에게 보상을 지급하고, 유통될 돈을 처음에 배분하는 방법이 된다. 지속적인 일정량의 새 돈을 추가하는 건 금을 유통할 수 있게 광부들이 자원을 쏟는 것과 유사하다. 이 경우에는 컴퓨팅 자원과 전력이 소비된다.
드디어 비트코인에 관한 이야기가 나오네요. 이 보상에 대한 이야기도 파고 들어가면 끝도 없이 들어가더군요.
우선 백서에서 설명된 이야기만 해보겠습니다. 블록의 첫번째 거래내역은 바로 블록생성에 대한 보상 즉 비트코인을 블럭생성자에게 주는 것입니다. 블럭체인 네트워크에서 블럭을 생성한 데 대한 대가이므로 중앙기관 같은 것은 당연히 필요없구요. 어떤 노드이든지 블럭을 생성한 노드는 그 블럭을 생성하기 위해 컴퓨팅 자원과 전력을 소비했으므로 그 보상으로 비트코인을 지급한다는 내용입니다. 이제까지 포스트에서 링크한 글들에 이 보상에 대한 내용이 조금씩 들어가있습니다.
여기까지는 어려운 내용은 아니지만 조금이라도 더 알기 위해 링크 하나 올립니다. @disbi님 의 글입니다.
비트코인 자체에 대한 기본적인 설명이 잘 되있네요. 감사합니다~
보상에는 또한 거래 수수료가 될 수도 있다. 거래 내역에서 출력되는 돈이 입력되는 돈보다 적다면,
그 차액은 수수료처럼 작용하여 그 거래 내역을 포함하는 블록 생성의 보상 가치로 추가된다. 정해진
총량의 돈이 유통된 다음부터는, 보상은 거래 수수료만으로 이뤄지며 인플레이션으로부터 완전히 자유
롭게 된다.
비트코인은 전송수수료(Transaction fee)라는 것을 지불해야 자신이 원하는 거래내역을 블럭에 담을 수 있습니다. 그 거래 수수료는 그 블럭을 생성한 생산자(노드)가 가져갑니다. 이 거래수수료는 BTC로 지불하게 되며 지금과 같이 BTC가 어마어마하게 비쌀 때는 당연히 거래 수수료도 비싸지게 됩니다.(현재 거래소 수수료가 0.0005BTC니까 9000원 정도 하네요) 그리고 얼마를 전송을 하든 전송 한 건당의 수수료이기 때문에 배보다 배꼽이 클 수 있겠죠.
어 너무 갔네요.(잘 알지도 못하면서 오지랖이...)
앞에 링크한 글에서도 알 수 있듯이 비트코인은 2100만개라는 정해진 발행량이 있습니다. 현재 16,725,287개 발행됐네요.(코인마켓캡 참조) 매 4년 마다 반감기가 적용되고 2025년 정도에 대부분 발행되게 됩니다. 그리고 2100만개가 다 발행되고 나면 블럭을 생성해도 비트코인을 보상으로 얻을 수 없게 되므로 이 블럭생성자들은 저 전송수수료(Transaction fee)만 받게 됩니다. 지금도 수수료가 후덜덜한데 그 때가 되면 얼마가 될까요?ㅎ뭔가 대책이 나오겠죠.
이러한 보상 시스템은 각 노드들의 정직하게 참여를 유지할 수 있도록 한다. 욕심을 낸 공격자가 다른 정직한 전체 노드들보다 더 많은 컴퓨팅 파워를 만들어낼 수 있다면, 그는 아마도 다른 사람들로부터 지불을 철회하여 돈을 사취하거나 새로운 돈을 생성하려 해야 할 것이다. 하지만 그런 식으로 다른 사람들이 엮이지 않고 시스템을 약화시켜 자신의 부를 축적하는 이기적인 방법보다는 약속대로 정직하게 시스템에 참여하는 것이 더 이득이라는 걸 알게 될 것이다.
앞에 블럭체인에 생성된 블럭을 바꾸는 것이 얼마나 어려운가와 51% 공격을 설명하면서 거의 불가능하다고 설명했습니다. 그리고 그렇게 공격하기 위해 공격자가 필요한 컴퓨터 파워와 비용은 따로 설명드릴 필요가 없을 거 같습니다. 그 파워와 비용으로 차라리 채굴을 하는게 그 사람한테도 이익이 될 것이므로, 그리고 이미 그 정도면 많은 비트코인을 가지고 있을텐데 자신의 자산가치를 무너뜨려가면서 공격을 할 아무런 이익이 없다는 이야기입니다.
복습하는 의미로 링크하나 더 걸겠습니다~
@easyblockchain/51
사실 오늘 읽은 네트워크 부분부터는 어려워지면 정말 어려워질 수 있는 거 같습니다. 우선 한번 따져가면서 읽는 것이 목표이니 제가 이해하기에 너무 어렵게 들어가지 않고 진행하려고 합니다. 그리고 더 깊은 내용은 따로 다루려고 합니다. 어차피 백서 한번 읽는다고 비트코인 공부가 끝나는 것은 절대 아니니...
다음 글에서 다시 진도 나갑니다~