Guest User

Untitled

a guest
Apr 23rd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. const findUnusedTransactions = async (bc, address, amount = -1) => {
  2. try {
  3. const iterator = bc.getIterator()
  4. const pendingTrxns = await bc.getTransactions()
  5. const result = filterUnusedTransactions(iterator, pendingTrxns, address, amount)
  6. return Promise.resolve(result)
  7. } catch(error) {
  8. return Promise.reject(error)
  9. }
  10. }
  11.  
  12. const filterUnusedTransactions = (iterator, pendingTrxns, address, amount = -1) => {
  13. return new Promise(async (resolve, reject) => {
  14. let sum = 0
  15. let usedTrxns = {}
  16. let unusedTrxns = {}
  17.  
  18. // Add pending trxns to used
  19. pendingTrxns.map((trxn) => {
  20. trxn.vin.map((vinTrxn) => {
  21. if (address == vinTrxn.signature) {
  22. usedTrxns[vinTrxn.id] = {
  23. id: vinTrxn.id,
  24. voutIdx: vinTrxn.vout
  25. }
  26. }
  27. })
  28. })
  29.  
  30. while (true) {
  31.  
  32. // Loop though all block in blockchain
  33. const next = await iterator.next()
  34. if (next) {
  35. next.transactions.map((trxn) => {
  36.  
  37. // Mask Vin Trxn as Used Trxns
  38. trxn.vin.map((vinTrxn) => {
  39.  
  40. // Only Target Address Filter
  41. if (address == vinTrxn.signature) {
  42. usedTrxns[vinTrxn.id] = {
  43. id: vinTrxn.id,
  44. voutIdx: vinTrxn.vout
  45. }
  46. }
  47. })
  48.  
  49. trxn.vout.map((vout, voutIdx) => {
  50. if (!usedTrxns[trxn.id]) {
  51. if (address == vout.address) {
  52. unusedTrxns[trxn.id] = {
  53. idx: voutIdx,
  54. value: vout.value
  55. }
  56.  
  57. sum += vout.value
  58. }
  59. }
  60. })
  61. })
  62. } else {
  63. break;
  64. }
  65. }
  66.  
  67. return resolve({
  68. sum: sum,
  69. trxns: unusedTrxns
  70. })
  71. })
  72. }
Add Comment
Please, Sign In to add comment