@forgesworn/moneyer 0.20.1 → 0.21.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
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.21.0 - 2026-10-16
4
+
5
+ - **Certificates go out as `c` and `c2` only.** The `sig`/`sig2` that had
6
+ carried the same value alongside them since 0.17.0 are dropped, as dni
7
+ asked. The draft never named them, the reference mint emits only `c`/`c2`,
8
+ and every wallet that verifies a moneyer certificate reads `c` first:
9
+ notecase since 0.25.0, heartwood since 0.18.0-beta.24, lnurl-wallet,
10
+ lnurlcash-core and its Python and Go ports. The bound-mint receipt on
11
+ `/verify` is a different field and keeps its name.
12
+
3
13
  ## 0.20.1 - 2026-10-13
4
14
 
5
15
  - **A name with a cx1 issues invoices its payer's wallet will accept.** Its
package/README.md CHANGED
@@ -393,9 +393,8 @@ spend is refused with a reason and the note stays outstanding; a verifier
393
393
  that crashes, errors or stalls refuses too, and never accepts.
394
394
 
395
395
  Every note gets a certificate, `cs1` over hex(Q) and its amount: `c` on
396
- the informational GET, `c`/`c2` on every rotate, split and merge. The same
397
- value also goes out as the older `sig`/`sig2` until wallets reading only
398
- those have moved on. The
396
+ the informational GET, `c`/`c2` on every rotate, split and merge, and
397
+ under no other name. The
399
398
  informational GET verifies a `k1` in full before answering, so a wallet
400
399
  checking a note it was handed learns whether its spend really opens it.
401
400
 
@@ -692,7 +691,7 @@ clearnet.
692
691
  | `/p/cb` | LUD-06 pay callback; issues the mint invoice for the note the `comment` names, a hash or a `cp1` key (`h` is an older spelling for a hash) |
693
692
  | `/z/cb/<zap name>` | the zap callback; validates the kind 9734 and issues the invoice. A name with a `cx1` calls back at `/z/cb/<zap name>/<index>`, the index its payRequest advertised, so the invoice commits to exactly the metadata the payer was shown |
694
693
  | `/verify/<hash>` | LUD-21 verify, for mint invoices and melt payments |
695
- | `/w` | LUD-03 informational GET; accepts `k1` (a preimage, `ck1` or `cw1`, verified in full) or the non-disclosing LUD-25 `p` check (a bearer note's h or any `cp1`; `h` is its older name, still accepted); a live note carries `payLink` and its `cs1` as `sig` |
694
+ | `/w` | LUD-03 informational GET; accepts `k1` (a preimage, `ck1` or `cw1`, verified in full) or the non-disclosing LUD-25 `p` check (a bearer note's h or any `cp1`; `h` is its older name, still accepted); a live note carries `payLink` and its `cs1` as `c` |
696
695
  | `/w/cb` | the mutating callback: melt, rotate, split, merge; inputs as preimages, `ck1`s or `cw1`s, outputs as `p1`/`p2` (a bearer note's h or a `cp1`), or their older names `h`/`h2` |
697
696
  | `POST /names` | claim a lightning address, authenticated by NIP-98 |
698
697
  | `/.well-known/nostr.json` | NIP-05 for the names this mint serves |
package/dist/server.js CHANGED
@@ -97,13 +97,12 @@ export const createMoneyer = async (config, deps = {}) => {
97
97
  // LUD-25 offline verification: a cs1 over hex(Q) and the amount, for
98
98
  // every note, bearer notes included.
99
99
  const certify = (q, amountMsat) => encodeCs1WithAmount(amountMsat, hexToBytes(signer.sign(q, amountMsat)));
100
- // LUD-25 names the certificate `c` (and `c2` for split change). The old
101
- // `sig`/`sig2` go out alongside it until the wallets that read only those
102
- // have moved on.
103
- const certified = (field, q, amountMsat) => {
104
- const cs1 = certify(q, amountMsat);
105
- return field === 'c' ? { c: cs1, sig: cs1 } : { c2: cs1, sig2: cs1 };
106
- };
100
+ // LUD-25 names the certificate `c` (and `c2` for split change). The
101
+ // `sig`/`sig2` that went out alongside them from 0.17.0 to 0.20.1 are
102
+ // gone: the draft never named them, and every wallet reads `c`.
103
+ const certified = (field, q, amountMsat) => ({
104
+ [field]: certify(q, amountMsat)
105
+ });
107
106
  // Every host this mint answers on. A spend's signature is bound to one
108
107
  // domain, and a note travels as a URL naming one host, so a signature
109
108
  // bound to any of this mint's own hosts is this mint's. Without a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgesworn/moneyer",
3
- "version": "0.20.1",
3
+ "version": "0.21.0",
4
4
  "description": "An LNURLcash (LUD-25) mint - strikes Lightning bearer notes. Independent implementation, cln/lnd funding sources, SQLite, zero HTTP framework.",
5
5
  "author": "TheCryptoDonkey",
6
6
  "license": "MIT",