우선 제일먼저 기초부터 다져보자
블록해쉬를 보면 무엇으로 이루어져 있는가
바로 16진수이다!
먼저 우리가 흔히 아는 10진수와 비교하여 보면
0,1,2,3,4,5,6,7,8,9,10
이렇게 숫자가 있는반면 16진수는
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 이렇게 16개로 되어있다
두 수를 비교해 보면 10진수에 10은 16진수에 f 이다
이것을 보자마자 모두 같은 반응일거다 잉?
이 숫자를 어떻게 10진수에서 16진수 16진수에서 10진수를 알란 말인가 ...
자 한번 파헤쳐 보자 한자리숫자는 뭐 그냥 보기만해도 알겠지 모두
숫자 3은 16진수에 3이다
숫자 8은 16진수에 8이다
자 여기서 숫자 10진수에 10은 16진수에서 a 이다 응!?
그럼 10진수 숫자 16은 16진수에서 무엇일까 ?
f이다 오케이 여기까지 쉽다
10진수에서 숫자 33은 16진수에서는 몇일까 ?
바로 21 이다 .. 계산하는 방식은 쉽다 33에서 16을 나눈숫자에서 나머지만 구한다
처음에 33에서 16을 나누면 나머지 1 그리고 남은 2를 16으로 나누면 몪은 0 이지만
나머지는 2로 거꾸로 2와 1 21이 16진수이다.
거꾸로 16진수에서 10진수로 계산하는방식은
21을 10진수로 구하면 거꾸로 두번째 자리 16^1x2=32 첫번째자리 16^0x1=1 하면 33이 나온다
이거 이해하는데 정말 오래걸렸다.
자 10진수와 16진수는 여기까지하고
우선 알아보기전에
Big Endian 과 Small Endian이 있다.
우리가 흔히쓰는 방식 ex)16진수 123456 그대로 -> 12/34/56
큰자릿수부터 작은자릿수로 차례대로 적는 방식이고
작은 자릿수부터 작성 되는 방식이다
처음 ex) 에서 16진수 12/34/56 이거를 작은순부터 작성해주는방식
-> 56/34/12 이것을 Small Endian 이라한다.
우선
version, merkle(merkle hash), time stamp, bits, nonce, previous hash 작성되어있다
merkle hash 안에는 거래정보(transaction)가 저장되어있다 .
제일 중요한 블록해시의 정보는
이 6요소 들이다 이 요소들을 하나하나 가져온다
그리고나서 version 과 bits nonce에 있는 접두사 0x는 모두
제거해준뒤에
time stamp 는 UTC 시간으로 바꾼뒤 UNIX 로 변환한다
그리고 모두 Big Endian에서 Little Endian 으로 변환
version ,previous hash, merkle , time stamp ,bits , nonce
이순으로 이어 붙인뒤 SHA 256 해쉬값을 두번 반복 한다
그러면 헤더의 해쉬가 나온다 !!