floBlockchainAPI v2.4.6
Improved utxo and unconfirmed-spent api fetch in send/create tx
This commit is contained in:
parent
9c0730e051
commit
ca0d8c68f3
@ -1,4 +1,4 @@
|
|||||||
(function (EXPORTS) { //floBlockchainAPI v2.4.5
|
(function (EXPORTS) { //floBlockchainAPI v2.4.6
|
||||||
/* FLO Blockchain Operator to send/receive data from blockchain using API calls*/
|
/* FLO Blockchain Operator to send/receive data from blockchain using API calls*/
|
||||||
'use strict';
|
'use strict';
|
||||||
const floBlockchainAPI = EXPORTS;
|
const floBlockchainAPI = EXPORTS;
|
||||||
@ -139,6 +139,28 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getUTXOs = address => new Promise((resolve, reject) => {
|
||||||
|
promisedAPI(`api/addr/${address}/utxo`)
|
||||||
|
.then(utxo => resolve(utxo))
|
||||||
|
.catch(error => reject(error))
|
||||||
|
})
|
||||||
|
|
||||||
|
const getUnconfirmedSpent = address => new Promise((resolve, reject) => {
|
||||||
|
readTxs(address, { mempool: "only" }).then(result => {
|
||||||
|
let unconfirmedSpent = {};
|
||||||
|
for (let tx of result.items)
|
||||||
|
if (tx.confirmations == 0)
|
||||||
|
for (let vin of tx.vin)
|
||||||
|
if (vin.addr === address) {
|
||||||
|
if (Array.isArray(unconfirmedSpent[vin.txid]))
|
||||||
|
unconfirmedSpent[vin.txid].push(vin.vout);
|
||||||
|
else
|
||||||
|
unconfirmedSpent[vin.txid] = [vin.vout];
|
||||||
|
}
|
||||||
|
resolve(unconfirmedSpent);
|
||||||
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
|
|
||||||
//create a transaction with single sender
|
//create a transaction with single sender
|
||||||
const createTx = function (senderAddr, receiverAddr, sendAmt, floData = '', strict_utxo = true) {
|
const createTx = function (senderAddr, receiverAddr, sendAmt, floData = '', strict_utxo = true) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -155,21 +177,8 @@
|
|||||||
var fee = DEFAULT.fee;
|
var fee = DEFAULT.fee;
|
||||||
if (balance < sendAmt + fee)
|
if (balance < sendAmt + fee)
|
||||||
return reject("Insufficient FLO balance!");
|
return reject("Insufficient FLO balance!");
|
||||||
//get unconfirmed tx list
|
getUnconfirmedSpent(senderAddr).then(unconfirmedSpent => {
|
||||||
promisedAPI(`api/addr/${senderAddr}`).then(result => {
|
getUTXOs(senderAddr).then(utxos => {
|
||||||
readTxs(senderAddr, 0, result.unconfirmedTxApperances).then(result => {
|
|
||||||
let unconfirmedSpent = {};
|
|
||||||
for (let tx of result.items)
|
|
||||||
if (tx.confirmations == 0)
|
|
||||||
for (let vin of tx.vin)
|
|
||||||
if (vin.addr === senderAddr) {
|
|
||||||
if (Array.isArray(unconfirmedSpent[vin.txid]))
|
|
||||||
unconfirmedSpent[vin.txid].push(vin.vout);
|
|
||||||
else
|
|
||||||
unconfirmedSpent[vin.txid] = [vin.vout];
|
|
||||||
}
|
|
||||||
//get utxos list
|
|
||||||
promisedAPI(`api/addr/${senderAddr}/utxo`).then(utxos => {
|
|
||||||
//form/construct the transaction data
|
//form/construct the transaction data
|
||||||
var trx = bitjs.transaction();
|
var trx = bitjs.transaction();
|
||||||
var utxoAmt = 0.0;
|
var utxoAmt = 0.0;
|
||||||
@ -196,7 +205,6 @@
|
|||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,7 +257,7 @@
|
|||||||
var trx = bitjs.transaction();
|
var trx = bitjs.transaction();
|
||||||
var utxoAmt = 0.0;
|
var utxoAmt = 0.0;
|
||||||
var fee = DEFAULT.fee;
|
var fee = DEFAULT.fee;
|
||||||
promisedAPI(`api/addr/${floID}/utxo`).then(utxos => {
|
getUTXOs(floID).then(utxos => {
|
||||||
for (var i = utxos.length - 1; i >= 0; i--)
|
for (var i = utxos.length - 1; i >= 0; i--)
|
||||||
if (utxos[i].confirmations) {
|
if (utxos[i].confirmations) {
|
||||||
trx.addinput(utxos[i].txid, utxos[i].vout, utxos[i].scriptPubKey);
|
trx.addinput(utxos[i].txid, utxos[i].vout, utxos[i].scriptPubKey);
|
||||||
@ -416,7 +424,7 @@
|
|||||||
//Get the UTXOs of the senders
|
//Get the UTXOs of the senders
|
||||||
let promises = [];
|
let promises = [];
|
||||||
for (let floID in senders)
|
for (let floID in senders)
|
||||||
promises.push(promisedAPI(`api/addr/${floID}/utxo`));
|
promises.push(getUTXOs(floID));
|
||||||
Promise.all(promises).then(results => {
|
Promise.all(promises).then(results => {
|
||||||
var trx = bitjs.transaction();
|
var trx = bitjs.transaction();
|
||||||
for (let floID in senders) {
|
for (let floID in senders) {
|
||||||
@ -490,21 +498,8 @@
|
|||||||
var fee = DEFAULT.fee;
|
var fee = DEFAULT.fee;
|
||||||
if (balance < sendAmt + fee)
|
if (balance < sendAmt + fee)
|
||||||
return reject("Insufficient FLO balance!");
|
return reject("Insufficient FLO balance!");
|
||||||
//get unconfirmed tx list
|
getUnconfirmedSpent(senderAddr).then(unconfirmedSpent => {
|
||||||
promisedAPI(`api/addr/${senderAddr}`).then(result => {
|
getUTXOs(senderAddr).then(utxos => {
|
||||||
readTxs(senderAddr, 0, result.unconfirmedTxApperances).then(result => {
|
|
||||||
let unconfirmedSpent = {};
|
|
||||||
for (let tx of result.items)
|
|
||||||
if (tx.confirmations == 0)
|
|
||||||
for (let vin of tx.vin)
|
|
||||||
if (vin.addr === senderAddr) {
|
|
||||||
if (Array.isArray(unconfirmedSpent[vin.txid]))
|
|
||||||
unconfirmedSpent[vin.txid].push(vin.vout);
|
|
||||||
else
|
|
||||||
unconfirmedSpent[vin.txid] = [vin.vout];
|
|
||||||
}
|
|
||||||
//get utxos list
|
|
||||||
promisedAPI(`api/addr/${senderAddr}/utxo`).then(utxos => {
|
|
||||||
//form/construct the transaction data
|
//form/construct the transaction data
|
||||||
var trx = bitjs.transaction();
|
var trx = bitjs.transaction();
|
||||||
var utxoAmt = 0.0;
|
var utxoAmt = 0.0;
|
||||||
@ -532,7 +527,6 @@
|
|||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,7 +662,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getTxOutput = (txid, i) => new Promise((resolve, reject) => {
|
const getTxOutput = (txid, i) => new Promise((resolve, reject) => {
|
||||||
fetch_api(`api/tx/${txid}`)
|
promisedAPI(`api/tx/${txid}`)
|
||||||
.then(result => resolve(result.vout[i]))
|
.then(result => resolve(result.vout[i]))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user