lnurlcash-conformance 0.11.0 → 0.12.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,34 @@ 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.12.0 - 2026-09-16
8
+
9
+ **`ck1` now carries a BIP-340 Schnorr ownership proof.** This follows the
10
+ current LUD-25 draft and is intentionally incompatible with the former
11
+ recoverable-ECDSA bearer encoding.
12
+
13
+ - `ck1` is bech32m over the note's 32-byte x-only public key followed by a
14
+ 64-byte Schnorr signature over the raw UTF-8 bytes of `LNURLcash`.
15
+ - Part 2 and Nostr-seed vectors have been regenerated. Their self-checks
16
+ verify the embedded key and Schnorr proof independently; `cs1` remains an
17
+ amount-bearing recoverable-ECDSA mint certificate.
18
+ - The live grader now spends its Part 2 probe with the new 96-byte `ck1`.
19
+ - Address proof vectors use Schnorr signatures over their raw UTF-8 messages,
20
+ matching the draft while address-management design remains under review.
21
+ - Part 2's address branch is now the literal `m/139'/d1/d2/d3/d4` path the
22
+ draft specifies, with no separate `m/139'/1'` purpose. The earlier hop only
23
+ existed to dodge a collision with a reference-wallet extension that
24
+ deterministically derived Part 1 secrets off the same root; that extension
25
+ is gone, so there is nothing left to collide with. Adds `spec-vectors.json`,
26
+ transcribing LUD-25's own published "Test Vectors" section.
27
+
28
+ ## 0.11.1 - 2026-09-15
29
+
30
+ - Unsigned plain-hash Part 1 mutation outputs now pass the live grader cleanly
31
+ instead of producing an interoperability warning. Any optional legacy
32
+ signature that is returned must still verify; Part 2 `cp1` outputs still
33
+ require an amount-bearing `cs1` certificate.
34
+
7
35
  ## 0.11.0 - 2026-09-15
8
36
 
9
37
  **Amount-bearing certificates and internal-transfer discovery.** Part 2 now
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 |
@@ -95,7 +95,7 @@ must survive:
95
95
  | `--echoWrongK1` | answers the informational GET with a different `k1` |
96
96
  | `--lieAboutValue=N` | reports a `maxWithdrawable` it never signed |
97
97
  | `--signatureLayout=leading` | emits the recovery id at the other end |
98
- | `--signatures=false` | issues no Part 1 signatures. Accepted as the reference mint's degraded no-signer mode; the reference wallet will refuse an unsigned successful mutation |
98
+ | `--signatures=false` | issues no optional Part 1 signatures. Unsigned plain-hash outputs are conforming; Part 2 `cp1` outputs still require certificates |
99
99
  | `--serverGeneratedSecrets` | hands back a secret it generated — the exposure `h` exists to close |
100
100
  | `--meltNeverSettles` | holds every melt in flight, so notes stay `pending` |
101
101
  | `--meltAlwaysFails` | fails every payment, restoring the note |
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.0",
3
+ "version": "0.12.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
@@ -1205,12 +1207,12 @@ export const gradeNote = async (noteUrl, report, options = {}) => {
1205
1207
  : 'the signature does not verify against the advertised mintPubkey and amount'
1206
1208
 
1207
1209
  await report.check('a legacy hash mutation signature verifies when present', async () => {
1208
- // The reference mint can operate without a signing backend and then has
1209
- // no signature to return. That mode remains usable by tolerant clients,
1210
- // but the committed reference wallet requires a signature after a
1211
- // successful mutation, so omission is an interoperability warning.
1210
+ // Part 1 signatures are optional: a plain hash has no public note
1211
+ // identifier to certify without disclosing its bearer secret. Older
1212
+ // SERVICE implementations may still return one, and every signature
1213
+ // that is present must verify.
1212
1214
  if (currentSig === null) {
1213
- throw soft('unsigned legacy output: accepted as no-signer mode, but strict reference-wallet clients may refuse it')
1215
+ return 'unsigned legacy Part 1 output accepted'
1214
1216
  }
1215
1217
  assert(info.mintPubkey, 'a sig with no mintPubkey advertised verifies against nothing')
1216
1218
  assert(isCompressedPubkey(info.mintPubkey), 'mintPubkey is not a 33-byte compressed secp256k1 key')
@@ -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": "ck1sxfysa0hwujtrez0kum3g02nk43nccle38zfakfk75zweznhvh2vc2fjcpd26dgewjlmms72vwuryhv8pcjd3fxy5cf0j7el7a3yv7z8wzaslapkk63t8el8mre9j3ujf8auyn75we4s3fkcfgwuvwdwvg6mtk7w"
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": "ck1pujs4f58j492r7c8dv2tpwvr5r9vdn349j448jgum67f5jqd55nsmc8ld0udlhzwmjqpgpru86flf7ctqkle2q7fpk2ejd2yw3mmwaf2vmen3nd4lxhj5eafq32y366jln93hsva83uy7x5jgmmj5pxlkuhlqkju"
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": "ck17dxepk393jkrvhf35yela8ar3g3a9u2hueljhnzuwwqnf5f560pwmpvkw3y748nnxvre09fqwkd2dfuus5hq6hrnphawsv3mdjjh0y4y6en0gtt9pdf9ypazf3t2wwdql9khnyfu2w0sykaxzec5uc5n9v077het"
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": "ck1jj76qr24y2yy3uk24srs3u85heaz7n7lwtmhuytpmhxen4vteaj5tawnqkvv5srymr4tggxh8lgjyczykzegdh7l9wks2tfm7s92e9evvxt47jax4p7hywucgv909qvr9wev5538x8c3vfqt2fg7e3tduq85n0ch"
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": "ck1697n4lrxwg2gwgg9k6vz2jzegry6r2e4edujam62hyraxldzjmzzdf3fc5kf9stnzrz9vmlgu77w74cf5d06ls9c3afu9fy928tfm60ajc7qxr079ucvp0d5da00xa2k87vmj3g6djtq2e539wwgw3zvqvqk44q9"
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": "ck1zlvdvr6z8yxztmyat9s2pu2txvqy8dkptn9up23ana2mp8636z5700g92drdgpmrcck94ukp0rv205lt9dr3q8n5me075t8vfr8pmquxeh2q2zyajthm50cu94njcg3ca04sxph29ry0czclncxpdrefxctmphza"
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": "ck140js02aq80c0lqrk4l6jgfqrsx58er4xjc84kdtyu57an3ysusxvjqnkk0xdf85m9a3q7p89ay6v4mphecxzfq88wu50u82vu7ka63l75cncccevldg75yasm4lu0w4p7n977u36n234jd9kyaumznzz65wp7ve6"
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": "ck1aup2aqex7clfuzrntmnwley5qr775l7ryz0m4ttrgpv7gqjqasclk0a4tf6ckf7gpzwdfflrknq97vpknmzupjy5g9ud502rmnvvrl7zjkpspf9hnygqlqxekte6gu0t40dcnms6s6t70c8lfn39g6jwwu4r5xye"
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": "ck1kl9u6cd65zamz8f87qaex0qtuef2gjhvcexljrh0m35pstasydz552pn8mu9u3ahmks9wxrutq570dya0cz4l3jdtju3rwgzzdhqcvmdekf8l6rysty2wd6065t5tr7kdy5a9y9fea9lvx0ag6kjch842qmfp2ss"
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": "ck1fzn5nc4wvxauzlfg2kh93vdcd3jjpnce7x50ej386l3urer8jet2heflrprv99f3fn2hacezrcwvjrll5n77r5ayy0pqh0cst5r8mj8zr0ntst4a6zf58x0v673qy6pjvwz35cerdtf4vxskv6wwp7cmguqzhj8n"
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": "ck1ngxk90en4ulxjcwax25a6ala6tkaleq2zpq6ax62phagxn6ldpyn3m00qgm0n260d70t2x7e95uk4nmpt088qa0nkpqkqmd0unwmq60ze6mm740sapygxdlaje4gqlrygqkscfunh7cva9g95gudzwhgas2f7f9l"
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": "ck169pp8auz07a4v8nucjmgdhzcjndjtuwd7daa925l37zpn2qt03xjzudtknh5t0zedhrt78qvmf0ud3fs3n8zuaasmll44qs0zwmqqtg8w69l2ng85pgw6mkrrg80jscycq0z9xyfxq7khs7ply44wr86fsjgussv"
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
  ]