lnurlcash-conformance 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,57 @@ Semantic versioning. While the LUD-25 draft is unmerged, `0.x` minor bumps
4
4
  may add or tighten checks that a previously-passing mint now fails; pin an
5
5
  exact version if you gate CI on the grade.
6
6
 
7
+ ## 0.13.0 - 2026-09-16
8
+
9
+ **`ck1` and the LN-address register/unregister proof now sign a sha256
10
+ digest, not the raw message.** BIP-340's own reference implementation, and
11
+ most conforming Schnorr signers (`libsecp256k1`'s `schnorrsig` module
12
+ included), only accept a 32-byte message; the previous vectors signed the
13
+ raw UTF-8 bytes directly, which only worked because `@noble/curves`'
14
+ `schnorr.sign` is more permissive than that, and would not have
15
+ interoperated with an off-the-shelf signer (2026-09-16, `luds#6de59b2`).
16
+
17
+ - `ownershipSignature` is now a 64-byte BIP-340 Schnorr signature over
18
+ `sha256("LNURLcash")`, a fixed 32-byte digest, instead of the raw 9-byte
19
+ string. `part2.json`'s `conventions.ownershipMessageEncoding` documents
20
+ this; `part2.conventions.ownershipMessage` itself is unchanged.
21
+ - Address proof signatures are now over `sha256("LNURLcash:<action>:<username>")`
22
+ instead of the raw string - `username` is variable-length, so the raw
23
+ message would otherwise only rarely land on the required 32 bytes.
24
+ `addressProofs` entries gain a `digest` field alongside `message`.
25
+ - `spec-vectors.json`'s vectors 2 and 3 are regenerated to match 25.md's own
26
+ published values, and gain `digest`/`register digest`/`unregister digest`
27
+ fields transcribing the spec's own hex.
28
+ - Nostr-seed vectors are regenerated to match; their `ck1`s use the same new
29
+ digest scheme.
30
+ - This is a read/verify-side compatibility break for any consumer still
31
+ checking `Verify(pk, "LNURLcash", sig)` directly - a note signed under
32
+ 0.12.0's scheme no longer verifies under these vectors' convention text,
33
+ though nothing stops an implementation from independently keeping a
34
+ transitional fallback read path for notes minted before this change (see
35
+ `lnurl-wallet`'s own `legacy`-flagged `recoverNoteOwnershipPubkey`).
36
+
37
+ ## 0.12.0 - 2026-09-16
38
+
39
+ **`ck1` now carries a BIP-340 Schnorr ownership proof.** This follows the
40
+ current LUD-25 draft and is intentionally incompatible with the former
41
+ recoverable-ECDSA bearer encoding.
42
+
43
+ - `ck1` is bech32m over the note's 32-byte x-only public key followed by a
44
+ 64-byte Schnorr signature over the raw UTF-8 bytes of `LNURLcash`.
45
+ - Part 2 and Nostr-seed vectors have been regenerated. Their self-checks
46
+ verify the embedded key and Schnorr proof independently; `cs1` remains an
47
+ amount-bearing recoverable-ECDSA mint certificate.
48
+ - The live grader now spends its Part 2 probe with the new 96-byte `ck1`.
49
+ - Address proof vectors use Schnorr signatures over their raw UTF-8 messages,
50
+ matching the draft while address-management design remains under review.
51
+ - Part 2's address branch is now the literal `m/139'/d1/d2/d3/d4` path the
52
+ draft specifies, with no separate `m/139'/1'` purpose. The earlier hop only
53
+ existed to dodge a collision with a reference-wallet extension that
54
+ deterministically derived Part 1 secrets off the same root; that extension
55
+ is gone, so there is nothing left to collide with. Adds `spec-vectors.json`,
56
+ transcribing LUD-25's own published "Test Vectors" section.
57
+
7
58
  ## 0.11.1 - 2026-09-15
8
59
 
9
60
  - Unsigned plain-hash Part 1 mutation outputs now pass the live grader cleanly
package/README.md CHANGED
@@ -48,7 +48,7 @@ for (const c of cases) {
48
48
  | `signature.json` | offline verification, both recovery-id orderings, malformed input |
49
49
  | `derivation.json` | deterministic note secrets from a BIP39 seed |
50
50
  | `cash-derivation.json` | LUD-25's seed-recoverable note secrets under `m/139'`, with BIP-32's own vector 1 |
51
- | `part2.json` | Part 2: `cp1`/`ck1`/amount-bearing `cs1`/`cx1`, the per-note key tweak, note ownership and mint certificates, on the reference wallet's `m/139'/1'` address path |
51
+ | `part2.json` | Part 2: `cp1`, 96-byte-payload Schnorr `ck1`, amount-bearing recoverable-ECDSA `cs1`, `cx1`, the per-note key tweak, ownership proofs and mint certificates, on the reference wallet's `m/139'/1'` address path |
52
52
  | `bech32.json` | LUD-01 encoding, round trips, corrupted checksums |
53
53
  | `url-admission.json` | which URLs may be fetched, and why `data:` must never be |
54
54
  | `input-resolution.json` | bech32, LUD-17, Lightning Addresses, bare domains |
package/llms.txt CHANGED
@@ -13,7 +13,8 @@ vectors/index.json:
13
13
  signature.json offline verification, both recovery-id orderings
14
14
  derivation.json deterministic note secrets from a BIP39 seed
15
15
  cash-derivation.json LUD-25 m/139' note secrets, plus BIP-32 vector 1
16
- part2.json Part 2: cp1/ck1/cs1/cx1, the note-key tweak, ownership sigs, certificates;
16
+ part2.json Part 2: cp1, ck1=pubkey||BIP340 Schnorr sig, cs1=recoverable ECDSA certificate,
17
+ cx1, the note-key tweak, ownership proofs and certificates;
17
18
  address path is the reference wallet's m/139'/1'/d1..d4 (not the text's)
