#8 - 채굴 보상시점 및 스테일 블록에 대한 개념정리(3/N)
안녕하세요. 어미새입니다.
우리는 계속해서 채굴에 대한 개념을 익히고 있습니다. 이제 어느정도 '채굴'에 대한 개념정리가 되었을거라고 생각합니다! 본 포스팅을 하기 앞서 지난 시간의 내용에 대해서 간략하게 정리하고 넘어가겠습니다.
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개) 이상 해당 블록과 연결 된다면 결과가 번복될 수 없기 때문에 채굴에 대한 보상을 지급받는다.
어느정도 이해 되셨나요? 최대한 쉽게 설명하기 위해서 노력했습니다만.. ㅠㅠ (모르시는 부분은 댓글에 남겨주시면 최대한 아는선에서 답변해 드리겠습니다!)
이상 긴 글 읽어주셔서 감사합니다! 리스팀은 저에게 큰 힘이됩니다!(리스팀 해주시는 팔로우분들께 진심으로 감사드립니다!)
[참고 자료]
https://steemit.com/kr/@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/
https://steemit.com/kr/@kim066/stale-block
https://steemit.com/kr/@hanmomhanda/blockchain
https://steemit.com/kr/@easyblockchain/3nexdc-2
http://d2.naver.com/helloworld/8237898
http://www.mobiinside.com/kr/2017/11/07/bitcoinblockchain101/
스테일블록 설명 그림 첫번째가 오류가 있네요. 숫자.
앗 그렇네요 ㅜㅜ 수정해야겠습니다 감사합니다~ ^^
그럼 마이너는 6confirm이 지나야 코인베이스 거래라는 걸 통해서 보상을 받게 되는 건가요?
아 정말 오랜만에 오신 것 같아서 기분이 좋네요~ 제가 이해한바는 그렇습니다~ 근데 아직 명확하게 파악이 된건 아니라서 확답을 못드리겠네요 ㅠㅠ (너무 어려워요..) 추후 명확해지면 다시 알려드릴게요~!!
저도 파악해 보겠습니다. ㅎㅎ 그리고 찾아보니까 스테일블록이 나타날 가능성을 줄이기 위해서 10분에 하나씩 블록을 만드는 거라고 합니다 ㅎㅎ덕분에 같이 공부하고있습니다!
맞아요! 역시 잘 아시네요~ 타임을 줄이지 못하는 이유가 그렇다 하더라구요~ 여기에 대한 이론도 더 공부해봐야겠네요!! 블록체인 거래 과정이나 마이너들이 새로운 블록에 들어갈 거래들을 어떻게 선별하는 지도 매우 궁금해서 열심히 찾고있습니다! ㅎㅎㅎ
거래에 들어가는 우선순위는 Sum(value of input (수수료) * input age(얼마나 메모리풀에 있었는지) / transaction size (바이트 값으로 얼마나 큰지)로 알고있습니다. ㅎㅎ
즉, 수수료가 높을수록, 메모리풀에 오래있을 수록 , 바이트값이 작을수록 입니다 . ㅎ
replace by fee , 생성거래 (코인베이스 거래) 에 대한 내용도 들어가겠네요 포스팅에 힌트가됬으면 합니다 :) 저도 관련글을 쓰고싶지만 너무 글을 잘써주셔서 저는 읽기만하고있습니다 ㅎㅎㅎ
아 정말 많은 도움이 될것같습니다! 포스팅에 많은 도움이 될것같아요! 열심히 또 공부해서 포스팅해야겠습니다! 이제 곧 설 연휴인데 즐거운 명절 보내세요~ ^^
이걸 찾아보니까 100블록이 지나야 ( 100confirm지나야 )보상을 주는것 같아요.
제가 잘못이해했나 한번 읽어봐주세요ㅠㅠ
헉 100 컨펌이요?? 좋은정보 감사합니다! 꼭 읽어보고 답변 드릴께요 흐흐
저도 어미새님을 괴롭히고 싶어요. 궁금한게 있는데요.
블록 보상을 받는 과정이 어떻게되나요..?
그냥 채굴자가 나중에 "나 80000블록 캤음, 12.5BTC 잔액 올림" 이라고 전파하면 승인 내주는 구조인가요? 그리고 코인 일련번호는 어떻게 발행하여 생기는 것인지.. 궁금합니다 :)
흐흐 다음 포스팅에서 질문사항에 대해 설명해보겠습니다~!! ^^@
음 이 답변에 대한 내용을 포스팅하였습니다만.. 포스팅 후 댓글을 다시 읽어보니 조금 부족한 부분이 있네요:);; 우선 블록을 전파하면 각 노드들이 블록에 대한 검증을 실행합니다. 검증에 성공한 블록만 블록체인에 연결되는 구조인거죠~ 코인 일련번호는 어떻게 발해는지에 대한 답은 추후에 하겠습니다(잘 몰라서요..ㅋㅋ)
아 정말 좋은 의견 감사합니다. 덕분에 많은 공부가 되었습니다. 해당 질문사항 관련하여 포스팅을 진행했습니다. 포스팅이 조금 도움이 되었으면 좋겠네요~ ^^;
자세하고 좋은 내용의 글이네요.
채굴에는 관심이 없어 별 공부를 안했었는데
많은 도움되었습니다 ㅎㅎ
감사합니다~!
자주 찾아뵙겠습니다.
넵! 도움이 될 수 있어서 기분이 좋네요~
블록체인 관련 기술에 대하여 포스팅 이어갈 예정입니다.
자주 들려주세요 ^^;
제 글에 보팅을 해주셔서 감사합니다.
저도 보팅하고 갑니다. 저도 초보이기는 하지만 채굴에 대해 배우고 싶네요.
채굴에 대한 개념정리에 어느 정도 도움이되셨으면 좋겠네요~ 즐거운 스티밋 되세요!!
2018년에는 두루 평안하시길!
조금 오래지났지만 답변을 얻을 수 있을까 싶어서 댓글남겨요 ㅎ
그러면 stale block에 있던 거래내역들은 당연히 mempool로 다시 돌아와서 블록에 추가되기를 기다리는 거겠죠???ㅎㅎ
정말정말 너무 글 쓰신것들 정독하면서 잘보고있습니다.
너무너무 감사드립니다~~!!!
보다 정확한 답변을 위해서는 실제 그렇게 되는지 소스코드 리뷰를 해봐야겠지만, 아마도 Mempool에 대기할것으로 예상됩니다.
Mempool은 0 Confirm 상태의 트랜잭션들이 대기하는곳으로 스테일 블록이 되어 거래를 인정 받지 못한 트랜잭션들은 0 Confirm 상태가되니, 스테일 블록에 다시 등록될것으로 예상됩니다!
감사합니다!!! 덕분에 공부 재미있게하고있어요 !!ㅎㅎㅎ
자세한 정보 감사합니다!
저도 질문이 있는데요, 하나의 채굴자가 블록을 생성하고 다른 노드들이 이를 검증하잖아요? 그 검증은 어떤 방식으로 무엇을 검증하는 건가요? 그리고 그 검증할 때 드는 시간과 비용이 거의 없나요? 뉴비라 아직 모르는게 많습니다ㅠㅠ