diff --git a/04.md b/04.md index efeaa287..2e8ede48 100644 --- a/04.md +++ b/04.md @@ -7,7 +7,7 @@ NUT-04: Mint tokens Minting tokens is a two-step process: requesting a mint quote and minting new tokens. Here, we describe both steps. -In the first request the wallet asks the mint for a quote for a specific `amount` and `unit` to mint, and the payment `method` to pay. The mint responds with a quote that includes a `quote` id and a payment `request`. The user pays the `request` and, if successful, requests minting of new tokens with the mint in a second request. The wallet includes the `quote` id and new `outputs` in the second request. +In the first request the wallet asks the mint for a quote for a specific `amount` and `unit` to mint, and the payment `method` to pay. The wallet can optionally ask for a quote from a specific `keysetId` allowing for amounts to be specified in a different unit from the keyset. The mint responds with a quote that includes a `quote` id and a payment `request`. The user pays the `request` and, if successful, requests minting of new tokens with the mint in a second request. The wallet includes the `quote` id and new `outputs` in the second request. We limit this document to mint quotes of `unit="sat"` and `method="bolt11"` which requests a bolt11 Lightning invoice (typically generated by the mint to add Bitcoin to its reserves) to mint ecash denominated in Satoshis. @@ -24,7 +24,8 @@ The wallet of `Alice` includes the following `PostMintQuoteBolt11Request` data i ```json { "amount": , - "unit": + "unit": , + "keysetId": > } ``` with the requested `amount` and the `unit`. @@ -40,7 +41,7 @@ The wallet of `Alice` includes the following `PostMintQuoteBolt11Request` data i } ``` -Where `quote` is the quote ID and `request` is the payment request to fulfill. `paid` indicates whether the request as been paid and `expiry` is the Unix timestamp until which the mint quote is valid. +Where `quote` is the quote ID and `request` is the payment request to fulfill. `paid` indicates whether the request as been paid and `expiry` is the Unix timestamp until which the mint quote is valid. If a `keysetId` was provided in the `PostMintQuoteBolt11Request`, the mint should convert the provided `unit` to the requested keyset's unit, and if the specified unit is `sat`, then the mint should return an invoice for that exact sat amount. Note: `quote` is a **unique and random** id generated by the mint to internally look up the payment state. `quote` **MUST** remain a secret between user and mint and **MUST NOT** be derivable from the payment request. A third party who knows the `quote` ID can front-run and steal the tokens that this operation mints.