Skip to content

Commit e217c62

Browse files
committed
Test verification with experimental invreq TLVs
Payer metadata is generated from the invreq TLVs and should included those in the experimental range. When verifying invoice messages, these TLVs must be included. Modify the BOLT12 verification tests to cover them.
1 parent 5590bc2 commit e217c62

File tree

3 files changed

+70
-9
lines changed

3 files changed

+70
-9
lines changed

lightning/src/offers/invoice.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,7 +1738,9 @@ mod tests {
17381738
ExperimentalOfferTlvStreamRef {
17391739
experimental_foo: None,
17401740
},
1741-
ExperimentalInvoiceRequestTlvStreamRef {},
1741+
ExperimentalInvoiceRequestTlvStreamRef {
1742+
experimental_bar: None,
1743+
},
17421744
),
17431745
);
17441746

@@ -1835,7 +1837,9 @@ mod tests {
18351837
ExperimentalOfferTlvStreamRef {
18361838
experimental_foo: None,
18371839
},
1838-
ExperimentalInvoiceRequestTlvStreamRef {},
1840+
ExperimentalInvoiceRequestTlvStreamRef {
1841+
experimental_bar: None,
1842+
},
18391843
),
18401844
);
18411845

lightning/src/offers/invoice_request.rs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ macro_rules! invoice_request_builder_methods { (
241241
InvoiceRequestContentsWithoutPayerSigningPubkey {
242242
payer: PayerContents(metadata), offer, chain: None, amount_msats: None,
243243
features: InvoiceRequestFeatures::empty(), quantity: None, payer_note: None,
244+
#[cfg(test)]
245+
experimental_bar: None,
244246
}
245247
}
246248

@@ -404,6 +406,12 @@ macro_rules! invoice_request_builder_test_methods { (
404406
$return_value
405407
}
406408

409+
#[cfg_attr(c_bindings, allow(dead_code))]
410+
pub(super) fn experimental_bar($($self_mut)* $self: $self_type, experimental_bar: u64) -> $return_type {
411+
$self.invoice_request.experimental_bar = Some(experimental_bar);
412+
$return_value
413+
}
414+
407415
#[cfg_attr(c_bindings, allow(dead_code))]
408416
pub(super) fn build_unchecked($self: $self_type) -> UnsignedInvoiceRequest {
409417
$self.build_without_checks().0
@@ -691,6 +699,8 @@ pub(super) struct InvoiceRequestContentsWithoutPayerSigningPubkey {
691699
features: InvoiceRequestFeatures,
692700
quantity: Option<u64>,
693701
payer_note: Option<String>,
702+
#[cfg(test)]
703+
experimental_bar: Option<u64>,
694704
}
695705

696706
macro_rules! invoice_request_accessors { ($self: ident, $contents: expr) => {
@@ -994,7 +1004,9 @@ impl VerifiedInvoiceRequest {
9941004
let InvoiceRequestContents {
9951005
payer_signing_pubkey,
9961006
inner: InvoiceRequestContentsWithoutPayerSigningPubkey {
997-
payer: _, offer: _, chain: _, amount_msats: _, features: _, quantity, payer_note
1007+
payer: _, offer: _, chain: _, amount_msats: _, features: _, quantity, payer_note,
1008+
#[cfg(test)]
1009+
experimental_bar: _,
9981010
},
9991011
} = &self.inner.contents;
10001012

@@ -1076,7 +1088,10 @@ impl InvoiceRequestContentsWithoutPayerSigningPubkey {
10761088
paths: None,
10771089
};
10781090

1079-
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {};
1091+
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {
1092+
#[cfg(test)]
1093+
experimental_bar: self.experimental_bar,
1094+
};
10801095

10811096
(payer, offer, invoice_request, experimental_offer, experimental_invoice_request)
10821097
}
@@ -1133,11 +1148,20 @@ tlv_stream!(InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef<'a>, INVOICE_REQ
11331148
pub(super) const EXPERIMENTAL_INVOICE_REQUEST_TYPES: core::ops::Range<u64> =
11341149
2_000_000_000..3_000_000_000;
11351150

1151+
#[cfg(not(test))]
11361152
tlv_stream!(
11371153
ExperimentalInvoiceRequestTlvStream, ExperimentalInvoiceRequestTlvStreamRef,
11381154
EXPERIMENTAL_INVOICE_REQUEST_TYPES, {}
11391155
);
11401156

1157+
#[cfg(test)]
1158+
tlv_stream!(
1159+
ExperimentalInvoiceRequestTlvStream, ExperimentalInvoiceRequestTlvStreamRef,
1160+
EXPERIMENTAL_INVOICE_REQUEST_TYPES, {
1161+
(2_999_999_999, experimental_bar: (u64, HighZeroBytesDroppedBigSize)),
1162+
}
1163+
);
1164+
11411165
type FullInvoiceRequestTlvStream = (
11421166
PayerTlvStream, OfferTlvStream, InvoiceRequestTlvStream, SignatureTlvStream,
11431167
ExperimentalOfferTlvStream, ExperimentalInvoiceRequestTlvStream,
@@ -1244,7 +1268,10 @@ impl TryFrom<PartialInvoiceRequestTlvStream> for InvoiceRequestContents {
12441268
chain, amount, features, quantity, payer_id, payer_note, paths,
12451269
},
12461270
experimental_offer_tlv_stream,
1247-
ExperimentalInvoiceRequestTlvStream {},
1271+
ExperimentalInvoiceRequestTlvStream {
1272+
#[cfg(test)]
1273+
experimental_bar,
1274+
},
12481275
) = tlv_stream;
12491276

12501277
let payer = match metadata {
@@ -1278,6 +1305,8 @@ impl TryFrom<PartialInvoiceRequestTlvStream> for InvoiceRequestContents {
12781305
Ok(InvoiceRequestContents {
12791306
inner: InvoiceRequestContentsWithoutPayerSigningPubkey {
12801307
payer, offer, chain, amount_msats: amount, features, quantity, payer_note,
1308+
#[cfg(test)]
1309+
experimental_bar,
12811310
},
12821311
payer_signing_pubkey,
12831312
})
@@ -1460,7 +1489,9 @@ mod tests {
14601489
ExperimentalOfferTlvStreamRef {
14611490
experimental_foo: None,
14621491
},
1463-
ExperimentalInvoiceRequestTlvStreamRef {},
1492+
ExperimentalInvoiceRequestTlvStreamRef {
1493+
experimental_bar: None,
1494+
},
14641495
),
14651496
);
14661497

@@ -1513,6 +1544,7 @@ mod tests {
15131544
let invoice_request = offer
15141545
.request_invoice_deriving_metadata(signing_pubkey, &expanded_key, nonce, payment_id)
15151546
.unwrap()
1547+
.experimental_bar(42)
15161548
.build().unwrap()
15171549
.sign(payer_sign).unwrap();
15181550
assert_eq!(invoice_request.payer_signing_pubkey(), payer_pubkey());
@@ -1603,6 +1635,7 @@ mod tests {
16031635
let invoice_request = offer
16041636
.request_invoice_deriving_signing_pubkey(&expanded_key, nonce, &secp_ctx, payment_id)
16051637
.unwrap()
1638+
.experimental_bar(42)
16061639
.build_and_sign()
16071640
.unwrap();
16081641

lightning/src/offers/refund.rs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ macro_rules! refund_explicit_metadata_builder_methods { () => {
178178
quantity: None, payer_signing_pubkey: signing_pubkey, payer_note: None, paths: None,
179179
#[cfg(test)]
180180
experimental_foo: None,
181+
#[cfg(test)]
182+
experimental_bar: None,
181183
},
182184
secp_ctx: None,
183185
})
@@ -222,6 +224,8 @@ macro_rules! refund_builder_methods { (
222224
quantity: None, payer_signing_pubkey: node_id, payer_note: None, paths: None,
223225
#[cfg(test)]
224226
experimental_foo: None,
227+
#[cfg(test)]
228+
experimental_bar: None,
225229
},
226230
secp_ctx: Some(secp_ctx),
227231
})
@@ -368,6 +372,12 @@ macro_rules! refund_builder_test_methods { (
368372
$self.refund.experimental_foo = Some(experimental_foo);
369373
$return_value
370374
}
375+
376+
#[cfg_attr(c_bindings, allow(dead_code))]
377+
pub(super) fn experimental_bar($($self_mut)* $self: $self_type, experimental_bar: u64) -> $return_type {
378+
$self.refund.experimental_bar = Some(experimental_bar);
379+
$return_value
380+
}
371381
} }
372382

373383
impl<'a> RefundBuilder<'a, secp256k1::SignOnly> {
@@ -449,6 +459,8 @@ pub(super) struct RefundContents {
449459
paths: Option<Vec<BlindedMessagePath>>,
450460
#[cfg(test)]
451461
experimental_foo: Option<u64>,
462+
#[cfg(test)]
463+
experimental_bar: Option<u64>,
452464
}
453465

454466
impl Refund {
@@ -787,7 +799,10 @@ impl RefundContents {
787799
experimental_foo: self.experimental_foo,
788800
};
789801

790-
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {};
802+
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {
803+
#[cfg(test)]
804+
experimental_bar: self.experimental_bar,
805+
};
791806

792807
(payer, offer, invoice_request, experimental_offer, experimental_invoice_request)
793808
}
@@ -879,7 +894,10 @@ impl TryFrom<RefundTlvStream> for RefundContents {
879894
#[cfg(test)]
880895
experimental_foo,
881896
},
882-
ExperimentalInvoiceRequestTlvStream {},
897+
ExperimentalInvoiceRequestTlvStream {
898+
#[cfg(test)]
899+
experimental_bar,
900+
},
883901
) = tlv_stream;
884902

885903
let payer = match payer_metadata {
@@ -942,6 +960,8 @@ impl TryFrom<RefundTlvStream> for RefundContents {
942960
payer_signing_pubkey, payer_note, paths,
943961
#[cfg(test)]
944962
experimental_foo,
963+
#[cfg(test)]
964+
experimental_bar,
945965
})
946966
}
947967
}
@@ -1050,7 +1070,9 @@ mod tests {
10501070
ExperimentalOfferTlvStreamRef {
10511071
experimental_foo: None,
10521072
},
1053-
ExperimentalInvoiceRequestTlvStreamRef {},
1073+
ExperimentalInvoiceRequestTlvStreamRef {
1074+
experimental_bar: None,
1075+
},
10541076
),
10551077
);
10561078

@@ -1080,6 +1102,7 @@ mod tests {
10801102
::deriving_signing_pubkey(node_id, &expanded_key, nonce, &secp_ctx, 1000, payment_id)
10811103
.unwrap()
10821104
.experimental_foo(42)
1105+
.experimental_bar(42)
10831106
.build().unwrap();
10841107
assert_eq!(refund.payer_signing_pubkey(), node_id);
10851108

@@ -1148,6 +1171,7 @@ mod tests {
11481171
.unwrap()
11491172
.path(blinded_path)
11501173
.experimental_foo(42)
1174+
.experimental_bar(42)
11511175
.build().unwrap();
11521176
assert_ne!(refund.payer_signing_pubkey(), node_id);
11531177

0 commit comments

Comments
 (0)