Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const findUnusedTransactions = async (bc, address, amount = -1) => {
- try {
- const iterator = bc.getIterator()
- const pendingTrxns = await bc.getTransactions()
- const result = filterUnusedTransactions(iterator, pendingTrxns, address, amount)
- return Promise.resolve(result)
- } catch(error) {
- return Promise.reject(error)
- }
- }
- const filterUnusedTransactions = (iterator, pendingTrxns, address, amount = -1) => {
- return new Promise(async (resolve, reject) => {
- let sum = 0
- let usedTrxns = {}
- let unusedTrxns = {}
- // Add pending trxns to used
- pendingTrxns.map((trxn) => {
- trxn.vin.map((vinTrxn) => {
- if (address == vinTrxn.signature) {
- usedTrxns[vinTrxn.id] = {
- id: vinTrxn.id,
- voutIdx: vinTrxn.vout
- }
- }
- })
- })
- while (true) {
- // Loop though all block in blockchain
- const next = await iterator.next()
- if (next) {
- next.transactions.map((trxn) => {
- // Mask Vin Trxn as Used Trxns
- trxn.vin.map((vinTrxn) => {
- // Only Target Address Filter
- if (address == vinTrxn.signature) {
- usedTrxns[vinTrxn.id] = {
- id: vinTrxn.id,
- voutIdx: vinTrxn.vout
- }
- }
- })
- trxn.vout.map((vout, voutIdx) => {
- if (!usedTrxns[trxn.id]) {
- if (address == vout.address) {
- unusedTrxns[trxn.id] = {
- idx: voutIdx,
- value: vout.value
- }
- sum += vout.value
- }
- }
- })
- })
- } else {
- break;
- }
- }
- return resolve({
- sum: sum,
- trxns: unusedTrxns
- })
- })
- }
Add Comment
Please, Sign In to add comment