18
19
  bech32.json LUD-01 encoding
19
20
  url-admission.json which URLs may be fetched (https, or http to loopback/.onion)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lnurlcash-conformance",
3
- "version": "0.11.1",
3
+ "version": "0.13.0",
4
4
  "description": "Language-neutral conformance vectors, an adversarial mock mint, and a grader for LNURLcash (LUD-25) implementations",
5
5
  "author": "TheCryptoDonkey",
6
6
  "license": "MIT",
package/runner/index.mjs CHANGED
@@ -53,9 +53,10 @@ const verifySignature = (k1, amountMsat, signatureHex, pubkeyHex) => {
53
53
  const verifyCertificate = (pubkeyHex32, amountMsat, sig, mintPubkeyHex) =>
54
54
  recoversTo(signedMessageDigest(`LNURLcash:${amountMsat}:${pubkeyHex32}`), sig, mintPubkeyHex)
55
55
 
56
- // Part 2's bech32m strings: cp1 (32-byte key), ck1 and cs1 (65-byte
57
- // signature). cs1 has a variable HRP: "cs" plus the amount under BOLT-11's
58
- // amount rules. Longer than BIP-173's 90 characters by design.
56
+ // Part 2's bech32m strings: cp1 (32-byte key), ck1 (32-byte key plus 64-byte
57
+ // Schnorr signature), and cs1 (65-byte recoverable ECDSA signature). cs1 has
58
+ // a variable HRP: "cs" plus the amount under BOLT-11's amount rules. Longer
59
+ // than BIP-173's 90 characters by design.
59
60
  const BECH32M_LIMIT = 200
60
61
  const encodeCash = (hrp, bytes) => bech32m.encode(hrp, bech32m.toWords(bytes), BECH32M_LIMIT)
61
62
  const decodeCash = (hrp, value, length) => {
@@ -89,11 +90,12 @@ const decodeCertificate = value => {
89
90
  return signature ? {amountMsat, signature} : null
90
91
  }
91
92
 
92
- // The bearer secret of a cp1 note: the key's signature over the fixed
93
- // message "LNURLcash", r || s || recovery-id, the same value every time.
93
+ // The bearer secret of a cp1 note: its x-only key followed by a BIP-340
94
+ // Schnorr signature over the raw UTF-8 bytes of "LNURLcash".
94
95
  const ownershipProof = secretKey => {
95
- const lead = secp256k1.sign(signedMessageDigest('LNURLcash'), secretKey, {format: 'recovered', prehash: false})
96
- return encodeCash('ck', new Uint8Array([...lead.subarray(1), lead[0]]))
96
+ const pubkey = schnorr.getPublicKey(secretKey)
97
+ const signature = schnorr.sign(utf8ToBytes('LNURLcash'), secretKey)
98
+ return encodeCash('ck', new Uint8Array([...pubkey, ...signature]))
97
99
  }
98
100
 
99
101
  // LUD-17: lnurlw://host/path is https://host/path, or http:// when the host
@@ -24,6 +24,7 @@
24
24
  "retried-mutation.json",
25
25
  "mint-to-hash.json",
26
26
  "part2.json",
27
- "nostr-seed.json"
27
+ "nostr-seed.json",
28
+ "spec-vectors.json"
28
29
  ]
29
30
  }
