채굴원리 – 비트코인

안녕하세요 채굴(mining)하면 뭐가 제일 먼저 떠오르시나요? 광산에서 금을 캐내듯 비트코인을 채굴하는 이미지에 많이 노출돼 있기 때문에 이런 그림들이 가장 먼저 떠오를 것입니다. 이번에는 채굴하는 방법에 관해 프로그래밍적으로 설명해 놓은 좋은 글이 있어서 소개해 드리려고 합니다.

>

먼저, 해시함수가 무엇인지 알아야 합니다. 간단하게 설명하자면, 어떤 메시지를 입력하면 해시함수가 이상한 문자를 만들어 줍니다. 비트코인 블록 정보를 보면 아래와 같이 Hash라는 이상하게 긴 글자가 있습니다.00000000000000000054022a7d9fd14761c9962f9f5d44f1caffbd740b73d6a2비트 동전 블록의 정보는 여기서 볼 수 있습니다. 이번 블록의 해시 값, 맥루트 값도 해시함수에 의해 생성된 문자입니다. 그럼 간단하게 해시함수의 특징을 살펴보겠습니다.

.
프로야구 삼성 라이온즈가 9일부터 대구 삼성 라이온즈 파크에서 열리는 롯데 자이언츠와의 홈 3연전 동안 라팍 클래식시리즈 이벤트를 진행한다. 신종 코로나바이러스 감염증(코로나19) 확산 여파가 일본프로야구(NPB) 지바 롯데 마린스를 할퀴었다. 최지만(29, 탬파베이 레이스)이 아메리칸리그 디비전시리즈(ALDS) 2차전 세 번째 타석에서도 볼넷으로 출루하며 3출루 경기를 펼쳤다. 프로야구 LG 트윈스 박용택이 KBO리그 최초 2500안타에 이어 통산 최다 경기 출장 신기록 달성도 눈앞에 두고 있다. 최지만(29, 탬파베이 레이스)이 아메리칸리그 디비전시리즈(ALDS) 2차전 세 번째 타석에서도 볼넷으로 출루하며 3출루 경기를 펼쳤다.

해시함수는 블록체인뿐만 아니라 다른 곳에서 다양한 목적으로 사용됩니다. 여기에서는 암호에 사용되는 해시 함수 중 비트 코인에 사용되는 SHA256해시 함수를 바탕으로 설명하고 있습니다.1. 같은 메시지치를 해시다고 똑같은 결과가 나옵니다.’hello world!’를 해시해면 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9결과값이 나옵니다.’hello world!’을 다시 해시해면 동일한 결과치 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9이 나옵니다.’hello world!’를 해시하면 항상 동일한 결과값이 나오게 됩니다.2. 결과 값에서 어떤 메시지가 해시 되었는지 모른다.7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9결과치만 가지고’hello world!’라는 것을 알 수 없지요. 결과값이 어떤 메시지치를 갖는지 아는 방법은 1개씩 메시지치를 들어 보는 수밖에 없어요.즉,”hello”를 해시 칠로 결과와 같은지를 확인하고 아니면 다른 값”hellojay”를 들고 해시해서 보고, 이것도 다른 메시지치를 해시 칠로 결과와 같은지를 보고 이렇게 많은 경우 수를 1개씩 하면서 같은 결과가 그저 일을 빌어야겠군요.3. 메시지의 값을 조금만 바꿔도 해시, 결과값을 많이 달라진다.’hello world!’를 해시해면 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9가 나왔습니다. 그럼 한 글자만 대문자로 바꾸고’Hello world!’를 해시해서 보면 c0535e4be2b79ffd93291305436bf889314e4a3faec05ecffcbb7df31ad9e51a많이 달려서는 해시 결과값이 나옵니다.4. 메시지의 길이에 관계 없이 같은 길이의 해시 결과값이 나옵니다.’hello world!’를 해시해서 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9에 64자리의 문자가 만들어졌나요? 메시지의 값을 ‘Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!’로서 해시해서도 결과치는 동일한 64자리의 글자 3738d3dfa02f603e849ad63c5aaf54ae64b95a9e837f1485401a8449d3b1cf7f가 나옵니다.(16진수로 되어 있고 64자리인데 Sha256에서 힌트를 얻으면 2진 수로는 256자리에 됩니다.)5. 다른 두개의 메시지 값이 동일한 해시, 결과 값을 갖기가 거의 불가능하다.생성된 해시 값은 유일한 값이 됩니다. “hello world”를 해시하면 A가 나오고, 다른 메시지 값인 “welcome to korea”로 해시하면 같은 A가 나올 수 없다는 것입니다.6. 메시지치&#4748
4; 해시해서 해시, 결과값을 얻는 데 큰 연산이 필요하지 않고 빠르게 작동합니다.

