완전 개 뉴비 허접이지만 8살 조카한테 이야기하는 형식으로 썻습니다.
혹시 보시는 분은 너그러이 봐주시기 바랍니다.
잘못된점은 부디 지적해주시면 감사하겟습니다.
블록체인은 블록 이름(해쉬값), 블록 바디, 블록 헤더로 구성되어있어.
블록 해쉬값 ==> 블록에 있는 모든 정보들을 싹다 해쉬로 돌려버려서 나온 최종 결과물. 최종보스
블록 바디 ==> 거래들이 옹기종기 모여있는 곳.
- !!블록헤더!! ==> 제일 중요한 애. 총 여섯개의 값으로 구성되어 있음.
--1. 버젼 ( 그냥 버젼. 뭐 업그레이드 하거나 그럴때마다 바뀜)
--2. 시간 ( 블록이 생성된 시간..)
--3. 난이도 (얼마나 어려운지 정함. 비트코인의 경우 평균 2주마다 얘가 확인함.(2016개의 블록, 개당 10분씩)
그래서 평균 시간이 10분이랑 차이가 많이나거나 하면 조정조정!)
--4. 이전 블록의 해쉬값 ( 블록체인끼리 연결고리역할을 한다. 해쉬값 돌릴때 하나가 바뀌면 다 바뀌겠지?
그래서 어떤 놈이 이전 블록을 해킹했다치면 이전블록의 해쉬값이 달라져
==> 연달아서 다음 블록에 들어가는 값도 바뀜==> 오류남 ==> 해킹탈락)
--5. 머클루트 ( 거래들의 해쉬값을 겁나게 압축시켜서 하나의 해쉬값으로 만듦)
--6. 논스(nonce) (노가다의 산물. 누가누가 먼저 풀까)
1~5번 까지는 전부 값이 고정되어있고 '논스'값만 변할 수 있는 숫자야.
!!전체과정!!
- '논스'에 0부터 차례대로 넣어보면서 '어떤 값'보다 작아지는 논스 값을 찾는다.
( POW에서 '채굴', '수학문제를 푼다'는 다 저 '논스 값'을 찾는 것임)
2.저 값을 찾으면 계산이 띠링띠링 되면서 최종 해쉬값이 나옴.(=블록의 해쉬값) - 찾은 논스값을 전체 노드 친구들한테 알려줌(내가 먼저찾았으니까 뻘짓 그만하고 다음블록 찾아)
- 다른 노드 친구들은 논스 값을 넣어서 확인을 하고 블록을 확인한다음에 다음거로 넘어감.
<<파헤쳐보기>>
- '논스'에 0부터 차례대로 넣어보면서 '어떤 값'보다 작아지는 논스 값을 찾는다.
결국 수학문제를 푸는거야. 1-5까지는 모두 고정되어 있기 때문에 6.논스만 바뀔수 있어.
그리고 이거는 해쉬함수를 돌리는 거기 때문에 값을 구하는게 진짜 엄청 빡세.
ex)
a+1<3 이면 a=1이잖아?? (a=자연수)
근데 이게 겁나 골때리는게
1+1을 해쉬값을 돌리면 12485357 막 이딴게 나올수도 있어. 막 지멋대로 바뀌는게 포인트야
그래서 어쩔 수 없이
''하나하나 값을 0부터 넣어봐야 해''
그리고 a+1<3이 쉽겠어 a+1<100000 이 구하기 쉽겠어.
당연히 100000보다 작은거 찾는게 쉬울거 아니야 답지의 선택지가 많아지니까.
그래서 저 3이나 100000과 같은 '어떤 값' 이 결국 전체 문제가 얼마나 어렵냐 쉽냐를 정해주겠지.
그 어떤 값이 '난이도'라는 거야.
<<조금 더>>
실제로 계산하는 과정은
'버젼+시간+난이도+이전 블록해쉬값+머클루트+논스'를 쭉 연결해서 얻은 값을
해쉬함수를 돌려서 값을 얻고 그거랑 난이도랑 비교하는거야.
ex)
버젼 = 2
시간 = 20180716
난이도 = 00005496
이전블록해쉬 = asdf1234
머클루트 = qwer5678
논스 =0
==>'버젼+시간+난이도+이전 블록해쉬값+머클루트+논스'
= 2 20180716 00005496 asdf1234 qwer5678 0
==> 해쉬함수 돌려 ==> 44449124
==>44449124(최종해쉬값) < 00005496(난이도) ??? 노노노 멍청이임???
==> 탈락.
==> 다시 논스 1넣어서 해보렴 ^^
!! 버젼+시간+난이도+이전블록해쉬+머클루트+논스
이 더하는 순서는 정확하지 않아 까먹었어..
어쨋든 이어붙이는 순서는 정해져 있어. 그래야 똑같은 규칙으로 계산을 하겠지?