@@ -2,7 +2,7 @@
2
2
  "version": 1,
3
3
  "spec": "LUD-25 draft (lnurl/luds#301)",
4
4
  "extension": true,
5
- "description": "An extension, not LUD-25: a Part 2 address branch rooted in a Nostr identity key, for a holder with no BIP39 words. seed = HMAC-SHA256(key = identity (the 32-byte secret key), msg = utf8(\"LNURLcash/nostr-seed\")); the branch is then the reference wallet's m/139'/1'/d1..d4 from that seed exactly as in part2.json, and every note field means what it means there. identityPubkey is the identity's x-only public key, the npub a lightning address belongs to. heartwood-esp32 derives this on the device and lnurlcash-kit exports it (deriveNostrAddressNode); a mint sees an ordinary cx1.",
5
+ "description": "An extension, not LUD-25: a Part 2 address branch rooted in a Nostr identity key, for a holder with no BIP39 words. seed = HMAC-SHA256(key = identity (the 32-byte secret key), msg = utf8(\"LNURLcash/nostr-seed\")); the branch is then the reference wallet's m/139'/d1..d4 from that seed exactly as in part2.json, and every note field means what it means there. identityPubkey is the identity's x-only public key, the npub a lightning address belongs to. heartwood-esp32 derives this on the device and lnurlcash-kit exports it (deriveNostrAddressNode); a mint sees an ordinary cx1.",
6
6
  "label": "LNURLcash/nostr-seed",