블록 헤더 파일이 위에서 설명한 메시지치로 마이너는 이를 해시햅니다.’hello world!’를 해시해서 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9가격이 나간 것으로, 헤도 파일을 해시해서 해시 값을 얻습니다.그럼 375210번째 블록의 정보를 갖고 해시 값이 생성되는 과정을 설명하고 보겠습니다.헤드는 다음과 같이 구성되어 있습니다.

그럼 375210번째 블록의 정보에 정리하고 보겠습니다.버전:3이전 블록의 해시 값:0000000000000000051f5de334085b92ce27c03888c726c9b2bb78069e55aeb6해시 모 쿠르 루트 값:f4db18d3ecab87eeb23a56490d5b0b514848d510d409b43f6bbf2b82f55da8db타임 스탬프:2015-09-19 11:59:45Bits:403867578Nonce:3548193207벌써 이 값을 모두 합하여 메시지의 값을 만듭니다. 이 값은 사이즈(바이트 값)에 맞춰서 그리고 16진수 형식으로 그리고 리틀 엔디언(little endian)형식으로 나타내야 합니다. 타임스탬프는UnixEpoch타임으로변경해야합니다. 다만 그 값을 형식에 맞게 바꾸는 작업이 필요하다는 것을 이해해 주시기 바랍니다.** 버전 + 이전 블록 해시 값 + 해시마크루트 값 + 타임스탬프 + bits + nonce. 이렇게 값을 연결하여 긴 메시지 값을 만듭니다. 이것을 위에서 설명한 해시함수에 한 번 넣어서 해시를 만들고 그것을 다시 해쉬 함수에 넣어서 해시를 만듭니다. 2번 하고 줍니다. 그럼 짠 해시 값이 나옵니다.00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd

>

간단히 말하면 채굴자는 헤더에 있는 nonce치를 1개씩 변경하면서 특정 값보다 작은 해시를 찾습니다. 해시 함수의 특징 중에 ‘2. 결과 값에서 어떤 메시지가 해시됐는지 모른다.’,’3. 메시지의 값을 조금만 바꿔도 해시 결과 값이 많이 달라진다.기억하시나요? nonce 값을 조금만 바꿔도 해시 값을 크게 바꿀 수 있습니다. 그리고 해시 결과값에서 반대로 어떤 메시지 값을 넣어야 할지 모르기 때문에 원하는 해시값을 찾으려면 하나씩 넣어서 결과값을 볼 수 밖에 없습니다.예를 들면 채굴자는 나머지 헤도 값에 nonce치를 1에 넣어 봐서 해시 값을 찾아 보겠습니다. 희망하는 해시 값이 나오지 않으면 nonce값에 2를 넣어 다시 해시 값을 찾아 보겠습니다. 또 원하는 해시 값이 나오지 않으면 다른 값을 넣어 보겠습니다. 이렇게 숫자 하나씩을 변경하면서 원하는 값이 나올 때까지 계속 반복합니다. 컴퓨터가 이렇게 반복하면서 연산을 하는 거죠.특정 값보다 작은 해시를 찾는 것은 경쟁입니다. 저와 여러분이 이 해시 값을 찾는데 제가 먼저 찾으면 제가 그것에 대한 보상으로 비트코인을 받습니다. 홍길동이라는 사람이 먼저 찾으면 그 사람이 블록을 생성한 것이고, 그 사람이 비트코인을 보상으로 받는 겁니다. 그래서 컴퓨터를 최대한 빨리 돌려서 남들보다 이 해시값을 찾으려고 하는 겁니다.

