2014-10-21 3 views
2

저는 비트 코인과 비슷한 단순한 암호 해독을 구현하려고합니다. 단지 코드 수준까지 깊이 이해하는 것입니다.비트 코인 블록이 항상 해결 가능함을 어떻게 증명할 수 있습니까?

비트 코인 블록에는 이전 블록의 해시, 많은 트랜잭션 및 해결사에 대한 보상 거래가 포함되어 있음을 이해합니다.

기본적으로 광부는이 후보 블록에서 난수와 결합 된 SHA256을 실행합니다. 해시 결과의 첫 번째 특정 자릿수가 0 인 한이 블록이 해결되었다고 말하면서 결과를 전체 네트워크에 브로드 캐스팅하여 보상을 청구합니다.

그러나 블록을 풀 수 있다는 것을 증명 한 사람은 본 적이 없습니다. SHA256에 의해 보장되는 것 같아요? 솔루션 크기가 고정되어 있기 때문에 충분한 입력을 시도한 후에는 모든 해시 결과를 얻을 수 있습니다. 하지만 블록의 솔루션 배포가 균일하다는 것을 어떻게 증명할 수 있습니까? 그래서 모든 해시 결과를 실제로 커버 할 수 있습니까?

지금은 블록이 실제로 항상 해결할 수 있다고 가정합니다. 64 비트를 사용하면 임의의 정수로 해결할 수 있다고 생각합니까? 32 비트는 어때? 또는 무한 비트 정수를 사용해야합니까? basiccoin 프로젝트 예

:

작업 증명에 대한 코드는 다음이 코드는 시작 지점 사이의 값 [0 10000000000000000000000000000000000000000]를 불규칙적

def POW(block, hashes): 
    halfHash = tools.det_hash(block) 
    block[u'nonce'] = random.randint(0, 10000000000000000000000000000000000000000) 
    count = 0 
    while tools.det_hash({u'nonce': block['nonce'], 
          u'halfHash': halfHash}) > block['target']: 
     count += 1 
     block[u'nonce'] += 1 
     if count > hashes: 
      return {'error': False} 
     if restart_signal.is_set(): 
      restart_signal.clear() 
      return {'solution_found': True} 
     ''' for testing sudden loss in hashpower from miners. 
     if block[u'length']>150: 
     else: time.sleep(0.01) 
     ''' 
    return block 

block[u'nonce'] += 1 

내가 파이썬이 정수의 유형을 처리하는 방법을 모르겠어요, 파이썬 프로그래머가 아니에요 : 그것은 단지 하나 값을 증가시킨다. 정수 오버플로 처리가 없습니다.

나는 C++과 비슷한 것을 구현하려고하는데 어떤 종류의 정수가 솔루션을 보장 할 수 있는지 알지 못한다.

+1

나는 당신의 질문을 이해할 수 있는지 모르겠다. 그러나 암호화 해시의 출력 편향은 너무 작아 실제적인 의미에서는 중요하지 않다. 따라서 암호화 해시의 비트가 0 일 확률은 50 %라고 간주 할 수 있습니다. 첫 번째 2 비트가 0이고 첫 번째 3 비트가 0 일 가능성이 12.5 %입니다. "블록"은 그렇지 않습니다. 문제 : 확률은 변하지 않습니다. 64 비트 정수를 사용하는 것에 관해서는 어떻게 작동하는지 볼 수 없습니다. Bitcoin의 난이도를 잘못 쓰지 않으면 64 비트가 모두 0이되어야합니다. – TacticalCoder

+0

답장을 보내 주셔서 감사합니다 . 정수에 관해서는 해시 결과에 대해 묻지 않습니다 (예, 64 비트보다 큽니다).나는 해시 함수 (블록 + 임의의 숫자)의 입력에 대해 이야기하고 있었다. –

+0

이것은 훌륭한 질문입니다. 내가 이해할 때, 당신은 다음과 같이 묻고 있습니다 : "해시가 ≤ 난이도가 될 넌센스가 항상 있다는 것을 증명할 수 있습니까?" – Geremia

답변

0

블록의 솔루션 배포가 균일하다는 것을 어떻게 증명할 수 있습니까? 그렇다면 실제로 모든 해시 결과를 처리 할 수 ​​있습니까?

SHA256은 결정적이므로 txns를 다시 칠하면 항상 동일한 256 해시를 제공합니다. 클라이언트 노드는 네트워크 클라이언트가 모든 가능한 txn과 해시를 머클 나무에 유지하여 가능한 가장 긴 블록 체인을 전파하고 확인합니다.

머클 나무는 ​​이전 블록의 해시를 기록하는 데 필수적인 데이터 구조입니다. 해시 확인 체인을 통해 부터까지 원점 (제네시스) 블록을 추적 할 수 있습니다.