Skip to content

Commit 81cb214

Browse files
committed
Merge #77: elip150/151: test vectors: generate mainnet addresses
11ac728 elip151: test vectors: generate mainnet addresses (Leonardo Comandini) 57695d9 elip150: test vectors: add missing from elip (Leonardo Comandini) 5337532 Fix typo (Leonardo Comandini) 7186ca0 elip150: test vectors: generate mainnet addresses (Leonardo Comandini) Pull request description: Consistently with the extended pubkey network. ACKs for top commit: apoelstra: ACK 11ac728 Tree-SHA512: 319a1002860d34f0010f67022f3cf763fdb742be31d745b36673576bce589157a82563127fc31169439551ff4f2ef06a8104af6bb3ae3a2a85e37e0d072e0ff7
2 parents b2a6912 + 11ac728 commit 81cb214

File tree

2 files changed

+48
-31
lines changed

2 files changed

+48
-31
lines changed

src/confidential/elip151.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ mod test {
158158
};
159159
let definite_desc = single_desc.at_derivation_index(0).unwrap();
160160
let secp = elements::secp256k1_zkp::Secp256k1::new();
161-
let params = &elements::AddressParams::ELEMENTS;
161+
let params = &elements::AddressParams::LIQUID;
162162
definite_desc.address(&secp, params).unwrap().to_string()
163163
}
164164

