@ -146,17 +146,15 @@ def test_bad_opening(node_factory):
def test_opening_tiny_channel ( node_factory ) :
# Test custom min-capacity-sat parameters
#
# o---> [l2] (1000) - old default (too little for reserves)
# /
# [l1]-----> [l3] (~6000) - technical minimal value that wont be rejected
# [l1]-----> [l2] (~6000) - technical minimal value that wont be rejected
# \
# o---> [l4] (~ 10000) - the current default
# o---> [l3] (10000) - the current default
# \
# o-> [l5 ] (20000) - a node with a higher minimal value
# o-> [l4 ] (20000) - a node with a higher minimal value
#
# For each:
# 1. Try to establish channel 1sat smaller than min_capacity_sat
# 2. Try to establish channel exact min_capacity_sat
# 1. Try to establish channel with capacity 1sat smaller than min_capacity_sat
# 2. Try to establish channel with capacity exact min_capacity_sat
#
# BOLT2
# The receiving node MAY fail the channel if:
@ -166,51 +164,38 @@ def test_opening_tiny_channel(node_factory):
dustlimit = 546
reserves = 2 * dustlimit
min_commit_tx_fees = basic_fee ( 7500 )
min_for_opener = min_commit_tx_fees + dustlimit + 1
l1_min_capacity = 1000 # 1k old default, too small but used at l1 to allow small incoming channels
l2_min_capacity = reserves # just enough to get past capacity filter
l3_min_capacity = min_for_opener # the absolute technical minimum
l4_min_capacity = 10000 # the current default
l5_min_capacity = 20000 # a server with more than default minimum
l1 , l2 , l3 , l4 , l5 = node_factory . get_nodes ( 5 , opts = [ { ' min-capacity-sat ' : l1_min_capacity } ,
{ ' min-capacity-sat ' : l2_min_capacity } ,
{ ' min-capacity-sat ' : l3_min_capacity } ,
{ ' min-capacity-sat ' : l4_min_capacity } ,
{ ' min-capacity-sat ' : l5_min_capacity } ] )
overhead = reserves + min_commit_tx_fees
l2_min_capacity = 1 # just enough to get past capacity filter
l3_min_capacity = 10000 # the current default
l4_min_capacity = 20000 # a server with more than default minimum
l1 , l2 , l3 , l4 = node_factory . get_nodes ( 4 , opts = [ { ' min-capacity-sat ' : 0 } ,
{ ' min-capacity-sat ' : l2_min_capacity } ,
{ ' min-capacity-sat ' : l3_min_capacity } ,
{ ' min-capacity-sat ' : l4_min_capacity } ] )
l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . port )
l1 . rpc . connect ( l3 . info [ ' id ' ] , ' localhost ' , l3 . port )
l1 . rpc . connect ( l4 . info [ ' id ' ] , ' localhost ' , l4 . port )
l1 . rpc . connect ( l5 . info [ ' id ' ] , ' localhost ' , l5 . port )
# Open channel with one less than reserves should be rejected at l2
with pytest . raises ( RpcError , match = r ' channel_reserve_satoshis .*sat and .*sat too large for funding .*sat ' ) :
l1 . fund_channel ( l2 , l2_min_capacity - 1 )
# Open a channel with exactly the minimal amount for the fundee,
# This will raise an exception at l1, as the opener cannot afford fees for initial_commit_tx.
# Note: The old default of 1k sat is below the technical minimum when accounting for dust reserves and fees
# This is why this must fail, for this reason the default will be raised to 10k sat.
with pytest . raises ( RpcError , match = r ' Funder cannot afford fee on initial commitment transaction ' ) :
l1 . fund_channel ( l2 , l2_min_capacity )
# Open channel with one less than technical minimum should be rejected at l3
with pytest . raises ( RpcError , match = r ' channel capacity is .*sat, which is below .*sat ' ) :
l1 . fund_channel ( l3 , l3_min_capacity - 1 )
# When amount technical minimum matches exactly, own initial_commit_tx fees can now be covered
l1 . fund_channel ( l3 , l3_min_capacity )
# Open channel with one less than default 10k sats should be rejected at l4
with pytest . raises ( RpcError , match = r ' channel capacity is .*, which is below .*msat ' ) :
l1 . fund_channel ( l4 , l4_min_capacity - 1 )
# This must be possible with enough capacity
l1 . fund_channel ( l4 , l4_min_capacity )
# Open channel with less than minimum should be rejected at l5
with pytest . raises ( RpcError , match = r ' channel capacity is .*, which is below .*msat ' ) :
l1 . fund_channel ( l5 , l5_min_capacity - 1 )
# bigger channels must not be affected
l1 . fund_channel ( l5 , l5_min_capacity * 10 )
with pytest . raises ( RpcError , match = r ' They sent error.*channel capacity is .*, which is below .*msat ' ) :
l1 . fund_channel ( l2 , l2_min_capacity + overhead - 1 )
l1 . fund_channel ( l2 , l2_min_capacity + overhead )
with pytest . raises ( RpcError , match = r ' They sent error.*channel capacity is .*, which is below .*msat ' ) :
l1 . fund_channel ( l3 , l3_min_capacity + overhead - 1 )
l1 . fund_channel ( l3 , l3_min_capacity + overhead )
with pytest . raises ( RpcError , match = r ' They sent error.*channel capacity is .*, which is below .*msat ' ) :
l1 . fund_channel ( l4 , l4_min_capacity + overhead - 1 )
l1 . fund_channel ( l4 , l4_min_capacity + overhead )
# Note that this check applies locally too, so you can't open it if
# you would reject it.
l3 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . port )
with pytest . raises ( RpcError , match = r " ' message ' : ' channel capacity.* is .*, which is below .*msat " ) :
l3 . fund_channel ( l2 , l3_min_capacity + overhead - 1 )
l3 . fund_channel ( l2 , l3_min_capacity + overhead )
def test_second_channel ( node_factory ) :