aboutsummaryrefslogtreecommitdiff
path: root/qa/rpc-tests/test_framework/blocktools.py
diff options
context:
space:
mode:
Diffstat (limited to 'qa/rpc-tests/test_framework/blocktools.py')
-rw-r--r--qa/rpc-tests/test_framework/blocktools.py105
1 files changed, 0 insertions, 105 deletions
diff --git a/qa/rpc-tests/test_framework/blocktools.py b/qa/rpc-tests/test_framework/blocktools.py
deleted file mode 100644
index 2c9a0857df..0000000000
--- a/qa/rpc-tests/test_framework/blocktools.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2015-2016 The Bitcoin Core developers
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-"""Utilities for manipulating blocks and transactions."""
-
-from .mininode import *
-from .script import CScript, OP_TRUE, OP_CHECKSIG, OP_RETURN
-
-# Create a block (with regtest difficulty)
-def create_block(hashprev, coinbase, nTime=None):
- block = CBlock()
- if nTime is None:
- import time
- block.nTime = int(time.time()+600)
- else:
- block.nTime = nTime
- block.hashPrevBlock = hashprev
- block.nBits = 0x207fffff # Will break after a difficulty adjustment...
- block.vtx.append(coinbase)
- block.hashMerkleRoot = block.calc_merkle_root()
- block.calc_sha256()
- return block
-
-# From BIP141
-WITNESS_COMMITMENT_HEADER = b"\xaa\x21\xa9\xed"
-
-# According to BIP141, blocks with witness rules active must commit to the
-# hash of all in-block transactions including witness.
-def add_witness_commitment(block, nonce=0):
- # First calculate the merkle root of the block's
- # transactions, with witnesses.
- witness_nonce = nonce
- witness_root = block.calc_witness_merkle_root()
- witness_commitment = uint256_from_str(hash256(ser_uint256(witness_root)+ser_uint256(witness_nonce)))
- # witness_nonce should go to coinbase witness.
- block.vtx[0].wit.vtxinwit = [CTxInWitness()]
- block.vtx[0].wit.vtxinwit[0].scriptWitness.stack = [ser_uint256(witness_nonce)]
-
- # witness commitment is the last OP_RETURN output in coinbase
- output_data = WITNESS_COMMITMENT_HEADER + ser_uint256(witness_commitment)
- block.vtx[0].vout.append(CTxOut(0, CScript([OP_RETURN, output_data])))
- block.vtx[0].rehash()
- block.hashMerkleRoot = block.calc_merkle_root()
- block.rehash()
-
-
-def serialize_script_num(value):
- r = bytearray(0)
- if value == 0:
- return r
- neg = value < 0
- absvalue = -value if neg else value
- while (absvalue):
- r.append(int(absvalue & 0xff))
- absvalue >>= 8
- if r[-1] & 0x80:
- r.append(0x80 if neg else 0)
- elif neg:
- r[-1] |= 0x80
- return r
-
-# Create a coinbase transaction, assuming no miner fees.
-# If pubkey is passed in, the coinbase output will be a P2PK output;
-# otherwise an anyone-can-spend output.
-def create_coinbase(height, pubkey = None):
- coinbase = CTransaction()
- coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff),
- ser_string(serialize_script_num(height)), 0xffffffff))
- coinbaseoutput = CTxOut()
- coinbaseoutput.nValue = 50 * COIN
- halvings = int(height/150) # regtest
- coinbaseoutput.nValue >>= halvings
- if (pubkey != None):
- coinbaseoutput.scriptPubKey = CScript([pubkey, OP_CHECKSIG])
- else:
- coinbaseoutput.scriptPubKey = CScript([OP_TRUE])
- coinbase.vout = [ coinbaseoutput ]
- coinbase.calc_sha256()
- return coinbase
-
-# Create a transaction.
-# If the scriptPubKey is not specified, make it anyone-can-spend.
-def create_transaction(prevtx, n, sig, value, scriptPubKey=CScript()):
- tx = CTransaction()
- assert(n < len(prevtx.vout))
- tx.vin.append(CTxIn(COutPoint(prevtx.sha256, n), sig, 0xffffffff))
- tx.vout.append(CTxOut(value, scriptPubKey))
- tx.calc_sha256()
- return tx
-
-def get_legacy_sigopcount_block(block, fAccurate=True):
- count = 0
- for tx in block.vtx:
- count += get_legacy_sigopcount_tx(tx, fAccurate)
- return count
-
-def get_legacy_sigopcount_tx(tx, fAccurate=True):
- count = 0
- for i in tx.vout:
- count += i.scriptPubKey.GetSigOpCount(fAccurate)
- for j in tx.vin:
- # scriptSig might be of type bytes, so convert to CScript for the moment
- count += CScript(j.scriptSig).GetSigOpCount(fAccurate)
- return count