안녕하세요. 어미새입니다.
우리는 계속해서 채굴에 대한 개념을 익히고 있습니다. 이제 어느정도 '채굴'에 대한 개념정리가 되었을거라고 생각합니다! 본 포스팅을 하기 앞서 지난 시간의 내용에 대해서 간략하게 정리하고 넘어가겠습니다.
Remind
지난 시간 이야기
- '채굴'은 일종의 보상의 개념이다.
- 보상을 받기 위해서는 '미완성 블록'을 '완성된 블록'으로 변환시키는 수학문제를 풀어야 한다.
- 수학문제의 정답이 되기 위한 조건은 '블록해시'정보가 'target'정보 보다 작아야 한다.
- 해시함수의 특징으로 인해 'target'보다 작은 '블록해시'를 만들어내기 위한 'nonce'의 값은 절대 유추할 수 없다.
- 'nonce'의 값을 유추할 수 없기 때문에 'nonce'의 정보를 0부터 1씩 증가하여 답이 맞는지 확인하는 단순 반복작업이 필요하다.
아래의 그림처럼 'nonce'의 값에 임이의 값을 대입하여 '블록해시' 값을 획득한 후 결과 값이 'target'보다 작을 경우 새로운 '블록'을 만들어낼 수 있습니다.
이번 포스팅에서는 'target'이 무엇이고 어떤 역할을 수행하는지에 대해 알아보기로했습니다. 하지만 'target' 즉 난이도에 대한 개념정리는 조금 어렵기 때문에 더 많이 준비 후 공개하는게 좋을 것 같습니다.(빠른 시일내에 하겠습니다!)
오늘은 지난 시간 학습한 내용에 연장선상에 있는 개념들에 대해서 알아보겠습니다. 그럼 어떤 내용이 있는지 천천히 살펴보시죠!(최대한 이해하기 쉽게 설명하기 위해 노력하고있습니다만, 갈수록 어려워지는 개념들때문에 여러분들이 블록체인 기술 학습을 포기하실까봐 두렵습니다 ㅠㅠ)
'새로운 블록 그리고 전파'
채굴자(마이너)가 어려운 수학문제를 다 풀어내고 새로운 '블록'을 생성했다고 가정해보겠습니다. 그렇다면 채굴자는 바로 보상을 받을 수 있을까요..? 정답은 No!입니다.
왜냐구요? 새롭게 만든 '블록'이 진짜인지 가짜인지에 대한 검증이 필요하기 때문입니다. 악의적으로 나쁜 블록을 만들어서 각 노드에 전파하는 유저가 없으리란 보장이 없기때문에 다른 사람들에게 신뢰를 받기 위한 검즘이 필요합니다.
위의 그림 처럼 새로운 블록을 만들어냈다면 주변 노드들에게 새로운 블록을 전파하여 검증을 받게됩니다. 만약 검증에 실패한 블록은 바로 폐기되어 더이상 전파되지 않습니다. 그리고 블록 전파 시 고려해야 될 사항이 한가지 더 있습니다!
비트코인 네트워크에서는 동시에 수 많은 채굴자들이 수학문제를 연산하고 있습니다. 그렇기 때문에 종종 블록체인에 연결될 다음 '블록'이 동시에 발견되는 경우가 발생하게됩니다. 전세계적으로 흩어져 있는 노드들이 많다 보 니 간혈적으로(낮은 빈도수로) 이러한일이 발생하게 됩니다.
'스테일 블록(Stale Block)'
위에서 잠깐 언급한 내용을 이어서 다시 정리를 조금 해보겠습니다.
블록체인 네트워크에 연결된 수 많은 채굴자들이 동시에 새로운 블록을 찾아내기 위하여열심히 수학문제를 풀어낼 것입니다. 그런데 이때 동시에 수학문제를 풀게되면 어떻게 될까요?
예를들어 한국에 살고 있는 어미새와, 미국에 살고 있는 Mother bird가 동시간대에 새로운 '블록'을 생성했다면 어미새와, Mother birth는 동시에 주변 네트워크에 해당 '블록'을 전파하고 검증을 받게됩니다.
즉 한국 주변에 있는 채굴자들에겐 어미새가 만든 블록이 '검증'을 받고 추가될것이고, 미국 주변에는 Mother bird가 생성한 블록이 '검증'을 받으면서 추가가 될것입니다.
그렇다면 둘다 정당한 방법으로 문제를 풀었기 때문에 누구의 노드가 옳다고 판간하기에 어려운 문제점이 발생하게됩니다. 큰 그림으로 봤을때 비트코인 네트워크에 연결된 노드의 흐름은 아래의 그림과 같이 분기가 이루어집니다.
앞서 설명에서 먼저 전달받은 노드를 우선시하고 뒤 늦게 전달받은 노드는 무시 된다고 하였습니다. 이렇게 양갈래로 나뉘어진 노드들은 또 다시 다음 블록을 을 찾기 위한 수학문제를 풀고 블록을 연결시키게 됩니다.
이렇게 이어진 노드들은 아래의 그림처럼 어느 시점에서 짧은 노드와 긴 노드로 나뉘어지게됩니다.
이때 비트코인 시스템에선는 더 긴 노드만을 인정하며, 짧아진 노드는 폐기됩니다. 이때 버려지는 블록이 '스테일 블록(Stale Block)'입니다!
어느정도 이해가 되셨나요?
최종보상
자 그럼 위의 개념을 배웠기 때문에 왜 '블록'이 생성된 시점에서 '보상'을 바로 지급받지 못하는지 이해하셨을겁니다. 내가 만든 '블록'이 '스테일 블록'이 되어 유효처리가 될 경우 보상을 받지 못하는 경우가 발생하기 때문에 내가 만든 '블록'이 명확하게 유효하다라고 판단이 되는 시점에서 보상을 받을 수 있는겁니다.
그럼 '완료된 거래'는 언제쯤 거래가 완료되었다고 판단할 수 있을까요? 통상적으로 내가 만든 블록을 뒤로 6개의 블록이 이어질 경우 거래가 유효하다고 판단합니다. (이 부분에 대해서는 아직 명확하게 어떻게 판단하는지 코드로 확인을 못해봤기 때문에 조금은 불확실합니다 ㅠㅠ)
이렇게 완전히 유효한 '블록'이 되었을때 비로써 보상을 받게 됩니다. 그렇다면 '채굴'에 성공할 경우 어떤 보상을 받게될까요? 블록체인 인포 사이트에서 가장 최근에 만들어진 블록의 보상금을 확인해보겠습니다.
(https://blockchain.info/ko/block/00000000000000000051cb4d222cae423e4e5e7741c9d789cb7f2c2dce56d0de)
**채굴에 대한 보상은 블록 생성에 따른 코인 발행량 + 수수료입니다. 그러니간 대략 12.63BTC니간 지금 1BTC에 천만원 정도에 가격이..?? 혹시 여러분들은 지금까지 '채굴'에 대한 보상을 일정 시간 마다 0.00000001BTC와 같이 아주 작은 단위로 보상받는다고 생각하시지 않았나요? **
하지만 실제로는 '채굴'에 성공할 경우 위의 그림 처럼 블록 생성에 따른 코인 발행량 + 수수료를 모두 받아가게 됩니다. 이 부분에 대한 의문점은 추후 '마이닝풀'이라는 주제로 포스팅하겠습니다!
오늘 배운 내용을 정리해보면
- 새롭게 만든 '블록'은 검증을 위해 그리고 블록체인 형태로 연결되기 위해 주변 노드들에게 전파된다.
- 동시에 만들어진 '블록'중 연결이 끊어지는 노드들이 버려지게 되는데 이때 버려지는 블록을 '스테일 블록'이라 한다.
보상을 받기위한 시나리오는
- 새로운 블록을 생성한다.
- 새롭게 생성한 블록을 전파하여 '검증' 받는다.
- 일정 노드(6개) 이상 해당 블록과 연결 된다면 결과가 번복될 수 없기 때문에 채굴에 대한 보상을 지급받는다.
어느정도 이해 되셨나요? 최대한 쉽게 설명하기 위해서 노력했습니다만.. ㅠㅠ (모르시는 부분은 댓글에 남겨주시면 최대한 아는선에서 답변해 드리겠습니다!)
이상 긴 글 읽어주셔서 감사합니다! 리스팀은 저에게 큰 힘이됩니다!(리스팀 해주시는 팔로우분들께 진심으로 감사드립니다!)
[참고 자료]
@easyblockchain/3nexdc-2
https://homoefficio.github.io/2017/11/19/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
@kim066/stale-block
@hanmomhanda/blockchain
@easyblockchain/3nexdc-2
http://d2.naver.com/helloworld/8237898
http://www.mobiinside.com/kr/2017/11/07/bitcoinblockchain101/