QA: blocktools: Accept block template to create_block

This commit is contained in:
Luke Dashjr 2016-01-12 19:44:01 +00:00
parent 4946400470
commit 1df2cd1c8f

View file

@ -4,6 +4,10 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php. # file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Utilities for manipulating blocks and transactions.""" """Utilities for manipulating blocks and transactions."""
from binascii import a2b_hex
import io
import struct
import time
import unittest import unittest
from .address import ( from .address import (
@ -51,19 +55,31 @@ TIME_GENESIS_BLOCK = 1296688602
# From BIP141 # From BIP141
WITNESS_COMMITMENT_HEADER = b"\xaa\x21\xa9\xed" WITNESS_COMMITMENT_HEADER = b"\xaa\x21\xa9\xed"
NORMAL_GBT_REQUEST_PARAMS = {"rules": ["segwit"]}
def create_block(hashprev, coinbase, ntime=None, *, version=1):
def create_block(hashprev=None, coinbase=None, ntime=None, *, version=None, tmpl=None, txlist=None):
"""Create a block (with regtest difficulty).""" """Create a block (with regtest difficulty)."""
block = CBlock() block = CBlock()
block.nVersion = version if tmpl is None:
if ntime is None: tmpl = {}
import time block.nVersion = version or tmpl.get('version') or 1
block.nTime = int(time.time() + 600) block.nTime = ntime or tmpl.get('curtime') or int(time.time() + 600)
block.hashPrevBlock = hashprev or int(tmpl['previousblockhash'], 0x10)
if tmpl and not tmpl.get('bits') is None:
block.nBits = struct.unpack('>I', a2b_hex(tmpl['bits']))[0]
else: else:
block.nTime = ntime block.nBits = 0x207fffff # difficulty retargeting is disabled in REGTEST chainparams
block.hashPrevBlock = hashprev if coinbase is None:
block.nBits = 0x207fffff # difficulty retargeting is disabled in REGTEST chainparams coinbase = create_coinbase(height=tmpl['height'])
block.vtx.append(coinbase) block.vtx.append(coinbase)
if txlist:
for tx in txlist:
if not hasattr(tx, 'calc_sha256'):
txo = CTransaction()
txo.deserialize(io.BytesIO(tx))
tx = txo
block.vtx.append(tx)
block.hashMerkleRoot = block.calc_merkle_root() block.hashMerkleRoot = block.calc_merkle_root()
block.calc_sha256() block.calc_sha256()
return block return block