From f465032f6fe56aed84327788c8f74a74c5f1fbb8 Mon Sep 17 00:00:00 2001 From: niftynei Date: Thu, 2 Feb 2023 17:32:35 -0600 Subject: [PATCH] rfc-dual-fund: update to latest spec for dual-funding - Renamed zerod_channel_ids to temporary_channel_id - Renamed witness_stack->witnesses - Renamed witness_element->witness_elements - open_channel2 now includes second commitment point - accept_channel2 now includes second commitment point Current commit on rfc branch 64f7f360b9f3c2664d078e2129cfe83098fc4617 Changelog-EXPERIMENTAL: Protocol: dual-funding spec changed in incompatible ways, won't work with old versions (but maybe soon with Eclair!!) --- common/psbt_internal.c | 12 ++-- openingd/dualopend.c | 9 ++- ...racted_peer_07_openchannelv2_updates.patch | 59 +++++++++++++++++++ wire/peer_wire.csv | 16 ++--- 4 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 wire/extracted_peer_07_openchannelv2_updates.patch diff --git a/common/psbt_internal.c b/common/psbt_internal.c index 46bb0d134..bc7ca0a9c 100644 --- a/common/psbt_internal.c +++ b/common/psbt_internal.c @@ -17,8 +17,8 @@ psbt_input_set_final_witness_stack(const tal_t *ctx, for (size_t i = 0; i < tal_count(elements); i++) wally_tx_witness_stack_add(in->final_witness, - elements[i]->witness, - tal_bytelen(elements[i]->witness)); + elements[i]->witness_data, + tal_bytelen(elements[i]->witness_data)); tal_wally_end(ctx); } @@ -78,13 +78,13 @@ psbt_to_witness_stacks(const tal_t *ctx, tal(stacks, struct witness_stack); /* Convert the wally_tx_witness_stack to * a witness_stack entry */ - stack->witness_element = + stack->witness_elements = tal_arr(stack, struct witness_element *, wtx_s->num_items); - for (size_t j = 0; j < tal_count(stack->witness_element); j++) { - stack->witness_element[j] = tal(stack, + for (size_t j = 0; j < tal_count(stack->witness_elements); j++) { + stack->witness_elements[j] = tal(stack, struct witness_element); - stack->witness_element[j]->witness = + stack->witness_elements[j]->witness_data = tal_dup_arr(stack, u8, wtx_s->items[j].witness, wtx_s->items[j].witness_len, diff --git a/openingd/dualopend.c b/openingd/dualopend.c index 4b2956f97..963806338 100644 --- a/openingd/dualopend.c +++ b/openingd/dualopend.c @@ -171,9 +171,10 @@ struct state { /* Information we need between funding_start and funding_complete */ struct basepoints their_points; - /* hsmd gives us our first per-commitment point, and peer tells us + /* hsmd gives us our first+second per-commitment points, and peer tells us * theirs */ struct pubkey first_per_commitment_point[NUM_SIDES]; + struct pubkey second_per_commitment_point[NUM_SIDES]; struct channel_id channel_id; u8 channel_flags; @@ -1101,7 +1102,7 @@ static void handle_tx_sigs(struct state *state, const u8 *msg) tal_hex(msg, msg)); elem = cast_const2(const struct witness_element **, - ws[j++]->witness_element); + ws[j++]->witness_elements); psbt_finalize_input(tx_state->psbt, in, elem); } @@ -2231,6 +2232,7 @@ static void accepter_start(struct state *state, const u8 *oc2_msg) &state->their_points.delayed_payment, &state->their_points.htlc, &state->first_per_commitment_point[REMOTE], + &state->second_per_commitment_point[REMOTE], &state->channel_flags, &open_tlv)) open_err_fatal(state, "Parsing open_channel2 %s", @@ -2549,6 +2551,7 @@ static void accepter_start(struct state *state, const u8 *oc2_msg) &state->our_points.delayed_payment, &state->our_points.htlc, &state->first_per_commitment_point[LOCAL], + &state->second_per_commitment_point[LOCAL], a_tlv); /* Everything's ok. Let's figure out the actual channel_id now */ @@ -3004,6 +3007,7 @@ static void opener_start(struct state *state, u8 *msg) &state->our_points.delayed_payment, &state->our_points.htlc, &state->first_per_commitment_point[LOCAL], + &state->second_per_commitment_point[LOCAL], state->channel_flags, open_tlv); @@ -3032,6 +3036,7 @@ static void opener_start(struct state *state, u8 *msg) &state->their_points.delayed_payment, &state->their_points.htlc, &state->first_per_commitment_point[REMOTE], + &state->second_per_commitment_point[REMOTE], &a_tlv)) open_err_fatal(state, "Parsing accept_channel2 %s", tal_hex(msg, msg)); diff --git a/wire/extracted_peer_07_openchannelv2_updates.patch b/wire/extracted_peer_07_openchannelv2_updates.patch new file mode 100644 index 000000000..05a281ac5 --- /dev/null +++ b/wire/extracted_peer_07_openchannelv2_updates.patch @@ -0,0 +1,59 @@ +--- wire/peer_wire.csv 2023-02-02 17:51:50.435463786 -0600 ++++ - 2023-02-02 17:51:56.693837258 -0600 +@@ -62,13 +63,13 @@ + msgdata,tx_signatures,channel_id,channel_id, + msgdata,tx_signatures,txid,sha256, + msgdata,tx_signatures,num_witnesses,u16, +-msgdata,tx_signatures,witness_stack,witness_stack,num_witnesses ++msgdata,tx_signatures,witnesses,witness_stack,num_witnesses + subtype,witness_stack +-subtypedata,witness_stack,num_input_witness,u16, +-subtypedata,witness_stack,witness_element,witness_element,num_input_witness ++subtypedata,witness_stack,num_witness_elements,u16, ++subtypedata,witness_stack,witness_elements,witness_element,num_witness_elements + subtype,witness_element + subtypedata,witness_element,len,u16, +-subtypedata,witness_element,witness,byte,len ++subtypedata,witness_element,witness_data,byte,len + msgtype,tx_init_rbf,72 + msgdata,tx_init_rbf,channel_id,channel_id, + msgdata,tx_init_rbf,locktime,u32, +@@ -145,7 +146,7 @@ + tlvdata,channel_ready_tlvs,short_channel_id,alias,short_channel_id, + msgtype,open_channel2,64 + msgdata,open_channel2,chain_hash,chain_hash, +-msgdata,open_channel2,zerod_channel_id,channel_id, ++msgdata,open_channel2,temporary_channel_id,channel_id, + msgdata,open_channel2,funding_feerate_perkw,u32, + msgdata,open_channel2,commitment_feerate_perkw,u32, + msgdata,open_channel2,funding_satoshis,u64, +@@ -161,19 +162,20 @@ + msgdata,open_channel2,delayed_payment_basepoint,point, + msgdata,open_channel2,htlc_basepoint,point, + msgdata,open_channel2,first_per_commitment_point,point, ++msgdata,open_channel2,second_per_commitment_point,point, + msgdata,open_channel2,channel_flags,byte, + msgdata,open_channel2,tlvs,opening_tlvs, + tlvtype,opening_tlvs,upfront_shutdown_script,0 + tlvdata,opening_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,... + tlvtype,opening_tlvs,channel_type,1 + tlvdata,opening_tlvs,channel_type,type,byte,... + tlvtype,opening_tlvs,request_funds,3 + tlvdata,opening_tlvs,request_funds,requested_sats,u64, + tlvdata,opening_tlvs,request_funds,blockheight,u32, + tlvtype,opening_tlvs,require_confirmed_inputs,2 + tlvdata,opening_tlvs,require_confirmed_inputs,empty,byte,0 + msgtype,accept_channel2,65 +-msgdata,accept_channel2,zerod_channel_id,channel_id, ++msgdata,accept_channel2,temporary_channel_id,channel_id, + msgdata,accept_channel2,funding_satoshis,u64, + msgdata,accept_channel2,dust_limit_satoshis,u64, + msgdata,accept_channel2,max_htlc_value_in_flight_msat,u64, +@@ -187,6 +186,7 @@ + msgdata,accept_channel2,delayed_payment_basepoint,point, + msgdata,accept_channel2,htlc_basepoint,point, + msgdata,accept_channel2,first_per_commitment_point,point, ++msgdata,accept_channel2,second_per_commitment_point,point, + msgdata,accept_channel2,tlvs,accept_tlvs, + tlvtype,accept_tlvs,upfront_shutdown_script,0 + tlvdata,accept_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,... diff --git a/wire/peer_wire.csv b/wire/peer_wire.csv index 398a7b435..b01d1f40d 100644 --- a/wire/peer_wire.csv +++ b/wire/peer_wire.csv @@ -62,13 +62,13 @@ msgtype,tx_signatures,71 msgdata,tx_signatures,channel_id,channel_id, msgdata,tx_signatures,txid,sha256, msgdata,tx_signatures,num_witnesses,u16, -msgdata,tx_signatures,witness_stack,witness_stack,num_witnesses +msgdata,tx_signatures,witnesses,witness_stack,num_witnesses subtype,witness_stack -subtypedata,witness_stack,num_input_witness,u16, -subtypedata,witness_stack,witness_element,witness_element,num_input_witness +subtypedata,witness_stack,num_witness_elements,u16, +subtypedata,witness_stack,witness_elements,witness_element,num_witness_elements subtype,witness_element subtypedata,witness_element,len,u16, -subtypedata,witness_element,witness,byte,len +subtypedata,witness_element,witness_data,byte,len msgtype,tx_init_rbf,72 msgdata,tx_init_rbf,channel_id,channel_id, msgdata,tx_init_rbf,locktime,u32, @@ -145,7 +145,7 @@ tlvtype,channel_ready_tlvs,short_channel_id,1 tlvdata,channel_ready_tlvs,short_channel_id,alias,short_channel_id, msgtype,open_channel2,64 msgdata,open_channel2,chain_hash,chain_hash, -msgdata,open_channel2,zerod_channel_id,channel_id, +msgdata,open_channel2,temporary_channel_id,channel_id, msgdata,open_channel2,funding_feerate_perkw,u32, msgdata,open_channel2,commitment_feerate_perkw,u32, msgdata,open_channel2,funding_satoshis,u64, @@ -161,6 +161,7 @@ msgdata,open_channel2,payment_basepoint,point, msgdata,open_channel2,delayed_payment_basepoint,point, msgdata,open_channel2,htlc_basepoint,point, msgdata,open_channel2,first_per_commitment_point,point, +msgdata,open_channel2,second_per_commitment_point,point, msgdata,open_channel2,channel_flags,byte, msgdata,open_channel2,tlvs,opening_tlvs, tlvtype,opening_tlvs,upfront_shutdown_script,0 @@ -172,7 +173,7 @@ tlvdata,opening_tlvs,request_funds,requested_sats,u64, tlvdata,opening_tlvs,request_funds,blockheight,u32, tlvtype,opening_tlvs,require_confirmed_inputs,2 msgtype,accept_channel2,65 -msgdata,accept_channel2,zerod_channel_id,channel_id, +msgdata,accept_channel2,temporary_channel_id,channel_id, msgdata,accept_channel2,funding_satoshis,u64, msgdata,accept_channel2,dust_limit_satoshis,u64, msgdata,accept_channel2,max_htlc_value_in_flight_msat,u64, @@ -186,6 +187,7 @@ msgdata,accept_channel2,payment_basepoint,point, msgdata,accept_channel2,delayed_payment_basepoint,point, msgdata,accept_channel2,htlc_basepoint,point, msgdata,accept_channel2,first_per_commitment_point,point, +msgdata,accept_channel2,second_per_commitment_point,point, msgdata,accept_channel2,tlvs,accept_tlvs, tlvtype,accept_tlvs,upfront_shutdown_script,0 tlvdata,accept_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,... @@ -225,7 +227,7 @@ msgdata,update_add_htlc,payment_hash,sha256, msgdata,update_add_htlc,cltv_expiry,u32, msgdata,update_add_htlc,onion_routing_packet,byte,1366 msgdata,update_add_htlc,tlvs,update_add_tlvs, -tlvtype,update_add_tlvs,blinding,2 +tlvtype,update_add_tlvs,blinding,0 tlvdata,update_add_tlvs,blinding,blinding,point, msgtype,update_fulfill_htlc,130 msgdata,update_fulfill_htlc,channel_id,channel_id,