프로그래머의 관점에서 본 비트 코인 채굴 알고리즘 '

이 페이지 : Blocks 는 채굴이 실제로 수학적 문제를 해결하기위한 것이라고 말했지만 블록 해싱 알고리즘 을 읽는 것은 별 도움이되지 않습니다. 비트 코인 소스 코드를 읽지 만 문서를 읽는 것보다 코드를 읽는 데 훨씬 더 많은 시간이 걸립니다.)

그리고 “데이터”를 가져 오기 위해 getwork () 메서드를 호출하는 간단한 json-rpc 클라이언트를 작성했습니다. 이 “데이터”옆에서할까요?

누구나 프로그래머의 관점에서 마이닝 프로세스를 설명 할 수 있습니까?

댓글

  • but what should I do next to this "data"? 여기 ' 간단한 참조 구현입니다. github.com/jgarzik/pyminer/blob/master/pyminer.py
  • 또한 explain the mining process in programmer's view는 매우 광범위한 질문입니다. 해결하려는 특정 문제는 무엇입니까?
  • @NickODell 코드 감사합니다! 이제 새 블록을 만드는 방법을 이해했습니다. 그러나 제출 된 각 블록이 유효한가요 (비트 코인 네트워크가이 사람에게 비트 코인을 보냅니다)? 비트 코인 위키가 매시간 6 개의 블록 만 생성된다는 것을 발견했습니다. 100 명이 getwork를 사용하여 동일한 난이도로 동시에 블록 헤더를 얻는다고 가정하면,이 사람들이 6 개 이상의 블록을 생성 할 것이라고 생각합니다. 제가 맞나요?
  • 순서대로 대답 : 아니요. 아니요.
  • getwork API를 파악할 수 없습니다.

답변

채굴 알고리즘은 다음과 같습니다.

  • 0 단계-네트워크에서 이전 블록의 해시를 검색합니다.

  • 1 단계- “블록”으로 알려진 잠재적 거래 목록을 수집합니다. 이 거래 목록은 P2P 비트 코인 네트워크에서 가져온 것입니다.

  • 2 단계-임의의 숫자와 함께 잠재적 거래 블록에 대한 해시를 계산합니다.
  • 3 단계-해시가 현재 설정된 난이도 이상이면 해당 블록을 채굴 한 것입니다. 그렇지 않은 경우 1 단계부터 다시 시작합니다. 1 단계의 트랜잭션 목록에 추가 된 사항과 2 단계의 난수 변경은 “다음 번에 기준이 충족 될 가능성이 있음을 의미합니다.

프로그래머의 관점에서 의사 코드는 다음과 같을 수 있습니다.

 P := The hash of the previously mined block B := A block of transactions H := A hash function D := Difficulty Level 0 Retreive P 1 Construct/Modify B 2 IF H(P, B, Some Random Number) > D END 3 GOTO 1 

그 설명에 약간의 부정확성이 있지만 대부분의 경우 충분할 것입니다. 다음은 몇 가지 유용한 설명입니다.

What “sa hash?

해시는 데이터를 특정 범위 내의 숫자로 변환하는 함수입니다. 해시는 출력이 본질적으로 (주어진 범위 내에서) 예측할 수 없다는 것을 아는 속성을 가지고 있습니다. 비트 코인 채굴에 사용되는 특정 해시 함수는 SHA256이 두 번 적용됩니다.

난이도는 어떻게 작동하나요?

해시 함수의 이러한 예측할 수없는 특성은 임의의 데이터 (트랜잭션 + 난수)를 입력하면 본질적으로 특정 범위 내에서 임의의 숫자가 생성된다는 것을 의미합니다. 원하는 출력의 범위를 추가로 제한하면 단일 라운드에서 찾을 가능성에 영향을줍니다. 이를 통해 알고리즘이 네트워크에서 실행될 수있는 횟수를 기반으로 솔루션이 발견되는 빈도를 확률 적으로 결정할 수 있습니다. 특히 “gigahashes”또는 “terahashes”라는 용어를들을 때 이것은 3 단계를 실행할 수있는 횟수를 나타냅니다. 전체 네트워크에서 초당 해시 수가 증가함에 따라 네트워크는 자동으로 난이도를 높여 약 10 분 이내에 솔루션을 찾을 수 있습니다.

