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 +28 -0
- package/README.md +2 -2
- package/llms.txt +2 -1
- package/package.json +1 -1
- package/runner/index.mjs +14 -12
- package/vectors/index.json +2 -1
- package/vectors/nostr-seed.json +57 -57
- package/vectors/note-url.json +6 -6
- package/vectors/part2.json +396 -398
- package/vectors/spec-vectors.json +142 -0
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
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
57
|
-
// signature)
|
|
58
|
-
//
|
|
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:
|
|
93
|
-
//
|
|
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
|
|
96
|
-
|
|
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
|
-
//
|
|
1209
|
-
//
|
|
1210
|
-
//
|
|
1211
|
-
//
|
|
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
|
-
|
|
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')
|
package/vectors/index.json
CHANGED
package/vectors/nostr-seed.json
CHANGED
|
@@ -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'/
|
|
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": "
|
|
14
|
-
"cx1": "
|
|
13
|
+
"addressNode": "348c4d86dbf210b834616ba9788ed14703994851d33afe69c3db2e894837d7604a09e82ce5fb759d28682b1b0f02dfa3e817d08936bd0904fd6d8aa454e4a0c4",
|
|
14
|
+
"cx1": "cx1zykmf4qhmtgy8f99megdvcxfydz7gsafv3zawfr25gngaz25nrqy5z0g9njlkava9p5zkxc0qt0686qh6zynd0gfqn7kmz4y2nj2p3qfra8js",
|
|
15
15
|
"notes": [
|
|
16
16
|
{
|
|
17
17
|
"index": 0,
|
|
18
|
-
"noteSecretKey": "
|
|
19
|
-
"notePubkey": "
|
|
20
|
-
"cp1": "
|
|
21
|
-
"ck1": "
|
|
18
|
+
"noteSecretKey": "c5f3dcde2580c0aedb53e10cdd0feafc922ae5ee5eb062a0eb8383d1a86a0f2c",
|
|
19
|
+
"notePubkey": "81924875f77724b1e44fb737143d53b5633c63f989c49ed936f504ec8a7765d4",
|
|
20
|
+
"cp1": "cp1sxfysa0hwujtrez0kum3g02nk43nccle38zfakfk75zweznhvh2qq5776a",
|
|
21
|
+
"ck1": "ck1sxfysa0hwujtrez0kum3g02nk43nccle38zfakfk75zweznhvh2vc2fjcpd26dgewjlmms72vwuryhv8pcjd3fxy5cf0j7el7a3yv7z8wzaslapkk63t8el8mre9j3ujf8auyn75we4s3fkcfgwuvwdwvg6mtk7w"
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"index": 1,
|
|
25
|
-
"noteSecretKey": "
|
|
26
|
-
"notePubkey": "
|
|
27
|
-
"cp1": "
|
|
28
|
-
"ck1": "
|
|
25
|
+
"noteSecretKey": "75bb52bf9a2d02a10b29f19878117ce67433f582c794b34191e431d427f49f6c",
|
|
26
|
+
"notePubkey": "0f250aa687954aa1fb076b14b0b983a0cac6ce352cab53c91cdebc9a480da527",
|
|
27
|
+
"cp1": "cp1pujs4f58j492r7c8dv2tpwvr5r9vdn349j448jgum67f5jqd55nschpuxm",
|
|
28
|
+
"ck1": "ck1pujs4f58j492r7c8dv2tpwvr5r9vdn349j448jgum67f5jqd55nsmc8ld0udlhzwmjqpgpru86flf7ctqkle2q7fpk2ejd2yw3mmwaf2vmen3nd4lxhj5eafq32y366jln93hsva83uy7x5jgmmj5pxlkuhlqkju"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"index": 7,
|
|
32
|
-
"noteSecretKey": "
|
|
33
|
-
"notePubkey": "
|
|
34
|
-
"cp1": "
|
|
35
|
-
"ck1": "
|
|
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": "
|
|
45
|
-
"cx1": "
|
|
44
|
+
"addressNode": "e113d66606250f23d2c6146faf3bc1d694c3410aeb896a7f8ce1a337afc4b5046723d34610415f6f19c3e349d321f1b8ee4e9e7c7e219f58e7a9c766b91eb2fb",
|
|
45
|
+
"cx1": "cx148dp7xtvqt8dcf4k4fzpeqj07cs9ysphhrry75sc0r45z9x7jl4kwg7ngcgyzhm0r8p7xjwny8cm3mjwne78ugvltrn6n3mxhy0t97cpvxjhf",
|
|
46
46
|
"notes": [
|
|
47
47
|
{
|
|
48
48
|
"index": 0,
|
|
49
|
-
"noteSecretKey": "
|
|
50
|
-
"notePubkey": "
|
|
51
|
-
"cp1": "
|
|
52
|
-
"ck1": "
|
|
49
|
+
"noteSecretKey": "24c3ee1fe8d0e22aa35dcaf638480f105b3715a262baed54a756b88a97482805",
|
|
50
|
+
"notePubkey": "94bda00d55228848f2caac0708f0f4be7a2f4fdf72f77e1161ddcd99d58bcf65",
|
|
51
|
+
"cp1": "cp1jj76qr24y2yy3uk24srs3u85heaz7n7lwtmhuytpmhxen4vteajs2kejep",
|
|
52
|
+
"ck1": "ck1jj76qr24y2yy3uk24srs3u85heaz7n7lwtmhuytpmhxen4vteaj5tawnqkvv5srymr4tggxh8lgjyczykzegdh7l9wks2tfm7s92e9evvxt47jax4p7hywucgv909qvr9wev5538x8c3vfqt2fg7e3tduq85n0ch"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"index": 1,
|
|
56
|
-
"noteSecretKey": "
|
|
57
|
-
"notePubkey": "
|
|
58
|
-
"cp1": "
|
|
59
|
-
"ck1": "
|
|
56
|
+
"noteSecretKey": "3a5abd58c3a4b79b93fa3ba9ff1e87db28474d867e0326ad1707cc32a2988636",
|
|
57
|
+
"notePubkey": "d17d3afc667214872105b69825485940c9a1ab35cb792eef4ab907d37da296c4",
|
|
58
|
+
"cp1": "cp1697n4lrxwg2gwgg9k6vz2jzegry6r2e4edujam62hyraxldzjmzq794p6h",
|
|
59
|
+
"ck1": "ck1697n4lrxwg2gwgg9k6vz2jzegry6r2e4edujam62hyraxldzjmzzdf3fc5kf9stnzrz9vmlgu77w74cf5d06ls9c3afu9fy928tfm60ajc7qxr079ucvp0d5da00xa2k87vmj3g6djtq2e539wwgw3zvqvqk44q9"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"index": 7,
|
|
63
|
-
"noteSecretKey": "
|
|
64
|
-
"notePubkey": "
|
|
65
|
-
"cp1": "
|
|
66
|
-
"ck1": "
|
|
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": "
|
|
76
|
-
"cx1": "
|
|
75
|
+
"addressNode": "bf754968c89fe2690752d3907cccdf0de31c7d88d91d0e6949cb15758bf2ff33df2d47acb7ea6947efb7f4cd3b1efab328ba0d19991ed162a10c59e6f0902bde",
|
|
76
|
+
"cx1": "cx1q65z0dnsxqhdhkqfv8zmzmfqj35pupz3mw6psarpsq4mhq72kqxa7t284jm75628a7mlfnfmrmatx296p5vej8k3v2ssck0x7zgzhhs70pesc",
|
|
77
77
|
"notes": [
|
|
78
78
|
{
|
|
79
79
|
"index": 0,
|
|
80
|
-
"noteSecretKey": "
|
|
81
|
-
"notePubkey": "
|
|
82
|
-
"cp1": "
|
|
83
|
-
"ck1": "
|
|
80
|
+
"noteSecretKey": "53186a2bd0d7b7eb363f1dc977d70dff851dbd18fcc969b39054c48a31363114",
|
|
81
|
+
"notePubkey": "abe507aba03bf0ff8076aff524240381a87c8ea6960f5b3564e53dd9c490e40c",
|
|
82
|
+
"cp1": "cp140js02aq80c0lqrk4l6jgfqrsx58er4xjc84kdtyu57an3ysusxqlsn468",
|
|
83
|
+
"ck1": "ck140js02aq80c0lqrk4l6jgfqrsx58er4xjc84kdtyu57an3ysusxvjqnkk0xdf85m9a3q7p89ay6v4mphecxzfq88wu50u82vu7ka63l75cncccevldg75yasm4lu0w4p7n977u36n234jd9kyaumznzz65wp7ve6"
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
86
|
"index": 1,
|
|
87
|
-
"noteSecretKey": "
|
|
88
|
-
"notePubkey": "
|
|
89
|
-
"cp1": "
|
|
90
|
-
"ck1": "
|
|
87
|
+
"noteSecretKey": "647bcb7f67cd8df4f922d6a8e4599875fdbc4557f0d954dadd8deb2abcdc6f85",
|
|
88
|
+
"notePubkey": "ef02ae8326f63e9e08735ee6efe49400fdea7fc3209fbaad634059e40240ec31",
|
|
89
|
+
"cp1": "cp1aup2aqex7clfuzrntmnwley5qr775l7ryz0m4ttrgpv7gqjqascsl32t6c",
|
|
90
|
+
"ck1": "ck1aup2aqex7clfuzrntmnwley5qr775l7ryz0m4ttrgpv7gqjqasclk0a4tf6ckf7gpzwdfflrknq97vpknmzupjy5g9ud502rmnvvrl7zjkpspf9hnygqlqxekte6gu0t40dcnms6s6t70c8lfn39g6jwwu4r5xye"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"index": 7,
|
|
94
|
-
"noteSecretKey": "
|
|
95
|
-
"notePubkey": "
|
|
96
|
-
"cp1": "
|
|
97
|
-
"ck1": "
|
|
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": "
|
|
107
|
-
"cx1": "
|
|
106
|
+
"addressNode": "4dd8ced68171efb3d313f08aa29914887265f31039572447232b1e264335226a992ef8f9f093546f70831e9c8d02b9935a51c6dcf6b309dea75f5de81dfe794c",
|
|
107
|
+
"cx1": "cx17fp2k94gqgnh9qkrxz6eqfku4tk2ql8tcx8sk9uk0um4lxyfu66fjthcl8cfx4r0wzp3a8ydq2uexkj3cmw0dvcfm6n47h0grhl8jnq57myzr",
|
|
108
108
|
"notes": [
|
|
109
109
|
{
|
|
110
110
|
"index": 0,
|
|
111
|
-
"noteSecretKey": "
|
|
112
|
-
"notePubkey": "
|
|
113
|
-
"cp1": "
|
|
114
|
-
"ck1": "
|
|
111
|
+
"noteSecretKey": "bb9aa4eb4dbd769f27bd6193e6ba061e523d7b23c4f34b6fc5e065eaca8c62d9",
|
|
112
|
+
"notePubkey": "48a749e2ae61bbc17d2855ae58b1b86c6520cf19f1a8fcca27d7e3c1e4679656",
|
|
113
|
+
"cp1": "cp1fzn5nc4wvxauzlfg2kh93vdcd3jjpnce7x50ej386l3urer8jetqv5d2g5",
|
|
114
|
+
"ck1": "ck1fzn5nc4wvxauzlfg2kh93vdcd3jjpnce7x50ej386l3urer8jet2heflrprv99f3fn2hacezrcwvjrll5n77r5ayy0pqh0cst5r8mj8zr0ntst4a6zf58x0v673qy6pjvwz35cerdtf4vxskv6wwp7cmguqzhj8n"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
"index": 1,
|
|
118
|
-
"noteSecretKey": "
|
|
119
|
-
"notePubkey": "
|
|
120
|
-
"cp1": "
|
|
121
|
-
"ck1": "
|
|
118
|
+
"noteSecretKey": "d927b683c5903e3835c6536fd182123517366c753b3703ba222ee9f6671e9b3b",
|
|
119
|
+
"notePubkey": "9a0d62bf33af3e6961dd32a9dd77fdd2eddfe40a1041ae9b4a0dfa834f5f6849",
|
|
120
|
+
"cp1": "cp1ngxk90en4ulxjcwax25a6ala6tkaleq2zpq6ax62phagxn6ldpysv0ugap",
|
|
121
|
+
"ck1": "ck1ngxk90en4ulxjcwax25a6ala6tkaleq2zpq6ax62phagxn6ldpyn3m00qgm0n260d70t2x7e95uk4nmpt088qa0nkpqkqmd0unwmq60ze6mm740sapygxdlaje4gqlrygqkscfunh7cva9g95gudzwhgas2f7f9l"
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
"index": 7,
|
|
125
|
-
"noteSecretKey": "
|
|
126
|
-
"notePubkey": "
|
|
127
|
-
"cp1": "
|
|
128
|
-
"ck1": "
|
|
125
|
+
"noteSecretKey": "380b2d0880d914df24f8fc3965695684086718bd9dd0ae8abdf578173c81f9ae",
|
|
126
|
+
"notePubkey": "d14213f7827fbb561e7cc4b686dc5894db25f1cdf37bd2aa9f8f8419a80b7c4d",
|
|
127
|
+
"cp1": "cp169pp8auz07a4v8nucjmgdhzcjndjtuwd7daa925l37zpn2qt03xsawyu6y",
|
|
128
|
+
"ck1": "ck169pp8auz07a4v8nucjmgdhzcjndjtuwd7daa925l37zpn2qt03xjzudtknh5t0zedhrt78qvmf0ud3fs3n8zuaasmll44qs0zwmqqtg8w69l2ng85pgw6mkrrg80jscycq0z9xyfxq7khs7ply44wr86fsjgussv"
|
|
129
129
|
}
|
|
130
130
|
]
|
|
131
131
|
}
|
package/vectors/note-url.json
CHANGED
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"signature": "ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab"
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&sig=
|
|
26
|
+
"url": "https://mint.example/w?k1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&sig=cs210n14dvflf6u89wxrhp52zgu22ds0cdgegxh4d36p52z6cxydm5r200hq7y3rfrj8d32jpjuguptzhq7zy9l9mjzw4kzwfm9ahku82r58mcpr3lz8j",
|
|
27
27
|
"k1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
28
28
|
"declaredAmountMsat": 21000,
|
|
29
|
-
"signature": "
|
|
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": "
|
|
94
|
-
"expect": "https://mint.example/w?k1=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&sig=
|
|
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": "
|
|
110
|
-
"expect": "https://mint.example/w?sig=
|
|
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
|
]
|