From a95e62406dc893f44e20dd3e97e3f60f31d08197 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 11 Oct 2022 17:42:47 +0300 Subject: [PATCH] feat: select coin limitted --- lnbits/extensions/cashu/mint.py | 2 +- .../cashu/templates/cashu/wallet.html | 99 ++++++++++++++----- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/lnbits/extensions/cashu/mint.py b/lnbits/extensions/cashu/mint.py index 883d0fa9c..4153fb302 100644 --- a/lnbits/extensions/cashu/mint.py +++ b/lnbits/extensions/cashu/mint.py @@ -71,7 +71,7 @@ async def melt(cashu: Cashu, proofs: List[Proof], invoice: str): fees_msat = await check_fees(cashu.wallet, invoice_obj) assert total_provided >= amount + fees_msat / 1000, Exception( - f"Provided proofs (${total_provided} sats) not enough for Lightning payment ({amount + fees_msat} sats)." + f"Provided proofs ({total_provided} sats) not enough for Lightning payment ({amount + fees_msat} sats)." ) await pay_invoice( diff --git a/lnbits/extensions/cashu/templates/cashu/wallet.html b/lnbits/extensions/cashu/templates/cashu/wallet.html index 641b704cd..02358d3d0 100644 --- a/lnbits/extensions/cashu/templates/cashu/wallet.html +++ b/lnbits/extensions/cashu/templates/cashu/wallet.html @@ -306,7 +306,7 @@ page_container %}
Show Tokens p.amount === amount) + if (index >= 0) { + return { + promise: token.promises[index], + secret: token.secrets[index], + randomBlindingFactor: token.randomBlindingFactors[index] + } + } + } + }, + + constructProof: function (token) {}, + buildTokens: async function (amounts, paymentHash) { const blindedMessages = [] const secrets = [] @@ -1038,34 +1072,19 @@ page_container %} const paidTokens = this.tokens.filter(t => t.promises?.length) console.log('### paidTokens', paidTokens) const proofs = paidTokens.map(token => { - // const promiseIndex = token.promises - // .map(p => `${p.amount}`) - // .indexOf(`${amount}`) return token.promises.map((promise, promiseIndex) => { - // const promise = token.promises[promiseIndex] console.log('### promise', promise) const secret = token.secrets[promiseIndex] const randomBlindingFactor = token.randomBlindingFactors[promiseIndex] - const C_ = nobleSecp256k1.Point.fromHex(promise['C_']) - const A = this.keys[promise.amount] // todo - - console.log('#### C_', C_) - console.log('#### A', A) - - const C = step3Bob( - C_, - randomBlindingFactor, - nobleSecp256k1.Point.fromHex(A) - ) - - return { - amount: promise.amount, + return this.promiseToProof( + promise.amount, + promise['C_'], secret, - C: C.toHex(true) - } + randomBlindingFactor + ) }) }) const payload = { @@ -1074,6 +1093,40 @@ page_container %} invoice: this.sellData.bolt11 } console.log('#### payload', JSON.stringify(payload)) + try { + const {data} = await LNbits.api.request( + 'POST', + `/cashu/api/v1/cashu/${this.mintId}/melt`, + '', + payload + ) + this.$q.notify({ + timeout: 5000, + message: 'Invoice paid' + }) + } catch (error) { + console.error(error) + LNbits.utils.notifyApiError(error) + } + }, + + // C_hex = promise['C_'] + // amount = promise.amount + promiseToProof: function (amount, C_hex, secret, randomBlindingFactor) { + const C_ = nobleSecp256k1.Point.fromHex(C_hex) + const A = this.keys[amount] + + const C = step3Bob( + C_, + randomBlindingFactor, + nobleSecp256k1.Point.fromHex(A) + ) + + return { + amount, + secret, + C: C.toHex(true) + } }, fetchMintKeys: async function () {