7
7
  "cases": [
8
8
  {
@@ -10,29 +10,29 @@
10
10
  "identityPubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
11
11
  "host": "moneyer.dev",
12
12
  "seed": "3ae0ea260b8066e219db88cf06b3ea9a170104875f3ea70a8434a2bc478ea121",
13
- "addressNode": "6ec86f66d87919b32347fdc6b93855bdf3649e2641fc57ee977b72ce9d34625f63246e942e8f68ec0b82c7bcc1b39e5643a2a304356bcb3821163805f9d2d700",
14
- "cx1": "cx1haqpwf60sc5gkzar0282ma4t56fm9fzlm43nr23ztyvxkl0w8j4xxfrwjshg768vpwpv00xpkw09vsaz5vzr267t8qs3vwq9l8fdwqq605q4l",
13
+ "addressNode": "348c4d86dbf210b834616ba9788ed14703994851d33afe69c3db2e894837d7604a09e82ce5fb759d28682b1b0f02dfa3e817d08936bd0904fd6d8aa454e4a0c4",
14
+ "cx1": "cx1zykmf4qhmtgy8f99megdvcxfydz7gsafv3zawfr25gngaz25nrqy5z0g9njlkava9p5zkxc0qt0686qh6zynd0gfqn7kmz4y2nj2p3qfra8js",
15
15
  "notes": [
16
16
  {
17
17
  "index": 0,
18
- "noteSecretKey": "6257b20051d8bf990abef9274b05eec72deed8f6a6adae958e91ceb51e06136a",
19
- "notePubkey": "5d4fc85381b2b548c802d96a3bb98c2b278fef566e4888545abf1ebb7f3bfc79",
20
- "cp1": "cp1t48us5upk2653jqzm94rhwvv9vnclm6kdeygs4z6hu0tkleml3uscuyhw6",
21
- "ck1": "ck1v5ua6x3ldunqyhj5mh89dyxt3g27uy2n8awq3cktj83jtn7hux0q9dgh4g6mly78vgmh4cgf34dq7l8ww7vadx644scv9h8tekq672qqr60q6e"
18
+ "noteSecretKey": "c5f3dcde2580c0aedb53e10cdd0feafc922ae5ee5eb062a0eb8383d1a86a0f2c",
19
+ "notePubkey": "81924875f77724b1e44fb737143d53b5633c63f989c49ed936f504ec8a7765d4",
20
+ "cp1": "cp1sxfysa0hwujtrez0kum3g02nk43nccle38zfakfk75zweznhvh2qq5776a",
21
+ "ck1": "ck1sxfysa0hwujtrez0kum3g02nk43nccle38zfakfk75zweznhvh2tw737u8nd8nwtltzekxu5n8fl3v2l58rgv9sttlyz9s53gt9fcgxrzngzr05aqx8dkg6ma5xyfrc5m4dyp775mya9mc0ngw407ank8v3fa28c"
22
22
  },
23
23
  {
24
24
  "index": 1,
25
- "noteSecretKey": "ad44ab63c2ca7890e2a3a7644597dfcb7ad5aece2722d3506aa1b0a2df4d8461",
26
- "notePubkey": "d0ca20135641a5e43124476048992fc61dce1fba6e787d47d34e5a32de86675c",
27
- "cp1": "cp16r9zqy6kgxj7gvfygasy3xf0ccwuu8a6deu8637nfedr9h5xvawqrq3sk4",
28
- "ck1": "ck1p99ktdrr2vpf8unme3mjd9wvgx22840n05aqh78vw9kma337xntshw7pdldn4dujn3e23hgyx9znr3e60g8293gkv0h0xk9mskgqd9qq0cjpsp"
25
+ "noteSecretKey": "75bb52bf9a2d02a10b29f19878117ce67433f582c794b34191e431d427f49f6c",
26
+ "notePubkey": "0f250aa687954aa1fb076b14b0b983a0cac6ce352cab53c91cdebc9a480da527",
27
+ "cp1": "cp1pujs4f58j492r7c8dv2tpwvr5r9vdn349j448jgum67f5jqd55nschpuxm",
28
+ "ck1": "ck1pujs4f58j492r7c8dv2tpwvr5r9vdn349j448jgum67f5jqd55n6ugs90vj75dr6txwskqd4kwq297vg6x3ju2sc767dctyx7k3xcrrsazw672a7rj07hzm3nz8pxqfh06f30lr5ahadh2u06dgnyazzjc5tryvt"
29
29
  },
30
30
  {
31
31
  "index": 7,
32
- "noteSecretKey": "e9acf5438666e2563e12f77f904298a1c11b6f580ae44adfbaad5897b5f85893",
33
- "notePubkey": "f2bbf60e6d9697e488cdbfe4449045541e753e3062f14d06ad0934c9e98ebcfe",
34
- "cp1": "cp172alvrndj6t7fzxdhljyfyz92s08203svtc56p4dpy6vn6vwhnlqv0yvd2",
35
- "ck1": "ck1r55fx609dq0pz8qg6q73hsa0v4wkdz6ldxqr2rshg72ydvk3aezrv2c77xw8smqckgjrj9h5vp5n4tp04v6hae0yazrzcfcj4p7saespmxl28s"
32
+ "noteSecretKey": "5f7ac44acc23178d3cb365cc6da8d646eaf99af226476aca34381c0b667086ea",
33
+ "notePubkey": "f34d90da258cac365d31a133fe9fa38a23d2f157e67f2bcc5c738134d134d3c2",
34
+ "cp1": "cp17dxepk393jkrvhf35yela8ar3g3a9u2hueljhnzuwwqnf5f560pq8mq7n6",
35
+ "ck1": "ck17dxepk393jkrvhf35yela8ar3g3a9u2hueljhnzuwwqnf5f560pwq9syq6v8x9th452ww4jfcy838jdx2acsmhelwsfudnyf49sxppgyhaghgchzj0jtawc6slqnf650ewg3wcatet2cgxqpqgv7kyrjpvukdtx5"
36
36
  }
37
37
  ]
38
38
  },
@@ -41,29 +41,29 @@
41
41
  "identityPubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
42
42
  "host": "mint.example",
43
43
  "seed": "3ae0ea260b8066e219db88cf06b3ea9a170104875f3ea70a8434a2bc478ea121",
44
- "addressNode": "06825d4c6b2d170fa57fa0449dfd5c8576eb166f3c35a8e39cf14db396e2ec9c7c338e8dca8b99b65031b0fbc5740fae7328bb55ff156791f5cd9dc393b4da30",
45
- "cx1": "cx14tvrmc8yw86su4puf327tv28g5hl2re7p2ygwyttfcsqqg6hn9q8cvuw3h9ghxdk2qcmp779ws86uueghd2l79t8j86um8wrjw6d5vqfhgw4f",
44
+ "addressNode": "e113d66606250f23d2c6146faf3bc1d694c3410aeb896a7f8ce1a337afc4b5046723d34610415f6f19c3e349d321f1b8ee4e9e7c7e219f58e7a9c766b91eb2fb",
45
+ "cx1": "cx148dp7xtvqt8dcf4k4fzpeqj07cs9ysphhrry75sc0r45z9x7jl4kwg7ngcgyzhm0r8p7xjwny8cm3mjwne78ugvltrn6n3mxhy0t97cpvxjhf",
46
46
  "notes": [
47
47
  {
48
48
  "index": 0,
49
- "noteSecretKey": "3fe7bd30638deca734f56bec3adc015b32b5095ccd373113aae9392ef13aad09",
50
- "notePubkey": "5d8b9c7229178df9413e818e50535b7c53e8cb9ce519de831d0fd6548beab22e",
51
- "cp1": "cp1tk9ecu3fz7xljsf7sx89q56m03f73juuu5vaaqcaplt9fzl2kghqsdyjd4",
52
- "ck1": "ck154300fcxpmnr9308fs7ut66snvc2xhez2uap2ngn32zha2ew3kv9zz8hjnzncewzdrpk8jxgheg4wthclvl4cdnygkpn9c9kda64swgq34camt"
49
+ "noteSecretKey": "24c3ee1fe8d0e22aa35dcaf638480f105b3715a262baed54a756b88a97482805",
50
+ "notePubkey": "94bda00d55228848f2caac0708f0f4be7a2f4fdf72f77e1161ddcd99d58bcf65",
51
+ "cp1": "cp1jj76qr24y2yy3uk24srs3u85heaz7n7lwtmhuytpmhxen4vteajs2kejep",
52
+ "ck1": "ck1jj76qr24y2yy3uk24srs3u85heaz7n7lwtmhuytpmhxen4vteajejgsgfgdvp5xggf06q4uzz7pzgpnedq2r6s7jrqd52603xjvqhf646xe2pamjgn4eltfchqe4cjdws9cvja8gq9qggzw87u0kqnumdg5w0puv"
53
53
  },
54
54
  {
55
55
  "index": 1,
56
- "noteSecretKey": "a76597b438f20a6c57995d615ad8fa8f63dadbf2efbcdc8a73e4bdf9c605b203",
57
- "notePubkey": "66866a6420435fea5c9179e5ea9c31fb5cbd985c7f590a2a509cd5ef09e91b5d",
58
- "cp1": "cp1v6rx5epqgd075hy308j748p3ldwtmxzu0avs52jsnn277z0frdwslr7t47",
59
- "ck1": "ck1ea8utp0c6l35xgj6huluu6mypcvuqd9le4mmfm6dlcgl20f60lnpvjxnmtx6afpuxpc70ngdt0uhx07kuzws8amg6fcew2fetanrvyqpljdau4"
56
+ "noteSecretKey": "3a5abd58c3a4b79b93fa3ba9ff1e87db28474d867e0326ad1707cc32a2988636",
57
+ "notePubkey": "d17d3afc667214872105b69825485940c9a1ab35cb792eef4ab907d37da296c4",
58
+ "cp1": "cp1697n4lrxwg2gwgg9k6vz2jzegry6r2e4edujam62hyraxldzjmzq794p6h",
59
+ "ck1": "ck1697n4lrxwg2gwgg9k6vz2jzegry6r2e4edujam62hyraxldzjmzgqnnhg3smrut3e2mecqfc32awgsw48w6ganfnz6uhx7q7kdv2y7gsldah5ry0s2yr76masq67nmpqyq2hlyhyw3env9yugma7sel2lym3p747"
60
60
  },
61
61
  {
62
62
  "index": 7,
63
- "noteSecretKey": "8fb88ed836e0fe83728642938d6463cee74781b7d4b0d313717be6de50b6d046",
64
- "notePubkey": "14c823d28bbdd662c788ab968ac56f6aef6cb88e622afe11bb6ac2134f24fb80",
65
- "cp1": "cp1znyz855thhtx93ug4wtg43t0dthkewywvg40uydmdtppxneylwqq3nehx2",
66
- "ck1": "ck1gtw6p9hglznv5xhw0z5elf8u66mc2s38gq7703w9mfgl2pc7ds7q092nl8jz8nqh523qw5640lg8gw8kvj60u97mcu9l5zgfkp9hmnqpstf30d"
63
+ "noteSecretKey": "a8111935a495aaaadf4106d3598f26e4cdc8d90a28f936b4e304e2476928cb9e",
64
+ "notePubkey": "17d8d60f42390c25ec9d5960a0f14b330043b6c15ccbc0aa3d9f55b09f51d0a9",
65
+ "cp1": "cp1zlvdvr6z8yxztmyat9s2pu2txvqy8dkptn9up23ana2mp8636z5ss572x9",
66
+ "ck1": "ck1zlvdvr6z8yxztmyat9s2pu2txvqy8dkptn9up23ana2mp8636z5ugnmyatmt6p8mthmeqtusmrdmpf38mle2uuflxghmgrq5qv8853yt3j3tgn6r7vdxjffx5a86f8yennhmx6jj03rsn2ydukj70f80tyrgy6j0"
67
67
  }
68
68
  ]
69
69
  },
@@ -72,29 +72,29 @@
72
72
  "identityPubkey": "99e98a193119f2a8adbe6c7da81d3cd64a25742cc49f51f4ec0da44b22bf09bf",
73
73
  "host": "moneyer.dev",
74
74
  "seed": "efd666778ca0baac6648f11f4b3c428655a1a380caa89309a4d18ae1529f0999",
75
- "addressNode": "05d3aa38d42680e7d812aca8f11bedee79b19bcd0ecbe3ecb0fecf3efd5678f9ddcf32d0170b91e809ed08f3a5c06b47042921b7a230072d772edcf58fcb2b89",
76
- "cx1": "cx168cuwapgp0hd6h7resq0uh78eze300vg7ef6t4kmywpcmaptdemdmnej6qtshy0gp8ks3ua9cp45wppfyxm6yvq894mjah843l9jhzg4rxu74",
75
+ "addressNode": "bf754968c89fe2690752d3907cccdf0de31c7d88d91d0e6949cb15758bf2ff33df2d47acb7ea6947efb7f4cd3b1efab328ba0d19991ed162a10c59e6f0902bde",
76
+ "cx1": "cx1q65z0dnsxqhdhkqfv8zmzmfqj35pupz3mw6psarpsq4mhq72kqxa7t284jm75628a7mlfnfmrmatx296p5vej8k3v2ssck0x7zgzhhs70pesc",
77
77
  "notes": [
78
78
  {
79
79
  "index": 0,
80
- "noteSecretKey": "efe31724912e78b6a9262deecc2ad25c70022a551ca7dca2a99058fab81f00cf",
81
- "notePubkey": "5fcdc98dad667ff47d8e0394d9c4fb5664269558de303a4704281c64b01f4ca3",
82
- "cp1": "cp1tlxunrddvellglvwqw2dn38m2ejzd92cmccr53cy9qwxfvqlfj3s74l9ar",
83
- "ck1": "ck1yvcxftc6l8pduzetwhxzxmnled7w4xzgkldy7dsxga90rxux8r7kjy5l9wphc0p79k526wg3x4plk0nx54erv3z0gyt4r8082aqypyqpve8twp"
80
+ "noteSecretKey": "53186a2bd0d7b7eb363f1dc977d70dff851dbd18fcc969b39054c48a31363114",
81
+ "notePubkey": "abe507aba03bf0ff8076aff524240381a87c8ea6960f5b3564e53dd9c490e40c",
82
+ "cp1": "cp140js02aq80c0lqrk4l6jgfqrsx58er4xjc84kdtyu57an3ysusxqlsn468",
83
+ "ck1": "ck140js02aq80c0lqrk4l6jgfqrsx58er4xjc84kdtyu57an3ysusxpayppqx5sn6k86yulgga7fr5p3m3ftvufwurcevjp739sdcry4uw9gy4j3fknlfdh2yu4fgu675esgsj6gpmdrgkrkh8lq4zej948xy9fy2zj"
84
84
  },
85
85
  {
86
86
  "index": 1,
87
- "noteSecretKey": "4d2988c9a2dbec87b1c737fed42e37424a4a7cf72f2b3721a0668f40b4f8ad02",
88
- "notePubkey": "ae1fc4e14097b00e67343e62c3fad53eb836b201bd3774e24185b137fb7a6c7d",
89
- "cp1": "cp14c0ufc2qj7cquee58e3v87k486urdvsph5mhfcjpskcn07m6d37s6qvndu",
90
- "ck1": "ck12ggha0c0za5clvnx0cdqasuwexn947uyu6wmady9wvrt9xuzj4j3nsjk8r0uzq6yzyq6jmtnpeqarwxq28c7cz756g03et2frnqjtyqqp927xj"
87
+ "noteSecretKey": "647bcb7f67cd8df4f922d6a8e4599875fdbc4557f0d954dadd8deb2abcdc6f85",
88
+ "notePubkey": "ef02ae8326f63e9e08735ee6efe49400fdea7fc3209fbaad634059e40240ec31",
89
+ "cp1": "cp1aup2aqex7clfuzrntmnwley5qr775l7ryz0m4ttrgpv7gqjqascsl32t6c",
90
+ "ck1": "ck1aup2aqex7clfuzrntmnwley5qr775l7ryz0m4ttrgpv7gqjqascn7psav7cf6kntx3azyq5y6u4akfx56xyzc78fvj2m8vtt8lm7df65euxthga2e6dxrd85v8suu4nmw9fwvsnr2m66pnd3hjec33un6cvptz87"
91
91
  },
92
92
  {
93
93
  "index": 7,
94
- "noteSecretKey": "17bfb4cc3c3768c1cce2b33e8b9600e6231bbd925cd3fcc413009915f0348e4d",
95
- "notePubkey": "254feeb2016cc8deb154983d3da72dcad2c202736eca9031dcefd9693a9faae6",
96
- "cp1": "cp1y487avspdnydav25nq7nmfedetfvyqnndm9fqvwualvkjw5l4tnqkypely",
97
- "ck1": "ck1eesa3wacyrffpnl267vns608cah8cr6n35rlhnydwnq9r94jc2xxfceh0pt40f388u4k995m7f6dw5jhzcpgm97pjwf0dk0h7rj8rhcqt54nxa"
94
+ "noteSecretKey": "8e9f822bac3fa15bf844d5a8089ed5dca5ea8e4dfcb2656db3d6f3c649e2552a",
95
+ "notePubkey": "b7cbcd61baa0bbb11d27f03b933c0be652a44aecc64df90eefdc68182fb02345",
96
+ "cp1": "cp1kl9u6cd65zamz8f87qaex0qtuef2gjhvcexljrh0m35pstasydzsqakw2c",
97
+ "ck1": "ck1kl9u6cd65zamz8f87qaex0qtuef2gjhvcexljrh0m35pstasydznnsl9zjxpcqxjqh3tl5nfwu0md4u73e2c0rylwzxcfgred3x0rza3rpwgueqaklk2gtpf7pd6wuuzk7e45s65mypurkw0u4tz5vngmszzq7xq"
98
98
  }
99
99
  ]
