Bump cashu-ts to 4.7.1 and drop the onchain counter workaround

4.7.1 fixes the defect we routed around: mintProofsOnchain (and
mintProofsBolt12) narrowed their config to {keysetId} and so silently
dropped onCountersReserved — the callback that reports which derivation
indices the library consumed. Without it our keyset counter would desync
and risk blinded-secret reuse, so mintOnchainProofs called the generic
mintProofs('onchain', ...) instead, which took the full MintProofsConfig.

4.7.1 widens the config on both helpers to Omit<MintProofsConfig, 'privkey'>
(cashubtc/cashu-ts#784), so the typed helper now carries the callback and the
workaround is unnecessary. Reverted to mintProofsOnchain(amount, quote,
privkey, config).

That this typechecks is itself the check: under 4.7.0 passing
onCountersReserved to that config was an excess-property error.

260/260 tests pass; typecheck introduces no new errors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
minibits-cash
2026-07-14 14:35:11 +02:00
parent e1c911e0a2
commit b0b75e0607
3 changed files with 14 additions and 25 deletions

View File

@@ -22,7 +22,7 @@
"machine-translate": "npx @inlang/cli machine translate --project minibits.inlang"
},
"dependencies": {
"@cashu/cashu-ts": "^4.7.0",
"@cashu/cashu-ts": "^4.7.1",
"@fortawesome/fontawesome-svg-core": "^7.1.0",
"@fortawesome/free-brands-svg-icons": "^7.1.0",
"@fortawesome/free-regular-svg-icons": "^7.1.0",

View File

@@ -920,23 +920,13 @@ export const WalletStoreModel = types
/**
* Mint ecash against a confirmed onchain deposit.
*
* Mirrors `mintProofs` (same counter discipline, same NUT-19 in-flight
* record, same error surface) with two differences:
* Mirrors `mintProofs`: same counter discipline, same NUT-19 in-flight record,
* same error surface.
*
* - it goes through the GENERIC `mintProofs('onchain', ...)` rather than
* the `mintProofsOnchain` sugar. The sugar takes a narrowed config of
* just `{keysetId}` — it silently drops `onCountersReserved`, which is
* how we learn which derivation indices the library actually consumed.
* Losing that would desync our counter and risk blinded-secret reuse.
* The generic form takes the full MintProofsConfig, which carries BOTH
* `privkey` and `onCountersReserved`.
*
* - `quote` is the whole MintQuoteOnchainResponse, not an id. cashu-ts
* signs the request (NUT-20) when the quote carries a `pubkey`, and it
* reads that off the quote object.
*
* `privkey` is derived on demand from the seed and the quote's stored
* counterIndex; it is never persisted.
* `quote` is the whole MintQuoteOnchainResponse, not an id — cashu-ts signs the
* request (NUT-20) when the quote carries a `pubkey`, and it reads that off the
* quote object. `privkey` is derived on demand from the seed and the quote's
* stored counterIndex; it is never persisted.
*/
mintOnchainProofs: flow(function* mintOnchainProofs(
mintUrl: string,
@@ -995,13 +985,12 @@ export const WalletStoreModel = types
let reservedCounters: OperationCounters | undefined
try {
const proofs = yield cashuWallet.mintProofs(
'onchain',
const proofs = yield cashuWallet.mintProofsOnchain(
mintParams.amount,
quoteResponse,
privkey,
{
keysetId: mintParams.options?.keysetId,
privkey,
onCountersReserved: (info: OperationCounters) => {
reservedCounters = info
log.debug('[mintOnchainProofs] Counters reserved', info)

View File

@@ -2869,15 +2869,15 @@ __metadata:
languageName: node
linkType: hard
"@cashu/cashu-ts@npm:^4.7.0":
version: 4.7.0
resolution: "@cashu/cashu-ts@npm:4.7.0"
"@cashu/cashu-ts@npm:^4.7.1":
version: 4.7.1
resolution: "@cashu/cashu-ts@npm:4.7.1"
dependencies:
"@noble/curves": ^2.2.0
"@noble/hashes": ^2.2.0
"@scure/base": ^2.2.0
"@scure/bip32": ^2.2.0
checksum: 006f3dea45ceb6920b0d555e3b567576ee0fa9b48024110323101d26e57bc31a4c0157f6ab642cb0b185395999b262b1ecb6f70d05cf7ccb9560943a4f652159
checksum: c8dfb7afd37835f0a79e30cc3e4f0fe70cafbd2670aa6674a978749ecec19c0d8e34597959cc05b96b9663f9ca9803bfd78efcc1d295e7b5e0f3a59c75875477
languageName: node
linkType: hard
@@ -14823,7 +14823,7 @@ __metadata:
"@babel/plugin-proposal-export-namespace-from": ^7.18.9
"@babel/preset-env": ^7.25.3
"@babel/runtime": ^7.25.0
"@cashu/cashu-ts": ^4.7.0
"@cashu/cashu-ts": ^4.7.1
"@expo/fingerprint": ^0.13.4
"@fortawesome/fontawesome-svg-core": ^7.1.0
"@fortawesome/free-brands-svg-icons": ^7.1.0