Last active
September 21, 2022 21:28
-
-
Save bernardoaraujor/933f514f9215fdbf3a4486f700c22e22 to your computer and use it in GitHub Desktop.
vinteum_test.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from test_framework.blocktools import create_coinbase | |
from test_framework.test_framework import BitcoinTestFramework | |
from test_framework.util import assert_equal | |
from test_framework.messages import CBlock | |
from test_framework.blocktools import NORMAL_GBT_REQUEST_PARAMS | |
def assert_template(node, block, expect, rehash=True): | |
if rehash: | |
block.hashMerkleRoot = block.calc_merkle_root() | |
rsp = node.getblocktemplate(template_request={ | |
'data': block.serialize().hex(), | |
'mode': 'proposal', | |
'rules': ['segwit'], | |
}) | |
assert_equal(rsp, expect) | |
class VinteumTest(BitcoinTestFramework): | |
def set_test_params(self): | |
self.setup_clean_chain = True | |
self.num_nodes = 3 | |
def run_test(self): | |
node_a = self.nodes[0] | |
node_b = self.nodes[1] | |
# create block | |
self.generatetoaddress(node_a, 1, node_a.get_deterministic_priv_key().address) | |
tmpl = node_a.getblocktemplate(NORMAL_GBT_REQUEST_PARAMS) | |
assert 'proposal' in tmpl['capabilities'] | |
assert 'coinbasetxn' not in tmpl | |
next_height = int(tmpl["height"]) | |
coinbase_tx = create_coinbase(height=next_height) | |
coinbase_tx.vin[0].nSequence = 2 ** 32 - 2 | |
coinbase_tx.rehash() | |
block = CBlock() | |
block.nVersion = tmpl["version"] | |
block.hashPrevBlock = int(tmpl["previousblockhash"], 16) | |
block.nTime = tmpl["curtime"] | |
block.nBits = int(tmpl["bits"], 16) | |
block.nNonce = 0 | |
block.vtx = [coinbase_tx] | |
self.log.info("getblocktemplate: Test valid block") | |
assert_template(node_a, block, None) | |
# mine block | |
block.solve() | |
self.log.info("node_a submits mined block") | |
assert_equal(node_a.submitblock(hexdata=block.serialize().hex()), None) | |
self.log.info("Wait for node_b to receive block from node_a") | |
self.sync_all() | |
self.log.info("Check node_b received block from node_a") | |
assert_equal(node_b.getblockcount(), next_height) | |
assert_equal(node_b.getbestblockhash(), block.hash) | |
if __name__ == '__main__': | |
VinteumTest().main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment