diff --git a/lnbits/extensions/watchonly/models.py b/lnbits/extensions/watchonly/models.py index d81220dd8..433da6d2b 100644 --- a/lnbits/extensions/watchonly/models.py +++ b/lnbits/extensions/watchonly/models.py @@ -59,6 +59,7 @@ class TransactionInput(BaseModel): branch_index: int address_index: int masterpub_fingerprint: str + wallet: str tx_hex: str @@ -68,9 +69,11 @@ class TransactionOutput(BaseModel): branch_index: int = None address_index: int = None masterpub_fingerprint: str = None + wallet: str = None class MasterPublicKey(BaseModel): + id: str public_key: str fingerprint: str diff --git a/lnbits/extensions/watchonly/static/components/payment/payment.js b/lnbits/extensions/watchonly/static/components/payment/payment.js index a765b10d8..cfd0d3723 100644 --- a/lnbits/extensions/watchonly/static/components/payment/payment.js +++ b/lnbits/extensions/watchonly/static/components/payment/payment.js @@ -30,6 +30,7 @@ async function payment(path) { psbtBase64: null, psbtBase64Signed: null, signedTx: null, + signedTxHex: null, sentTxId: null, signedTxId: null, paymentTab: 'destination', @@ -164,6 +165,7 @@ async function payment(path) { const tx = { fee_rate: this.feeRate, masterpubs: this.accounts.map(w => ({ + id: w.id, public_key: w.masterpub, fingerprint: w.fingerprint })) @@ -201,7 +203,8 @@ async function payment(path) { address: change.address, address_index: change.addressIndex, branch_index: change.isChange ? 1 : 0, - masterpub_fingerprint: walletAcount.fingerprint + masterpub_fingerprint: walletAcount.fingerprint, + wallet: walletAcount.id } }, selectChangeAddress: function (account) { diff --git a/lnbits/extensions/watchonly/static/js/map.js b/lnbits/extensions/watchonly/static/js/map.js index 82214a68b..cca05e49c 100644 --- a/lnbits/extensions/watchonly/static/js/map.js +++ b/lnbits/extensions/watchonly/static/js/map.js @@ -44,6 +44,7 @@ const mapUtxoToPsbtInput = utxo => ({ branch_index: utxo.isChange ? 1 : 0, address_index: utxo.addressIndex, masterpub_fingerprint: utxo.masterpubFingerprint, + wallet: utxo.wallet, accountType: utxo.accountType, txHex: '' }) diff --git a/lnbits/extensions/watchonly/views_api.py b/lnbits/extensions/watchonly/views_api.py index 0b0527870..b758abd54 100644 --- a/lnbits/extensions/watchonly/views_api.py +++ b/lnbits/extensions/watchonly/views_api.py @@ -249,13 +249,13 @@ async def api_psbt_create( descriptors = {} for _, masterpub in enumerate(data.masterpubs): - descriptors[masterpub.fingerprint] = parse_key(masterpub.public_key) + descriptors[masterpub.id] = parse_key(masterpub.public_key) inputs_extra = [] for i, inp in enumerate(data.inputs): bip32_derivations = {} - descriptor = descriptors[inp.masterpub_fingerprint][0] + descriptor = descriptors[inp.wallet][0] d = descriptor.derive(inp.address_index, inp.branch_index) for k in d.keys: bip32_derivations[PublicKey.parse(k.sec())] = DerivationPath( @@ -272,15 +272,15 @@ async def api_psbt_create( psbt = PSBT(tx) for i, inp in enumerate(inputs_extra): - print("### ", psbt.inputs[i].bip32_derivations) psbt.inputs[i].bip32_derivations = inp["bip32_derivations"] psbt.inputs[i].non_witness_utxo = inp.get("non_witness_utxo", None) + print("### ", inp.get("non_witness_utxo", None)) outputs_extra = [] bip32_derivations = {} for i, out in enumerate(data.outputs): if out.branch_index == 1: - descriptor = descriptors[out.masterpub_fingerprint][0] + descriptor = descriptors[out.wallet][0] d = descriptor.derive(out.address_index, out.branch_index) for k in d.keys: bip32_derivations[PublicKey.parse(k.sec())] = DerivationPath( @@ -341,12 +341,15 @@ async def api_tx_broadcast( "Cannot broadcast transaction. Mempool endpoint not defined!" ) + endpoint = config.mempool_endpoint if config.network == 'Mainnet' else config.mempool_endpoint + '/testnet' async with httpx.AsyncClient() as client: - r = await client.post(config.mempool_endpoint + "/api/tx", data=data.tx_hex) + r = await client.post(endpoint + "/api/tx", data=data.tx_hex) tx_id = r.text + print('### broadcast tx_id: ', tx_id) return tx_id # return "0f0f0f0f0f0f0f0f0f0f0f00f0f0f0f0f0f0f0f0f0f00f0f0f0f0f0f0.mock.transaction.id" except Exception as e: + print('### broadcast error: ', str(e)) raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail=str(e))