You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
litecoin/test/functional/mweb_mining.py

64 lines
2.2 KiB

#!/usr/bin/env python3
# Copyright (c) 2014-2020 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test mining RPCs for MWEB blocks"""
from test_framework.blocktools import (create_coinbase, NORMAL_GBT_REQUEST_PARAMS)
from test_framework.messages import (CBlock, MWEBBlock)
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal
from test_framework.ltc_util import create_hogex, get_mweb_header_tip, setup_mweb_chain
class MWEBMiningTest(BitcoinTestFramework):
def set_test_params(self):
self.num_nodes = 2
self.setup_clean_chain = True
self.supports_cli = False
def run_test(self):
node = self.nodes[0]
self.log.info("Setup MWEB chain")
setup_mweb_chain(node)
# Call getblocktemplate
node.generatetoaddress(1, node.get_deterministic_priv_key().address)
gbt = node.getblocktemplate(NORMAL_GBT_REQUEST_PARAMS)
next_height = int(gbt["height"])
# Build MWEB block
mweb_header = get_mweb_header_tip(node)
mweb_header.height = next_height
mweb_header.rehash()
mweb_block = MWEBBlock(mweb_header)
# Build coinbase and HogEx txs
coinbase_tx = create_coinbase(height=next_height)
hogex_tx = create_hogex(node, mweb_header.hash)
vtx = [coinbase_tx, hogex_tx]
# Build block proposal
block = CBlock()
block.nVersion = gbt["version"]
block.hashPrevBlock = int(gbt["previousblockhash"], 16)
block.nTime = gbt["curtime"]
block.nBits = int(gbt["bits"], 16)
block.nNonce = 0
block.vtx = vtx
block.mweb_block = mweb_block.serialize().hex()
block.hashMerkleRoot = block.calc_merkle_root()
# Call getblocktemplate with the block proposal
self.log.info("getblocktemplate: Test valid block")
rsp = node.getblocktemplate(template_request={
'data': block.serialize().hex(),
'mode': 'proposal',
'rules': ['mweb', 'segwit'],
})
assert_equal(rsp, None)
if __name__ == '__main__':
MWEBMiningTest().main()