From 367faf437a3d8e6fe530104f337692e6553f7d75 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 15 Jul 2022 09:02:50 +0300 Subject: [PATCH] feat: broadcast transaction (partial solution) --- lnbits/extensions/watchonly/models.py | 6 +- .../extensions/watchonly/static/js/index.js | 23 +++++++ .../extensions/watchonly/static/js/tables.js | 2 + .../watchonly/templates/watchonly/index.html | 64 ++++++++++++++----- lnbits/extensions/watchonly/views_api.py | 23 +++++++ 5 files changed, 101 insertions(+), 17 deletions(-) diff --git a/lnbits/extensions/watchonly/models.py b/lnbits/extensions/watchonly/models.py index d499c504..cce93b48 100644 --- a/lnbits/extensions/watchonly/models.py +++ b/lnbits/extensions/watchonly/models.py @@ -82,7 +82,7 @@ class CreatePsbt(BaseModel): class ExtractPsbt(BaseModel): - psbtBase64 = "" + psbtBase64 = "" # // todo snake case class SignedTransaction(BaseModel): @@ -90,6 +90,10 @@ class SignedTransaction(BaseModel): tx_json: Optional[str] +class BroadcastTransaction(BaseModel): + tx_hex: str + + class Config(BaseModel): mempool_endpoint = "https://mempool.space" receive_gap_limit = 20 diff --git a/lnbits/extensions/watchonly/static/js/index.js b/lnbits/extensions/watchonly/static/js/index.js index bbfe2ad7..79a0e6e3 100644 --- a/lnbits/extensions/watchonly/static/js/index.js +++ b/lnbits/extensions/watchonly/static/js/index.js @@ -639,8 +639,10 @@ new Vue({ ) if (data) { this.payment.signedTx = JSON.parse(data.tx_json) + this.payment.signedTxHex = data.tx_hex } else { this.payment.signedTx = null + his.payment.signedTxHex = null } } } else { @@ -688,6 +690,27 @@ new Vue({ console.log('### sharePsbtWithAnimatedQRCode') }, + broadcastTransaction: async function () { + console.log('### broadcastTransaction', this.payment.signedTxHex) + + try { + const wallet = this.g.user.wallets[0] + await LNbits.api.request( + 'POST', + '/watchonly/api/v1/tx', + wallet.adminkey, + {tx_hex: this.payment.signedTxHex} + ) + } catch (error) { + this.$q.notify({ + type: 'warning', + message: 'Failed to broadcast!', + caption: `${error}`, + timeout: 10000 + }) + } + }, + //################### UTXOs ################### scanAllAddresses: async function () { await this.refreshAddresses() diff --git a/lnbits/extensions/watchonly/static/js/tables.js b/lnbits/extensions/watchonly/static/js/tables.js index ffb095b3..616b7060 100644 --- a/lnbits/extensions/watchonly/static/js/tables.js +++ b/lnbits/extensions/watchonly/static/js/tables.js @@ -262,6 +262,8 @@ const tableData = { psbtBase64: '', psbtBase64Signed: '', signedTx: null, + signedTxHex: null, + sentTxId: null, utxoSelectionModes: [ 'Manual', 'Random', diff --git a/lnbits/extensions/watchonly/templates/watchonly/index.html b/lnbits/extensions/watchonly/templates/watchonly/index.html index fe7bd59e..18414480 100644 --- a/lnbits/extensions/watchonly/templates/watchonly/index.html +++ b/lnbits/extensions/watchonly/templates/watchonly/index.html @@ -182,14 +182,13 @@ :disabled="scan.scanning == true" >Scan Blockchain -
+ v-if="scan.scanning == true" + color="primary" + size="2.55em" + >
- {{payment.changeAmount ? satBtc(payment.changeAmount): - 'no change'}} + {{payment.changeAmount ? + satBtc(payment.changeAmount): 'no change'}} Disconnect
-
+
-
+
Fee
- {{satBtc(payment.signedTx.fee)}}
+ {{satBtc(payment.signedTx.fee)}} + +
-
-
{{satBtc(out.amount)}}
- +
+
+ {{satBtc(out.amount)}} +
+
- {{out.address}}
+ {{out.address}} +
- +
+ +
+
+ Send Payment +
+
+
@@ -1301,7 +1334,6 @@ {% endblock %} {% block scripts %} {{ window_vars(user) }}