Ejemplo n.º 1
0
    def test_retargetting(self):
        z = '0000000000000000000000000000000000000000000000000000000000000000'
        first = {
            'version': 4,
            'prev_block_hash': z,
            'merkle_root': z,
            'timestamp': 1269211443,
            'bits': 0x18015ddc,
            'nonce': 0,
            'block_height': 0
        }
        blocks = [first]
        chunk_bytes = bytes.fromhex(bc.serialize_header(first))
        for n in range(1, 1000):
            block = get_block(blocks[-1], 600, first['bits'])
            blocks.append(block)
            chunk_bytes += bytes.fromhex(bc.serialize_header(block))

        chain = MyBlockchain()

        # Get blocks every 2hrs now.  Heights 1000 ... 1010 inclusive
        for n in range(11):
            block = get_block(blocks[-1], 2 * 3600, first['bits'])
            blocks.append(block)
            chunk_bytes += bytes.fromhex(bc.serialize_header(block))
            chunk = bc.HeaderChunk(0, chunk_bytes)
            self.assertEqual(chain.get_bits(block, chunk), first['bits'])

        # Now we expect difficulty to decrease
        # MTP(1010) is TimeStamp(1005), MTP(1004) is TimeStamp(999)
        hdr = {'block_height': block['block_height'] + 1}
        self.assertEqual(chain.get_bits(hdr, chunk), 0x1801b553)
Ejemplo n.º 2
0
    def test_validate_solution(self):
        header = {
            'merkle_root':
            'a0c38df01cd66ccd636c2917472002b90f40c69f177585793167c7c96cc00aea',
            'bits':
            0x207fffff,
            'block_height':
            24156,
            'version':
            536870912,
            'timestamp':
            1520027553,
            'reserved':
            '00000000000000000000000000000000000000000000000000000000',
            'solution':
            '269125e395b85db52eafd3b401615665ab0407b725253552073a1b6eefe092c20d02250024',
            'nonce':
            '0000b0e08b5b13938bcda848f480619e320ceeee9175aef1630e2a6a78f30005',
            'prev_block_hash':
            '42e56ff42ad233fa1444b4fbb23ea69e85a196ad4e4017292563ecef6561d59b'
        }

        n = 48
        k = 5

        header_bytes = bytes.fromhex(serialize_header(header, 24156))
        nonce = uint256_from_bytes(bfh(header.get('nonce'))[::-1])
        solution = bfh(header.get('solution'))[::-1]
        offset, length = var_int_read(solution, 0)
        solution = solution[offset:]

        self.assertTrue(is_gbp_valid(header_bytes, nonce, solution, n, k))
Ejemplo n.º 3
0
 def test_scrypt(self):
     #0200000011f1fe21e0b66dc214be46366465cb95d29830e31ddd225a11349a836a993bf7b5db36b3e5593d039779bff204d132b65ee029a2e499ebeb5a4b19cbe862eee2b623cc5276676c1c000e1c60
     header = {
         'block_height': 12095,
         'nonce': 1612451328,
         'timestamp': 1389110198,
         'version': 2,
         'prev_block_hash':
         'f73b996a839a34115a22dd1de33098d295cb65643646be14c26db6e021fef111',
         'merkle_root':
         'e2ee62e8cb194b5aebeb99e4a229e05eb632d104f2bf7997033d59e5b336dbb5',
         'bits': 476866422
     }
     powhash = rev_hex(bh2u(scryptGetHash(bfh(serialize_header(header)))))
     self.assertEqual(
         powhash,
         '00000000335c88172421df73a1c1f22f4d7c23d8ef34c78d728c4eff3ba24a34')