diff --git a/web/cashtab/src/hooks/useWallet.js b/web/cashtab/src/hooks/useWallet.js --- a/web/cashtab/src/hooks/useWallet.js +++ b/web/cashtab/src/hooks/useWallet.js @@ -18,6 +18,7 @@ checkWalletForTokenInfo, isActiveWebsocket, } from 'utils/cashMethods'; +import { getUtxosChronik } from 'utils/chronik'; import { isValidCashtabSettings, isValidContactList, @@ -241,7 +242,33 @@ wallet.Path1899.publicKey, ]; + /* + This strange data structure is necessary because chronik requires the hash160 + of an address to tell you what utxos are at that address + */ + const hash160AndAddressObjArray = [ + { + address: wallet.Path145.cashAddress, + hash160: wallet.Path145.hash160, + }, + { + address: wallet.Path245.cashAddress, + hash160: wallet.Path245.hash160, + }, + { + address: wallet.Path1899.cashAddress, + hash160: wallet.Path1899.hash160, + }, + ]; + const utxos = await getUtxos(BCH, cashAddresses); + console.log(`bchApiUtxos`, utxos); + + const chronikUtxos = await getUtxosChronik( + chronik, + hash160AndAddressObjArray, + ); + console.log(`chronikUtxos`, chronikUtxos); // If an error is returned or utxos from only 1 address are returned if ( diff --git a/web/cashtab/src/utils/__mocks__/chronikUtxos.js b/web/cashtab/src/utils/__mocks__/chronikUtxos.js new file mode 100644 --- /dev/null +++ b/web/cashtab/src/utils/__mocks__/chronikUtxos.js @@ -0,0 +1,2276 @@ +export const hash160AndAddressObjArray = [ + { + address: 'bitcoincash:qppc593r2hhksvrz5l77n5yd6usrj74waqnqemgjgf', + hash160: '438a162355ef683062a7fde9d08dd720397aaee8', + }, + { + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + hash160: '58549b5b93428fac88e36617456cd99a411bd0eb', + }, + { + hash160: '76458db0ed96fe9863fc1ccec9fa2cfab884b0f6', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, +]; + +export const mockChronikUtxoResponsesByHash160 = { + '438a162355ef683062a7fde9d08dd720397aaee8': [], + '58549b5b93428fac88e36617456cd99a411bd0eb': [ + { + outputScript: '', + utxos: [ + { + outpoint: { + txid: '976753770d4fd3baa0a36e0792ba6b0f906efc771b25690b5300f5437ba0f0db', + outIdx: 2, + }, + blockHeight: 660149, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: 'aefc3f3c65760d0f0fa716a84d12c4dc76ca7552953d6c7a4358abb6e24c5d7c', + outIdx: 2, + }, + blockHeight: 660971, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '854d49d29819cdb5c4d9248146ffc82771cd3a7727f25a22993456f68050503e', + outIdx: 1, + }, + blockHeight: 661700, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'd4ffc597cb08b8c929e464f84069b9009649c7514860f673da48b1b3eba5b56e', + }, + slpToken: { + amount: '1', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '05e90e9f35bc041a2939e0e28cf9c436c9adb0f247a7fb0d1f4abb26d418f096', + outIdx: 2, + }, + blockHeight: 662159, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: 'ec423d0089f5cd85973ff6d875e9507f6b396b3b82bf6e9f5cfb24b7c70273bd', + outIdx: 2, + }, + blockHeight: 662935, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '1b19314963be975c57eb37df12b6a8e0598bcb743226cdc684895520f51c4dfe', + outIdx: 1, + }, + blockHeight: 666954, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + ], + }, + ], + '76458db0ed96fe9863fc1ccec9fa2cfab884b0f6': [ + { + outputScript: '', + utxos: [ + { + outpoint: { + txid: 'bd8b527df1d5d3bd611a8f0ee8f14af83cb7d107fb2e140dbd2d9f4b3a86786a', + outIdx: 1, + }, + blockHeight: 669673, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { + amount: '1', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'd2ad75a6974e4dc021483f381f314d260e958cbcc444230b485436b6264eaf3d', + outIdx: 1, + }, + blockHeight: 669673, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { + amount: '1', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'ff5fe4c631a5dd3e3b1cc74cb12b9eebf04d177c206eaadb8d949cc4fbb6a092', + outIdx: 0, + }, + blockHeight: 669942, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '0da32e1f64a12ed2a4afd406368cc76ab3f8c462b26fbdd9817675ffa0fa7668', + outIdx: 0, + }, + blockHeight: 669958, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '182f50952631c4bcdd46f4d42ac68376674727fa40dbcbf1101e40fbfd58b55a', + outIdx: 0, + }, + blockHeight: 669959, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '4064e02fe523cb107fecaf3f5abaabb89f7e2bb6662751ba4f86f8d18ebeb1fa', + outIdx: 1, + }, + blockHeight: 670076, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { + amount: '1', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'b78a3f8d17fc69cd1314517c36abad85f09fbca4d43ac108bced2ac78428f2c8', + outIdx: 0, + }, + blockHeight: 670482, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '55eec1cb63d2b3aa604ba2f505735de07cb224fcdbd8e554aa1180f59cdd0541', + outIdx: 0, + }, + blockHeight: 670670, + isCoinbase: false, + value: '546', + network: 'XEC', + }, + { + outpoint: { + txid: '37f63a9b1bcdc4733425dcfc3a7f3564d5095467ad7f64707fe52dbe5c1e1897', + outIdx: 2, + }, + blockHeight: 671724, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55', + }, + slpToken: { + amount: '90000000001', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'f90631b48521a4147dd9dd7091ce936eddc0c3e6221ec87fa4fabacc453a0b95', + outIdx: 1, + }, + blockHeight: 672701, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { + amount: '1', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '8d38f2f805ed3f4089cd28cd89ca279628a9fa933b04fd4820d14e66fc4d4ed5', + outIdx: 1, + }, + blockHeight: 691329, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f', + }, + slpToken: { + amount: '1000000000', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '0158981b89b75bd923d511aaaaccd94b8d1d86babeeb69c29e3caf71e33bcc11', + outIdx: 2, + }, + blockHeight: 692599, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bef614aac85c0c866f4d39e4d12a96851267d38d1bca5bdd6488bbd42e28b6b1', + }, + slpToken: { + amount: '1003456790', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '1ef9ad7d3e01fd9d83983eac92eefb4900b343225a80c29bff025deff9aab57c', + outIdx: 2, + }, + blockHeight: 692599, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bef614aac85c0c866f4d39e4d12a96851267d38d1bca5bdd6488bbd42e28b6b1', + }, + slpToken: { + amount: '880000000', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'edb693529851379bcbd75008f78940df8232510e6a1c64d8dc81693ae2a53f66', + outIdx: 1, + }, + blockHeight: 714823, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'GENESIS', + tokenId: + 'edb693529851379bcbd75008f78940df8232510e6a1c64d8dc81693ae2a53f66', + }, + slpToken: { + amount: '6969', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'afe4bc6ff9a3e26b6fb8803b754223b9f368402f479b21c39b2ff8f54bfb7f5e', + outIdx: 2, + }, + blockHeight: 722860, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e', + }, + slpToken: { + amount: '88', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'cc03f4b178f54327d5c337650531abf2a2464e2a9a486c38c6194f8ac96e9842', + outIdx: 2, + }, + blockHeight: 723247, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '27277911435164c511c7dbc3ef00ba5ce9edf8c1ccab93681cb0ad984b801ef1', + }, + slpToken: { + amount: '6900', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '83b9bab68c36364035976c7590df0b19d2f7b16c98d51d124891289bf3a122a5', + outIdx: 2, + }, + blockHeight: 724544, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '6a9305a13135625f4b533256e8d2e21a7343005331e1839348a39040f61e09d3', + }, + slpToken: { + amount: '6000', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '1e8f8b91c8d0ad5cb3a9863b40f3700fcc0f9dd2f296ce617292b20343cba258', + outIdx: 1, + }, + blockHeight: 729687, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'a3add503bba986398b39fa2200ce658423a597b4f7fe9de04a2da4501f8b05a3', + }, + slpToken: { + amount: '6899', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '0dbe4780c2ea521b2986df124199673e868de73ba0235e62a75143b6f4615cdc', + outIdx: 1, + }, + blockHeight: 730742, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '2502bdc75d3afdce0742505d53e6d50cefb1268d7c2a835c06b701702b79e1b8', + }, + slpToken: { + amount: '6900', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'd407e2106f03e8f2533bd08583df5683d7cab6a6a50c10621d40ba1359b8898e', + outIdx: 1, + }, + blockHeight: 730742, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4f2ff164e60203886d411d0a09f38d213c4eea13ec3f8069825616ccf012eb46', + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'dcbb692fe137f8f91830b0fe76ccd4f872f81eca86c2bf5150ad96f088584a20', + outIdx: 1, + }, + blockHeight: 731733, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '742a8e656fe7a6cff86e688ec191be780974fc54b900f58cd15049be89e9e1c5', + }, + network: 'XEC', + }, + { + outpoint: { + txid: '96582b98899814d6c0d4688ad89ff288009e898c9ea2b7cf05c4ef4f79a7684f', + outIdx: 1, + }, + blockHeight: 731843, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'f29939b961d8f3b27d7826e3f22451fcf9273ac84421312a20148b1e083a5bb0', + }, + slpToken: { + amount: '6900', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'bbf2c0e97075841996d39638ad4e8b3f28608057b4f52a4e93cd2d0eeadd82a3', + outIdx: 2, + }, + blockHeight: 732781, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'c70d5f036368e184d2a52389b2f4c2471855aebaccbd418db24d4515ce062dbe', + }, + slpToken: { + amount: '6900', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'c6446d281c062ca76b9a66c802669abe3d1d89656b789f507a8458972bed590c', + outIdx: 1, + }, + blockHeight: 732781, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '48090bcd94cf53289ce84e1d4aeb8035f6ea7d80d37baa6343d0f71e7d67a3ef', + }, + slpToken: { + amount: '90', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '46cf8bf009dbc6da45045c23af878cd2fd6dd3d3f62bf524d675e75959d5fdbd', + outIdx: 1, + }, + blockHeight: 739924, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3', + }, + slpToken: { + amount: '12', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '3d60d2d130eee3e45e6a2d0e88e2ecae82d70c1ed1afc8f62ca9c8564d38108d', + outIdx: 2, + }, + blockHeight: 739925, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3', + }, + slpToken: { + amount: '52', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '543da3df1e59f6e665d9ccceaba756d38759774fa879ce7b87839470a4d2c401', + outIdx: 1, + }, + blockHeight: 739942, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4f2ff164e60203886d411d0a09f38d213c4eea13ec3f8069825616ccf012eb46', + }, + slpToken: { + amount: '3', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: 'd6be21e3478417da07443f6d10bfbef7c65a6f011d769eb522da21ef19e4156f', + outIdx: 0, + }, + blockHeight: 740198, + isCoinbase: false, + value: '1300', + network: 'XEC', + }, + { + outpoint: { + txid: 'fc5a695db319b20a31690e122e89b3ea31b2b9997c07933bb9b857a87413c9bf', + outIdx: 0, + }, + blockHeight: 740198, + isCoinbase: false, + value: '1200', + network: 'XEC', + }, + { + outpoint: { + txid: '503288f004516e509408866e7ef4153a1659a98361ec63d091d2e6010bd7acc3', + outIdx: 0, + }, + blockHeight: 742796, + isCoinbase: false, + value: '100000', + network: 'XEC', + }, + { + outpoint: { + txid: '953cfd47b1b739b78c75fd26607157b3a5b5b03af9091aacc28f451e6ea9a9e2', + outIdx: 0, + }, + blockHeight: 742799, + isCoinbase: false, + value: '222200', + network: 'XEC', + }, + { + outpoint: { + txid: '55388f67ab1b23d2e6c146472b836c1ba1df33dd9b7685bed34c6c9ce6fe5c0e', + outIdx: 0, + }, + blockHeight: 742800, + isCoinbase: false, + value: '123400', + network: 'XEC', + }, + { + outpoint: { + txid: 'ba9e8778cd12607fa7dfe0c73ef46fc097db3e0fd186ee638fbd5827a58f3203', + outIdx: 0, + }, + blockHeight: 742800, + isCoinbase: false, + value: '177700', + network: 'XEC', + }, + { + outpoint: { + txid: '18dad890a8c5d5c9d70db0d104a768217c96f4434781f4ba72094500eb9f5b25', + outIdx: 0, + }, + blockHeight: 745160, + isCoinbase: false, + value: '3322', + network: 'XEC', + }, + { + outpoint: { + txid: 'c2d69f896e78de323c4c705f79b303189cf02c1e4c34c2c22a7178a9768233ae', + outIdx: 0, + }, + blockHeight: 745160, + isCoinbase: false, + value: '19990', + network: 'XEC', + }, + { + outpoint: { + txid: '34de200441fddc68cbeac49281c11c319b6927bdd1dcca0a390a415c32200037', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + value: '2300', + network: 'XEC', + }, + { + outpoint: { + txid: '384bd0e84e7d619d302d91fca289e60d6cb29e7bcd410e5b879b732cc63af45c', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + value: '10000', + network: 'XEC', + }, + { + outpoint: { + txid: '4cf2659c38cc851051c75169ce35393a5b231f8e942355cd86fafc2dc8b53463', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + value: '2500', + network: 'XEC', + }, + { + outpoint: { + txid: '960a41121e2cef6760dce8df660f063b4e79fe318133ee28e06aa8804d080292', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + value: '7700', + network: 'XEC', + }, + { + outpoint: { + txid: '9984800f966fb70708821ca430256f92a1d52081e6cc9ced7af58e5d6edb30fd', + outIdx: 0, + }, + blockHeight: 745164, + isCoinbase: false, + value: '2500', + network: 'XEC', + }, + { + outpoint: { + txid: 'cab01a2017a25ee818fe323368e9c1d59fbdbdfdfe0d1c152a424c3abcfcc3e7', + outIdx: 5, + }, + blockHeight: 745251, + isCoinbase: false, + value: '4400000', + network: 'XEC', + }, + { + outpoint: { + txid: 'cab01a2017a25ee818fe323368e9c1d59fbdbdfdfe0d1c152a424c3abcfcc3e7', + outIdx: 6, + }, + blockHeight: 745251, + isCoinbase: false, + value: '3185931', + network: 'XEC', + }, + { + outpoint: { + txid: '23b4ac14065f0b8bb594e35a366cb707b52c4630398439d79c4cd179d005a298', + outIdx: 5, + }, + blockHeight: 745254, + isCoinbase: false, + value: '4840000', + network: 'XEC', + }, + { + outpoint: { + txid: '23b4ac14065f0b8bb594e35a366cb707b52c4630398439d79c4cd179d005a298', + outIdx: 6, + }, + blockHeight: 745254, + isCoinbase: false, + value: '450087910', + network: 'XEC', + }, + { + outpoint: { + txid: '170d873efc4479681c43dd23459e1bff0ce1f7baca3b72a06b23f4e27d48b846', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '4000', + network: 'XEC', + }, + { + outpoint: { + txid: '4af375c5df684ac26a58239ca849fb95ff2724ec36a02a0aeec627e495099627', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '1000', + network: 'XEC', + }, + { + outpoint: { + txid: '505c5002b524aa9ad5eba67648d2994c4e321e84343b0e096ef0fa03eb95e92f', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '5000', + network: 'XEC', + }, + { + outpoint: { + txid: '63e04a02f92cf3dbf681d805ab3adc9aba80d122c69db4c4f221a6dcde841e37', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '2500', + network: 'XEC', + }, + { + outpoint: { + txid: '736ce5eef4260f63a627df8a6558a87a6ed41f1c37d3d8b3c8c61d669d6e2216', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '2500', + network: 'XEC', + }, + { + outpoint: { + txid: '7ac4baac0e40c644ff317621a8fad9b3f7a472e7460f3251da47f23464c9fc81', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '5000', + network: 'XEC', + }, + { + outpoint: { + txid: 'e05c1853ee96c5b36db1623891f4614c0b75721636f92214756677d5058bcfe0', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + value: '7647', + network: 'XEC', + }, + { + outpoint: { + txid: '45903465b46787e1e4c024120cc2495a1654e948daef28b04e1801ee0961010b', + outIdx: 1, + }, + blockHeight: 745877, + isCoinbase: false, + value: '4383440', + network: 'XEC', + }, + { + outpoint: { + txid: '76f2ddfdc004693f72f480c379bf225bbdadb72639413d2b43d30644989589b7', + outIdx: 0, + }, + blockHeight: 746181, + isCoinbase: false, + value: '5005', + network: 'XEC', + }, + { + outpoint: { + txid: '2944b65fb1323adc6223746eb44088f585069bd3d92f60cb7acce291e124484e', + outIdx: 0, + }, + blockHeight: 746307, + isCoinbase: false, + value: '3300', + network: 'XEC', + }, + { + outpoint: { + txid: '07ec6544578c04a61b7a0a71218115d4f33a8f5f5dcd36a6077de257ff1d2a42', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + value: '5500', + network: 'XEC', + }, + { + outpoint: { + txid: '4662f0a412a99b5d847145646152c8fa86b80b2d420be262955ac5cc9d7d3e92', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + value: '6700', + network: 'XEC', + }, + { + outpoint: { + txid: '7e8fa3345d09468ed1ce17a0a5cb9d816ac292e12e4a86c3b06364f25d0687c4', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + value: '4500', + network: 'XEC', + }, + { + outpoint: { + txid: '2621c92218cc5987373a24e462c5c60810b74c0a03b185b7b865887d889fe8d9', + outIdx: 0, + }, + blockHeight: 747055, + isCoinbase: false, + value: '3300', + network: 'XEC', + }, + { + outpoint: { + txid: 'd15d87f16c9c9311237d7209db97a2b484ca4821a266a1d0cbea994e221f075d', + outIdx: 0, + }, + blockHeight: 747055, + isCoinbase: false, + value: '3400', + network: 'XEC', + }, + { + outpoint: { + txid: '1722d9f5a3638a3e14a74e95b26a04d96c63e618e1f8530ce2ca693213fe955c', + outIdx: 0, + }, + blockHeight: 747056, + isCoinbase: false, + value: '1500', + network: 'XEC', + }, + { + outpoint: { + txid: '3cc6c6de52a396d27fea490985d8b5990340eec946f2620592298259c5d7add2', + outIdx: 0, + }, + blockHeight: 747056, + isCoinbase: false, + value: '1800', + network: 'XEC', + }, + { + outpoint: { + txid: '72cf050449bafab919cf5d6b1519af8244605669c6dcd429ba8e817507b14a7a', + outIdx: 0, + }, + blockHeight: 747057, + isCoinbase: false, + value: '5000', + network: 'XEC', + }, + { + outpoint: { + txid: 'c9af5da52adc7fcbc5cad42e1b4220fcba0e1436f2541fb752437391f87d0a48', + outIdx: 0, + }, + blockHeight: 747057, + isCoinbase: false, + value: '5000', + network: 'XEC', + }, + { + outpoint: { + txid: '76804ac0537c9d191fec3e43f74acc604d2c4b38781367b63628516e0e051b20', + outIdx: 0, + }, + blockHeight: 747059, + isCoinbase: false, + value: '5500', + network: 'XEC', + }, + { + outpoint: { + txid: 'ff5d080098ceff04774eefcd998d455b0b25a366a189fbe1961cc02344cb6e11', + outIdx: 1, + }, + blockHeight: 747059, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'c70d5f036368e184d2a52389b2f4c2471855aebaccbd418db24d4515ce062dbe', + }, + slpToken: { + amount: '22', + isMintBaton: false, + }, + network: 'XEC', + }, + { + outpoint: { + txid: '1fc80999903874f2a785326344a4b04100521e9b88df20cfd68f03d448a95573', + outIdx: 0, + }, + blockHeight: 747343, + isCoinbase: false, + value: '5500', + network: 'XEC', + }, + { + outpoint: { + txid: '4a817166f70faec14212a88026e5be2b3db8311e02029413a21963aca0542eda', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + value: '8648', + network: 'XEC', + }, + { + outpoint: { + txid: '69b060294e7b49fdf45f0a6eb500a03a881a2f54c86238b54718880470629cee', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + value: '4371890', + network: 'XEC', + }, + { + outpoint: { + txid: '84f2558a287953b57155b266be4b9f62f06c061827c66184aee60f8b3aa6d3e7', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + value: '29845', + network: 'XEC', + }, + { + outpoint: { + txid: 'fb444b0e41fdf6ac69808306154e756f55d7416efd9aea8c3514d338b45eeb88', + outIdx: 1, + }, + blockHeight: 750013, + isCoinbase: false, + value: '5645', + network: 'XEC', + }, + { + outpoint: { + txid: '34961744de22882f20088f176921b9340de01448e25a4ca25250484343d55dd4', + outIdx: 1, + }, + blockHeight: 750014, + isCoinbase: false, + value: '32548', + network: 'XEC', + }, + { + outpoint: { + txid: 'dd5fa038519424f81dffe30f83b1bbbd62228e2dae19f0afcb39c765409e3397', + outIdx: 1, + }, + blockHeight: 750014, + isCoinbase: false, + value: '53948', + network: 'XEC', + }, + { + outpoint: { + txid: '686c9b014f4f56c2911e514397c9aeb452a27b0f38ea17638118a7eea599629f', + outIdx: 1, + }, + blockHeight: 750272, + isCoinbase: false, + value: '3201775', + network: 'XEC', + }, + { + outpoint: { + txid: 'ee14c10966277631a92d74f5f9fe42c3e3f2dfb59447922185f8c0ad9e2de2fd', + outIdx: 1, + }, + blockHeight: 750272, + isCoinbase: false, + value: '600', + network: 'XEC', + }, + ], + }, + ], +}; + +export const chronikUtxos = [ + { + outpoint: { + txid: '976753770d4fd3baa0a36e0792ba6b0f906efc771b25690b5300f5437ba0f0db', + outIdx: 2, + }, + blockHeight: 660149, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: 'aefc3f3c65760d0f0fa716a84d12c4dc76ca7552953d6c7a4358abb6e24c5d7c', + outIdx: 2, + }, + blockHeight: 660971, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: '854d49d29819cdb5c4d9248146ffc82771cd3a7727f25a22993456f68050503e', + outIdx: 1, + }, + blockHeight: 661700, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'd4ffc597cb08b8c929e464f84069b9009649c7514860f673da48b1b3eba5b56e', + }, + slpToken: { amount: '1', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: '05e90e9f35bc041a2939e0e28cf9c436c9adb0f247a7fb0d1f4abb26d418f096', + outIdx: 2, + }, + blockHeight: 662159, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: 'ec423d0089f5cd85973ff6d875e9507f6b396b3b82bf6e9f5cfb24b7c70273bd', + outIdx: 2, + }, + blockHeight: 662935, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: '1b19314963be975c57eb37df12b6a8e0598bcb743226cdc684895520f51c4dfe', + outIdx: 1, + }, + blockHeight: 666954, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpv9fx6mjdpgltygudnpw3tvmxdyzx7savhphtzswu', + }, + { + outpoint: { + txid: 'bd8b527df1d5d3bd611a8f0ee8f14af83cb7d107fb2e140dbd2d9f4b3a86786a', + outIdx: 1, + }, + blockHeight: 669673, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { amount: '1', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'd2ad75a6974e4dc021483f381f314d260e958cbcc444230b485436b6264eaf3d', + outIdx: 1, + }, + blockHeight: 669673, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { amount: '1', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'ff5fe4c631a5dd3e3b1cc74cb12b9eebf04d177c206eaadb8d949cc4fbb6a092', + outIdx: 0, + }, + blockHeight: 669942, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '0da32e1f64a12ed2a4afd406368cc76ab3f8c462b26fbdd9817675ffa0fa7668', + outIdx: 0, + }, + blockHeight: 669958, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '182f50952631c4bcdd46f4d42ac68376674727fa40dbcbf1101e40fbfd58b55a', + outIdx: 0, + }, + blockHeight: 669959, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '4064e02fe523cb107fecaf3f5abaabb89f7e2bb6662751ba4f86f8d18ebeb1fa', + outIdx: 1, + }, + blockHeight: 670076, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { amount: '1', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'b78a3f8d17fc69cd1314517c36abad85f09fbca4d43ac108bced2ac78428f2c8', + outIdx: 0, + }, + blockHeight: 670482, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '55eec1cb63d2b3aa604ba2f505735de07cb224fcdbd8e554aa1180f59cdd0541', + outIdx: 0, + }, + blockHeight: 670670, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '546', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '37f63a9b1bcdc4733425dcfc3a7f3564d5095467ad7f64707fe52dbe5c1e1897', + outIdx: 2, + }, + blockHeight: 671724, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55', + }, + slpToken: { amount: '90000000001', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'f90631b48521a4147dd9dd7091ce936eddc0c3e6221ec87fa4fabacc453a0b95', + outIdx: 1, + }, + blockHeight: 672701, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef', + }, + slpToken: { amount: '1', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '8d38f2f805ed3f4089cd28cd89ca279628a9fa933b04fd4820d14e66fc4d4ed5', + outIdx: 1, + }, + blockHeight: 691329, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f', + }, + slpToken: { amount: '1000000000', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '0158981b89b75bd923d511aaaaccd94b8d1d86babeeb69c29e3caf71e33bcc11', + outIdx: 2, + }, + blockHeight: 692599, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bef614aac85c0c866f4d39e4d12a96851267d38d1bca5bdd6488bbd42e28b6b1', + }, + slpToken: { amount: '1003456790', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '1ef9ad7d3e01fd9d83983eac92eefb4900b343225a80c29bff025deff9aab57c', + outIdx: 2, + }, + blockHeight: 692599, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'bef614aac85c0c866f4d39e4d12a96851267d38d1bca5bdd6488bbd42e28b6b1', + }, + slpToken: { amount: '880000000', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'edb693529851379bcbd75008f78940df8232510e6a1c64d8dc81693ae2a53f66', + outIdx: 1, + }, + blockHeight: 714823, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'GENESIS', + tokenId: + 'edb693529851379bcbd75008f78940df8232510e6a1c64d8dc81693ae2a53f66', + }, + slpToken: { amount: '6969', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'afe4bc6ff9a3e26b6fb8803b754223b9f368402f479b21c39b2ff8f54bfb7f5e', + outIdx: 2, + }, + blockHeight: 722860, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e', + }, + slpToken: { amount: '88', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'cc03f4b178f54327d5c337650531abf2a2464e2a9a486c38c6194f8ac96e9842', + outIdx: 2, + }, + blockHeight: 723247, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '27277911435164c511c7dbc3ef00ba5ce9edf8c1ccab93681cb0ad984b801ef1', + }, + slpToken: { amount: '6900', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '83b9bab68c36364035976c7590df0b19d2f7b16c98d51d124891289bf3a122a5', + outIdx: 2, + }, + blockHeight: 724544, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '6a9305a13135625f4b533256e8d2e21a7343005331e1839348a39040f61e09d3', + }, + slpToken: { amount: '6000', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '1e8f8b91c8d0ad5cb3a9863b40f3700fcc0f9dd2f296ce617292b20343cba258', + outIdx: 1, + }, + blockHeight: 729687, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'a3add503bba986398b39fa2200ce658423a597b4f7fe9de04a2da4501f8b05a3', + }, + slpToken: { amount: '6899', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '0dbe4780c2ea521b2986df124199673e868de73ba0235e62a75143b6f4615cdc', + outIdx: 1, + }, + blockHeight: 730742, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '2502bdc75d3afdce0742505d53e6d50cefb1268d7c2a835c06b701702b79e1b8', + }, + slpToken: { amount: '6900', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'd407e2106f03e8f2533bd08583df5683d7cab6a6a50c10621d40ba1359b8898e', + outIdx: 1, + }, + blockHeight: 730742, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4f2ff164e60203886d411d0a09f38d213c4eea13ec3f8069825616ccf012eb46', + }, + slpToken: undefined, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'dcbb692fe137f8f91830b0fe76ccd4f872f81eca86c2bf5150ad96f088584a20', + outIdx: 1, + }, + blockHeight: 731733, + isCoinbase: false, + slpToken: undefined, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '742a8e656fe7a6cff86e688ec191be780974fc54b900f58cd15049be89e9e1c5', + }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '96582b98899814d6c0d4688ad89ff288009e898c9ea2b7cf05c4ef4f79a7684f', + outIdx: 1, + }, + blockHeight: 731843, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'f29939b961d8f3b27d7826e3f22451fcf9273ac84421312a20148b1e083a5bb0', + }, + slpToken: { amount: '6900', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'bbf2c0e97075841996d39638ad4e8b3f28608057b4f52a4e93cd2d0eeadd82a3', + outIdx: 2, + }, + blockHeight: 732781, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'c70d5f036368e184d2a52389b2f4c2471855aebaccbd418db24d4515ce062dbe', + }, + slpToken: { amount: '6900', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'c6446d281c062ca76b9a66c802669abe3d1d89656b789f507a8458972bed590c', + outIdx: 1, + }, + blockHeight: 732781, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '48090bcd94cf53289ce84e1d4aeb8035f6ea7d80d37baa6343d0f71e7d67a3ef', + }, + slpToken: { amount: '90', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '46cf8bf009dbc6da45045c23af878cd2fd6dd3d3f62bf524d675e75959d5fdbd', + outIdx: 1, + }, + blockHeight: 739924, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3', + }, + slpToken: { amount: '12', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '3d60d2d130eee3e45e6a2d0e88e2ecae82d70c1ed1afc8f62ca9c8564d38108d', + outIdx: 2, + }, + blockHeight: 739925, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3', + }, + slpToken: { amount: '52', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '543da3df1e59f6e665d9ccceaba756d38759774fa879ce7b87839470a4d2c401', + outIdx: 1, + }, + blockHeight: 739942, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + '4f2ff164e60203886d411d0a09f38d213c4eea13ec3f8069825616ccf012eb46', + }, + slpToken: { amount: '3', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'd6be21e3478417da07443f6d10bfbef7c65a6f011d769eb522da21ef19e4156f', + outIdx: 0, + }, + blockHeight: 740198, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '1300', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'fc5a695db319b20a31690e122e89b3ea31b2b9997c07933bb9b857a87413c9bf', + outIdx: 0, + }, + blockHeight: 740198, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '1200', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '503288f004516e509408866e7ef4153a1659a98361ec63d091d2e6010bd7acc3', + outIdx: 0, + }, + blockHeight: 742796, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '100000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '953cfd47b1b739b78c75fd26607157b3a5b5b03af9091aacc28f451e6ea9a9e2', + outIdx: 0, + }, + blockHeight: 742799, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '222200', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '55388f67ab1b23d2e6c146472b836c1ba1df33dd9b7685bed34c6c9ce6fe5c0e', + outIdx: 0, + }, + blockHeight: 742800, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '123400', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'ba9e8778cd12607fa7dfe0c73ef46fc097db3e0fd186ee638fbd5827a58f3203', + outIdx: 0, + }, + blockHeight: 742800, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '177700', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '18dad890a8c5d5c9d70db0d104a768217c96f4434781f4ba72094500eb9f5b25', + outIdx: 0, + }, + blockHeight: 745160, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3322', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'c2d69f896e78de323c4c705f79b303189cf02c1e4c34c2c22a7178a9768233ae', + outIdx: 0, + }, + blockHeight: 745160, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '19990', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '34de200441fddc68cbeac49281c11c319b6927bdd1dcca0a390a415c32200037', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '2300', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '384bd0e84e7d619d302d91fca289e60d6cb29e7bcd410e5b879b732cc63af45c', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '10000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '4cf2659c38cc851051c75169ce35393a5b231f8e942355cd86fafc2dc8b53463', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '2500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '960a41121e2cef6760dce8df660f063b4e79fe318133ee28e06aa8804d080292', + outIdx: 0, + }, + blockHeight: 745163, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '7700', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '9984800f966fb70708821ca430256f92a1d52081e6cc9ced7af58e5d6edb30fd', + outIdx: 0, + }, + blockHeight: 745164, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '2500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'cab01a2017a25ee818fe323368e9c1d59fbdbdfdfe0d1c152a424c3abcfcc3e7', + outIdx: 5, + }, + blockHeight: 745251, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4400000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'cab01a2017a25ee818fe323368e9c1d59fbdbdfdfe0d1c152a424c3abcfcc3e7', + outIdx: 6, + }, + blockHeight: 745251, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3185931', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '23b4ac14065f0b8bb594e35a366cb707b52c4630398439d79c4cd179d005a298', + outIdx: 5, + }, + blockHeight: 745254, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4840000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '23b4ac14065f0b8bb594e35a366cb707b52c4630398439d79c4cd179d005a298', + outIdx: 6, + }, + blockHeight: 745254, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '450087910', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '170d873efc4479681c43dd23459e1bff0ce1f7baca3b72a06b23f4e27d48b846', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '4af375c5df684ac26a58239ca849fb95ff2724ec36a02a0aeec627e495099627', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '1000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '505c5002b524aa9ad5eba67648d2994c4e321e84343b0e096ef0fa03eb95e92f', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '63e04a02f92cf3dbf681d805ab3adc9aba80d122c69db4c4f221a6dcde841e37', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '2500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '736ce5eef4260f63a627df8a6558a87a6ed41f1c37d3d8b3c8c61d669d6e2216', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '2500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '7ac4baac0e40c644ff317621a8fad9b3f7a472e7460f3251da47f23464c9fc81', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'e05c1853ee96c5b36db1623891f4614c0b75721636f92214756677d5058bcfe0', + outIdx: 0, + }, + blockHeight: 745876, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '7647', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '45903465b46787e1e4c024120cc2495a1654e948daef28b04e1801ee0961010b', + outIdx: 1, + }, + blockHeight: 745877, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4383440', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '76f2ddfdc004693f72f480c379bf225bbdadb72639413d2b43d30644989589b7', + outIdx: 0, + }, + blockHeight: 746181, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5005', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '2944b65fb1323adc6223746eb44088f585069bd3d92f60cb7acce291e124484e', + outIdx: 0, + }, + blockHeight: 746307, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3300', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '07ec6544578c04a61b7a0a71218115d4f33a8f5f5dcd36a6077de257ff1d2a42', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '4662f0a412a99b5d847145646152c8fa86b80b2d420be262955ac5cc9d7d3e92', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '6700', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '7e8fa3345d09468ed1ce17a0a5cb9d816ac292e12e4a86c3b06364f25d0687c4', + outIdx: 0, + }, + blockHeight: 746319, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '2621c92218cc5987373a24e462c5c60810b74c0a03b185b7b865887d889fe8d9', + outIdx: 0, + }, + blockHeight: 747055, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3300', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'd15d87f16c9c9311237d7209db97a2b484ca4821a266a1d0cbea994e221f075d', + outIdx: 0, + }, + blockHeight: 747055, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3400', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '1722d9f5a3638a3e14a74e95b26a04d96c63e618e1f8530ce2ca693213fe955c', + outIdx: 0, + }, + blockHeight: 747056, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '1500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '3cc6c6de52a396d27fea490985d8b5990340eec946f2620592298259c5d7add2', + outIdx: 0, + }, + blockHeight: 747056, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '1800', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '72cf050449bafab919cf5d6b1519af8244605669c6dcd429ba8e817507b14a7a', + outIdx: 0, + }, + blockHeight: 747057, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'c9af5da52adc7fcbc5cad42e1b4220fcba0e1436f2541fb752437391f87d0a48', + outIdx: 0, + }, + blockHeight: 747057, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5000', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '76804ac0537c9d191fec3e43f74acc604d2c4b38781367b63628516e0e051b20', + outIdx: 0, + }, + blockHeight: 747059, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'ff5d080098ceff04774eefcd998d455b0b25a366a189fbe1961cc02344cb6e11', + outIdx: 1, + }, + blockHeight: 747059, + isCoinbase: false, + value: '546', + slpMeta: { + groupTokenId: undefined, + tokenType: 'FUNGIBLE', + txType: 'SEND', + tokenId: + 'c70d5f036368e184d2a52389b2f4c2471855aebaccbd418db24d4515ce062dbe', + }, + slpToken: { amount: '22', isMintBaton: false }, + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '1fc80999903874f2a785326344a4b04100521e9b88df20cfd68f03d448a95573', + outIdx: 0, + }, + blockHeight: 747343, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5500', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '4a817166f70faec14212a88026e5be2b3db8311e02029413a21963aca0542eda', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '8648', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '69b060294e7b49fdf45f0a6eb500a03a881a2f54c86238b54718880470629cee', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '4371890', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '84f2558a287953b57155b266be4b9f62f06c061827c66184aee60f8b3aa6d3e7', + outIdx: 1, + }, + blockHeight: 750012, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '29845', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'fb444b0e41fdf6ac69808306154e756f55d7416efd9aea8c3514d338b45eeb88', + outIdx: 1, + }, + blockHeight: 750013, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '5645', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '34961744de22882f20088f176921b9340de01448e25a4ca25250484343d55dd4', + outIdx: 1, + }, + blockHeight: 750014, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '32548', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'dd5fa038519424f81dffe30f83b1bbbd62228e2dae19f0afcb39c765409e3397', + outIdx: 1, + }, + blockHeight: 750014, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '53948', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: '686c9b014f4f56c2911e514397c9aeb452a27b0f38ea17638118a7eea599629f', + outIdx: 1, + }, + blockHeight: 750272, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '3201775', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, + { + outpoint: { + txid: 'ee14c10966277631a92d74f5f9fe42c3e3f2dfb59447922185f8c0ad9e2de2fd', + outIdx: 1, + }, + blockHeight: 750272, + isCoinbase: false, + slpMeta: undefined, + slpToken: undefined, + value: '600', + network: 'XEC', + address: 'bitcoincash:qpmytrdsakt0axrrlswvaj069nat3p9s7ct4lsf8k9', + }, +]; diff --git a/web/cashtab/src/utils/__tests__/chronik.test.js b/web/cashtab/src/utils/__tests__/chronik.test.js new file mode 100644 --- /dev/null +++ b/web/cashtab/src/utils/__tests__/chronik.test.js @@ -0,0 +1,42 @@ +import { currency } from 'components/Common/Ticker'; +import { getUtxosChronik } from 'utils/chronik'; +import { + hash160AndAddressObjArray, + mockChronikUtxoResponsesByHash160, + chronikUtxos, +} from '../__mocks__/chronikUtxos'; +import { ChronikClient } from 'chronik-client'; + +/* +Note: +- getUtxosSingleHashChronik is only an API wrapper, no value in unit testing + +- returnGetUtxosChronikPromise adds the address key/value to the utxo object. + It exists as a distinct function because chronik cannot accept an array of hash160s + as input. The function returns a promise so cannot be tested on its own, but is tested + in the call to getUtxosChronik +*/ + +it(`getUtxosChronik successfully adds the address field to each utxo`, async () => { + // Initialize chronik + const chronik = new ChronikClient(currency.chronikUrl); + + /* + Mock the API response from + utxos = await chronik.script('p2pkh', hash160).utxos(); + in getUtxosSingleHashChronik -- for each hash160 used + */ + for (let i = 0; i < hash160AndAddressObjArray.length; i += 1) { + chronik.script('p2pkh', hash160AndAddressObjArray[i].hash160).utxos = + jest + .fn() + .mockResolvedValue( + mockChronikUtxoResponsesByHash160[ + hash160AndAddressObjArray[i].hash160 + ], + ); + } + expect( + await getUtxosChronik(chronik, hash160AndAddressObjArray), + ).toStrictEqual(chronikUtxos); +}); diff --git a/web/cashtab/src/utils/chronik.js b/web/cashtab/src/utils/chronik.js new file mode 100644 --- /dev/null +++ b/web/cashtab/src/utils/chronik.js @@ -0,0 +1,69 @@ +// Chronik methods + +export const getUtxosSingleHashChronik = async (chronik, hash160) => { + // Get utxos at a single address, which chronik takes in as a hash160 + let utxos; + try { + utxos = await chronik.script('p2pkh', hash160).utxos(); + if (utxos.length === 0) { + // Chronik returns an empty array if there are no utxos at this hash160 + return []; + } + /* Chronik returns an array of with a single object if there are utxos at this hash 160 + [ + { + outputScript: , + utxos:[{utxo}, {utxo}, ..., {utxo}] + } + ] + */ + + // Return only the array of utxos at this address + return utxos[0].utxos; + } catch (err) { + console.log(`Error in chronik.utxos(${hash160})`); + console.log(err); + } +}; + +export const returnGetUtxosChronikPromise = (chronik, hash160AndAddressObj) => { + /* + Chronik thinks in hash160s, but people and wallets think in addresses + Add the address to each utxo + */ + return new Promise((resolve, reject) => { + getUtxosSingleHashChronik(chronik, hash160AndAddressObj.hash160).then( + result => { + for (let i = 0; i < result.length; i += 1) { + const thisUtxo = result[i]; + thisUtxo.address = hash160AndAddressObj.address; + } + resolve(result); + }, + err => { + reject(err); + }, + ); + }); +}; + +export const getUtxosChronik = async (chronik, hash160sMappedToAddresses) => { + /* + Chronik only accepts utxo requests for one address at a time + Construct an array of promises for each address + Note: Chronik requires the hash160 of an address for this request + */ + const chronikUtxoPromises = []; + for (let i = 0; i < hash160sMappedToAddresses.length; i += 1) { + const thisPromise = returnGetUtxosChronikPromise( + chronik, + hash160sMappedToAddresses[i], + ); + chronikUtxoPromises.push(thisPromise); + } + const allUtxos = await Promise.all(chronikUtxoPromises); + // Since each individual utxo has address information, no need to keep them in distinct arrays + // Combine into one array of all utxos + const flatUtxos = allUtxos.flat(); + return flatUtxos; +};