src/confidential/mod.rs

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -282,13 +282,13 @@ mod tests {
282282
assert_eq!(desc, Descriptor::from_str(&desc.to_string()).unwrap());
283283
assert_eq!(
284284
self.conf_addr,
285-
desc.address(secp, &elements::AddressParams::ELEMENTS)
285+
desc.address(secp, &elements::AddressParams::LIQUID)
286286
.unwrap()
287287
.to_string(),
288288
);
289289
assert_eq!(
290290
self.unconf_addr,
291-
desc.unconfidential_address(&elements::AddressParams::ELEMENTS)
291+
desc.unconfidential_address(&elements::AddressParams::LIQUID)
292292
.unwrap()
293293
.to_string(),
294294
);
@@ -329,78 +329,95 @@ mod tests {
329329
)
330330
.unwrap();
331331

332+
333+
let single_ct_key = DescriptorPublicKey::from_str(
334+
"02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623",
335+
)
336+
.unwrap();
337+
let single_spk_key = DefiniteDescriptorKey::from_str(
338+
"03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4",
339+
)
340+
.unwrap();
341+
332342
let tests = vec![
333343
// Bare key, P2PKH
334344
ConfidentialTest {
335345
key: Key::Bare(ct_key.clone()),
336346
descriptor: crate::Descriptor::new_pkh(spk_key.clone()),
337347
descriptor_str: format!("ct({},elpkh({}))#y0lg3d5y", ct_key, spk_key),
338-
conf_addr: "CTEnDa5fqGccV3g3jvp4exSQwRfb6FpGchNBF4ZrAaq8ip8gvLqHCtzw1F7d7U5gYJYXBwymgEMmJjca",
339-
unconf_addr: "2dhfebpgPWpeqPdCMMam5F2UHAgx3bbLzAg",
348+
conf_addr: "VTpvZZYdbhbyVF3Wa99eMjgXhfvu4LS26dR2FwMfNXq7FDX73HZEsZr3VvgH9EDgQnYK7sP6ACKSuMGw",
349+
unconf_addr: "Q5WHLVd78iAspUNvzuULvi2F8u693pzAqe",
340350
},
341351
// Bare key, P2WPKH
342352
ConfidentialTest {
343353
key: Key::Bare(ct_key.clone()),
344354
descriptor: crate::Descriptor::new_wpkh(spk_key.clone()).unwrap(),
345355
descriptor_str: format!("ct({},elwpkh({}))#kt4e25qt", ct_key, spk_key),
346-
conf_addr: "el1qqg5s7xj7upzl7h4q2k2wj4vq63nvaktn0egqu09nqcr6d44p4evaqknpl78t02k2xqgdh9ltmfmpy9ssk7qfvrldr2dttt3ez",
347-
unconf_addr: "ert1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyk32h3ur",
356+
conf_addr: "lq1qqg5s7xj7upzl7h4q2k2wj4vq63nvaktn0egqu09nqcr6d44p4evaqknpl78t02k2xqgdh9ltmfmpy9ssk7qfvghdsfr4mvr9c",
357+
unconf_addr: "ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre",
348358
},
349359
// Bare key, P2SH-WPKH
350360
ConfidentialTest {
351361
key: Key::Bare(ct_key.clone()),
352362
descriptor: crate::Descriptor::new_sh_wpkh(spk_key.clone()).unwrap(),
353363
descriptor_str: format!("ct({},elsh(wpkh({})))#xg9r4jej", ct_key, spk_key),
354-
conf_addr: "AzpnREsN1RSi4JB7rAfpywmPsvGxyygmwm9o3iZcP43svg4frVW5DXvGj5yEx6mKcPtAyHgQWVikFRCM",
355-
unconf_addr: "XKGUGskfGsNRR1Ww4ytemgBjuszohUaNgv",
364+
conf_addr: "VJL8znN4XjXEUKzDaYsqdzRASGLY2KHxC4N6g5b5QvrNjXfeKp83Ci9AW2a8QzbZjpEffoy4PEywpLAZ",
365+
unconf_addr: "Gq6kpy2HiNgsyQVpBsuBKAPRFiir23qKro",
356366
},
357367
// Bare key, P2TR
358368
ConfidentialTest {
359369
key: Key::Bare(ct_key.clone()),
360370
descriptor: crate::Descriptor::new_tr(spk_key.clone(), None).unwrap(),
361371
descriptor_str: format!("ct({},eltr({}))#c0pjjxyw", ct_key, spk_key),
362-
conf_addr: "el1pq0nsl8du3gsuk7r90sgm78259mmv6mt9d4yvj30zr3u052ufs5meuc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8z2pc847zht4k0",
363-
unconf_addr: "ert1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3q3s6527",
372+
conf_addr: "lq1pq0nsl8du3gsuk7r90sgm78259mmv6mt9d4yvj30zr3u052ufs5meuc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8zrdxdfgp8g9pl",
373+
unconf_addr: "ex1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3qxa9kvf",
364374
},
365375
// SLIP77, P2PKH
366376
ConfidentialTest {
367377
key: Key::Slip77(slip77::MasterBlindingKey::from_seed(b"abcd")),
368378
descriptor: crate::Descriptor::new_pkh(spk_key.clone()),
369379
descriptor_str: format!("ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elpkh({}))#hw2glz99", spk_key),
370-
conf_addr: "CTEvn67jjJXDr3aDCZypTCJc6XHZ7ATyd89oXfNLQt1G2omPUpPkHA6zUAGPGF2YH4RnWfWut2f4dRSd",
371-
unconf_addr: "2dhfebpgPWpeqPdCMMam5F2UHAgx3bbLzAg",
380+
conf_addr: "VTq585ahVjWarEwg2nKQ9yYirmYs5F5j74CeYYA9cq1EZD9obm7hwpx6xqq3J1AY9YRaSavEMzYfr6t7",
381+
unconf_addr: "Q5WHLVd78iAspUNvzuULvi2F8u693pzAqe",
372382
},
373383
// SLIP77, P2WPKH
374384
ConfidentialTest {
375385
key: Key::Slip77(slip77::MasterBlindingKey::from_seed(b"abcd")),
376386
descriptor: crate::Descriptor::new_wpkh(spk_key.clone()).unwrap(),
377387
descriptor_str: format!("ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elwpkh({}))#545pl285", spk_key),
378-
conf_addr: "el1qqdx5wnttttzulcs6ujlg9pfts6mp3r4sdwg5ekdej566n5wxzk88vknpl78t02k2xqgdh9ltmfmpy9ssk7qfvge347y58xukt",
379-
unconf_addr: "ert1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyk32h3ur",
388+
conf_addr: "lq1qqdx5wnttttzulcs6ujlg9pfts6mp3r4sdwg5ekdej566n5wxzk88vknpl78t02k2xqgdh9ltmfmpy9ssk7qfvr33xa22hpw23",
389+
unconf_addr: "ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre",
380390
},
381391
// SLIP77, P2SH
382392
ConfidentialTest {
383393
key: Key::Slip77(slip77::MasterBlindingKey::from_seed(b"abcd")),
384394
descriptor: crate::Descriptor::new_sh_wpkh(spk_key.clone()).unwrap(),
385395
descriptor_str: format!("ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elsh(wpkh({})))#m30vswxr", spk_key),
386-
conf_addr: "AzptgrWR3xVX6Qg8mbkyZiESb6C9uy8VCUdCCmw7UtceiF5H8PdB6933YDT7vHsevK1yFmxfajdaedCH",
387-
unconf_addr: "XKGUGskfGsNRR1Ww4ytemgBjuszohUaNgv",
396+
conf_addr: "VJLFGQ17aGa3WSVEVyxzDktD9SFixJjfSmqVq8xaWmR9X6gFbiF95KFwKA41PBhu3jNTxJFKTUphHL8J",
397+
unconf_addr: "Gq6kpy2HiNgsyQVpBsuBKAPRFiir23qKro",
388398
},
389399
// SLIP77, P2TR
390400
ConfidentialTest {
391401
key: Key::Slip77(slip77::MasterBlindingKey::from_seed(b"abcd")),
392402
descriptor: crate::Descriptor::new_tr(spk_key.clone(), None).unwrap(),
393403
descriptor_str: format!("ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),eltr({}))#n3v4t5cs", spk_key),
394-
conf_addr: "el1pq26fndnz8ef6umlz6e2755sm6j5jwxv3tdt2295mr4mx6ux0uf8vcc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8zwzhhycxfhdrm",
395-
unconf_addr: "ert1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3q3s6527",
404+
conf_addr: "lq1pq26fndnz8ef6umlz6e2755sm6j5jwxv3tdt2295mr4mx6ux0uf8vcc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8z8wfacw9e5a5t",
405+
unconf_addr: "ex1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3qxa9kvf",
406+
},
407+
ConfidentialTest {
408+
key: Key::Bare(single_ct_key),
409+
descriptor: crate::Descriptor::new_wpkh(single_spk_key).unwrap(),
410+
descriptor_str: format!("ct(02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623,elwpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4))#h5e0p6m9"),
411+
conf_addr: "lq1qq0r6pegudzm0tzpszelc34qjln4fdxawgwmgnza63wwpzdy6jrm0grmqvvk2ce5ksnxcs9ecgtnryt7xg3406y5ccl0k2glns",
412+
unconf_addr: "ex1qpasxxt9vv6tgfnvgzuuy9e3j9lryg6hawrval4",
396413
},
397414
];
398415

399416
for test in &tests {
400417
test.check(&secp);
401418
}
402419
// Uncomment to regenerate test vectors; to see the output, run
403-
// cargo test confidential::tests:;confidential_descriptor -- --nocapture
420+
// cargo test confidential::tests::confidential_descriptor -- --nocapture
404421
/*
405422
for (n, test) in tests.iter().enumerate() {
406423
test.output_elip_test_vector(n + 1);
@@ -473,8 +490,8 @@ mod tests {
473490
key: Key::View(view_key.clone()),
474491
descriptor: crate::Descriptor::new_wpkh(spk_key.clone()).unwrap(),
475492
descriptor_str: format!("ct({},elwpkh({}))#j95xktq7", view_key, spk_key),
476-
conf_addr: "el1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvq78z9wukacu0",
477-
unconf_addr: "ert1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyk32h3ur",
493+
conf_addr: "lq1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvtk83xqzx62q4",
494+
unconf_addr: "ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre",
478495
};
479496
test.check(&secp);
480497

@@ -483,8 +500,8 @@ mod tests {
483500
key: Key::Bare(ct_key.clone()),
484501
descriptor: crate::Descriptor::new_wpkh(spk_key.clone()).unwrap(),
485502
descriptor_str: format!("ct({},elwpkh({}))#elmfpmp9", ct_key, spk_key),
486-
conf_addr: "el1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvq78z9wukacu0",
487-
unconf_addr: "ert1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyk32h3ur",
503+
conf_addr: "lq1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvtk83xqzx62q4",
504+
unconf_addr: "ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre",
488505
};
489506
test.check(&secp);
490507
}
@@ -495,17 +512,17 @@ mod tests {
495512
let view_key = "c25deb86fa11e49d651d7eae27c220ef930fbd86ea023eebfa73e54875647963";
496513
let ct_key = "0286fc9a38e765d955e9b0bcc18fa9ae81b0c893e2dd1ef5542a9c73780a086b90";
497514
let pk = "021a8fb6bd5a653b021b98a2a785725b8ddacfe3687bc043aa7f4d25d3a48d40b5";
498-
let addr_conf = "el1qq265u4g3k3m3qpyxjwpdrtnm293wuxgvs9xzmzcs2ck0mv5rx23w4d7xfsednsmmxrszfe7s9rs0c6cvf3dfyqwa4jj40uffq";
499-
let addr_unconf = "ert1qklrycvkecdanpcpyulgz3c8udvxyck5jkzxddw";
515+
let addr_conf = "lq1qq265u4g3k3m3qpyxjwpdrtnm293wuxgvs9xzmzcs2ck0mv5rx23w4d7xfsednsmmxrszfe7s9rs0c6cvf3dfytxax3utlmm46";
516+
let addr_unconf = "ex1qklrycvkecdanpcpyulgz3c8udvxyck5jvsv4j5";
500517

501518
for desc_str in [
502519
format!("ct({view_key},elwpkh({pk}))#c2kx9zll"),
503520
format!("ct({ct_key},elwpkh({pk}))#m5mvyh29"),
504521
] {
505522
let desc = Descriptor::<DefiniteDescriptorKey>::from_str(&desc_str).unwrap();
506523
assert_eq!(desc.to_string(), desc_str);
507-
assert_eq!(addr_conf, &desc.address(&secp, &elements::AddressParams::ELEMENTS).unwrap().to_string());
508-
assert_eq!(addr_unconf, &desc.unconfidential_address(&elements::AddressParams::ELEMENTS).unwrap().to_string());
524+
assert_eq!(addr_conf, &desc.address(&secp, &elements::AddressParams::LIQUID).unwrap().to_string());
525+
assert_eq!(addr_unconf, &desc.unconfidential_address(&elements::AddressParams::LIQUID).unwrap().to_string());
509526
}
510527
}
511528

@@ -525,15 +542,15 @@ mod tests {
525542
#[test]
526543
fn descriptor_wildcard() {
527544
let secp = secp256k1_zkp::Secp256k1::new();
528-
let params = &elements::AddressParams::ELEMENTS;
545+
let params = &elements::AddressParams::LIQUID;
529546

530547
let xprv = "xprv9s21ZrQH143K28NgQ7bHCF61hy9VzwquBZvpzTwXLsbmQLRJ6iV9k2hUBRt5qzmBaSpeMj5LdcsHaXJvM7iFEivPryRcL8irN7Na9p65UUb";
531548
let xpub = "xpub661MyMwAqRbcEcT9W98HZP2kFzyzQQZkYnrRnrM8uD8kH8kSeFoQHq1x2iihLgC6PXGy5LrjCL66uSNhJ8pwjfx2rMUTLWuRMns2EG9xnjs";
532549
let desc_view_str = format!("ct({}/*,elwpkh({}/*))#wk8ltq6h", xprv, xpub);
533550
let desc_bare_str = format!("ct({}/*,elwpkh({}/*))#zzac2dpf", xpub, xpub);
534551
let index = 1;
535-
let conf_addr = "el1qqf6690fpw2y00hv5a84zsydjgztg2089d5xnll4k4cstzn63uvgudd907qpvlvvwd5ym9gx7j0v46elf23kfxunucm6ejjyk0";
536-
let unconf_addr = "ert1qkjhlqqk0kx8x6zdj5r0f8k2avl54gmyn7qjk2k";
552+
let conf_addr = "lq1qqf6690fpw2y00hv5a84zsydjgztg2089d5xnll4k4cstzn63uvgudd907qpvlvvwd5ym9gx7j0v46elf23kfxhmutc58z4k24";
553+
let unconf_addr = "ex1qkjhlqqk0kx8x6zdj5r0f8k2avl54gmynyjcw4v";
537554

538555
let desc_view = Descriptor::<DescriptorPublicKey>::from_str(&desc_view_str).unwrap();
539556
let desc_bare = Descriptor::<DescriptorPublicKey>::from_str(&desc_bare_str).unwrap();

0 commit comments

Comments
 (0)