Skip to content

Commit 676e881

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 febcb4f commit 676e881

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
@@ -1708,7 +1708,9 @@ mod tests {
17081708
ExperimentalOfferTlvStreamRef {
17091709
experimental_foo: None,
17101710
},
1711-
ExperimentalInvoiceRequestTlvStreamRef {},
1711+
ExperimentalInvoiceRequestTlvStreamRef {
1712+
experimental_bar: None,
1713+
},
17121714
),
17131715
);
17141716

@@ -1805,7 +1807,9 @@ mod tests {
18051807
ExperimentalOfferTlvStreamRef {
18061808
experimental_foo: None,
18071809
},
1808-
ExperimentalInvoiceRequestTlvStreamRef {},
1810+
ExperimentalInvoiceRequestTlvStreamRef {
1811+
experimental_bar: None,
1812+
},
18091813
),
18101814
);
18111815

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
@@ -664,6 +672,8 @@ pub(super) struct InvoiceRequestContentsWithoutPayerSigningPubkey {
664672
features: InvoiceRequestFeatures,
665673
quantity: Option<u64>,
666674
payer_note: Option<String>,
675+
#[cfg(test)]
676+
experimental_bar: Option<u64>,
667677
}
668678

669679
macro_rules! invoice_request_accessors { ($self: ident, $contents: expr) => {
@@ -962,7 +972,9 @@ impl VerifiedInvoiceRequest {
962972
let InvoiceRequestContents {
963973
payer_signing_pubkey,
964974
inner: InvoiceRequestContentsWithoutPayerSigningPubkey {
965-
payer: _, offer: _, chain: _, amount_msats: _, features: _, quantity, payer_note
975+
payer: _, offer: _, chain: _, amount_msats: _, features: _, quantity, payer_note,
976+
#[cfg(test)]
977+
experimental_bar: _,
966978
},
967979
} = &self.inner.contents;
968980

@@ -1044,7 +1056,10 @@ impl InvoiceRequestContentsWithoutPayerSigningPubkey {
10441056
paths: None,
10451057
};
10461058

1047-
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {};
1059+
let experimental_invoice_request = ExperimentalInvoiceRequestTlvStreamRef {
1060+
#[cfg(test)]
1061+
experimental_bar: self.experimental_bar,
1062+
};
10481063

10491064
(payer, offer, invoice_request, experimental_offer, experimental_invoice_request)
10501065
}
@@ -1094,11 +1109,20 @@ tlv_stream!(InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef<'a>, INVOICE_REQ
10941109
pub(super) const EXPERIMENTAL_INVOICE_REQUEST_TYPES: core::ops::Range<u64> =
10951110
2_000_000_000..3_000_000_000;
10961111

1112+
#[cfg(not(test))]
10971113
tlv_stream!(
10981114
ExperimentalInvoiceRequestTlvStream, ExperimentalInvoiceRequestTlvStreamRef,
10991115
EXPERIMENTAL_INVOICE_REQUEST_TYPES, {}
11001116
);
11011117

1118+
#[cfg(test)]
1119+
tlv_stream!(
1120+
ExperimentalInvoiceRequestTlvStream, ExperimentalInvoiceRequestTlvStreamRef,
1121+
EXPERIMENTAL_INVOICE_REQUEST_TYPES, {
1122+
(2_999_999_999, experimental_bar: (u64, HighZeroBytesDroppedBigSize)),
1123+
}
1124+
);
1125+
11021126
type FullInvoiceRequestTlvStream = (
11031127
PayerTlvStream, OfferTlvStream, InvoiceRequestTlvStream, SignatureTlvStream,
11041128
ExperimentalOfferTlvStream, ExperimentalInvoiceRequestTlvStream,
@@ -1206,7 +1230,10 @@ impl TryFrom<PartialInvoiceRequestTlvStream> for InvoiceRequestContents {
12061230
chain, amount, features, quantity, payer_id, payer_note, paths,
12071231
},
12081232
experimental_offer_tlv_stream,
1209-
ExperimentalInvoiceRequestTlvStream {},
1233+
ExperimentalInvoiceRequestTlvStream {
1234+
#[cfg(test)]
1235+
experimental_bar,
1236+
},
12101237
) = tlv_stream;
12111238

12121239
let payer = match metadata {
@@ -1240,6 +1267,8 @@ impl TryFrom<PartialInvoiceRequestTlvStream> for InvoiceRequestContents {
12401267
Ok(InvoiceRequestContents {
12411268
inner: InvoiceRequestContentsWithoutPayerSigningPubkey {
12421269
payer, offer, chain, amount_msats: amount, features, quantity, payer_note,
1270+
#[cfg(test)]
1271+
experimental_bar,
12431272
},
12441273
payer_signing_pubkey,
12451274
})
@@ -1422,7 +1451,9 @@ mod tests {
14221451
ExperimentalOfferTlvStreamRef {
14231452
experimental_foo: None,
14241453
},
1425-
ExperimentalInvoiceRequestTlvStreamRef {},
1454+
ExperimentalInvoiceRequestTlvStreamRef {
1455+
experimental_bar: None,
1456+
},
14261457
),
14271458
);
14281459

@@ -1475,6 +1506,7 @@ mod tests {
14751506
let invoice_request = offer
14761507
.request_invoice_deriving_metadata(signing_pubkey, &expanded_key, nonce, payment_id)
14771508
.unwrap()
1509+
.experimental_bar(42)
14781510
.build().unwrap()
14791511
.sign(payer_sign).unwrap();
14801512
assert_eq!(invoice_request.payer_signing_pubkey(), payer_pubkey());
@@ -1565,6 +1597,7 @@ mod tests {
15651597
let invoice_request = offer
15661598
.request_invoice_deriving_signing_pubkey(&expanded_key, nonce, &secp_ctx, payment_id)
15671599
.unwrap()
1600+
.experimental_bar(42)
15681601
.build_and_sign()
15691602
.unwrap();
15701603

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)