블록이 채굴되면 어떻게 되나요?

블록이 채굴 될 때 채굴자는 블록을 네트워크의 다른 모든 채굴 자에게 블록을 가지고 있다는 증거로 보냅니다. 그것을 발견. 이 블록에는 트랜잭션 목록, 발견 된 해시, 특정 난수 및 이전 해시에 대한 참조가 포함됩니다. 각 채굴자가 새로 채굴 된 블록을 받으면 현재 채굴중인 모든 트랜잭션 (블록 체인에서 이미 확인 되었기 때문에)을 제거하고 동일한 작업을 수행하는 다른 채굴 자에게 블록을 브로드 캐스트합니다. 전파는 매우 빠르게 이루어집니다.

참고 : 블록의 원래 채굴자는 “채굴 자”수수료를받습니다. 이는 “코인베이스”보상과 더불어 거래에서 사용하지 않은 코인으로 구성된 보상입니다. 코인베이스 보상은 50 비트 코인에서 시작하여 210,000 블록마다 (약 4 년에 한 번) 반으로 나뉩니다. 코인베이스 보상은 결국 채굴 자의 수수료에 비해 너무 작아 질 것입니다.

댓글

  • 보상은 210000 블록마다 반으로 줄어 듭니다. .-> 방금보고 깔끔하다고 생각하세요 : bitcoinclock.com
  • 오 , 난이도는 네트워크가 지난 2016 년 블록의 평균 해시 속도로 계속 작동 할 것이라고 가정하고이 해시 속도가 약 10 분 블록주기가되도록 새로운 난이도를 설정하여 2016 년 블록마다 조정됩니다.
  • 내가 틀릴 수도 있지만 블록에 마지막 블록의 해시도 포함되어 있다고 생각합니다. 그리고 이것이 블록이 거꾸로 연결되어 블록 체인이라는 용어로 이어집니다.
  • @Murch, 난이도는 실제로 이전 블록을 찾는 데 걸린 시간에 따라 모든 블록이 조정됩니다. 어려움은 올라갈 수 있습니다. 2016 년 블록마다 난이도는 마지막 2016 년 블록을 기준으로 조정되며 올라가거나 내려갈 수 있습니다. 이렇게하면 갑작스러운 컴퓨팅 성능 저하를 방지하는 데 도움이되며, 그렇지 않으면 블록을 찾는 데 걸리는 시간이 10 분 이상으로 늘어납니다.
  • @ Tarandeep-Gill, that ' 맞습니다! 이전 블록의 해시는 트랜잭션 목록과 함께 해시됩니다. 이것은 실제로 해싱에 대한 설명이 약간 불완전하다고 생각하게 만듭니다. 특정 해시 기능은 명시된대로 SHA256이 두 번 적용되는 것이 아니라 블록의 다양한 부분 (거래 및 이전 블록의 해시 포함)에 적용된 해당 기능입니다. 다른 방법으로. 이것은 제가 경고 한 " 부정확 한 " 중 하나입니다. 다른 사람을 찾을 수 있을지 궁금합니다 …

답변

“퍼즐”풀기의 목적 (a) 블록 채굴을 평균 10 분으로 지연시키고 (b) 블록 채굴에 대한 실제 비용을 발생시키는 것입니다 (CPU 전력, 따라서 에너지 소비). 비용은 Sybil 공격을 방지하기 위해 존재합니다 (51 % 공격을 수행하기 위해 많은 채굴 기 작업을 수행).

좋은 블록이 전 세계 모든 채굴 자에게 전파 될 수 있도록 지연이 발생합니다. , 방금 새 블록을 발행 한 채굴 자에게 유리한 이점을주지 않고. 이를 위해 차단 시간 (10 분)은 전파 지연 (몇 초)보다 10 배 더 커야합니다.