100
100
  },
@@ -103,29 +103,29 @@
103
103
  "identityPubkey": "99e98a193119f2a8adbe6c7da81d3cd64a25742cc49f51f4ec0da44b22bf09bf",
104
104
  "host": "127.0.0.1:8899",
105
105
  "seed": "efd666778ca0baac6648f11f4b3c428655a1a380caa89309a4d18ae1529f0999",
106
- "addressNode": "9df193134dacac4561674b0f099f2dfcbfea884f3df655aa53117798cb3e3065a2eb93a6d2be16ca6acee95a43317b870a718bf96b0a2163e1c99c52f96518b7",
107
- "cx1": "cx10l8vgpvm7nsa6x8pn87ampuxvevw9eyxj2x2dzg72zk7fzrcfg7696un5mftu9k2dt8wjkjrx9acwzn330ukkz3pv0sun8zjl9j33dcymzxac",
106
+ "addressNode": "4dd8ced68171efb3d313f08aa29914887265f31039572447232b1e264335226a992ef8f9f093546f70831e9c8d02b9935a51c6dcf6b309dea75f5de81dfe794c",
107
+ "cx1": "cx17fp2k94gqgnh9qkrxz6eqfku4tk2ql8tcx8sk9uk0um4lxyfu66fjthcl8cfx4r0wzp3a8ydq2uexkj3cmw0dvcfm6n47h0grhl8jnq57myzr",
108
108
  "notes": [
109
109
  {
110
110
  "index": 0,
111
- "noteSecretKey": "72242afc3854a1c5d41748b25d2fddc06b75b663b69cd051eb8d102262703696",
112
- "notePubkey": "c01e87a6ebb3cb6596284a6b0da265df73bdaf885bfd0760929c7e2828cbfd0c",
113
- "cp1": "cp1cq0g0fhtk09kt93gff4smgn9maemmtugt07swcyjn3lzs2xtl5xqjvp56d",
114
- "ck1": "ck15kws54u2vk84hzmf2a6wm7yhnzljl907lmnsr5grgeg06evcj464qvccyflnzqdm44aenxg4gl2dmxfy34pvk3unt4k5ptl7yfr3hngqhn3gvc"
111
+ "noteSecretKey": "bb9aa4eb4dbd769f27bd6193e6ba061e523d7b23c4f34b6fc5e065eaca8c62d9",
112
+ "notePubkey": "48a749e2ae61bbc17d2855ae58b1b86c6520cf19f1a8fcca27d7e3c1e4679656",
113
+ "cp1": "cp1fzn5nc4wvxauzlfg2kh93vdcd3jjpnce7x50ej386l3urer8jetqv5d2g5",
114
+ "ck1": "ck1fzn5nc4wvxauzlfg2kh93vdcd3jjpnce7x50ej386l3urer8jettmy4deskhmny29q5xs6p0m5s7yw53p7qg2jqqpqva73cq6l2j6aq375x48t9dwly6dsr0wcsj4hemkd47t3llehnpqeas0tw4w47595km5cn0"
115
115
  },
116
116
  {
117
117
  "index": 1,
118
- "noteSecretKey": "cea7c90475f1cc5c19784bccee03b0f4b3972d6a8c3710fb820720cbd74e0d1d",
119
- "notePubkey": "ba9bcbb4e1b9e5884b40f5c3b15d59352814ca77bd226d51960f289a22e96319",
120
- "cp1": "cp1h2duhd8ph8jcsj6q7hpmzh2ex55pfjnhh53x65vkpu5f5ghfvvvsa3zqpx",
121
- "ck1": "ck126c3ppdcs0708ya2r8ffde5ggtnnp5tdu6und5tnygqu804t034rcu7mgefx0feusscnqr3ym78l2mywev5apjjptg9mm2g9d7sse3gp6tm5ss"
118
+ "noteSecretKey": "d927b683c5903e3835c6536fd182123517366c753b3703ba222ee9f6671e9b3b",
119
+ "notePubkey": "9a0d62bf33af3e6961dd32a9dd77fdd2eddfe40a1041ae9b4a0dfa834f5f6849",
120
+ "cp1": "cp1ngxk90en4ulxjcwax25a6ala6tkaleq2zpq6ax62phagxn6ldpysv0ugap",
121
+ "ck1": "ck1ngxk90en4ulxjcwax25a6ala6tkaleq2zpq6ax62phagxn6ldpyk3fhu5l2m5myt9u9v8q9nr0mdwv2qzxs86udmk7expmuhfw4vwxymck2q2337apv7szqwe2cm50zmk88g5s7klh84j227gmlqmz42dsexzqx8"
122
122
  },
123
123
  {
124
124
  "index": 7,
125
- "noteSecretKey": "4ea4a3488ae292b38074ef02996ffe5cc82be76e6fc509b0793d8e22be0c181f",
126
- "notePubkey": "49ef82ee7810b6d8099635eb422feca997850663daded48788993ec7d9585965",
127
- "cp1": "cp1f8hc9mnczzmdszvkxh45ytlv4xtc2pnrmt0dfpugnylv0k2ct9jst4p42x",
128
- "ck1": "ck16esd3xmpy5gw2elw3d83hpye7ygf5mtzcuh8aygwpevc9fjwjdmnwldmj3kajcu9da2kz92n5uty3ryqeckjxe586p2ncrsj20re9mgq7vv73l"
125
+ "noteSecretKey": "380b2d0880d914df24f8fc3965695684086718bd9dd0ae8abdf578173c81f9ae",
126
+ "notePubkey": "d14213f7827fbb561e7cc4b686dc5894db25f1cdf37bd2aa9f8f8419a80b7c4d",
127
+ "cp1": "cp169pp8auz07a4v8nucjmgdhzcjndjtuwd7daa925l37zpn2qt03xsawyu6y",
128
+ "ck1": "ck169pp8auz07a4v8nucjmgdhzcjndjtuwd7daa925l37zpn2qt03x3elajlphkya8y9crjfy2aextx2du236leme7x45hn43p9mjxh2fx95txqrpq5wz7dnxf8h7ht0n7hj9vw8p6gf7njrugswr099r25dv594f9s"
129
129
  }
130
130
  ]