495954번째 블록 해시 값을 한번 봅시&
#45796;.00000000000000000029f9bc75b5e62e12e4dc3387ea5abfe6951519f66e59c3100000번째 블록 해시 값은 어떻습니까?000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e5061000번째 블록 해시 값은 00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09이 곳에서 무슨 패턴이 보이나요? 495954번째 블록에서 1000번째 블록에 의한 해시 값의 0이 점점 줄어드는 것이 보이네요. 반대로 블록의 순(Height) 커질수록 0이 많다고 할 수 있습니다. 위의 값은 16진수로 되어 있는데 우리가 잘 보이는 10진수 값으로 바꾸면 더 분명한 패턴을 볼 수 있습니다.1000:21190640912980581113825823661692185883147471094586368510990797434121100000:1533267872647776902154320487930659211795065581998445848740226310495954:4020457218155086056100726400279037738012423080228313539후에 블록 정도 값이 작아집니까. 숫자가 너무 많이 나와서 좀 머리가 아플지도 모르지만, 숫자의 자릿수가 줄어드는 것만을 봐 주세요. 블록이 나중에 값이 작아지는 걸 볼 수 있어요.

작은 가격은 난이도가 높습니다. 채굴자(마이너)가 해시를 하면 정답을 찾기가 더 어려워진다는 것을 의미합니다.예를 들어 설명을 하겠습니다. 우리가 주사위 두 개를 던진다고 합시다. 주사위를 2개 던지고 걸려서 오는 값을 더한 것이 해시 값이라고 해서 봅니다. 그래서는 주사위를 던져서 나오는 값의 범위는 2~12이 되고 경우의 수는 36개입니다. 여기서 12보다 작은 값을 구하고자 하면 6,6이 나올 경우를 제외하고 35가지 경우가 12보다 작은 값입니다. 그럼 7보다 작은 값을 찾으라고 하면 9가지 경우만 해당합니다.12보다 작은 값:36가지 중에 35가지 포함 7보다 작은 값:36가지 중에 9가지 포함 36가지 중에 하나를 임의로 선택 하였을 때 12보다 작은 값은 35/36의 확률에서 찾고 있습니다. 한 번의 시도로 정답을 찾을 가능성이 높죠. 그래도 7보다 작은 값은 9/36의 확률로 찾는 것입니다. 한 번의 시도로 정답을 찾는 것은 쉽지 않을 겁니다. 더 많은 시도를 해서 찾을 가능성이 높습니다.1000번째 블록의 값은 컸어요? 채굴자가 블록의 헤도로 만든 해시 값이 큰 값보다 작으면 좋으니까(12보다 작은 값을 찾도록), 적은 시도에서 찾을 가능성이 많죠. 10000번째 블록의 값은 줄어든 덕분(7보다 작은 값을 찾도록, 더 많은 시도를 하고 찾을 가능성이 높습니다.

예제에서 설명한 375210번째 블록을 봅시다.bits는 403867578이었습니다. 이 값보다 작은 해시 값을 찾지 않으면 안 됩니다. bits값을 해당하는 공식에 넣어 같은 16진수로 바꾸고 나니, 아래라고 생각합니다.타깃치:00000000000000001287ba000000000000000000000000000000000000000000에서는 375210번째 블록 해시 값만 비교하여 볼까요? 다만 단순히 앞으로 0이 늘면 더 작은 값이라 375210번째 블록 해시 값이 bits로 계산된 타켓(Target)보다 적음을 확인할 수 있습니다. 채굴자가 nonce값에 1개씩 가입되면서 타켓트(target)값보다 작은 해시 값을 찾다가 정답입니다. 정답을 찾으면 이번에는 블록을 작성하고 보상으로 비트코인을 받는 겁니다.블록 해시 값:00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd타깃치 앞의 0몇:0000000000000000해시 값 앞의 0몇:00000000000000000좀 더 자세히 알고 싶은 분들을 위해서 추가적으로 설명하면 난
이도(difficulty)은 난이도=가장 어려운 난이도 목표 값/현재 목표 값이 되고 있습니다. 현재 타켓값이 작아질수록 난이도가 증가하죠? 나割り셈이 보이니까 이것은 소수 값이 됩니다. 그래서 bits는 부동소수값으로 표현이 됩니다.

난이도는 20160블록마다 변경됩니다. 비트 코인에서는 블록 한개당 10분 걸리는 것을 목표로 하니까 한 2주일에 한번씩 난이도가 조정됩니다. 채굴자(마니아)들이 빨리 찾으면 난이도를 높여야죠. 블록 한개당 10분을 기준으로 해서 20160블록(10분 201600분 걸리지만 기준이 됩니다. 이보다 더 빨리 블록 20160개가 생성되면 난이도를 높이고, 이보다 늦은 블록 2016개가 생성되면 난이도를 낮추게 되어 있습니다.새로운 난이도=현재, 난이도*(2016의 걸린 시간(분)/20160분)

>

당연히 채굴하는 장비는 호전되고 빨리 정답을 발견할 수 있도록 되어, 난이도는 img-2의 그래프처럼 계속 증가했습니다.

여기까지 오느라 고생했습니다. 최대한 쉽게 이해할 수 있도록 작성해 보았습니다만, 이해가 되었는지 궁금하네요. 더 자세히 설명하고 싶은 점이 많았지만, 다음 포스팅에서는 더 설명하도록 하겠습니다.제가 공부한 내용을 바탕으로 작성했습니다. 혹시 잘못 설명된 내용이 있다면 댓글로 알려주세요.참고 1. 헤도의 bits값을 16진수 혹은 10진수로 변경하는 공식 bits값 403867578을 가지고 설명을 합니다. 먼저 403867578을 16진수로 바꾸면 181287BA이 됩니다. 처음 두 자릿수의 18과 나머지 1287BA을 나누어 다음 식에 대입하면 됩니다. 16진수 18은 10진수에서 24로 16진수 1287BA는 10진수에서 1214394이 됩니다.타겟트=1214394*2^(8*(24-3)그럼 이식은 어떻게 나왔는지 궁금하시겠지만, 1001을 어떻게 bits로 표현하는지 예를 들어 보죠. 일단 256 자르고, 16진수로 표현을 하고 볼께요. 그럼 1001은 256^1*3+256^0*233에서 16진수로 0x03*256^1+0xE9*256^0이 됩니다.0x03*256^1+0xE9*256은 256이 0승에서 1승까지 사용되었으니, bits의 첫 두 자리는 02에 됩니다. 그리고 03E9가격에 6자리로 채워야 하니까 03E900입니다.1001을 bits와 동일한 형식으로 표현하면 0203E900그래서는 조금 전에 말한 공식에 똑같이 넣어 보겠습니다.03E900=>25625602=>2256256*2^(8*(2-3)=1001부동 소수 점을 어떻게 표현하는가와 프로그래밍에서 비트 시프트를 어떻게 하는지 이해하고 보면 더 쉽게 이해할 수 있을 것입니다.일단 256을 베이스로 표현했습니다.3*256^1+233*256^0,6자리 맞춘다고 03E900로, 이는 3256^2+233256^1+0*256^0이 되었습니다. 우리는 원래 2라는 것을 알고 있었기 때문에 하나쯤 간것을 알고 있습니다. 그래서 2^(8*(2-3))즉 256으로 나누면 다시 3*256^1+233*256^0이 됩니다.2.SHA256(SHA256(headermessage).digest()digest()왜 2번 해시를 하는가.저도 이 부분에 대해서 고민하지 않고 bitcoin에서 그렇게 사용할 줄만 알았습니다. 이렇게 두번 해시해서 있는 것이 SHA256D라고 불리고, 보안 공격으로부터 보다 안전과 SHA256D가 사용된다고 합니다. SHA256D가 비트 &#53076
;인으로 블록을 해시해는데 어떻게 장점이 있는지에 대해서 더 공부를 해야지 알게 된답니다.

참조 s://steemit.com/kr/@jayground8/2gjn9v씨 문장 팜 blockchain.===============================================================================================================coinvest.kr/

>

■://bitgate.co.kr

.
손수현 분노, 낙태죄 유지? 놀리나, 낙태죄 폐지해 배우 손수현이 현행 낙태죄 유지에 분노했다. 나를 사랑한 스파이 문정혁X유인나X임주환, 세상 달콤한 트릭 3차 티저 문정혁, 유인나, 임주환의 달콤한 트릭이 시작된다. tvN 유 퀴즈 온 더 블럭에서 금손 특집을 선보인다. 위클리 13일 컴백 하이라이트 메들리 공개 오는 13일 컴백을 앞둔 걸그룹 위클리(Weeekly)가 타이틀곡 포함 새 앨범 음원 일부를 공개해 화제를 모으고 있다. 펜트하우스 2차 티저 순옥킴의 본격적인 서스펜스 복수극 SBS 펜트하우스가 숨 쉴 틈 없이 몰아치는, 강렬함이 남다른 2차 티저를 공개했다.