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-chip value="custom">Custom</sm-chip>
</sm-chips> </sm-chips>
</div> </div>
<div id="fees_wrapper" class="grid gap-0-5 align-center"> <div id="fees_wrapper" class="grid gap-0-5 align-center"></div>
<b id="recommended_fee"></b>
</div>
</div> </div>
<div id="error_section"></div> <div id="error_section"></div>
<div class="multi-state-button margin-bottom-1-5"> <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; const { block, time, size, fee, inputs, outputs, confirmations, total_input_value, total_output_value } = result;
console.debug('tx', result); console.debug('tx', result);
renderElem(getRef('tx_details'), html` renderElem(getRef('tx_details'), html`
<table class="margin-bottom-1-5 justify-self-center"> <table class="margin-bottom-1-5 justify-self-center">
<tbody> <tbody>
<tr> <tr>
@ -1510,7 +1508,21 @@
renderElem(getRef('error_section'), html``) renderElem(getRef('error_section'), html``)
break; break;
case 'suggested': 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') getRef('fees_section').classList.remove('hidden')
renderElem(getRef('error_section'), html``) renderElem(getRef('error_section'), html``)
break; break;
@ -1527,12 +1539,24 @@
console.debug(senders, receivers, amounts); //for automatic fee calc, set fee = null console.debug(senders, receivers, amounts); //for automatic fee calc, set fee = null
return [senders, privKeys, receivers, amounts] 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) => { return new Promise((resolve, reject) => {
renderElem(getRef('fees_wrapper'), html`<sm-spinner></sm-spinner>`) renderElem(getRef('fees_wrapper'), html`<sm-spinner></sm-spinner>`)
const [senders, privKeys, receivers, amounts] = getTransactionInputs(); const [senders, privKeys, receivers, amounts] = getTransactionInputs();
btcOperator.createSignedTx(senders, privKeys, receivers, amounts).then(({ fee }) => { 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('send_transaction').disabled = false;
getRef('fees_section').classList.remove('hidden') getRef('fees_section').classList.remove('hidden')
getRef('error_section').classList.add('hidden') getRef('error_section').classList.add('hidden')
@ -1562,8 +1586,9 @@
} }
getRef('send_tx').addEventListener('valid', debounce(e => { getRef('send_tx').addEventListener('valid', debounce(e => {
console.debug('valid', e.target.isFormValid)
if (getRef('fees_selector').value === 'suggested') { if (getRef('fees_selector').value === 'suggested') {
calculateFees() calculateExactFee()
} else { } else {
getRef('fees_section').classList.remove('hidden') getRef('fees_section').classList.remove('hidden')
getRef('error_section').classList.add('hidden') getRef('error_section').classList.add('hidden')