def METHOD_NAME(self):
    self.nodes[0].add_p2p_connection(P2PInterface())
    self.log.info("Mining %d blocks", CLTV_HEIGHT - 2)
    self.coinbase_txids = [
        self.nodes[0].getblock(b)["tx"][0]
        for b in self.nodes[0].generate(CLTV_HEIGHT - 2)
    ]
    self.nodeaddress = self.nodes[0].getnewaddress()
    self.log.info(
        "Test that an invalid-according-to-CLTV transaction can still appear in a block"
    )
    spendtx = create_transaction(
        self.nodes[0], self.coinbase_txids[0], self.nodeaddress, amount=1.0
    )
    cltv_invalidate(spendtx)
    spendtx.rehash()
    tip = self.nodes[0].getbestblockhash()
    block_time = self.nodes[0].getblockheader(tip)["mediantime"] + 1
    block = create_block(int(tip, 16), create_coinbase(CLTV_HEIGHT - 1), block_time)
    block.nVersion = 3
    block.vtx.append(spendtx)
    block.hashMerkleRoot = block.calc_merkle_root()
    block.solve()
    self.nodes[0].p2p.send_and_ping(msg_block(block))
    assert_equal(self.nodes[0].getbestblockhash(), block.hash)
    self.log.info("Test that blocks must now be at least version 4")
    tip = block.sha256
    block_time += 1
    block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time)
    block.nVersion = 3
    block.solve()
    with self.nodes[0].assert_debug_log(
        expected_msgs=["{}, bad-version(0x00000003)".format(block.hash)]
    ):
        self.nodes[0].p2p.send_and_ping(msg_block(block))
        assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
        self.nodes[0].p2p.sync_with_ping()
    self.log.info(
        "Test that invalid-according-to-cltv transactions cannot appear in a block"
    )
    block.nVersion = 4
    spendtx = create_transaction(
        self.nodes[0], self.coinbase_txids[1], self.nodeaddress, amount=1.0
    )
    cltv_invalidate(spendtx)
    spendtx.rehash()
    # First we show that this tx is valid except for CLTV by getting it
    # rejected from the mempool for exactly that reason.
    assert_equal(
        [
            {
                "txid": spendtx.hash,
                "allowed": False,
                "reject-reason": "64: non-mandatory-script-verify-flag (Negative locktime)",
            }
        ],
        self.nodes[0].testmempoolaccept(
            rawtxs=[spendtx.serialize().hex()], maxfeerate=0
        ),
    )
    # Now we verify that a block with this transaction is also invalid.
    block.vtx.append(spendtx)
    block.hashMerkleRoot = block.calc_merkle_root()
    block.solve()
    with self.nodes[0].assert_debug_log(
        expected_msgs=[
            "CheckInputs on {} failed with non-mandatory-script-verify-flag (Negative locktime)".format(
                block.vtx[-1].hash
            )
        ]
    ):
        self.nodes[0].p2p.send_and_ping(msg_block(block))
        assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
        self.nodes[0].p2p.sync_with_ping()
    self.log.info(
        "Test that a version 4 block with a valid-according-to-CLTV transaction is accepted"
    )
    spendtx = cltv_validate(self.nodes[0], spendtx, CLTV_HEIGHT - 1)
    spendtx.rehash()
    block.vtx.pop(1)
    block.vtx.append(spendtx)
    block.hashMerkleRoot = block.calc_merkle_root()
    block.solve()
    self.nodes[0].p2p.send_and_ping(msg_block(block))
    assert_equal(int(self.nodes[0].getbestblockhash(), 16), block.sha256)