|
@ -698,3 +698,44 @@ def test_fundchannel_listtransaction(node_factory, bitcoind): |
|
|
|
|
|
|
|
|
tx = [t for t in txs if t['hash'] == txid][0] |
|
|
tx = [t for t in txs if t['hash'] == txid][0] |
|
|
assert tx['blockheight'] == 0 |
|
|
assert tx['blockheight'] == 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_withdraw_nlocktime(node_factory): |
|
|
|
|
|
""" |
|
|
|
|
|
Test that we don't set the nLockTime to 0 for withdrawal transactions. |
|
|
|
|
|
""" |
|
|
|
|
|
l1 = node_factory.get_node(1) |
|
|
|
|
|
l1.fundwallet(10**4) |
|
|
|
|
|
|
|
|
|
|
|
addr = l1.rpc.newaddr()["bech32"] |
|
|
|
|
|
tx = l1.rpc.withdraw(addr, 10**3)["tx"] |
|
|
|
|
|
nlocktime = node_factory.bitcoind.rpc.decoderawtransaction(tx)["locktime"] |
|
|
|
|
|
tip = node_factory.bitcoind.rpc.getblockcount() |
|
|
|
|
|
|
|
|
|
|
|
assert nlocktime > 0 and nlocktime <= tip |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@flaky |
|
|
|
|
|
@unittest.skipIf(VALGRIND, "A big loop is used to check fuzz.") |
|
|
|
|
|
def test_withdraw_nlocktime_fuzz(node_factory, bitcoind): |
|
|
|
|
|
""" |
|
|
|
|
|
Test that we eventually fuzz nLockTime for withdrawal transactions. |
|
|
|
|
|
Marked flaky "just in case" as we fuzz from 0 to 100 with a 10% |
|
|
|
|
|
probability. |
|
|
|
|
|
""" |
|
|
|
|
|
l1 = node_factory.get_node(1) |
|
|
|
|
|
l1.fundwallet(10**8) |
|
|
|
|
|
|
|
|
|
|
|
for i in range(100): |
|
|
|
|
|
addr = l1.rpc.newaddr()["bech32"] |
|
|
|
|
|
withdraw = l1.rpc.withdraw(addr, 10**3) |
|
|
|
|
|
bitcoind.generate_block(1) |
|
|
|
|
|
l1.daemon.wait_for_log('Owning output .* txid {} CONFIRMED'. |
|
|
|
|
|
format(withdraw["txid"])) |
|
|
|
|
|
decoded = bitcoind.rpc.decoderawtransaction(withdraw["tx"]) |
|
|
|
|
|
tip = node_factory.bitcoind.rpc.getblockcount() |
|
|
|
|
|
assert decoded["locktime"] > 0 |
|
|
|
|
|
if decoded["locktime"] < tip: |
|
|
|
|
|
return |
|
|
|
|
|
else: |
|
|
|
|
|
raise Exception("No transaction with fuzzed nLockTime !") |
|
|