-- fixed BTC multisig fee calculation issue
This commit is contained in:
sairaj mote 2023-04-25 18:27:55 +05:30
parent 581f9f359a
commit 93cb30db01

View File

@ -4907,14 +4907,14 @@
function handleFeeSelector(e) { function handleFeeSelector(e) {
switch (e.target.value) { switch (e.target.value) {
case 'custom': case 'custom':
getRef('send_fee').readOnly = false; $('#send_fee').readOnly = false;
getRef('send_fee').placeholder = 'Fee'; $('#send_fee').placeholder = 'Fee';
renderElem(getRef('selected_fee_tip'), html`Set custom fee`) renderElem($('#selected_fee_tip'), html`Set custom fee`)
feeMemo.memoized = false; feeMemo.memoized = false;
break; break;
case 'suggested': case 'suggested':
calculateFees(); calculateFees();
getRef('send_fee').readOnly = true; $('#send_fee').readOnly = true;
break; break;
} }
} }
@ -4937,50 +4937,53 @@
}) })
} }
async function calculateBtcFees() { async function calculateBtcFees() {
const [senders, privKeys, receivers, amounts] = await getTransactionInputs().catch(e => { const [sender, receivers, amounts, redeemScript] = await getTransactionInputs().catch(e => {
console.error(e) console.error(e)
return return
}); });
// if (!senders.length || !privKeys.length || !receivers.length || !amounts.length) return; return btcOperator.createMultiSigTx(sender, redeemScript, receivers, amounts)
return btcOperator.createSignedTx(senders, privKeys, receivers, amounts)
} }
async function getTransactionInputs() { async function getTransactionInputs() {
const privateKey = await floDapps.user.private.catch(err => console.error(err)); try {
const privKeys = btcOperator.convert.wif(privateKey); const sender = getRef('selected_multisig').textContent;
const senders = floGlobals.myBtcID; const receivers = [...getRef('receiver_container').querySelectorAll('.receiver-input')].filter(input => input.value.trim() !== '').map(input => input.value.trim());
const receivers = [...getRef('receiver_container').querySelectorAll('.receiver-input')].filter(input => input.value.trim() !== '').map(input => input.value.trim()); const amounts = [...getRef('receiver_container').querySelectorAll('.amount-input')].filter(input => input.value.trim() !== '').map(input => {
const amounts = [...getRef('receiver_container').querySelectorAll('.amount-input')].filter(input => input.value.trim() !== '').map(input => { return parseFloat(input.value.trim())
return parseFloat(input.value.trim()) });
}); const multisigList = await messenger.multisig.listAddress()
return [senders, privKeys, receivers, amounts] const redeemScript = multisigList[sender].redeemScript;
return [sender, receivers, amounts, redeemScript]
} catch (err) {
console.error(err)
}
} }
let feeMemo = { let feeMemo = {
memoized: false, memoized: false,
memoizedFee: 0 memoizedFee: 0
}; };
function calculateFees() { function calculateFees() {
if (getRef('fees_selector').value === 'custom') return; if ($('#fees_selector').value === 'custom') return;
if (getRef('receiver_container').children.length === 0) return; if (getRef('receiver_container').children.length === 0) return;
const allValid = [...getRef('receiver_container').querySelectorAll('sm-input')].every(input => input.isValid) const allValid = [...getRef('receiver_container').querySelectorAll('sm-input')].every(input => input.isValid)
if (!allValid && feeMemo.memoized) return; if (!allValid && feeMemo.memoized) return;
getRef('fees_selector').children[0].click(); $('#fees_selector').children[0].click();
getRef('fees_selector').classList.remove('hidden') $('#fees_selector').classList.remove('hidden')
getRef('initiate_transaction').disabled = true; getRef('initiate_transaction').disabled = true;
getRef('send_fee').value = ''; $('#send_fee').value = '';
getRef('send_fee_loader').classList.remove('hidden') $('#send_fee_loader').classList.remove('hidden')
const animOptions = { const animOptions = {
duration: 200, duration: 200,
easing: 'ease', easing: 'ease',
fill: 'forwards' fill: 'forwards'
} }
getRef('send_fee_loader').animate(fadeIn, animOptions) $('#send_fee_loader').animate(fadeIn, animOptions)
getRef('fees_section').classList.remove('hidden') getRef('fees_section').classList.remove('hidden')
getRef('error_section').classList.add('hidden') getRef('error_section').classList.add('hidden')
if (allValid) { if (allValid) {
getRef('send_fee').placeholder = 'Fee' $('#send_fee').placeholder = 'Fee'
calculateBtcFees().then(({ fee }) => { calculateBtcFees().then(({ fee }) => {
getRef('send_fee').value = fee.toFixed(8); $('#send_fee').value = fee.toFixed(8);
renderElem(getRef('selected_fee_tip'), html``) renderElem($('#selected_fee_tip'), html``)
getRef('initiate_transaction').disabled = false; getRef('initiate_transaction').disabled = false;
}).catch(e => { }).catch(e => {
getRef('fees_section').classList.add('hidden') getRef('fees_section').classList.add('hidden')
@ -4993,27 +4996,27 @@
`) `)
console.error(e) console.error(e)
}).finally(_ => { }).finally(_ => {
getRef('send_fee_loader').animate(fadeOut, animOptions).onfinish = _ => $('#send_fee_loader').animate(fadeOut, animOptions).onfinish = _ =>
getRef('send_fee_loader').classList.add('hidden') $('#send_fee_loader').classList.add('hidden')
}) })
feeMemo.memoized = false; feeMemo.memoized = false;
} else { } else {
getRef('send_fee').placeholder = 'Approximate fee' $('#send_fee').placeholder = 'Approximate fee'
renderElem(getRef('selected_fee_tip'), html` <p style="opacity: 0.8;">*Fill out all fields for exact fee!</p> `) renderElem($('#selected_fee_tip'), html` <p style="opacity: 0.8;">*Fill out all fields for exact fee!</p> `)
if (feeMemo.memoized) { if (feeMemo.memoized) {
getRef('send_fee').value = feeMemo.memoizedFee.toFixed(8); $('#send_fee').value = feeMemo.memoizedFee.toFixed(8);
return; return;
} }
calculateApproxFee().then(fee => { calculateApproxFee().then(fee => {
getRef('send_fee').value = fee.toFixed(8); $('#send_fee').value = fee.toFixed(8);
feeMemo.memoizedFee = fee; feeMemo.memoizedFee = fee;
}).catch(e => { }).catch(e => {
getRef('fees_selector').children[1].click(); $('#fees_selector').children[1].click();
getRef('fees_selector').classList.add('hidden') $('#fees_selector').classList.add('hidden')
}).finally(_ => { }).finally(_ => {
getRef('send_fee_loader').animate(fadeOut, animOptions).onfinish = _ => $('#send_fee_loader').animate(fadeOut, animOptions).onfinish = _ =>
getRef('send_fee_loader').classList.add('hidden') $('#send_fee_loader').classList.add('hidden')
}) })
feeMemo.memoized = true; feeMemo.memoized = true;
} }
@ -5032,7 +5035,7 @@
const { redeemScript } = allMultiSigs[selectedMultisigAddress] const { redeemScript } = allMultiSigs[selectedMultisigAddress]
let result let result
if (multisigMode === 'btc') { if (multisigMode === 'btc') {
const fee = parseFloat(getRef('send_fee').value.trim()); const fee = parseFloat($('#send_fee').value.trim());
console.debug(selectedMultisigAddress, receivers, amounts, fee); console.debug(selectedMultisigAddress, receivers, amounts, fee);
result = await messenger.multisig.createTx_BTC(selectedMultisigAddress, redeemScript, receivers, amounts, fee) result = await messenger.multisig.createTx_BTC(selectedMultisigAddress, redeemScript, receivers, amounts, fee)
} else if (multisigMode === 'flo') { } else if (multisigMode === 'flo') {