
Batch Minting in Cashu: Solving Rate Limits and Proof Fragmentation
A new proposal in the Cashu protocol specifications is set to significantly improve mint-quote–based applications like npub.cash: batch minting.
As more services build on top of mint quotes, new scaling challenges have come up, particularly around fixed denominations and rate limits. Batch minting addresses these issues directly by making redemption more efficient and aggregation-friendly.
Why do we need batch minting?
In a typical Cashu wallet flow, minting ecash looks like this:
- The user determines the desired amount and requests a mint quote from the mint.
- The user pays the requested quote (e.g. a Lightning invoice).
- The user redeems the paid mint quote and receives ecash (Proofs).
Under normal circumstances, this process requires two mint interactions and completes within seconds. However, new applications have expanded how mint quotes are used.
A prime example (shameless plug) is npub.cash, which generates mint quotes on behalf of users and holds them until the user comes online to claim them. This LNURL-like workflow allows payments to be received asynchronously, even while the recipient is offline.
The tradeoff is that users may return to find not just one paid mint quote, but dozens or even hundreds. Each of these must be redeemed individually using the traditional flow.
At small scale this works fine. At larger scale, for example after a viral post that generates many incoming payments, the model begins to strain. This is where batch minting becomes necessary.
Rate Limits
If you use a npub.cash address on Nostr, post a viral note, and receive a large number of zaps, you may quickly accumulate many pending mint quotes.
The challenge arises when trying to redeem them. Mints typically enforce rate limits to protect against spam and DDoS attacks. As a result, most wallets also throttle their requests by default to avoid being blocked.
When a wallet needs to redeem a large number of pending quotes, for example, 100 separate mint quotes, it cannot process them all at once. Instead, it must redeem them gradually within the allowed rate limits. Under proper throttling, redeeming 100 quotes can easily take 5–10 minutes.
In other words, high inbound payment volume can translate into delayed settlement, not because of liquidity constraints, but due to protective rate limiting at the mint level.
Proof denominations
A Cashu token consists of one or more Proofs, which you can think of as individual coins in a wallet. Proofs exist in fixed denominations (commonly powers of two). When minting against a quote, a wallet must provide blinded messages whose denominations sum exactly to the quote amount.
For example, to mint a 31 sat quote, the wallet typically submits blinded messages for 16, 8, 4, 2, and 1 sats — five separate proofs.
The limitation of fixed denominations becomes more apparent at scale. If a service like npub.cash receives many payments of 31 sats, the wallet cannot simply mint 310 sats in one operation. Instead, it must mint each 31 sat quote individually. That means for 10 separate 31 sat payments, the wallet must submit 50 blinded messages (5 per quote), rather than a single set of blinded messages totaling 310 sats.
In short, fixed denominations in single mint quotes introduce a fragmentation problem: repeated small payments cannot be efficiently aggregated into fewer proofs, even when their combined total would allow it.
How batch minting solves these issues
Batch minting extends the mint API to allow multiple paid mint quotes to be redeemed in a single operation.
Instead of redeeming each quote individually, the wallet can submit a list of paid quotes and process them together in one request. This dramatically reduces the number of round trips to the mint, mitigating the impact of rate limits and significantly speeding up high-volume redemption scenarios.
At the same time, batch minting allows the wallet to aggregate the total value of all included quotes and provide a single, optimized set of blinded messages that sum to the combined amount.
For example, instead of minting ten separate 31 sat quotes (requiring 50 blinded messages in total as outlined earlier), the wallet can batch them into a single 310 sat mint and submit a denomination set appropriate for 310 sats: 256, 32, 16, 4, 2. This reduces the amount of stored proofs by 90%, resulting in a much cleaner wallet state and reduced token size when sending.
By combining quote redemption and denomination aggregation into one step, batch minting improves efficiency, reduces latency under rate limits, and enables better scalability for high-volume payment flows.
Conclusion
As more applications rely on asynchronous payments and high-volume microtransactions, redeeming quotes one-by-one becomes inefficient and slow. Fixed denominations create fragmentation, and rate limits introduce settlement delays.
By enabling aggregation at both the API and denomination level, batch minting restores efficiency without sacrificing the security properties of the protocol. The protocol addition is reviewed and both mints and wallets have already begun to implement them. Batch minting is coming to a Cashu wallet near you soon!