diff --git a/lnbits/extensions/watchonly/static/components/address-list/address-list.js b/lnbits/extensions/watchonly/static/components/address-list/address-list.js
index 7d6664c8..244e0472 100644
--- a/lnbits/extensions/watchonly/static/components/address-list/address-list.js
+++ b/lnbits/extensions/watchonly/static/components/address-list/address-list.js
@@ -158,7 +158,6 @@ async function addressList(path) {
created: async function () {
await this.refreshAddresses()
- // this.$emit('update:addresses', this.addresses)
}
})
}
diff --git a/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.html b/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.html
index be15035d..1e803e0d 100644
--- a/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.html
+++ b/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.html
@@ -9,7 +9,6 @@
:rules="[val => !!val || 'Field is required']"
type="number"
label="sats/vbyte"
- @input="feeRateChanged"
>
@@ -23,7 +22,6 @@
:label-value="getFeeRateLabel(feeRate)"
:min="1"
:max="recommededFees.fastestFee"
- @input="feeRateChanged"
/>
diff --git a/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.js b/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.js
index 46744fbc..7090cca8 100644
--- a/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.js
+++ b/lnbits/extensions/watchonly/static/components/fee-rate/fee-rate.js
@@ -1,20 +1,30 @@
async function feeRate(path) {
const template = await loadTemplateAsync(path)
- Vue.component('fees', {
- name: 'fees',
+ Vue.component('fee-rate', {
+ name: 'fee-rate',
template,
- props: ['totalfee', 'sats_denominated'],
+ props: ['rate', 'totalfee', 'sats_denominated'],
watch: {
immediate: true,
totalfee: function (newVal, oldVal) {
console.log('### ', newVal, oldVal)
}
},
+ computed: {
+ feeRate: {
+ get: function () {
+ return this['rate']
+ },
+ set: function (value) {
+ console.log('### computed update rate')
+ this.$emit('update:rate', +value)
+ }
+ }
+ },
data: function () {
return {
- feeRate: 1,
recommededFees: {
fastestFee: 1,
halfHourFee: 1,
@@ -29,10 +39,7 @@ async function feeRate(path) {
satBtc(val, showUnit = true) {
return satOrBtc(val, showUnit, this['sats_denominated'])
},
- feeRateChanged: function (newFeeRate) {
- console.log('### value', newFeeRate)
- this.$emit('update:fee-rate', +newFeeRate)
- },
+
refreshRecommendedFees: async function () {
const {
bitcoin: {fees: feesAPI}
@@ -56,7 +63,6 @@ async function feeRate(path) {
console.log('### created fees ')
await this.refreshRecommendedFees()
this.feeRate = this.recommededFees.halfHourFee
- this.feeRateChanged(this.recommededFees.halfHourFee)
}
})
}
diff --git a/lnbits/extensions/watchonly/static/components/send-to/send-to.html b/lnbits/extensions/watchonly/static/components/send-to/send-to.html
new file mode 100644
index 00000000..d31cf819
--- /dev/null
+++ b/lnbits/extensions/watchonly/static/components/send-to/send-to.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Max
+
+
+
+
+
+
+
+
+
+ Add Send Address
+
+
+
+
+ Payed Amount:
+
+ {{satBtc(getTotalPaymentAmount())}}
+
+
+
+
+
+
+
+
+
+
diff --git a/lnbits/extensions/watchonly/static/components/send-to/send-to.js b/lnbits/extensions/watchonly/static/components/send-to/send-to.js
new file mode 100644
index 00000000..baf1cd2f
--- /dev/null
+++ b/lnbits/extensions/watchonly/static/components/send-to/send-to.js
@@ -0,0 +1,70 @@
+async function sendTo(path) {
+ const template = await loadTemplateAsync(path)
+ Vue.component('send-to', {
+ name: 'send-to',
+ template,
+
+ props: ['data', 'tx-size', 'total-amount', 'fee-rate', 'sats_denominated'],
+
+ computed: {
+ dataLocal: {
+ get: function () {
+ return this.data
+ },
+ set: function (value) {
+ console.log('### computed update data')
+ this.$emit('update:data', value)
+ }
+ }
+ },
+
+ data: function () {
+ return {
+ amount: 0,
+ paymentTable: {
+ columns: [
+ {
+ name: 'data',
+ align: 'left'
+ }
+ ],
+ pagination: {
+ rowsPerPage: 10
+ },
+ filter: ''
+ }
+ }
+ },
+
+ methods: {
+ satBtc(val, showUnit = true) {
+ return satOrBtc(val, showUnit, this['sats_denominated'])
+ },
+ addPaymentAddress: function () {
+ this.dataLocal.push({address: '', amount: undefined})
+ },
+ deletePaymentAddress: function (v) {
+ const index = this.dataLocal.indexOf(v)
+ if (index !== -1) {
+ this.dataLocal.splice(index, 1)
+ }
+ },
+ getTotalPaymentAmount: function () {
+ return this.dataLocal.reduce((t, a) => t + (a.amount || 0), 0)
+ },
+ sendMaxToAddress: function (paymentAddress = {}) {
+ this.amount = 0
+ // const tx = this.createTx(true)
+ // this.payment.txSize = Math.round(txSize(tx))
+ const fee = this['fee-rate'] * this['tx-size']
+ const inputAmount = this['total-amount']
+ const payedAmount = this.getTotalPaymentAmount()
+ paymentAddress.amount = Math.max(0, inputAmount - payedAmount - fee)
+ }
+ },
+
+ created: async function () {
+ this.dataLocal = [{address: '', amount: undefined}]
+ }
+ })
+}
diff --git a/lnbits/extensions/watchonly/static/js/index.js b/lnbits/extensions/watchonly/static/js/index.js
index 46aaf261..995e3098 100644
--- a/lnbits/extensions/watchonly/static/js/index.js
+++ b/lnbits/extensions/watchonly/static/js/index.js
@@ -7,6 +7,7 @@ const watchOnly = async () => {
await history('static/components/history/history.html')
await utxoList('static/components/utxo-list/utxo-list.html')
await feeRate('static/components/fee-rate/fee-rate.html')
+ await sendTo('static/components/send-to/send-to.html')
await payment('static/components/payment/payment.html')
Vue.filter('reverse', function (value) {
@@ -85,7 +86,22 @@ const watchOnly = async () => {
addressNote: '',
showPayment: false,
showCustomFee: false,
- feeValue: 0
+ feeRate: 1,
+ sendToList: []
+ }
+ },
+
+ computed: {
+ txSize: function() {
+ const tx = this.createTx()
+ return Math.round(txSize(tx))
+ },
+ txSizeNoChange: function() {
+ const tx = this.createTx(true)
+ return Math.round(txSize(tx))
+ },
+ feeValue: function(){
+ return this.feeRate * this.txSize
}
},
@@ -191,7 +207,7 @@ const watchOnly = async () => {
//################### PAYMENT ###################
createTx: function (excludeChange = false) {
const tx = {
- fee_rate: this.payment.feeRate,
+ fee_rate: this.feeRate,
tx_size: this.payment.txSize,
masterpubs: this.walletAccounts.map(w => ({
public_key: w.masterpub,
@@ -205,7 +221,7 @@ const watchOnly = async () => {
a.tx_id < b.tx_id ? -1 : a.tx_id > b.tx_id ? 1 : a.vout - b.vout
)
- tx.outputs = this.payment.data.map(out => ({
+ tx.outputs = this.sendToList.map(out => ({
address: out.address,
amount: out.amount
}))
@@ -221,37 +237,27 @@ const watchOnly = async () => {
}
// Only sort by amount on UI level (no lib for address decode)
// Should sort by scriptPubKey (as byte array) on the backend
+ // todo: just shuffle
tx.outputs.sort((a, b) => a.amount - b.amount)
return tx
},
createChangeOutput: function () {
const change = this.payment.changeAddress
- const fee = this.payment.feeRate * this.payment.txSize
- const inputAmount = this.getTotalSelectedUtxoAmount()
- const payedAmount = this.getTotalPaymentAmount()
+ // const inputAmount = this.getTotalSelectedUtxoAmount() // todo: set amount separately
+ // const payedAmount = this.getTotalPaymentAmount()
const walletAcount =
this.walletAccounts.find(w => w.id === change.wallet) || {}
return {
address: change.address,
- amount: inputAmount - payedAmount - fee,
+ // amount: inputAmount - payedAmount - this.feeValue,
addressIndex: change.addressIndex,
addressIndex: change.addressIndex,
masterpub_fingerprint: walletAcount.fingerprint
}
},
- computeFee: function (feeRate) {
- const tx = this.createTx()
- this.payment.txSize = Math.round(txSize(tx))
- return feeRate * this.payment.txSize
- },
- deletePaymentAddress: function (v) {
- const index = this.payment.data.indexOf(v)
- if (index !== -1) {
- this.payment.data.splice(index, 1)
- }
- },
+
initPaymentData: async function () {
if (!this.payment.show) return
await this.$refs.addressList.refreshAddresses()
@@ -263,9 +269,6 @@ const watchOnly = async () => {
this.payment.feeRate = this.payment.recommededFees.halfHourFee
},
- addPaymentAddress: function () {
- this.payment.data.push({address: '', amount: undefined})
- },
getTotalPaymentAmount: function () {
return this.payment.data.reduce((t, a) => t + (a.amount || 0), 0)
},
@@ -281,22 +284,14 @@ const watchOnly = async () => {
// this.tab = 'utxos'
await this.initPaymentData()
},
- sendMaxToAddress: function (paymentAddress = {}) {
- paymentAddress.amount = 0
- const tx = this.createTx(true)
- this.payment.txSize = Math.round(txSize(tx))
- const fee = this.payment.feeRate * this.payment.txSize
- const inputAmount = this.getTotalSelectedUtxoAmount()
- const payedAmount = this.getTotalPaymentAmount()
- paymentAddress.amount = Math.max(0, inputAmount - payedAmount - fee)
- },
+
//################### PSBT ###################
createPsbt: async function () {
const wallet = this.g.user.wallets[0]
try {
- this.computeFee(this.payment.feeRate)
+ // this.computeFee(this.feeRate)
const tx = this.createTx()
- txSize(tx)
+ // txSize(tx)
for (const input of tx.inputs) {
input.tx_hex = await this.fetchTxHex(input.tx_id)
}
@@ -960,10 +955,6 @@ const watchOnly = async () => {
this.addresses = addresses
await this.scanAddressWithAmount()
},
- handleFeeRateChanged: function (newFeeRate) {
- console.log('### newFeeRate', newFeeRate)
- this.feeValue = this.computeFee(newFeeRate)
- }
},
created: async function () {
if (this.g.user.wallets.length) {
diff --git a/lnbits/extensions/watchonly/static/js/tables.js b/lnbits/extensions/watchonly/static/js/tables.js
index 26a0dfd0..5a90066d 100644
--- a/lnbits/extensions/watchonly/static/js/tables.js
+++ b/lnbits/extensions/watchonly/static/js/tables.js
@@ -1,16 +1,4 @@
const tables = {
- paymentTable: {
- columns: [
- {
- name: 'data',
- align: 'left'
- }
- ],
- pagination: {
- rowsPerPage: 10
- },
- filter: ''
- },
summaryTable: {
columns: [
{
@@ -43,7 +31,7 @@ const tableData = {
total: 0
},
payment: {
- data: [{address: '', amount: undefined}],
+ data: [{address: '', amount: undefined}], // todo: remove
changeWallet: null,
changeAddress: {},
changeAmount: 0,
diff --git a/lnbits/extensions/watchonly/templates/watchonly/index.html b/lnbits/extensions/watchonly/templates/watchonly/index.html
index 4af9337d..4c3a66ef 100644
--- a/lnbits/extensions/watchonly/templates/watchonly/index.html
+++ b/lnbits/extensions/watchonly/templates/watchonly/index.html
@@ -506,96 +506,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Max
-
-
-
-
-
-
-
-
-
- Add Send Address
-
-
-
-
- Payed Amount:
-
-
- {{satBtc(getTotalPaymentAmount())}}
-
-
-
-
-
-
-
-
-
-
-
+ {{sendToList}}
+