예제 #1
0
def test_block_parser():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)

    assert bitcoin_block.magic_number == 3652501241
    assert bitcoin_block.tx_counter == 1031
예제 #2
0
def test_block_transactions_could_be_limited():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)

    assert len(bitcoin_block.txs) == 5

    bitcoin_block = Block().parse_from_binary(binary_data, 1)

    assert len(bitcoin_block.txs) == 1
예제 #3
0
def test_block_transactions_parser():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)

    coinbase = bitcoin_block.txs[0]

    assert coinbase.version_no == 1
    assert coinbase.in_counter == 1
    assert coinbase.out_counter == 1
    assert coinbase.inputs[
        0].previous_tx_hash == '0000000000000000000000000000000000000000000000000000000000000000'  #coinbase
예제 #4
0
def test_block_header_parser():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)
    block_header = bitcoin_block.block_header

    assert block_header.version == 2
    assert block_header.hash_previous_block == '00000000000000000a3ed9a4e25407518aa854f09fa1981adaae9455a91d1966'
    assert block_header.hash_merkle_root == '9b7d5896398581a7ff26be4b3684ddd95a7c1dc1aab1df37cbb2127379ae8584'
    assert block_header.time == 1432723472
    assert block_header.bits == 404129525
    assert block_header.nonce == 226994584
예제 #5
0
def test_block_inputs_scriptSig():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)

    tx = bitcoin_block.txs[1]
    inputs = tx.inputs
    outputs = tx.outputs

    assert inputs[
        0].script_sig == '304402207b9e4d1c1e126f47db3d74f981b8ee9c124f44a92637a657dc94cd4b05216a9a022014fe5df34c6e2c3b1bb1de3f69097873e220b97c0beefd29cc714abeb8180c8801 030e1e08f6d4ba2b71207c961109f9d0b7eaad24b106ecc9b691c297c732d47fcc'
    assert outputs[
        1].script_pubkey == 'OP_DUP OP_HASH160 d6bbf4f08d2df7ea32b2930ae4b7436d4ca6fe4b OP_EQUALVERIFY OP_CHECKSIG'
예제 #6
0
def test_block_transaction_inputs_and_outputs():
    binary_data = read(
        'tests/fixtures/000000000000000001f942eb4bfa0aeccb6a14c268f4c72d5fff17270da771b9.bin'
    )
    bitcoin_block = Block().parse_from_binary(binary_data)

    tx = bitcoin_block.txs[1]
    inputs = tx.inputs
    outputs = tx.outputs

    assert inputs[
        0].previous_tx_hash == 'a59238577c596d2caa367c0855a76a75efcde6953186507fa51ee2dff3eb8b41'
    assert inputs[0].index == 1

    assert outputs[0].value == 10000000000
    assert outputs[1].value == 10000000000
예제 #7
0
def main():
    from docopt import docopt
    arguments = docopt(__doc__, version=__version__)
    block_hash = arguments['<block_hash>'] 
    if block_hash is not None:
        url = 'https://webbtc.com/block/{}.bin'.format(block_hash)
        target_file = '{}.bin'.format(block_hash)
        response = requests.get(url, stream=True)
        handle = open(target_file, "wb")
        for chunk in response.iter_content(chunk_size=512):
            if chunk:  # filter out keep-alive new chunks
                handle.write(chunk)

        handle.close()
                
        bitcoin_block = Block().parse_from_binary(read(target_file))
        print(bitcoin_block)