Skip to content

Commit

Permalink
mfc: blackbox test for commitment vs funding tx feerates
Browse files Browse the repository at this point in the history
Liquid is excluded because the mempool entry doesn't contain a 'weight'
field.
  • Loading branch information
niftynei committed Oct 20, 2020
1 parent 012cf55 commit a45b7a2
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions tests/test_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -1366,6 +1366,61 @@ def test_multifunding_wumbo(node_factory):
l1.rpc.multifundchannel(destinations)


@unittest.skipIf(TEST_NETWORK == 'liquid-regtest', "Fees on elements are different")
@unittest.skipIf(not DEVELOPER, "uses dev-fail")
def test_multifunding_feerates(node_factory, bitcoind):
'''
Test feerate parameters for multifundchannel
'''
funding_tx_feerate = '10000perkw'
commitment_tx_feerate = '2000perkw'

l1, l2, l3 = node_factory.get_nodes(3, opts={'log-level': 'debug'})

l1.fundwallet(1 << 26)

def _connect_str(node):
return '{}@localhost:{}'.format(node.info['id'], node.port)

destinations = [{"id": _connect_str(l2), 'amount': 50000}]

res = l1.rpc.multifundchannel(destinations, feerate=funding_tx_feerate,
commitment_feerate=commitment_tx_feerate)

entry = bitcoind.rpc.getmempoolentry(res['txid'])
weight = entry['weight']

expected_fee = int(funding_tx_feerate[:-5]) * weight // 1000
assert expected_fee == entry['fees']['base'] * 10 ** 8

# We get the expected close txid, force close the channel, then fish
# the details about the transaction out of the mempoool entry
close_txid = only_one(only_one(l1.rpc.listpeers(l2.info['id'])['peers'])['channels'])['scratch_txid']
l1.rpc.dev_fail(l2.info['id'])
l1.wait_for_channel_onchain(l2.info['id'])
entry = bitcoind.rpc.getmempoolentry(close_txid)

# Because of how the anchor outputs protocol is designed,
# we *always* pay for 2 anchor outs and their weight
if EXPERIMENTAL_FEATURES: # opt_anchor_outputs
weight = 1124
else:
# the commitment transactions' feerate is calculated off
# of this fixed weight
weight = 724

expected_fee = int(commitment_tx_feerate[:-5]) * weight // 1000

# At this point we only have one anchor output on the
# tx, but we subtract out the extra anchor output amount
# from the to_us output, so it ends up inflating
# our fee by that much.
if EXPERIMENTAL_FEATURES: # opt_anchor_outputs
expected_fee += 330

assert expected_fee == entry['fees']['base'] * 10 ** 8


def test_multifunding_param_failures(node_factory):
'''
Test that multifunding handles errors in parameters.
Expand Down

0 comments on commit a45b7a2

Please sign in to comment.