참조 : https://yozm.wishket.com/magazine/detail/761/ , https://m.blog.naver.com/sunchan683/221606846917
비트코인 채굴 방식
- 블록헤더를 해시함수에 넣어 다음 블록의 블록 해시값 도출
- 머클루트
- 난이도 - 해시 목표값(채굴의 성공 조건)
- 논스
- 채굴은
이전 블록 해시값, 머클루트, 목표값
에논스
를 추가하여 Hash한 후 결과값을 난이도(목표값)과 비교한다!
- 실제 비교 방법
- Bits는 난이도(목표값)을 의미
- 목표값 계산 단계
- Bits를 16진수로 변환
- 변환한 16진수 앞 두자리는 지수로, 뒤 6자리는 계수로 사용
- 목표값 : 계수 * 28 * (지수-3)
- 결국 블록을 만드는 방법은
난이도(목표값)보다 작은 해시값이 나오도록 하는 논스를 찾는것!
작업 증명을 하는 이유
- 비잔틴 장군 문제를 해결하기 위해서임.
- 비잔틴 장군 문제 규칙
- 장군들은 메세지를 만들어서 보내려면 반드시
각각 10분의 시간이 필요한 작업
을 해야 함 - 이 작업은 10분의 시간을 꼬박 할애해야만 완료할 수 있는 작업
- 그리고 이 작업을 했다는 것을 증거와 함께 인접 장군에게 보내야함
- 인접 장군에게 보낼 때는 전달받은 내용을 함께 보내야 함
- 장군들은 메세지를 만들어서 보내려면 반드시
- 비잔틴 장군 문제
- 장군 1이 “오전 6시 공격”이라는 메세지를 10분 할애해서 만들고, 장군 2에게 보냄
- 장군 2도 “오전 6시 공격”이라는 메세지를 10분 할애해서 만들고, 장군 1이 보낸 메세지와 함께 장군3에게 보냄
- 장군 3은 배신자인데, “오후 9시 공격” 메세지를 만들어서 보내려고 함
- 단순히 “오후 9시 공격”이라는 메세지를 만들어서 장군1, 2의 메세지와 함께 보내면 메세지의 내용이 다른 것이 단번에 들통남
- 장군 1,2의 메세지까지 모두 바꾸려면 20분의 추가 시간을 들여서 메세지를 만들어야 하는데, 그럴 시간이 없음
- 때문에 장군3도 “오전 6시 공격” 메세지를 만들 수 밖에 없음
- 비트코인에서 적용
- 배신자가 블록 #2의 내용을 바꾸려고 함
- 블록 #2를 만들기 위해 논스를 찾는 과정을 거쳐야함
- 운좋게 10분만에 찾아서 블록 #2의 내용을 변경했다고 가정
- 하지만 그 사이에 이미 블록 #4가 생성
- 블록#4는 정상 블록 #3을 보고 있음
- 그러려면 블록#3과 블록 #4를 계산해야함
- 이런 과정이 계속 반복되기 때문에
변조는 불가능
한 것!!