내가 이해하는 블록체인_블록을 이해해보장_1

in #kr6 years ago

완전 개 뉴비 허접이지만 8살 조카한테 이야기하는 형식으로 썻습니다.
혹시 보시는 분은 너그러이 봐주시기 바랍니다.
잘못된점은 부디 지적해주시면 감사하겟습니다.

블록체인은 블록 이름(해쉬값), 블록 바디, 블록 헤더로 구성되어있어.

  1. 블록 해쉬값 ==> 블록에 있는 모든 정보들을 싹다 해쉬로 돌려버려서 나온 최종 결과물. 최종보스

  2. 블록 바디 ==> 거래들이 옹기종기 모여있는 곳.

  1. !!블록헤더!! ==> 제일 중요한 애. 총 여섯개의 값으로 구성되어 있음.

--1. 버젼 ( 그냥 버젼. 뭐 업그레이드 하거나 그럴때마다 바뀜)

--2. 시간 ( 블록이 생성된 시간..)

--3. 난이도 (얼마나 어려운지 정함. 비트코인의 경우 평균 2주마다 얘가 확인함.(2016개의 블록, 개당 10분씩)
그래서 평균 시간이 10분이랑 차이가 많이나거나 하면 조정조정!)

--4. 이전 블록의 해쉬값 ( 블록체인끼리 연결고리역할을 한다. 해쉬값 돌릴때 하나가 바뀌면 다 바뀌겠지?
그래서 어떤 놈이 이전 블록을 해킹했다치면 이전블록의 해쉬값이 달라져
==> 연달아서 다음 블록에 들어가는 값도 바뀜==> 오류남 ==> 해킹탈락)

--5. 머클루트 ( 거래들의 해쉬값을 겁나게 압축시켜서 하나의 해쉬값으로 만듦)

--6. 논스(nonce) (노가다의 산물. 누가누가 먼저 풀까)

1~5번 까지는 전부 값이 고정되어있고 '논스'값만 변할 수 있는 숫자야.

!!전체과정!!

  1. '논스'에 0부터 차례대로 넣어보면서 '어떤 값'보다 작아지는 논스 값을 찾는다.
    ( POW에서 '채굴', '수학문제를 푼다'는 다 저 '논스 값'을 찾는 것임)
    2.저 값을 찾으면 계산이 띠링띠링 되면서 최종 해쉬값이 나옴.(=블록의 해쉬값)
  2. 찾은 논스값을 전체 노드 친구들한테 알려줌(내가 먼저찾았으니까 뻘짓 그만하고 다음블록 찾아)
  3. 다른 노드 친구들은 논스 값을 넣어서 확인을 하고 블록을 확인한다음에 다음거로 넘어감.

<<파헤쳐보기>>

  1. '논스'에 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넣어서 해보렴 ^^

!! 버젼+시간+난이도+이전블록해쉬+머클루트+논스
이 더하는 순서는 정확하지 않아 까먹었어..
어쨋든 이어붙이는 순서는 정해져 있어. 그래야 똑같은 규칙으로 계산을 하겠지?

Coin Marketplace

STEEM 0.18
TRX 0.13
JST 0.028
BTC 57605.72
ETH 3101.08
USDT 1.00
SBD 2.33