131
131
  }
@@ -23,10 +23,10 @@
23
23
  "signature": "ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab"
24
24
  },
25
25
  {
26
- "url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&sig=cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
26
+ "url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&sig=cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
27
27
  "k1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
28
28
  "declaredAmountMsat": 21000,
29
- "signature": "cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
29
+ "signature": "cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
30
30
  "why": "an amount-bearing cs1 carries the declared amount without a duplicate amount query parameter"
31
31
  },
32
32
  {
@@ -90,8 +90,8 @@
90
90
  "url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&amount=21000",
91
91
  "k1": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
92
92
  "amountMsat": 21000,
93
- "signature": "cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
94
- "expect": "https://mint.example/w?k1=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&sig=cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
93
+ "signature": "cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
94
+ "expect": "https://mint.example/w?k1=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&sig=cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
95
95
  "why": "the cs1 already carries amount_msat, so the current reference wallet omits the duplicate amount parameter"
96
96
  }
97
97
  ],
@@ -106,8 +106,8 @@
106
106
  {
107
107
  "url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&amount=21000",
108
108
  "amountMsat": 21000,
109
- "signature": "cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
110
- "expect": "https://mint.example/w?sig=cs210n1p9s9uau4p08z7fee9zx56z6gw8564rnsp8se3f2uwpkpa7yxzecz842de66weae0x0hqv658k75h5ydpqqc9dm652nxsg42m2y82vmqp9qy0pt",
109
+ "signature": "cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
110
+ "expect": "https://mint.example/w?sig=cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
111
111
  "why": "a secret-free mirror also avoids duplicating the amount already encoded in cs1"
112
112
  }
113
113
  ]