저는 비트 코인과 비슷한 단순한 암호 해독을 구현하려고합니다. 단지 코드 수준까지 깊이 이해하는 것입니다.비트 코인 블록이 항상 해결 가능함을 어떻게 증명할 수 있습니까?
비트 코인 블록에는 이전 블록의 해시, 많은 트랜잭션 및 해결사에 대한 보상 거래가 포함되어 있음을 이해합니다.
기본적으로 광부는이 후보 블록에서 난수와 결합 된 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++과 비슷한 것을 구현하려고하는데 어떤 종류의 정수가 솔루션을 보장 할 수 있는지 알지 못한다.
나는 당신의 질문을 이해할 수 있는지 모르겠다. 그러나 암호화 해시의 출력 편향은 너무 작아 실제적인 의미에서는 중요하지 않다. 따라서 암호화 해시의 비트가 0 일 확률은 50 %라고 간주 할 수 있습니다. 첫 번째 2 비트가 0이고 첫 번째 3 비트가 0 일 가능성이 12.5 %입니다. "블록"은 그렇지 않습니다. 문제 : 확률은 변하지 않습니다. 64 비트 정수를 사용하는 것에 관해서는 어떻게 작동하는지 볼 수 없습니다. Bitcoin의 난이도를 잘못 쓰지 않으면 64 비트가 모두 0이되어야합니다. – TacticalCoder
답장을 보내 주셔서 감사합니다 . 정수에 관해서는 해시 결과에 대해 묻지 않습니다 (예, 64 비트보다 큽니다).나는 해시 함수 (블록 + 임의의 숫자)의 입력에 대해 이야기하고 있었다. –
이것은 훌륭한 질문입니다. 내가 이해할 때, 당신은 다음과 같이 묻고 있습니다 : "해시가 ≤ 난이도가 될 넌센스가 항상 있다는 것을 증명할 수 있습니까?" – Geremia