[프린이탈출기] node.js 로 나만의 블록체인을 만들어보자 2.난이도 조정

in kr •  7 years ago  (edited)

안녕하세요 @otac 입니다
1편을 쓰고 난 다음 2편을 바로 쓰려고했으나
마이닝 과정에서 난이도 조정부분에서
난항을 겪는 나머지 몇일을 고민하다가

드디어 해결을 하게 되었습니다

1편에서는 단순 마이닝을 성공했으나
비트코인의 난이도를 그대로 적용했더니
너무나도 오래걸려 테스트를 못하는 지경이라

비트코인의 난이도 알고리즘은 그대로 쓰면서
실제 목표값 (bits) 에 약간의 핸디캡을 주는방향으로
해결하게 되었습니다

스크린샷 2018-03-21 오후 2.57.56.png

프린이라 난해한 코딩법은 양해를 부탁드리며
지적은 받지 않겠습니다. ㅂㄷㅂㄷ

마지막 부분에

k = k + handicap;

부분이 보이실텐데 목표값을 확 올려주어
더 쉽게 찾을 수 있도록 했습니다.

그리고 제가 제일 멘탈이 나갔던 부분이 있는데요
바로 난이도 조정입니다.

우리가 흔히 비트코인의 난이도라고 부르는것은
비트코인 내부적으로 아무 의미가 없습니다.

해싱 목표값인 bits 를 보기편하게 수치화 시킨것에
불과한데요. 문제가 그 어디를 뒤져보아도
다음 난이도를 구하는 공식만 있을뿐

제가 필요한건 bits 값인데
난이도를 다시 bits 로 역연산 하는 수식이
존재 하지 않았습니다.
난이도는 bits->target->difficulty 로 구하는데말이죠

그래서 bits에서 난이도를 구하는 공식인

스크린샷 2018-03-21 오후 3.01.02.png

이걸 역으로 풀어보면 어떨까 해서 고민해보았는데
수학에 숫자보다 영어가 많이나올떄 그만둔 저로써는
미지의 세계였습니다.

그래서 텔레그램방에서 자칭 서울대 수학과라는
친구에게 물어보았는데요.

KakaoTalk_Photo_2018-03-21-15-03-28_53.jpeg

KakaoTalk_Photo_2018-03-21-15-03-18_47.jpeg

FAIL !

@noctisk 님께도 물어보았는데요

스크린샷 2018-03-21 오후 3.05.16.png

또 FAIL

고민에 고민을 거듭하고
식음을 전폐하며 점점 멘탈이 으깨지려할때

어김없이 질문 찬스를 썼습니다

스크린샷 2018-03-21 오후 3.07.07.png

@ludorum 그는 도덕책..
비트코인 코어에서 관련 함수를 알려주셨고
0x008000 같은 숫자도 영어도 아닌
괴랄한 코드를 하나하나 node 로 바꾸어서

스크린샷 2018-03-21 오후 3.08.16.png

완성했습니닼ㅋㅋ으엌ㅋㅋㅋ엌ㅋㅋㅋ
역시 정답은 교과서에 다 있습니다.

이걸로 약 3일을 해매었는데
드디어 해결했습니다

블록타임 10초
난이도조정주기 5블럭으로 설정을하고

const blocktime = 10; //블록타임 (초로 표기)
const retarget_block = 5; //블록마다 체크
const retarget_block_ntime = blocktime * retarget_block;

그리고 비트코인처럼 최대 난이도 상승은 4배.
최대 난이도 하락도 4배 제한을 걸고..

스크린샷 2018-03-21 오후 3.11.55.png

실행 가즈아!!!!!


스크린샷 2018-03-21 오후 3.10.12.png

SUCCESS!!

으아 드디어 채굴부분이 끝났습니다
다음 시간에는 공개키 알고리즘으로
지갑을 만들어보고 블럭보상을 받아

UTXO 를 생성하여 코인을 전송하고
트랜잭션을 검증해보겠습니다

감따합니다

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

감사합니다 저도 보면서 공부하고 모르는거 있으면 오탁님께 여쭤봐야겠어요~

  ·  7 years ago (edited)

내용 삭제합니다. 이제 잘 지내봅시당ㅎㅎ

네 억울합니다 ㅋ 단톡방에 말할까 말까 하다가 일부러 말했네요

카톡 풀봇 잘 모아놓고 있겠습니다~!!

우와.... 대단하십니다 ㅎㄷㄷㄷ

감사합니다 ^0^

이것도 이해가 되진 않지만 훌륭하네요 ㅋㅋ

아 맞다 달걀님 저 지금 수원인데 접선할까요 ㅋㅋㅋㅋㅋ

안그래도 수술하러 올라오신다 하셨을 때 스케줄 좀 내볼라했는데 ㅜ
출장준비때미 쉽지 않네요오옹ㅜㅜ
아, 저 신혼집 인천으로 오게돼서 수원은 가끔 가용 ㅋㅋ 언제 내려가세요??

능력자 이시군요 ....

아닙니다 허허허허
칭찬감사합니다 (__)

오탁님 블록체인 개발자로 변신했군요 코인좀 주세여 ㅋㅋ

코인 전송기능이 없는데요.. ( ..)

otac 코인 파이팅~~

오탁님 오랜만에 왔는데,
무슨말인지 하나도 모르겠네요 ㅋㅋㅋㅋ
위 말처럼 한국말인가요?
그래도 뭐 잘 되고 있는거 같아요 :D

엇 쿤다니님 오랜만이에요 ㅋㅋㅋㅋㅋ
쉽게쓴거같이 보이지만 저 몇날 몇일 이거만했습니다 ㅂㄷㅂㄷ

저도 뭐가 뭔지 잘 모르지만 그냥 재미 있어 보입니다 @.@

읽고는 있지만 이해는 안가고 ㅋㅋ 뭔가 모르지마 아 ~ 히고 있는 1인 입니다 ㅎㅎ;(

저도잘모릅니다 하나씩 천천히...

아이고~~ 이 수준은 내 머리로는 도무지 못 따라할 것 같아요.

짱짱맨 호출로 왔습니다!
한주 수고하세요
코인거래소인 고팍스에서 멋진 이벤트중이네요!
https://steemit.com/kr/@gopaxkr/100-1-1

머지않아 블록체인 개발자가 되어계실것 같습니다. 이미 되신거나 마찬가지네요. ㅎ 젊음보다 이제는 제가 가지기 힘들어보이는 뜨거운 열정이 부럽습니다.

초보위한 포스팅도 인기잇으실것 같네여

글 내용이 무시무시하네요~~