따라서 퍼즐의 종류 는 어떤 의미에서는 무관하며 거대한 스도쿠 일 수도 있습니다.

답변

모든 해시는 유효한 해시입니다. 질문은 “해시가 우리의 기준을 충족하는지 여부입니다. 해시하는 것은 실제로 함께 정렬 된 몇 가지 (이것으로 다시 돌아올 것입니다)”가 특정 길이의 문자열을 만드는 것입니다. 그런 다음 전체 문자열을 해시합니다. 결과 해시를 숫자로 생각하십시오. 우리가 원하는 것은 결과 숫자가 목표 숫자보다 작아야한다는 것입니다. 따라서 10 억면의 주사위를 굴려서 목표 숫자보다 낮은 숫자를 찾는 것과 같습니다.이 목표 숫자는 “난이도”로 간주됩니다. 더 많은 사람들이 주사위를 굴릴수록 우리는 그 목표 숫자를 낮추어 가능성을 줄입니다. 하나의 주사위 굴림이 맞을 것입니다.

매우 중요한 것은 우리가 해시 한 문자열에 정렬 된 것 중 일부는 조정할 수있는 것입니다. 해싱은 “동일한 결과를 반복해서 얻을 수 있기 때문에 주사위를 굴리는 것과 똑같지 않습니다.하지만 해시를 조금만 조정해도 결과 해시가 무엇인지에 큰 영향을 미칠 수 있습니다.” 조작 할 수있는 기본 항목을 “nonce”라고합니다. 기본적으로 문자열에서 사용할 nonce를 선택하고 전체 문자열을 해시하고 결과를 확인합니다. 해시가 맞지 않으면 nonce를 수정하고 다시 시도합니다. . 임시 값 자체는 “그다지 크지 않으므로”시도 할 수있는 임시 값의 변형 수가 제한되어 있습니다. 다음으로 변경할 수있는 항목은 타임 스탬프입니다. 타임 스탬프도 흔들릴 수 있습니다. 타임 스탬프를 흔들 때마다 가능한 nonce 값의 전체 집합을 다시 확인할 수 있습니다.이 과정을 반복하여 nonce 가능성을 소진 한 다음 결과 해시까지 타임 스탬프를 계속 흔들어줍니다. 난이도 목표 숫자보다 낮습니다.

그런 다음이 타임 스탬프와이 임시 값이 블록을 해결하는 데 작동한다고 세상에 선포합니다. 다른 사람들은 그것이 사실인지 확인하고 블록 체인. 블록은 블록 체인에 “깊이”있는 특정 수의 블록이되면 “검증 된”것으로 간주됩니다. 즉, 현재 블록과 비교 한 과거 블록입니다. 검증은 블록이 이미 유효한 것으로 알려진 것이 아니기 때문에 여기서 약간 잘못된 이름입니다. 우리가 검증하는 것은 작업 증명입니다. 즉, 일단 그 역사적 블록이 충분히 멀리 묻혀 있으면 그 역사를 생성하는 데 필요한 노력의 양은 다른 사람이 역사의 다른 변형을 생성하려고 시도하는 것을 극복 할 수 없습니다. 해당 블록의 자신의 버전 (자신의 트랜잭션 버전을 작성해야하는 유일한 이유, 즉코인을 훔친다) 그런 다음 스스로 해결하고 다음 블록과 다음 블록을 풀고 다른 사람들과 “추격”합니다. 이것은 그들이 주사위 굴리기 게임에서 세계를 이겨야 함을 의미합니다. 우주 역사상 한 번 누군가가 논스에서 2 ~ 3 개의 블록을 연속적으로 가지고 운이 좋을 수도 있지만, 지금 대부분의 채굴 풀과 거래소에 필요한 120 개의 블록을 가지고 있습니까? 결코 일어나지 않을 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다