Skip to content

Commit 3fc63e5

Browse files
author
Yuko Roodt
committed
Added tests to check the bolt 2 specs for Sending Node Channel
1 parent 301f91e commit 3fc63e5

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

src/ln/channelmanager.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3018,3 +3018,63 @@ impl<'a, R : ::std::io::Read> ReadableArgs<R, ChannelManagerReadArgs<'a>> for (S
30183018
Ok((last_block_hash.clone(), channel_manager))
30193019
}
30203020
}
3021+
3022+
/*
3023+
#[test]
3024+
#[should_panic]
3025+
fn bolt2_open_channel_sending_node_checks1() { //This test needs to be on its own as we are catching a panic
3026+
let nodes = create_network(2);
3027+
3028+
// BOLT #2 spec: Sending node must ensure temporary_channel_id is unique from any other channel ID with the same peer.
3029+
// Note: currently a collision on a channel id will panic, not creating the channel with an error will be better as the system can still continue to function
3030+
let channel_value_satoshis=10000;
3031+
let push_msat=10001;
3032+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).unwrap();
3033+
let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
3034+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &node0_to_1_send_open_channel).unwrap();
3035+
3036+
//Create a second channel with a channel_id collision
3037+
let channel_id=node0_to_1_send_open_channel.temporary_channel_id;
3038+
assert!(nodes[0].node.create_channel_with_id(nodes[0].node.get_our_node_id(),channel_id, channel_value_satoshis, push_msat, 42).is_err());
3039+
}
3040+
3041+
#[test]
3042+
fn bolt2_open_channel_sending_node_checks2() {
3043+
let nodes = create_network(2);
3044+
3045+
// BOLT #2 spec: Sending node must set funding_satoshis to less than 2^24 satoshis
3046+
let channel_value_satoshis=2^24;
3047+
let push_msat=10001;
3048+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
3049+
3050+
// BOLT #2 spec: Sending node must set push_msat to equal or less than 1000 * funding_satoshis
3051+
let channel_value_satoshis=10000;
3052+
// Test when push_msat is equal to 1000 * funding_satoshis.
3053+
let push_msat=1000*channel_value_satoshis+1;
3054+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_err());
3055+
3056+
// BOLT #2 spec: Sending node must set set channel_reserve_satoshis greater than or equal to dust_limit_satoshis
3057+
let channel_value_satoshis=10000;
3058+
let push_msat=10001;
3059+
assert!(nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42).is_ok()); //Create a valid channel
3060+
let node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
3061+
assert!(node0_to_1_send_open_channel.channel_reserve_satoshis>=node0_to_1_send_open_channel.dust_limit_satoshis);
3062+
3063+
// BOLT #2 spec: Sending node must set undefined bits in channel_flags to 0
3064+
// Only the least-significant bit of channel_flags is currently defined resulting in channel_flags only having one of two possible states 0 or 1
3065+
assert!(node0_to_1_send_open_channel.channel_flags<=1);
3066+
3067+
// BOLT #2 spec: Sending node must ensure the chain_hash value identifies the chain it wishes to open the channel within.
3068+
let chain_hash=genesis_block(Network::Testnet).header.bitcoin_hash();
3069+
assert_eq!(node0_to_1_send_open_channel.chain_hash,chain_hash);
3070+
3071+
// BOLT #2 spec: Sending node must set funding_pubkey, revocation_basepoint, htlc_basepoint, payment_basepoint, and delayed_payment_basepoint to valid DER-encoded, compressed, secp256k1 pubkeys.
3072+
let secp = Secp256k1::new();
3073+
assert!(PublicKey::from_slice(&secp, &node0_to_1_send_open_channel.funding_pubkey.serialize()).is_ok());
3074+
assert!(PublicKey::from_slice(&secp, &node0_to_1_send_open_channel.revocation_basepoint.serialize()).is_ok());
3075+
assert!(PublicKey::from_slice(&secp, &node0_to_1_send_open_channel.htlc_basepoint.serialize()).is_ok());
3076+
assert!(PublicKey::from_slice(&secp, &node0_to_1_send_open_channel.payment_basepoint.serialize()).is_ok());
3077+
assert!(PublicKey::from_slice(&secp, &node0_to_1_send_open_channel.delayed_payment_basepoint.serialize()).is_ok());
3078+
}
3079+
3080+
*/

0 commit comments

Comments
 (0)