mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-26 20:30:59 +01:00
coin moves tests: push_msat and the wallet withdrawal
Check that we account for push_msat and wallet withdrawal/deposits correctly
This commit is contained in:
parent
8c986d67db
commit
1b5221cbf5
2 changed files with 63 additions and 4 deletions
|
@ -6,7 +6,8 @@ from flaky import flaky # noqa: F401
|
||||||
from pyln.client import RpcError, Millisatoshi
|
from pyln.client import RpcError, Millisatoshi
|
||||||
from utils import (
|
from utils import (
|
||||||
DEVELOPER, only_one, wait_for, sync_blockheight, VALGRIND, TIMEOUT,
|
DEVELOPER, only_one, wait_for, sync_blockheight, VALGRIND, TIMEOUT,
|
||||||
SLOW_MACHINE, expected_peer_features, expected_node_features
|
SLOW_MACHINE, expected_peer_features, expected_node_features,
|
||||||
|
check_coin_moves, first_channel_id, account_balance
|
||||||
)
|
)
|
||||||
from bitcoin.core import CMutableTransaction, CMutableTxOut
|
from bitcoin.core import CMutableTransaction, CMutableTxOut
|
||||||
|
|
||||||
|
@ -821,7 +822,10 @@ def test_funding_toolarge(node_factory, bitcoind):
|
||||||
|
|
||||||
def test_funding_push(node_factory, bitcoind):
|
def test_funding_push(node_factory, bitcoind):
|
||||||
""" Try to push peer some sats """
|
""" Try to push peer some sats """
|
||||||
l1 = node_factory.get_node()
|
# We track balances, to verify that accounting is ok.
|
||||||
|
coin_mvt_plugin = os.path.join(os.getcwd(), 'tests/plugins/coin_movements.py')
|
||||||
|
|
||||||
|
l1 = node_factory.get_node(options={'plugin': coin_mvt_plugin})
|
||||||
l2 = node_factory.get_node()
|
l2 = node_factory.get_node()
|
||||||
|
|
||||||
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
|
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
|
||||||
|
@ -842,11 +846,23 @@ def test_funding_push(node_factory, bitcoind):
|
||||||
# This should work.
|
# This should work.
|
||||||
amount = amount - 1
|
amount = amount - 1
|
||||||
l1.rpc.fundchannel(l2.info['id'], amount, push_msat=push_sat * 1000)
|
l1.rpc.fundchannel(l2.info['id'], amount, push_msat=push_sat * 1000)
|
||||||
|
|
||||||
bitcoind.generate_block(1)
|
bitcoind.generate_block(1)
|
||||||
sync_blockheight(bitcoind, [l1])
|
sync_blockheight(bitcoind, [l1])
|
||||||
funds = only_one(l1.rpc.listfunds()['channels'])
|
funds = only_one(l1.rpc.listfunds()['channels'])
|
||||||
assert funds['channel_sat'] + push_sat == funds['channel_total_sat']
|
assert funds['channel_sat'] + push_sat == funds['channel_total_sat']
|
||||||
|
|
||||||
|
l1.daemon.wait_for_log('1 coins')
|
||||||
|
# we have to give the file write a second
|
||||||
|
time.sleep(1)
|
||||||
|
chanid = first_channel_id(l2, l1)
|
||||||
|
channel_mvts = [
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 20000000, 'tag': 'pushed'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 16777215000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
]
|
||||||
|
check_coin_moves(l1, chanid, channel_mvts)
|
||||||
|
assert account_balance(l1, chanid) == (amount - push_sat) * 1000
|
||||||
|
|
||||||
|
|
||||||
def test_funding_by_utxos(node_factory, bitcoind):
|
def test_funding_by_utxos(node_factory, bitcoind):
|
||||||
"""Fund a channel with specific utxos"""
|
"""Fund a channel with specific utxos"""
|
||||||
|
|
|
@ -9,6 +9,9 @@ from pyln.testing.utils import (
|
||||||
DEVELOPER, TIMEOUT, VALGRIND, DEPRECATED_APIS, sync_blockheight, only_one,
|
DEVELOPER, TIMEOUT, VALGRIND, DEPRECATED_APIS, sync_blockheight, only_one,
|
||||||
wait_for, TailableProc, env
|
wait_for, TailableProc, env
|
||||||
)
|
)
|
||||||
|
from utils import (
|
||||||
|
check_coin_moves, account_balance
|
||||||
|
)
|
||||||
from ephemeral_port_reserve import reserve
|
from ephemeral_port_reserve import reserve
|
||||||
from utils import EXPERIMENTAL_FEATURES
|
from utils import EXPERIMENTAL_FEATURES
|
||||||
|
|
||||||
|
@ -472,10 +475,14 @@ def test_bech32_funding(node_factory, chainparams):
|
||||||
assert only_one(fundingtx['vin'])['txid'] == res['wallettxid']
|
assert only_one(fundingtx['vin'])['txid'] == res['wallettxid']
|
||||||
|
|
||||||
|
|
||||||
def test_withdraw(node_factory, bitcoind, chainparams):
|
def test_withdraw_misc(node_factory, bitcoind, chainparams):
|
||||||
|
# We track channel balances, to verify that accounting is ok.
|
||||||
|
coin_mvt_plugin = os.path.join(os.getcwd(), 'tests/plugins/coin_movements.py')
|
||||||
|
|
||||||
amount = 1000000
|
amount = 1000000
|
||||||
# Don't get any funds from previous runs.
|
# Don't get any funds from previous runs.
|
||||||
l1 = node_factory.get_node(random_hsm=True)
|
l1 = node_factory.get_node(random_hsm=True,
|
||||||
|
options={'plugin': coin_mvt_plugin})
|
||||||
l2 = node_factory.get_node(random_hsm=True)
|
l2 = node_factory.get_node(random_hsm=True)
|
||||||
addr = l1.rpc.newaddr()['bech32']
|
addr = l1.rpc.newaddr()['bech32']
|
||||||
|
|
||||||
|
@ -597,6 +604,42 @@ def test_withdraw(node_factory, bitcoind, chainparams):
|
||||||
with pytest.raises(RpcError, match=r'Cannot afford transaction'):
|
with pytest.raises(RpcError, match=r'Cannot afford transaction'):
|
||||||
l1.rpc.withdraw(waddr, 'all')
|
l1.rpc.withdraw(waddr, 'all')
|
||||||
|
|
||||||
|
assert account_balance(l1, 'wallet') == 0
|
||||||
|
wallet_moves = [
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 1993730000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 6270000, 'tag': 'chain_fees'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 1993730000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 1993730000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 6270000, 'tag': 'chain_fees'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 1993730000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 1993730000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 6270000, 'tag': 'chain_fees'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 1993730000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 1993370000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 6630000, 'tag': 'chain_fees'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 1993370000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 11961030000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 13530000, 'tag': 'chain_fees'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 11961030000, 'debit': 0, 'tag': 'deposit'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 11957378000, 'tag': 'withdrawal'},
|
||||||
|
{'type': 'chain_mvt', 'credit': 0, 'debit': 3652000, 'tag': 'chain_fees'},
|
||||||
|
]
|
||||||
|
check_coin_moves(l1, 'wallet', wallet_moves)
|
||||||
|
|
||||||
|
|
||||||
def test_minconf_withdraw(node_factory, bitcoind):
|
def test_minconf_withdraw(node_factory, bitcoind):
|
||||||
"""Issue 2518: ensure that ridiculous confirmation levels don't overflow
|
"""Issue 2518: ensure that ridiculous confirmation levels don't overflow
|
||||||
|
|
Loading…
Add table
Reference in a new issue