Added approx. transaction fees

This commit is contained in:
sairaj mote 2023-02-15 22:43:30 +05:30
parent 1dc6a4c9fc
commit 917a797a0c
2 changed files with 34 additions and 9 deletions

File diff suppressed because one or more lines are too long

View File

@ -158,9 +158,7 @@
<sm-chip value="custom">Custom</sm-chip>
</sm-chips>
</div>
<div id="fees_wrapper" class="grid gap-0-5 align-center">
<b id="recommended_fee"></b>
</div>
<div id="fees_wrapper" class="grid gap-0-5 align-center"></div>
</div>
<div id="error_section"></div>
<div class="multi-state-button margin-bottom-1-5">
@ -1178,7 +1176,7 @@
const { block, time, size, fee, inputs, outputs, confirmations, total_input_value, total_output_value } = result;
console.debug('tx', result);
renderElem(getRef('tx_details'), html`
renderElem(getRef('tx_details'), html`
<table class="margin-bottom-1-5 justify-self-center">
<tbody>
<tr>
@ -1510,7 +1508,21 @@
renderElem(getRef('error_section'), html``)
break;
case 'suggested':
renderElem(getRef('fees_wrapper'), html` <b id="recommended_fee"></b> `)
renderElem(getRef('fees_wrapper'), html`<sm-spinner></sm-spinner>`)
if (getRef('send_tx').isFormValid) {
calculateExactFee()
} else {
calculateApproxFee().then(fees => {
renderElem(getRef('fees_wrapper'), html`
<div class="grid gap-0-3">
<div>
Approximate fee: <b id="recommended_fee" class="amount-shown" data-btc-amount=${fees}>${formatAmount(getConvertedAmount(fees))}</b>
</div>
<p style="opacity: 0.8;">*Exact fee will be calculated after you fill all the required fields</p>
</div>
`)
})
}
getRef('fees_section').classList.remove('hidden')
renderElem(getRef('error_section'), html``)
break;
@ -1527,12 +1539,24 @@
console.debug(senders, receivers, amounts); //for automatic fee calc, set fee = null
return [senders, privKeys, receivers, amounts]
}
function calculateFees() {
function calculateApproxFee() {
return new Promise((resolve, reject) => {
fetch('https://bitcoiner.live/api/fees/estimates/latest').then(res => res.json()).then(data => {
const satPerByte = data.estimates['60'].sat_per_vbyte;
const legacyBytes = 200;
const segwitBytes = 77;
resolve((legacyBytes * satPerByte + (0.25 * satPerByte) * segwitBytes) / Math.pow(10, 8));
}).catch(e => {
reject(e)
})
})
}
function calculateExactFee() {
return new Promise((resolve, reject) => {
renderElem(getRef('fees_wrapper'), html`<sm-spinner></sm-spinner>`)
const [senders, privKeys, receivers, amounts] = getTransactionInputs();
btcOperator.createSignedTx(senders, privKeys, receivers, amounts).then(({ fee }) => {
renderElem(getRef('fees_wrapper'), html` <b id="recommended_fee">${formatAmount(getConvertedAmount(fee))}</b> `)
renderElem(getRef('fees_wrapper'), html` <b id="recommended_fee" class="amount-shown" data-btc-amount=${fee}>${formatAmount(getConvertedAmount(fee))}</b> `)
getRef('send_transaction').disabled = false;
getRef('fees_section').classList.remove('hidden')
getRef('error_section').classList.add('hidden')
@ -1562,8 +1586,9 @@
}
getRef('send_tx').addEventListener('valid', debounce(e => {
console.debug('valid', e.target.isFormValid)
if (getRef('fees_selector').value === 'suggested') {
calculateFees()
calculateExactFee()
} else {
getRef('fees_section').classList.remove('hidden')
getRef('error_section').classList.add('hidden')