|
|
|
#!/usr/bin/env python3
|
|
|
|
# Copyright (c) 2022 The Bitcoin Core developers
|
|
|
|
# Distributed under the MIT software license, see the accompanying
|
|
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
|
|
from test_framework.util import assert_equal
|
|
|
|
|
|
|
|
|
|
|
|
class WalletLocktimeTest(BitcoinTestFramework):
|
|
|
|
def add_options(self, parser):
|
|
|
|
self.add_wallet_options(parser)
|
|
|
|
|
|
|
|
def set_test_params(self):
|
|
|
|
self.num_nodes = 1
|
|
|
|
|
|
|
|
def skip_test_if_missing_module(self):
|
|
|
|
self.skip_if_no_wallet()
|
|
|
|
|
|
|
|
def run_test(self):
|
|
|
|
node = self.nodes[0]
|
|
|
|
|
|
|
|
mtp_tip = node.getblockheader(node.getbestblockhash())["mediantime"]
|
|
|
|
|
|
|
|
self.log.info("Get new address with label")
|
|
|
|
label = "timelock⌛🔓"
|
|
|
|
address = node.getnewaddress(label=label)
|
|
|
|
|
|
|
|
self.log.info("Send to new address with locktime")
|
|
|
|
node.send(
|
|
|
|
outputs={address: 5},
|
|
|
|
locktime=mtp_tip - 1,
|
|
|
|
)
|
|
|
|
self.generate(node, 1)
|
|
|
|
|
|
|
|
self.log.info("Check that clock cannot change finality of confirmed txs")
|
|
|
|
amount_before_ad = node.getreceivedbyaddress(address)
|
|
|
|
amount_before_lb = node.getreceivedbylabel(label)
|
|
|
|
list_before_ad = node.listreceivedbyaddress(address_filter=address)
|
|
|
|
list_before_lb = node.listreceivedbylabel(include_empty=False)
|
|
|
|
balance_before = node.getbalances()["mine"]["trusted"]
|
|
|
|
coin_before = node.listunspent(maxconf=1)
|
|
|
|
node.setmocktime(mtp_tip - 1)
|
|
|
|
assert_equal(node.getreceivedbyaddress(address), amount_before_ad)
|
|
|
|
assert_equal(node.getreceivedbylabel(label), amount_before_lb)
|
|
|
|
assert_equal(node.listreceivedbyaddress(address_filter=address), list_before_ad)
|
|
|
|
assert_equal(node.listreceivedbylabel(include_empty=False), list_before_lb)
|
|
|
|
assert_equal(node.getbalances()["mine"]["trusted"], balance_before)
|
|
|
|
assert_equal(node.listunspent(maxconf=1), coin_before)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
WalletLocktimeTest(__file__).main()
|