diff --git a/web/alias-server/alias.js b/web/alias-server/alias.js index 8114bfb1c..884b11448 100644 --- a/web/alias-server/alias.js +++ b/web/alias-server/alias.js @@ -1,167 +1,160 @@ const log = require('./log'); const { outputScriptToAddress } = require('./utils'); module.exports = { getAllAliasTxs: function (aliasTxHistory, aliasConstants) { const aliasTxCount = aliasTxHistory.length; // initialize array for all valid aliases const allAliasTxs = []; // iterate over history to get all alias:address pairs for (let i = 0; i < aliasTxCount; i += 1) { const thisAliasTx = aliasTxHistory[i]; const parsedAliasTx = module.exports.parseAliasTx( thisAliasTx, aliasConstants, ); if (parsedAliasTx) { allAliasTxs.push(parsedAliasTx); } } return allAliasTxs; }, parseAliasTx: function (aliasTx, aliasConstants) { // Input: a single tx from chronik tx history // output: false if invalid tx // output: {address: 'address', alias: 'alias', txid} if valid // validate for alias tx // Assume P2PKH for now. Add P2SH support in later diff. const inputZeroOutputScript = aliasTx.inputs[0].outputScript; const registeringAddress = outputScriptToAddress(inputZeroOutputScript); // Initialize vars used later for validation let aliasFeePaidSats = BigInt(0); let alias; let aliasLength; // Iterate over outputs const outputs = aliasTx.outputs; for (let i = 0; i < outputs.length; i += 1) { const { value, outputScript } = outputs[i]; // If value is 0, parse for OP_RETURN if (value === '0') { // Check for valid alias prefix const validAliasPrefix = outputScript.slice(0, 12) === `6a04${aliasConstants.opCodePrefix}`; if (!validAliasPrefix) { return false; } - log(`Valid alias prefix`); // Check for valid alias length const aliasLengthHex = outputScript.slice(12, 14); aliasLength = parseInt(aliasLengthHex, 16); - log(`aliasLength`, aliasLength); // Parse for the alias const aliasHex = outputScript.slice(14, outputScript.length); alias = Buffer.from(aliasHex, 'hex').toString('utf8'); - log(`alias`, alias); const validAliasLength = aliasLength <= aliasConstants.maxLength && aliasHex.length === 2 * aliasLength; if (!validAliasLength) { return false; } - log(`Valid alias length`); } else { // Check if output is p2pkh for the alias registration hash160 if ( outputScript === `76a914${aliasConstants.registrationHash160}88ac` ) // If so, then the value here is part of the alias registration fee, aliasFeePaidSats aliasFeePaidSats += BigInt(value); } } // If `alias` is undefined after the above loop, then this is not a valid alias registration tx if (typeof alias === 'undefined') { - log(`No OP_RETURN in tx`); return false; } // Confirm that the correct fee is paid to the correct address if ( parseInt(aliasFeePaidSats) < aliasConstants.registrationFeesSats[aliasLength] ) { log( `Invalid fee. This transaction paid ${aliasFeePaidSats} sats to register ${alias}. The correct fee for an alias of ${aliasLength} characters is ${aliasConstants.registrationFeesSats[aliasLength]}`, ); return false; - } else { - log(`Valid registration fee`); } return { address: registeringAddress, alias, txid: aliasTx.txid, // arbitrary to set unconfirmed txs at blockheight of 100,000,000 // note that this constant must be adjusted in the fall of 3910 A.D., assuming 10 min blocks // setting it high instead of zero because it's important we sort aliases by blockheight // for sortAliasTxsByTxidAndBlockheight function blockheight: aliasTx && aliasTx.block ? aliasTx.block.height : 100000000, }; }, sortAliasTxsByTxidAndBlockheight: function (unsortedAliasTxs) { // First, sort the aliases array by alphabetical txid // (alphabetical first to last, 0 comes before a comes before b comes before c, etc) const aliasesTxsSortedByTxid = unsortedAliasTxs.sort((a, b) => { return a.txid.localeCompare(b.txid); }); // Next, sort the aliases array by blockheight. This will preserve the alphabetical txid sort // 735,625 comes before 735,626 comes before 100,000,000 etc const aliasTxsSortedByTxidAndBlockheight = aliasesTxsSortedByTxid.sort( (a, b) => { return a.blockheight - b.blockheight; }, ); return aliasTxsSortedByTxidAndBlockheight; }, getValidAliasRegistrations: function (unsortedAliasTxs) { // Sort aliases such that the earliest aliases are the valid ones const aliasesSortedByTxidAndBlockheight = module.exports.sortAliasTxsByTxidAndBlockheight(unsortedAliasTxs); // Initialize arrays to store alias registration info const registeredAliases = []; const validAliasTxs = []; const pendingAliasTxs = []; // Iterate over sorted aliases starting from oldest registrations to newest // (and alphabetically first txids to last) for (let i = 0; i < aliasesSortedByTxidAndBlockheight.length; i += 1) { const thisAliasTx = aliasesSortedByTxidAndBlockheight[i]; const { alias, blockheight } = thisAliasTx; // If you haven't seen this alias yet, it's a valid registered alias if (!registeredAliases.includes(alias)) { // If the tx is confirmed, add this alias to the registeredAlias array registeredAliases.push(alias); // If the tx is confirmed, if (blockheight < 100000000) { // Add thisAliasObject to the validAliasObjects array validAliasTxs.push(thisAliasTx); } else { // If it is not confirmed, add it to pendingAliasObjects pendingAliasTxs.push(thisAliasTx); } } else { // If you've already seen it at an earlier blockheight or earlier alphabetical txid, // then this is not a valid registration. // Do not include it in valid registrations // Note, we could just remove this else block. But it's useful for code readability. continue; } } return { validAliasTxs, pendingAliasTxs }; }, }; diff --git a/web/alias-server/chronik.js b/web/alias-server/chronik.js index 531aa0f00..19d5017e6 100644 --- a/web/alias-server/chronik.js +++ b/web/alias-server/chronik.js @@ -1,159 +1,184 @@ const config = require('./config'); const log = require('./log'); const { getAllAliasTxs, getValidAliasRegistrations } = require('./alias.js'); +const { getValidAliasTxsToBeAddedToDb } = require('./utils.js'); const { ChronikClient } = require('chronik-client'); const chronik = new ChronikClient(config.chronik); module.exports = { initializeWebsocket: async function (db) { // Subscribe to chronik websocket const ws = chronik.ws({ onMessage: async msg => { await module.exports.parseWebsocketMessage(db, msg); }, onReconnect: e => { // Fired before a reconnect attempt is made: log('Websocket disconnected. Reconnecting...'); }, }); // Wait for WS to be connected: await ws.waitForOpen(); log(`Connected to websocket`); // Subscribe to scripts (on Lotus, current ABC payout address): // Will give a message on avg every 2 minutes ws.subscribe('p2pkh', config.aliasConstants.registrationHash160); return ws; }, parseWebsocketMessage: async function ( db, wsMsg = { type: 'BlockConnected' }, ) { log(`parseWebsocketMessage called on`, wsMsg); // Determine type of tx const { type } = wsMsg; log(`msg type: ${type}`); // type can be AddedToMempool, BlockConnected, or Confirmed // For now, we are only interested in "Confirmed", as only these are valid // We will want to look at AddedToMempool to process pending alias registrations later switch (type) { case 'BlockConnected': typeof wsMsg.blockHash !== 'undefined' ? log(`New block found: ${wsMsg.blockHash}`) : log(`Checking for new aliases on startup`); const aliasTxHistory = await module.exports.getAllTxHistory( config.aliasConstants.registrationHash160, ); const allAliasTxs = getAllAliasTxs( aliasTxHistory, config.aliasConstants, ); const { validAliasTxs, pendingAliasTxs } = getValidAliasRegistrations(allAliasTxs); + log(`${validAliasTxs.length} valid alias registrations`); + log(`${pendingAliasTxs.length} pending alias registrations`); - // Update with real data - if (validAliasTxs.length > 0) { + // Get the valid aliases already in the db + let validAliasesInDb; + try { + validAliasesInDb = await db + .collection(config.database.collections.validAliases) + .find() + .sort({ blockheight: 1 }) + .project({ _id: 0 }) + .toArray(); + log(`${validAliasesInDb.length} valid aliases in database`); + } catch (error) { + log(`Error in determining validAliasesInDb`, error); + } + + const validAliasTxsToBeAddedToDb = + getValidAliasTxsToBeAddedToDb( + validAliasesInDb, + validAliasTxs, + ); + log(`validAliasTxsToBeAddedToDb`, validAliasTxsToBeAddedToDb); + + if (validAliasTxsToBeAddedToDb.length > 0) { + // Update with real data try { const validAliasTxsCollectionInsertResult = await db .collection( config.database.collections.validAliases, ) - .insertMany(validAliasTxs); - console.log( - 'validAliasTxsCollection inserted documents =>', - validAliasTxsCollectionInsertResult, + .insertMany(validAliasTxsToBeAddedToDb); + log( + `Inserted ${validAliasTxsCollectionInsertResult.insertedCount} aliases into ${config.database.collections.validAliases}`, ); } catch (err) { log( `A MongoBulkWriteException occurred adding validAliasTxs to the db, but there are successfully processed documents.`, ); + /* let ids = err.result.result.insertedIds; for (let id of Object.values(ids)) { log(`Processed a document with id ${id._id}`); } + */ log( `Number of documents inserted: ${err.result.result.nInserted}`, ); } } break; case 'AddedToMempool': log(`New tx: ${wsMsg.txid}`); break; case 'Confirmed': log(`New confirmed tx: ${wsMsg.txid}`); break; default: log(`New websocket message of unknown type:`, wsMsg); } }, getTxHistoryPage: async function (hash160, page = 0) { let txHistoryPage; try { txHistoryPage = await chronik .script('p2pkh', hash160) // Get the 25 most recent transactions .history(page, config.txHistoryPageSize); return txHistoryPage; } catch (err) { log(`Error in getTxHistoryPage(${hash160})`, err); } }, returnGetTxHistoryPagePromise: async function (hash160, page = 0) { /* Unlike getTxHistoryPage, this function will reject and fail Promise.all() if there is an error in the chronik call */ return new Promise((resolve, reject) => { chronik .script('p2pkh', hash160) .history(page, config.txHistoryPageSize) .then( result => { resolve(result); }, err => { reject(err); }, ); }); }, getAllTxHistory: async function (hash160) { let allTxHistory = []; const txHistoryFirstPageResponse = await module.exports.getTxHistoryPage(hash160); const { txs, numPages } = txHistoryFirstPageResponse; // Add first page of results to allTxHistory allTxHistory = allTxHistory.concat(txs); // Iterate through remaining pages to get remaining tx history // Start with i=1, as you already have data from page 0 // Note: Since 0 is a page number, 3 pages of data ends with pageNumber i=2 const txHistoryPageResponsePromises = []; for (let i = 1; i < numPages; i += 1) { const txHistoryPageResponsePromise = module.exports.returnGetTxHistoryPagePromise(hash160, i); txHistoryPageResponsePromises.push(txHistoryPageResponsePromise); } // Use Promise.all so that an error is thrown if any single promise fails let remainingTxHistoryPageResponses; try { remainingTxHistoryPageResponses = await Promise.all( txHistoryPageResponsePromises, ); } catch (err) { log(`Error in Promise.all(txHistoryPageResponsePromises)`, err); // Return false; you won't have all the tx history if this happens return false; } // Iterate over results to complete allTxHistory for (let i = 0; i < remainingTxHistoryPageResponses.length; i += 1) { const { txs } = remainingTxHistoryPageResponses[i]; allTxHistory = allTxHistory.concat(txs); } return allTxHistory; }, }; diff --git a/web/alias-server/test/mocks/utilsMocks.js b/web/alias-server/test/mocks/utilsMocks.js new file mode 100644 index 000000000..584b94417 --- /dev/null +++ b/web/alias-server/test/mocks/utilsMocks.js @@ -0,0 +1,1940 @@ +module.exports = { + validAliasesInDb: [ + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs', + txid: '446c1c3d979deed2b81258d907343c09091bc349352005d3a5804c97c611d19b', + blockheight: 771103, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'joey', + txid: 'ee3209c3e7493cfdad6398a92aef70feb7f7feaf8e7c91903ca27b2edbab98a8', + blockheight: 771112, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo', + txid: '28c2d5bcef414d76edb39ebac09c967d085210b043066c609f9c515042c74c42', + blockheight: 771136, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '123', + txid: 'ef62d52405287e9599050a731652be5f5c074372d97dcd839752bf1b2c6d36d4', + blockheight: 771148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'range', + txid: 'f720c61be27eebc4bab010f05e47c90e2223464b246a1f9b8a20075c7236de81', + blockheight: 771148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'congo', + txid: '7edd06e2f2d753598c1654e392702fac5c8a3c58943148eb12086379f63d1296', + blockheight: 771149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken', + txid: 'd71ae920533a53b8996a1e26f307d3281d07b7acdaa2f4db7e897cefa265ecee', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '111', + txid: 'e979015b4e7837d69929818ebb35f1ed52920057172f28dadc01fa3a1a3b3c52', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo2', + txid: 'fc4d3728a05dd6a2e1c308ffc21f55ae5ec0da0e0b51ca177cc26384ecc8fa23', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'dog', + txid: 'dc738f04a48c3ed6fcbb00c8095b1ed272f21d8e1eeb01f60eb96125a06c8973', + blockheight: 771376, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'cat', + txid: '2524dc5dbd0ca7c6c2d2bf7b5a9da5ec9e6df5c7a22d6a05fb3090e65f121ae7', + blockheight: 771379, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king', + txid: '7ff570d4434fdb7bec0e08ddfc8c0a2f8d1ddf5351f4dfc06e3513971eb2900e', + blockheight: 771379, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'ethan', + txid: '3eca5edb62d67a044b6204b9f55cdde6e5bab47a52f7fd8527551655723a8895', + blockheight: 771542, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king2', + txid: '98a4a4f19d4271a0af172d885d5e965c226936f046843a5c67119a2e81542564', + blockheight: 773192, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test2', + txid: '57859b7bc714e7cad4fd0c168105a902d0fa566c3ec7df0873788f041da2262f', + blockheight: 775122, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test3', + txid: 'f95000f5789465e47ea4732404828aa0a3747ecf85fb39784bc45791966408d6', + blockheight: 775122, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test', + txid: 'd824768aea4435a2dec83c3e7a398b28bf379442428c7f7256e50ec3f9d8910d', + blockheight: 775262, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken4', + txid: '7be2d94e2e0934d916540784415706684efb45fe21243b83d9af10e849ef5b86', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken2', + txid: '8032c0cc85460112b7d6ad5f5e7215cdd96415cab0a9c5adcd2c737987172450', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'abc', + txid: '8d754bb5ae0024814e1c35ca6aba5c780a0119c33552d84f4876275275deeca4', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken3', + txid: 'a6a0a20e5c4f2245e32ab545dbf07171d46a18c9d60d741a3a81064f4b7a59d0', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'gnc', + txid: 'fb065af525c4fe0cd0885602612944aef0545ea09246434bc314411f9f59637b', + blockheight: 775263, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken5', + txid: '09acd52e6813174526811c54c615d79ab9261ebcdab74c57c8f4f39bf48396f3', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo1', + txid: '7ce096ceb8ccc81ee384aaad29709daaffd48747f5494fd56c227df50d093bf0', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken1', + txid: 'd287af4529ce804894566aad9d8707e150fe791e1f4102b2ec80bc8ffa98af96', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo2', + txid: 'f97fec8b482e568cea6917ae4c5bf78f9f0718e6f965b4b83e0f18af94420580', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo3', + txid: 'aa9111bbdc8abe16d7651ffbf1b9ac938dda944c7203cb0017bb1f08cbd08c27', + blockheight: 775338, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo4', + txid: '67ef05671b8210bfe278d183148f361fefa4ec7d7969061d946b815711d531aa', + blockheight: 775340, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo6', + txid: 'c48d83554cff96f32b283f845972b287d7c6519140361da3dd6b2a99ad0a49d8', + blockheight: 775340, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo5', + txid: 'd4085816a7174e8c623f195009686eb0a4ce5b73f96ebd79ea17654d3741df87', + blockheight: 775340, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken55', + txid: '377daca46116e434b842f875a1fe085a15bf51114e64a60e39d6a04d482bf22c', + blockheight: 775356, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'pmp', + txid: '87f0c7d69881bad66b915ffcac43437c3ca0ded641280aaa084cd8d47fdb29e0', + blockheight: 775969, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'fffff', + txid: 'e9afe6e5f21078b9a4a6a37c81a7857cdfb15a7756b22440d53fccde3105dfd2', + blockheight: 775978, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'cats', + txid: 'dfc09f021e8df9637175d4e73e7df574155e555b928d77440ada5e456a91b92c', + blockheight: 775981, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king3', + txid: '4a83433cb81814ff7bebd3f94bf82f56398d8060b7e3e75c675f95c9a4df2893', + blockheight: 775986, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken77', + txid: '13daf96c590dca40b7d419bfde335581d247a398e4a9059602979b0ab89ce530', + blockheight: 776104, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken78', + txid: '861c11227973fafa6832f35af58f9a4b81326d335956aec23101213d4ef929f4', + blockheight: 776104, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chubaca', + txid: 'e824163274811dd5023ecd099fc0938766b01411a6c508f406f259ef071b2f50', + blockheight: 776205, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo6', + txid: '4678a7f1fa3ca15c09c78961eba240d8ab8f422ee5eaf9b3357326f735036a17', + blockheight: 776206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'pizza1', + txid: '5106d30a8bf8851c90435aa6765a1daa80b3f7d9d0880407c458b065f4e411f6', + blockheight: 776206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo7', + txid: 'cab9bbfcd06e4aef90ebff209f9f34f0122de106945f459efc0838ae5005402c', + blockheight: 776209, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo1', + txid: 'b235765060472ccbc8de39a7ca89aab3b566802b291615c88551172ee4e3b5a2', + blockheight: 776210, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'bytesofman', + txid: '7f691f47337063a53a7e2ad48c05effe77ef9992b03fe2b8e998d313dcd5eba3', + blockheight: 776257, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo9', + txid: '5a2a6178f0962fc0979aa2de3c6ea71bd15bf322f74534780724a45738fed1e9', + blockheight: 776576, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'django', + txid: '36fdab59d25625b6ff3661aa5ab22a4893698fa5618e5e958e1d75bf921e6107', + blockheight: 776578, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo10', + txid: '9d9fd465f56a7946c48b2e214386b51d7968a3a40d46cc697036e4fc1cc644df', + blockheight: 776585, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'abcd', + txid: 'f862185b952b07f75a040e80a6cf8ee32e0f57d80b58075d7fb7c6d52a1fa544', + blockheight: 777239, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo11', + txid: '5f321cde9e88a6a443e18359ec6516b91e3c591929480ecf32aec5d7f5f4f5a2', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'rain1', + txid: '7874f643fe78e58fd5dbae3550e5a9715c2e3f63ca67e9bc732834658f18684e', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs1', + txid: 'ce6d3e92d7bad39360724e1ad8e37157b8b3e0a1d4c2660b9acce328d5b34b42', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump', + txid: '5a3d44b3fe6fee0fa1c950c7355cbe815d83f874a0e96165e2498d6ca40c2bb4', + blockheight: 777361, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump2', + txid: 'b8603ad0c246581e278750b63d37012c9a6b2b4103d45db2bdce5cbe1c31f95d', + blockheight: 777364, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump3', + txid: 'abca9347835034bc0ed3f457b4bf93ade3ac3f93192edc5b3f753129d34fe691', + blockheight: 778087, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump4', + txid: '0fe6dc3518dee4d0cd3f89b8c5f0bc0432387ded0c822ec083ec8659b04f9101', + blockheight: 778088, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump5', + txid: '656a15b331d12c61dd5fc5db591d66ad1c914c46390cbd39c8c88750f7db953c', + blockheight: 778090, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump7', + txid: 'edf498bebf1f8239791cc2a87a9aa3349bd38e4a7a6e7db9868b088b9dfbf3f4', + blockheight: 778099, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump6', + txid: 'efdf5b325750ecc4ccabffada0922d15d2b4bde405253b446eec842a78fd8d22', + blockheight: 778099, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump8', + txid: '6a8603ffc2695219581b0d80b9fe90f68e54d05534f143511c34999a155cbcce', + blockheight: 778100, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs11', + txid: 'be7abecb7cb8d6b1bfda8a09d56f98ccafe8c00f834c10cefe61a734240eeb82', + blockheight: 778105, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs12', + txid: 'afaa484d72118adb88d1d4c5de7a7385ff1a7f2c6ba34de75b3c162cb9a048d7', + blockheight: 778106, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs13', + txid: '966749e55ce9ab10db1a27ad3a5caf104e48c139b2aee2018e3cdf65495af42e', + blockheight: 778107, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs14', + txid: '67d0d6d40d30315017d82020f5ae59ed2e04262f0302b981cf5f03206ba62f30', + blockheight: 778108, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs15', + txid: '22e97a3d5e3dd67e899943e76e7f4fcf105c669ed33444c0b09afe05a5d1b890', + blockheight: 778111, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump9', + txid: 'd0d9d0bc6fac89b7b282e0806178a97c63b305488977ee9da83105153f4f54e5', + blockheight: 778111, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump10', + txid: '676a01372d6960115e229634b7339523bcc93de6681d58d111eaebb7f101cbb7', + blockheight: 778112, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a1', + txid: '4ee339223fb7023f12657d4c6b729741911c081cc9803c4f7632f7c8c2c77df9', + blockheight: 778114, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a2', + txid: 'ee0fe79098e2e889276dc31f6dfca5332e20f0ad23f5febbd81973f6a54025cf', + blockheight: 778116, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a3', + txid: '5bb7e3cce6aab7ee92b5559938d2209c53cbe830f3fdc18d8c2eeca081b480f0', + blockheight: 778117, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a4', + txid: '6c123265e855747f118bb1013486de395dfea22a1bd4a0fef5d4373759d03c7d', + blockheight: 778119, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a7', + txid: 'cead0c2db9043a41e0187bec72b06d1797fcef40e544049c66a9b999e56f0e96', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a6', + txid: 'd9ec8692777cee37cfb1a551f6ad246b65aff3b38ae5546de2e9d4a5ae20a6e4', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a5', + txid: 'e6aeb65f69562e9eda308ebea75e3894ccb6c8ae309f51622632198afa491773', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a8', + txid: '16ed0fac59dabf34904f4cb6b70c97b431c5d22317b57b565a405ea392fb76e1', + blockheight: 778146, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a9', + txid: '3e417028bfa1d6ec1d12fd620c4bbb70a304aecad3170c0f649274e631a10bbb', + blockheight: 778147, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a10', + txid: '3812b5e327037f6411fd4ed2fafd05eb38cb8bb38f2810285dc2662411fa67fd', + blockheight: 778148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a12', + txid: '15583a1513db25bda09eeceef292abe5782c21e1d0c32c6121835501df230e66', + blockheight: 778149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a11', + txid: '6a32fd98224d238f452f81f1a3a6fede09765f29a16360293b0e657efa465b70', + blockheight: 778149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a13', + txid: '8ed309ee865d2da8f6b0667a0ae584725bdeecddfca7c490337b2c7516349e91', + blockheight: 778152, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jay2', + txid: 'b7e77a889e4eeb30ef40493b14178896031be082d8fc17e6aeb07570fefb98e8', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jay1', + txid: 'd133cbb32204363321bb413f5b09b1ddac17c998b759e96479905a4baaf2b373', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs133', + txid: 'e92522b3fdfeee730168075b57d3665be40166a3c6be79f492b0d8ee87c7e49b', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo21', + txid: '5aecd20195291594c2515d1e9f3b8d52cacf5092473be50233995f483f855b37', + blockheight: 778155, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane3', + txid: '83e25f62227bfb1fc13591ae06e1b7a9348c78afff3b328bd2fe6b40ac361353', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane2', + txid: 'c9de44d9ceb0da57eb3e39e2108a0f095cd01dbcca86d9f1fcfed6131a8f7110', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane1', + txid: 'f5a111f62138f352384f8ccf2d54535193f66deb015065a497865d052c140ac8', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane4', + txid: '551eb966ada59b24092380b27592cdf5987323cbcc0b73f0b5f45088c9c5a691', + blockheight: 778210, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a33', + txid: '51b6070828e8c29a6f2e480ee3b8d9097468e0e99f28979ae0f76c35dd8dbbc5', + blockheight: 778211, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'shoo1', + txid: '875712bc0d8f9bbf02bbd40857c47fc15924d6e9efe462ba07c7f97d435cab54', + blockheight: 778214, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'comp1', + txid: 'e13ec643fb1b61c993b6c55b2948af1ceee4e581f09fedf919d451c8a4226396', + blockheight: 778443, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '123456', + txid: '0f4c84f76319fcb2c4ac6eab1c2dd28c7821f2da547af2de85ce3c150704ffd6', + blockheight: 778498, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '1234', + txid: '3ce806f9bfce5c5c76073d9bc416cdbd261bafd9b6b7a7f252e03b5f321aec96', + blockheight: 778498, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you1', + txid: '5b58d8a6e47cb58cfb6bc54fe381b580af4c8180375e9290185c586874af7bc6', + blockheight: 778577, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you2', + txid: 'b48c1a7d55fc944453b76cf4266ec41a3bb4dae2c91a4b05a55b8d5474413b22', + blockheight: 778578, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you3', + txid: 'de2b8e9d1f2ed80e95144ff50a73c702a9b45b1ee160910a96f1917ad6c5888e', + blockheight: 778585, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'delta', + txid: '1d43a0808d7264cce386864f096dd40a36bd61fd6ae5915d7d08708c3789a9ea', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'alpha', + txid: '2615ede0d41402c384973cf1bbd136232326d8ef6d9694d7868155a19db030d5', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'beta', + txid: '2b151233cf2514271fee4c152a2ecbd4ee25ca43dc1e84e2f4852fe0e459eeb6', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'gamma', + txid: '5dbfeca8f27ec2c9e65e2e38115fff55f97df302337582cccad1e6f12a18f82c', + blockheight: 778612, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'andanotherone', + txid: '1be4bb9f820d60a82f6eb86a32ca9442700f180fc94469bca2ded9129f5dce88', + blockheight: 778616, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'omega', + txid: '270b49613da2e7de5a8cda6c7359d09faedd592bfa79eec5bbe3ad7ff426b431', + blockheight: 778616, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'omicron', + txid: '32e8410c6bebf3ff187e7a2b35cb76e2c2699449ce2bfde72b08e59bbb472d15', + blockheight: 778616, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you5', + txid: '45979deecc8a5179495a08b95afafda9cc6a88f8e4a873931a7d2196b617717a', + blockheight: 778646, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'q8n4e', + txid: '67d85677f70b6b880b22ca14bbd52e5a1ee5cfa2b59904253aa88dc2dcc37c17', + blockheight: 778682, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you8', + txid: '24c8755a1968759f413b94212c21fa2e1387b733e9ebf53a814f01c153528e24', + blockheight: 778710, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you7', + txid: '70501230bb0a0fbaf0bce3268e120973bcee70c2485280c1cc6fce6dc158b9a7', + blockheight: 778710, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you9', + txid: '65b305c1222d82bf46aabf36fd290042599d422cdd83c2bcf8d87ff2285db7c0', + blockheight: 778715, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you11', + txid: '3170fd2f54c37b86f871bf4841a317d169963d53d24ec4e95543473247d3a756', + blockheight: 778718, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you10', + txid: 'e56a14926b976558126ddb11d45103e97c4291d5eb107d2e187d8e073a0df53b', + blockheight: 778718, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you13', + txid: '92b7f2829f9d78c6cb0b86054c63347314c0dd207bcf7e1e0acab41a10d8723d', + blockheight: 778719, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you12', + txid: 'f8863204b9ed959b7e01d069d50552395145dbb77377c74346a04ebdcba9b554', + blockheight: 778719, + }, + { + address: 'ecash:qzt8q6956r906469djj2egqenpt4fnxn9cun09cltr', + alias: 'you14', + txid: 'e2b629b2b3e5b7a767442d2d4258a33146aa9395ac918d1aa46aa0c2b35ada8c', + blockheight: 778720, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'quant', + txid: '98e2c6a02473ccd0881337f8b9afb59a7dd9c1175f7a5690e32111a1080aa240', + blockheight: 778725, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'quant2', + txid: 'a441bc7e38ceb3e203f286aa7edb1bf617d702617244ab7d95542d982a627e33', + blockheight: 778727, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'thisisareallylongalia', + txid: '4e79d82069fac8378e3c4466804a2a0334fd94ac2fbf9fcf9b5c9915f6c58d0e', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'aaaaaaaaaaaaaaaaaaaaa', + txid: '57809b183b0ce0c289562c8deff5418aaf7e649d74292bf98cae5149bd177a68', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'aaaaaaaaaaaaaaaaaaaa2', + txid: 'b442cb34e604aecea1187c2ebdbcbab4c95364e12b73e315f37e10e147bf69d0', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'asidjfiasdjfiasjdfi', + txid: 'e959833f505ee5edfe2a7cb243935e8ab1cdc8f5448ea1db7b7ce5c0e7f175f9', + blockheight: 778940, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'feb13', + txid: '1766980ed0422a520bf24e8414c83100e08001a59fc709cd29aa7cca35ebbd80', + blockheight: 779152, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'feb14', + txid: '74145830652cc292128cb94dc2e4fb36792d61995ce6d850e1c1a325a05bd948', + blockheight: 779152, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo112', + txid: '4a204c75fc5b992c5cd7c93abd1467b0b5a4c7eb7860958620fafc3a6bcdaebc', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo111', + txid: '58c1b6c1c1383a92350b283b1bcdf9c13a5eef979a026a5049d6f9ed7efb544e', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo113', + txid: 'ae4eadce6fcc1eb18e00667e4d3f9c5025b28fb51c4e9e2554029b0f732bdc63', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo114', + txid: 'd6935a2e1efa93d22c2887ddc8dc501b3f1b0763012755db2e31977cdb200adb', + blockheight: 779508, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '苦屎', + txid: '6faf8b1770d76ca23baf23c9ffbfcb0ec75fb314abd188d7320afd6389566678', + blockheight: 779512, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '( ͡~ ͜ʖ ͡°)', + txid: '960e8c8a643bfa5b9cbdff9a6336e0f72aeeb7d5a548162b466cdbaa5800ea2d', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: ' محيط', + txid: '9be45878f9f149e3ba26da2e526ad3f09c709fae2a1f9f895a97865af50bdc99', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: ' sandía', + txid: 'a1195e37655ee6bb99c139fa667a89a8529d074ac8cf10280667a0d80c519ad1', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'محيط', + txid: 'a5d1ad6f910807d373af57d8d5174d564c3f09fcfd5cf0cef7373f32c8009420', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'Mädchen', + txid: '0af67ee1775b47354fea54bfed627707993735a83f82a7ca4fba2eb0177ad713', + blockheight: 779514, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '소주', + txid: 'd32235fdee7d54d6a0885270686d613617d42f8fff73f25ee5eec90dd05ff276', + blockheight: 779514, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'tang1', + txid: '5cc97aca95097579050f31bef463e0e27bc675422e2ccffdb4ca2d8e61000e97', + blockheight: 779522, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo115', + txid: 'b2c3f365f16306743ff2d7e3a14273e1291d22796271150e0d7cb356b6b1678e', + blockheight: 779522, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'anewalias', + txid: 'dad359ecdbccceaa6e7474a00fcbdf61c053a9d163763713347689dfce706ec9', + blockheight: 779575, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '👀', + txid: 'a7e400a403a84099212e8f0688e1e528a741b862c1b3a329affd386a8d8567d9', + blockheight: 779576, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'app.xec', + txid: '668b098d16208978cfcdcffd25af28959e5d72998f5505b7a83a3d03a2cbab8b', + blockheight: 780530, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'ajhsidfjiasasfijhisad', + txid: '7a70784cdd4aaf721534ae6b2f9511d9c59bc2778d8a3e0753bd011e1fae15db', + blockheight: 780635, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo. xec', + txid: 'e1fe4bd32fdee085cd88a0f836863e2bdfdf1dc80be3b0297c952f3fdd398ed3', + blockheight: 780644, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo', + txid: '8c82f0cdb1649a018c03dbe0bb3cbcfc56f60aa71a77328bd0dd44c39dd269a4', + blockheight: 780648, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'fade', + txid: 'b02d4ef6c54010f2fc27bc3d47786778a77c179b35c78a6d11157f52af44e638', + blockheight: 780675, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'taco', + txid: '43ab4f0ef147d8a7e8836f795f9d6a2bd5f99ef5fd751141dd4f29e4b5e94f52', + blockheight: 780713, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choco', + txid: 'dd932485a9583aa2116d86cafff6fa062596216c36a19e742fa461debb96e723', + blockheight: 780714, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'lamb', + txid: '08632b8b8355e89c98f4b7fe5dcbcf305ac754eba83432ecb4b036700f951616', + blockheight: 780715, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '😾', + txid: '70c56b11113e4d3e0fa344f201885c64ffabb68df876c2fc288f0b1d0cd489b2', + blockheight: 780720, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testingtxhistory', + txid: 'df9a0e79cee79d1003330b78c1c6c87471ae24b5c1f3c89fa5cb75cfd42281ea', + blockheight: 780738, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔', + txid: '1cbb0069e81dee679ba825e69fd0f6c73f6b27e9d90ed37bc4ff4d889382dc52', + blockheight: 780739, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo2', + txid: '44189a1e286af6b750aea4f85a7bc2c6cddf3c20159b60e648b3297fca09ec44', + blockheight: 780770, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chimichanga', + txid: 'abc89b045cb49138600859b94405ee753f049b78e797e19157924288c3f13cb0', + blockheight: 780770, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙈🙉🙊', + txid: '44a5508223d79331fb71dac5d378ab9772ee7297a1d33df77d79c95729389af2', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙊', + txid: '561590a735f835770f31f7895f2271c0cec04c08ca99f756c3465bbcb8e2700d', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙊joey', + txid: 'd8cf3b2a3ee6a7b63213da261eb6ba3916c3b01b140bb43f25ea169575ed444a', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chunks', + txid: 'f2ae67d9a20a2f0f67186fedfa40df3bb0e69461ba3a782979e9734b754bba2f', + blockheight: 780873, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'extension', + txid: 'd4b6bdbaac5ad3408feb3be216b2759124212cd2653b889c6f3a559aa35c21bc', + blockheight: 780874, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'newTestAlias', + txid: 'bef1600adf5c30b1a0027f1bf37c9adafdf10163e0d3c93d397f132b68ee33e3', + blockheight: 781525, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias2', + txid: '22e460abadd58c3fb66457b53d3705aa302b77ed4ea299eac1c8d021f2685128', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias1', + txid: '590d7e8c32b85a3b2a615875c680d321bc6d685d156b19bfe9acee1da7f9e0b4', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'alias🤔🤨💬', + txid: 'c31635e4c2bddbad0be19b8376e0c550bd297e63094409d75a52f927a05ff3bc', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias3', + txid: 'ca7510bab67231044ba6c4ffb0aa3c587466e37b1b11f16a236d1aef8cab7598', + blockheight: 781528, + }, + ], + validAliasTxs: [ + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs', + txid: '446c1c3d979deed2b81258d907343c09091bc349352005d3a5804c97c611d19b', + blockheight: 771103, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'joey', + txid: 'ee3209c3e7493cfdad6398a92aef70feb7f7feaf8e7c91903ca27b2edbab98a8', + blockheight: 771112, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo', + txid: '28c2d5bcef414d76edb39ebac09c967d085210b043066c609f9c515042c74c42', + blockheight: 771136, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '123', + txid: 'ef62d52405287e9599050a731652be5f5c074372d97dcd839752bf1b2c6d36d4', + blockheight: 771148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'range', + txid: 'f720c61be27eebc4bab010f05e47c90e2223464b246a1f9b8a20075c7236de81', + blockheight: 771148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'congo', + txid: '7edd06e2f2d753598c1654e392702fac5c8a3c58943148eb12086379f63d1296', + blockheight: 771149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken', + txid: 'd71ae920533a53b8996a1e26f307d3281d07b7acdaa2f4db7e897cefa265ecee', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '111', + txid: 'e979015b4e7837d69929818ebb35f1ed52920057172f28dadc01fa3a1a3b3c52', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo2', + txid: 'fc4d3728a05dd6a2e1c308ffc21f55ae5ec0da0e0b51ca177cc26384ecc8fa23', + blockheight: 771240, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'dog', + txid: 'dc738f04a48c3ed6fcbb00c8095b1ed272f21d8e1eeb01f60eb96125a06c8973', + blockheight: 771376, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'cat', + txid: '2524dc5dbd0ca7c6c2d2bf7b5a9da5ec9e6df5c7a22d6a05fb3090e65f121ae7', + blockheight: 771379, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king', + txid: '7ff570d4434fdb7bec0e08ddfc8c0a2f8d1ddf5351f4dfc06e3513971eb2900e', + blockheight: 771379, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'ethan', + txid: '3eca5edb62d67a044b6204b9f55cdde6e5bab47a52f7fd8527551655723a8895', + blockheight: 771542, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king2', + txid: '98a4a4f19d4271a0af172d885d5e965c226936f046843a5c67119a2e81542564', + blockheight: 773192, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test2', + txid: '57859b7bc714e7cad4fd0c168105a902d0fa566c3ec7df0873788f041da2262f', + blockheight: 775122, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test3', + txid: 'f95000f5789465e47ea4732404828aa0a3747ecf85fb39784bc45791966408d6', + blockheight: 775122, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'test', + txid: 'd824768aea4435a2dec83c3e7a398b28bf379442428c7f7256e50ec3f9d8910d', + blockheight: 775262, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken4', + txid: '7be2d94e2e0934d916540784415706684efb45fe21243b83d9af10e849ef5b86', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken2', + txid: '8032c0cc85460112b7d6ad5f5e7215cdd96415cab0a9c5adcd2c737987172450', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'abc', + txid: '8d754bb5ae0024814e1c35ca6aba5c780a0119c33552d84f4876275275deeca4', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken3', + txid: 'a6a0a20e5c4f2245e32ab545dbf07171d46a18c9d60d741a3a81064f4b7a59d0', + blockheight: 775263, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'gnc', + txid: 'fb065af525c4fe0cd0885602612944aef0545ea09246434bc314411f9f59637b', + blockheight: 775263, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken5', + txid: '09acd52e6813174526811c54c615d79ab9261ebcdab74c57c8f4f39bf48396f3', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo1', + txid: '7ce096ceb8ccc81ee384aaad29709daaffd48747f5494fd56c227df50d093bf0', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chicken1', + txid: 'd287af4529ce804894566aad9d8707e150fe791e1f4102b2ec80bc8ffa98af96', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo2', + txid: 'f97fec8b482e568cea6917ae4c5bf78f9f0718e6f965b4b83e0f18af94420580', + blockheight: 775331, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo3', + txid: 'aa9111bbdc8abe16d7651ffbf1b9ac938dda944c7203cb0017bb1f08cbd08c27', + blockheight: 775338, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo4', + txid: '67ef05671b8210bfe278d183148f361fefa4ec7d7969061d946b815711d531aa', + blockheight: 775340, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo6', + txid: 'c48d83554cff96f32b283f845972b287d7c6519140361da3dd6b2a99ad0a49d8', + blockheight: 775340, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'zoo5', + txid: 'd4085816a7174e8c623f195009686eb0a4ce5b73f96ebd79ea17654d3741df87', + blockheight: 775340, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken55', + txid: '377daca46116e434b842f875a1fe085a15bf51114e64a60e39d6a04d482bf22c', + blockheight: 775356, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'pmp', + txid: '87f0c7d69881bad66b915ffcac43437c3ca0ded641280aaa084cd8d47fdb29e0', + blockheight: 775969, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'fffff', + txid: 'e9afe6e5f21078b9a4a6a37c81a7857cdfb15a7756b22440d53fccde3105dfd2', + blockheight: 775978, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'cats', + txid: 'dfc09f021e8df9637175d4e73e7df574155e555b928d77440ada5e456a91b92c', + blockheight: 775981, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'king3', + txid: '4a83433cb81814ff7bebd3f94bf82f56398d8060b7e3e75c675f95c9a4df2893', + blockheight: 775986, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken77', + txid: '13daf96c590dca40b7d419bfde335581d247a398e4a9059602979b0ab89ce530', + blockheight: 776104, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'chicken78', + txid: '861c11227973fafa6832f35af58f9a4b81326d335956aec23101213d4ef929f4', + blockheight: 776104, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chubaca', + txid: 'e824163274811dd5023ecd099fc0938766b01411a6c508f406f259ef071b2f50', + blockheight: 776205, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo6', + txid: '4678a7f1fa3ca15c09c78961eba240d8ab8f422ee5eaf9b3357326f735036a17', + blockheight: 776206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'pizza1', + txid: '5106d30a8bf8851c90435aa6765a1daa80b3f7d9d0880407c458b065f4e411f6', + blockheight: 776206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo7', + txid: 'cab9bbfcd06e4aef90ebff209f9f34f0122de106945f459efc0838ae5005402c', + blockheight: 776209, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo1', + txid: 'b235765060472ccbc8de39a7ca89aab3b566802b291615c88551172ee4e3b5a2', + blockheight: 776210, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'bytesofman', + txid: '7f691f47337063a53a7e2ad48c05effe77ef9992b03fe2b8e998d313dcd5eba3', + blockheight: 776257, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo9', + txid: '5a2a6178f0962fc0979aa2de3c6ea71bd15bf322f74534780724a45738fed1e9', + blockheight: 776576, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'django', + txid: '36fdab59d25625b6ff3661aa5ab22a4893698fa5618e5e958e1d75bf921e6107', + blockheight: 776578, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo10', + txid: '9d9fd465f56a7946c48b2e214386b51d7968a3a40d46cc697036e4fc1cc644df', + blockheight: 776585, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'abcd', + txid: 'f862185b952b07f75a040e80a6cf8ee32e0f57d80b58075d7fb7c6d52a1fa544', + blockheight: 777239, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo11', + txid: '5f321cde9e88a6a443e18359ec6516b91e3c591929480ecf32aec5d7f5f4f5a2', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'rain1', + txid: '7874f643fe78e58fd5dbae3550e5a9715c2e3f63ca67e9bc732834658f18684e', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs1', + txid: 'ce6d3e92d7bad39360724e1ad8e37157b8b3e0a1d4c2660b9acce328d5b34b42', + blockheight: 777275, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump', + txid: '5a3d44b3fe6fee0fa1c950c7355cbe815d83f874a0e96165e2498d6ca40c2bb4', + blockheight: 777361, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump2', + txid: 'b8603ad0c246581e278750b63d37012c9a6b2b4103d45db2bdce5cbe1c31f95d', + blockheight: 777364, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump3', + txid: 'abca9347835034bc0ed3f457b4bf93ade3ac3f93192edc5b3f753129d34fe691', + blockheight: 778087, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump4', + txid: '0fe6dc3518dee4d0cd3f89b8c5f0bc0432387ded0c822ec083ec8659b04f9101', + blockheight: 778088, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump5', + txid: '656a15b331d12c61dd5fc5db591d66ad1c914c46390cbd39c8c88750f7db953c', + blockheight: 778090, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump7', + txid: 'edf498bebf1f8239791cc2a87a9aa3349bd38e4a7a6e7db9868b088b9dfbf3f4', + blockheight: 778099, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump6', + txid: 'efdf5b325750ecc4ccabffada0922d15d2b4bde405253b446eec842a78fd8d22', + blockheight: 778099, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump8', + txid: '6a8603ffc2695219581b0d80b9fe90f68e54d05534f143511c34999a155cbcce', + blockheight: 778100, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs11', + txid: 'be7abecb7cb8d6b1bfda8a09d56f98ccafe8c00f834c10cefe61a734240eeb82', + blockheight: 778105, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs12', + txid: 'afaa484d72118adb88d1d4c5de7a7385ff1a7f2c6ba34de75b3c162cb9a048d7', + blockheight: 778106, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs13', + txid: '966749e55ce9ab10db1a27ad3a5caf104e48c139b2aee2018e3cdf65495af42e', + blockheight: 778107, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs14', + txid: '67d0d6d40d30315017d82020f5ae59ed2e04262f0302b981cf5f03206ba62f30', + blockheight: 778108, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs15', + txid: '22e97a3d5e3dd67e899943e76e7f4fcf105c669ed33444c0b09afe05a5d1b890', + blockheight: 778111, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump9', + txid: 'd0d9d0bc6fac89b7b282e0806178a97c63b305488977ee9da83105153f4f54e5', + blockheight: 778111, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jump10', + txid: '676a01372d6960115e229634b7339523bcc93de6681d58d111eaebb7f101cbb7', + blockheight: 778112, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a1', + txid: '4ee339223fb7023f12657d4c6b729741911c081cc9803c4f7632f7c8c2c77df9', + blockheight: 778114, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a2', + txid: 'ee0fe79098e2e889276dc31f6dfca5332e20f0ad23f5febbd81973f6a54025cf', + blockheight: 778116, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a3', + txid: '5bb7e3cce6aab7ee92b5559938d2209c53cbe830f3fdc18d8c2eeca081b480f0', + blockheight: 778117, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a4', + txid: '6c123265e855747f118bb1013486de395dfea22a1bd4a0fef5d4373759d03c7d', + blockheight: 778119, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a7', + txid: 'cead0c2db9043a41e0187bec72b06d1797fcef40e544049c66a9b999e56f0e96', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a6', + txid: 'd9ec8692777cee37cfb1a551f6ad246b65aff3b38ae5546de2e9d4a5ae20a6e4', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a5', + txid: 'e6aeb65f69562e9eda308ebea75e3894ccb6c8ae309f51622632198afa491773', + blockheight: 778145, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a8', + txid: '16ed0fac59dabf34904f4cb6b70c97b431c5d22317b57b565a405ea392fb76e1', + blockheight: 778146, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a9', + txid: '3e417028bfa1d6ec1d12fd620c4bbb70a304aecad3170c0f649274e631a10bbb', + blockheight: 778147, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a10', + txid: '3812b5e327037f6411fd4ed2fafd05eb38cb8bb38f2810285dc2662411fa67fd', + blockheight: 778148, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a12', + txid: '15583a1513db25bda09eeceef292abe5782c21e1d0c32c6121835501df230e66', + blockheight: 778149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a11', + txid: '6a32fd98224d238f452f81f1a3a6fede09765f29a16360293b0e657efa465b70', + blockheight: 778149, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a13', + txid: '8ed309ee865d2da8f6b0667a0ae584725bdeecddfca7c490337b2c7516349e91', + blockheight: 778152, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jay2', + txid: 'b7e77a889e4eeb30ef40493b14178896031be082d8fc17e6aeb07570fefb98e8', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'jay1', + txid: 'd133cbb32204363321bb413f5b09b1ddac17c998b759e96479905a4baaf2b373', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'nfs133', + txid: 'e92522b3fdfeee730168075b57d3665be40166a3c6be79f492b0d8ee87c7e49b', + blockheight: 778154, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo21', + txid: '5aecd20195291594c2515d1e9f3b8d52cacf5092473be50233995f483f855b37', + blockheight: 778155, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane3', + txid: '83e25f62227bfb1fc13591ae06e1b7a9348c78afff3b328bd2fe6b40ac361353', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane2', + txid: 'c9de44d9ceb0da57eb3e39e2108a0f095cd01dbcca86d9f1fcfed6131a8f7110', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane1', + txid: 'f5a111f62138f352384f8ccf2d54535193f66deb015065a497865d052c140ac8', + blockheight: 778206, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'kane4', + txid: '551eb966ada59b24092380b27592cdf5987323cbcc0b73f0b5f45088c9c5a691', + blockheight: 778210, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'a33', + txid: '51b6070828e8c29a6f2e480ee3b8d9097468e0e99f28979ae0f76c35dd8dbbc5', + blockheight: 778211, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'shoo1', + txid: '875712bc0d8f9bbf02bbd40857c47fc15924d6e9efe462ba07c7f97d435cab54', + blockheight: 778214, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'comp1', + txid: 'e13ec643fb1b61c993b6c55b2948af1ceee4e581f09fedf919d451c8a4226396', + blockheight: 778443, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '123456', + txid: '0f4c84f76319fcb2c4ac6eab1c2dd28c7821f2da547af2de85ce3c150704ffd6', + blockheight: 778498, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '1234', + txid: '3ce806f9bfce5c5c76073d9bc416cdbd261bafd9b6b7a7f252e03b5f321aec96', + blockheight: 778498, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you1', + txid: '5b58d8a6e47cb58cfb6bc54fe381b580af4c8180375e9290185c586874af7bc6', + blockheight: 778577, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you2', + txid: 'b48c1a7d55fc944453b76cf4266ec41a3bb4dae2c91a4b05a55b8d5474413b22', + blockheight: 778578, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you3', + txid: 'de2b8e9d1f2ed80e95144ff50a73c702a9b45b1ee160910a96f1917ad6c5888e', + blockheight: 778585, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'delta', + txid: '1d43a0808d7264cce386864f096dd40a36bd61fd6ae5915d7d08708c3789a9ea', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'alpha', + txid: '2615ede0d41402c384973cf1bbd136232326d8ef6d9694d7868155a19db030d5', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'beta', + txid: '2b151233cf2514271fee4c152a2ecbd4ee25ca43dc1e84e2f4852fe0e459eeb6', + blockheight: 778612, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'gamma', + txid: '5dbfeca8f27ec2c9e65e2e38115fff55f97df302337582cccad1e6f12a18f82c', + blockheight: 778612, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'andanotherone', + txid: '1be4bb9f820d60a82f6eb86a32ca9442700f180fc94469bca2ded9129f5dce88', + blockheight: 778616, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'omega', + txid: '270b49613da2e7de5a8cda6c7359d09faedd592bfa79eec5bbe3ad7ff426b431', + blockheight: 778616, + }, + { + address: 'ecash:qz7yjv3h90en64an5gdjkf3kjxdusw585u9j5rqxcg', + alias: 'omicron', + txid: '32e8410c6bebf3ff187e7a2b35cb76e2c2699449ce2bfde72b08e59bbb472d15', + blockheight: 778616, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'you5', + txid: '45979deecc8a5179495a08b95afafda9cc6a88f8e4a873931a7d2196b617717a', + blockheight: 778646, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'q8n4e', + txid: '67d85677f70b6b880b22ca14bbd52e5a1ee5cfa2b59904253aa88dc2dcc37c17', + blockheight: 778682, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you8', + txid: '24c8755a1968759f413b94212c21fa2e1387b733e9ebf53a814f01c153528e24', + blockheight: 778710, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you7', + txid: '70501230bb0a0fbaf0bce3268e120973bcee70c2485280c1cc6fce6dc158b9a7', + blockheight: 778710, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you9', + txid: '65b305c1222d82bf46aabf36fd290042599d422cdd83c2bcf8d87ff2285db7c0', + blockheight: 778715, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you11', + txid: '3170fd2f54c37b86f871bf4841a317d169963d53d24ec4e95543473247d3a756', + blockheight: 778718, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you10', + txid: 'e56a14926b976558126ddb11d45103e97c4291d5eb107d2e187d8e073a0df53b', + blockheight: 778718, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you13', + txid: '92b7f2829f9d78c6cb0b86054c63347314c0dd207bcf7e1e0acab41a10d8723d', + blockheight: 778719, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'you12', + txid: 'f8863204b9ed959b7e01d069d50552395145dbb77377c74346a04ebdcba9b554', + blockheight: 778719, + }, + { + address: 'ecash:qzt8q6956r906469djj2egqenpt4fnxn9cun09cltr', + alias: 'you14', + txid: 'e2b629b2b3e5b7a767442d2d4258a33146aa9395ac918d1aa46aa0c2b35ada8c', + blockheight: 778720, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'quant', + txid: '98e2c6a02473ccd0881337f8b9afb59a7dd9c1175f7a5690e32111a1080aa240', + blockheight: 778725, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'quant2', + txid: 'a441bc7e38ceb3e203f286aa7edb1bf617d702617244ab7d95542d982a627e33', + blockheight: 778727, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'thisisareallylongalia', + txid: '4e79d82069fac8378e3c4466804a2a0334fd94ac2fbf9fcf9b5c9915f6c58d0e', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'aaaaaaaaaaaaaaaaaaaaa', + txid: '57809b183b0ce0c289562c8deff5418aaf7e649d74292bf98cae5149bd177a68', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'aaaaaaaaaaaaaaaaaaaa2', + txid: 'b442cb34e604aecea1187c2ebdbcbab4c95364e12b73e315f37e10e147bf69d0', + blockheight: 778785, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'asidjfiasdjfiasjdfi', + txid: 'e959833f505ee5edfe2a7cb243935e8ab1cdc8f5448ea1db7b7ce5c0e7f175f9', + blockheight: 778940, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'feb13', + txid: '1766980ed0422a520bf24e8414c83100e08001a59fc709cd29aa7cca35ebbd80', + blockheight: 779152, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'feb14', + txid: '74145830652cc292128cb94dc2e4fb36792d61995ce6d850e1c1a325a05bd948', + blockheight: 779152, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo112', + txid: '4a204c75fc5b992c5cd7c93abd1467b0b5a4c7eb7860958620fafc3a6bcdaebc', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo111', + txid: '58c1b6c1c1383a92350b283b1bcdf9c13a5eef979a026a5049d6f9ed7efb544e', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo113', + txid: 'ae4eadce6fcc1eb18e00667e4d3f9c5025b28fb51c4e9e2554029b0f732bdc63', + blockheight: 779506, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo114', + txid: 'd6935a2e1efa93d22c2887ddc8dc501b3f1b0763012755db2e31977cdb200adb', + blockheight: 779508, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '苦屎', + txid: '6faf8b1770d76ca23baf23c9ffbfcb0ec75fb314abd188d7320afd6389566678', + blockheight: 779512, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '( ͡~ ͜ʖ ͡°)', + txid: '960e8c8a643bfa5b9cbdff9a6336e0f72aeeb7d5a548162b466cdbaa5800ea2d', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: ' محيط', + txid: '9be45878f9f149e3ba26da2e526ad3f09c709fae2a1f9f895a97865af50bdc99', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: ' sandía', + txid: 'a1195e37655ee6bb99c139fa667a89a8529d074ac8cf10280667a0d80c519ad1', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'محيط', + txid: 'a5d1ad6f910807d373af57d8d5174d564c3f09fcfd5cf0cef7373f32c8009420', + blockheight: 779513, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'Mädchen', + txid: '0af67ee1775b47354fea54bfed627707993735a83f82a7ca4fba2eb0177ad713', + blockheight: 779514, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: '소주', + txid: 'd32235fdee7d54d6a0885270686d613617d42f8fff73f25ee5eec90dd05ff276', + blockheight: 779514, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'tang1', + txid: '5cc97aca95097579050f31bef463e0e27bc675422e2ccffdb4ca2d8e61000e97', + blockheight: 779522, + }, + { + address: 'ecash:qzuzxcw9s505a3ytn9ghtghpcdjxxw8qwc3mgq8n4e', + alias: 'foo115', + txid: 'b2c3f365f16306743ff2d7e3a14273e1291d22796271150e0d7cb356b6b1678e', + blockheight: 779522, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'anewalias', + txid: 'dad359ecdbccceaa6e7474a00fcbdf61c053a9d163763713347689dfce706ec9', + blockheight: 779575, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '👀', + txid: 'a7e400a403a84099212e8f0688e1e528a741b862c1b3a329affd386a8d8567d9', + blockheight: 779576, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'app.xec', + txid: '668b098d16208978cfcdcffd25af28959e5d72998f5505b7a83a3d03a2cbab8b', + blockheight: 780530, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'ajhsidfjiasasfijhisad', + txid: '7a70784cdd4aaf721534ae6b2f9511d9c59bc2778d8a3e0753bd011e1fae15db', + blockheight: 780635, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'foo. xec', + txid: 'e1fe4bd32fdee085cd88a0f836863e2bdfdf1dc80be3b0297c952f3fdd398ed3', + blockheight: 780644, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo', + txid: '8c82f0cdb1649a018c03dbe0bb3cbcfc56f60aa71a77328bd0dd44c39dd269a4', + blockheight: 780648, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'fade', + txid: 'b02d4ef6c54010f2fc27bc3d47786778a77c179b35c78a6d11157f52af44e638', + blockheight: 780675, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'taco', + txid: '43ab4f0ef147d8a7e8836f795f9d6a2bd5f99ef5fd751141dd4f29e4b5e94f52', + blockheight: 780713, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choco', + txid: 'dd932485a9583aa2116d86cafff6fa062596216c36a19e742fa461debb96e723', + blockheight: 780714, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'lamb', + txid: '08632b8b8355e89c98f4b7fe5dcbcf305ac754eba83432ecb4b036700f951616', + blockheight: 780715, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '😾', + txid: '70c56b11113e4d3e0fa344f201885c64ffabb68df876c2fc288f0b1d0cd489b2', + blockheight: 780720, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testingtxhistory', + txid: 'df9a0e79cee79d1003330b78c1c6c87471ae24b5c1f3c89fa5cb75cfd42281ea', + blockheight: 780738, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔', + txid: '1cbb0069e81dee679ba825e69fd0f6c73f6b27e9d90ed37bc4ff4d889382dc52', + blockheight: 780739, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'choo2', + txid: '44189a1e286af6b750aea4f85a7bc2c6cddf3c20159b60e648b3297fca09ec44', + blockheight: 780770, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chimichanga', + txid: 'abc89b045cb49138600859b94405ee753f049b78e797e19157924288c3f13cb0', + blockheight: 780770, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙈🙉🙊', + txid: '44a5508223d79331fb71dac5d378ab9772ee7297a1d33df77d79c95729389af2', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙊', + txid: '561590a735f835770f31f7895f2271c0cec04c08ca99f756c3465bbcb8e2700d', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: '🙊joey', + txid: 'd8cf3b2a3ee6a7b63213da261eb6ba3916c3b01b140bb43f25ea169575ed444a', + blockheight: 780868, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'chunks', + txid: 'f2ae67d9a20a2f0f67186fedfa40df3bb0e69461ba3a782979e9734b754bba2f', + blockheight: 780873, + }, + { + address: 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', + alias: 'extension', + txid: 'd4b6bdbaac5ad3408feb3be216b2759124212cd2653b889c6f3a559aa35c21bc', + blockheight: 780874, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'newTestAlias', + txid: 'bef1600adf5c30b1a0027f1bf37c9adafdf10163e0d3c93d397f132b68ee33e3', + blockheight: 781525, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias2', + txid: '22e460abadd58c3fb66457b53d3705aa302b77ed4ea299eac1c8d021f2685128', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias1', + txid: '590d7e8c32b85a3b2a615875c680d321bc6d685d156b19bfe9acee1da7f9e0b4', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'alias🤔🤨💬', + txid: 'c31635e4c2bddbad0be19b8376e0c550bd297e63094409d75a52f927a05ff3bc', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: 'testDbAlias3', + txid: 'ca7510bab67231044ba6c4ffb0aa3c587466e37b1b11f16a236d1aef8cab7598', + blockheight: 781528, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST3', + txid: '21ad73115136f2c60cd8bfc26d312518f62185cd6423520898adbca431cafd9c', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST1', + txid: '5e9b2e6cc92f42b991f2ab9fe2dcce8093a3645d7ee943c895e7a7f413635ddf', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST', + txid: 'd4d9d17ea0a10fdaec36c78d6d5b0e603e3e03da7bd26bbb84731ec2a2540da7', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST2', + txid: 'f7f7833f1c83cb20e6ce107b56e02385d1f0784ecc468311d28b6015022b12c4', + blockheight: 781529, + }, + ], + validAliasTxsToBeAddedToDb: [ + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST3', + txid: '21ad73115136f2c60cd8bfc26d312518f62185cd6423520898adbca431cafd9c', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST1', + txid: '5e9b2e6cc92f42b991f2ab9fe2dcce8093a3645d7ee943c895e7a7f413635ddf', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST', + txid: 'd4d9d17ea0a10fdaec36c78d6d5b0e603e3e03da7bd26bbb84731ec2a2540da7', + blockheight: 781529, + }, + { + address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035', + alias: '🤔🤨💬TEST2', + txid: 'f7f7833f1c83cb20e6ce107b56e02385d1f0784ecc468311d28b6015022b12c4', + blockheight: 781529, + }, + ], +}; diff --git a/web/alias-server/test/utils.js b/web/alias-server/test/utils.js index b153496cd..1addb899d 100644 --- a/web/alias-server/test/utils.js +++ b/web/alias-server/test/utils.js @@ -1,32 +1,61 @@ const assert = require('assert'); -const { outputScriptToAddress } = require('../utils'); +const { + outputScriptToAddress, + getValidAliasTxsToBeAddedToDb, +} = require('../utils'); +const { + validAliasesInDb, + validAliasTxs, + validAliasTxsToBeAddedToDb, +} = require('./mocks/utilsMocks'); describe('alias-server utils.js', function () { it('Converts a P2PKH output script to a valid P2PKH ecash: address', function () { assert.strictEqual( outputScriptToAddress( '76a9149846b6b38ff713334ac19fe3cf851a1f98c07b0088ac', ), 'ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed', ); }); it('Converts a P2SH output script to a valid P2SH ecash: address', function () { assert.strictEqual( outputScriptToAddress( 'a914c5e60aad8d98f298a76434750630dc1b46a2382187', ), 'ecash:prz7vz4d3kv09x98vs682p3smsd5dg3cyykjye6grt', ); }); it('Returns false when input is invalid (in this case, an inputScript', function () { assert.strictEqual( outputScriptToAddress( '483045022100dfad6c871d101eade422ef6c1c8aca951a43c65c6dd7cccc44d56b04a6b1b60602200c82ac4c06523fdb7ee455f1903c95a37c6fc1bb2c35c080778b869bb63f8f784121031e9483074a9f0ee7380131a870edbe9403e7b807a4b5611b01540a150f6aa4', ), false, ); }); it('Returns false when input is an empty string', function () { assert.strictEqual(outputScriptToAddress(''), false); }); + it('getValidAliasTxsToBeAddedToDb recognizes new aliases to be added to the database', function () { + assert.deepEqual( + getValidAliasTxsToBeAddedToDb(validAliasesInDb, validAliasTxs), + validAliasTxsToBeAddedToDb, + ); + }); + it('getValidAliasTxsToBeAddedToDb returns an empty array when no new aliases need to be added to the database', function () { + assert.deepEqual( + getValidAliasTxsToBeAddedToDb(validAliasesInDb, validAliasesInDb), + [], + ); + }); + it('getValidAliasTxsToBeAddedToDb returns an empty array when template data arrays of objects have the same length', function () { + assert.deepEqual( + getValidAliasTxsToBeAddedToDb( + [{ alias: 'test' }, { alias: 'test1' }, { alias: 'test2' }], + [{ alias: 'test' }, { alias: 'test1' }, { alias: 'test2' }], + ), + [], + ); + }); }); diff --git a/web/alias-server/utils.js b/web/alias-server/utils.js index 977f34eda..68baed354 100644 --- a/web/alias-server/utils.js +++ b/web/alias-server/utils.js @@ -1,63 +1,71 @@ -const config = require('./config'); -const log = require('./log'); const cashaddr = require('ecashaddrjs'); module.exports = { outputScriptToAddress: function (outputScript) { - log(`outputScriptToAddress called with outputScript`, outputScript); // returns P2SH or P2PKH address // P2PKH addresses are in outputScript of type 76a914...88ac // P2SH addresses are in outputScript of type a914...87 // Return false if cannot determine P2PKH or P2SH address const typeTestSlice = outputScript.slice(0, 4); - log(`typeTestSlice`, typeTestSlice); let addressType; let hash160; switch (typeTestSlice) { case '76a9': addressType = 'P2PKH'; hash160 = outputScript.substring( outputScript.indexOf('76a914') + '76a914'.length, outputScript.lastIndexOf('88ac'), ); break; case 'a914': addressType = 'P2SH'; hash160 = outputScript.substring( outputScript.indexOf('a914') + 'a914'.length, outputScript.lastIndexOf('87'), ); break; default: return false; } - log(`hash160`, hash160); - log(`hash160.length`, hash160.length); - log(`addressType`, addressType); // Test hash160 for correct length if (hash160.length !== 40) { return false; } const buffer = Buffer.from(hash160, 'hex'); // Because ecashaddrjs only accepts Uint8Array as input type, convert const hash160ArrayBuffer = new ArrayBuffer(buffer.length); const hash160Uint8Array = new Uint8Array(hash160ArrayBuffer); for (let i = 0; i < hash160Uint8Array.length; i += 1) { hash160Uint8Array[i] = buffer[i]; } // Encode ecash: address const ecashAddress = cashaddr.encode( 'ecash', addressType, hash160Uint8Array, ); - log(`ecashAddress`, ecashAddress); - return ecashAddress; }, + getValidAliasTxsToBeAddedToDb: function (validAliasesInDb, validAliasTxs) { + /* + - See if any tx exist in validAliasTxs and not in validAliasesinDb + - Return validAliasTxsToBeAddedToDb, an array of these aliases + - Note that validAliasesInDb and validAliasTxs are sorted by blockheight + */ + const validAliasTxsToBeAddedToDbCount = + validAliasTxs.length - validAliasesInDb.length; + if (validAliasTxsToBeAddedToDbCount > 0) { + const validAliasTxsToBeAddedToDb = validAliasTxs.slice( + -validAliasTxsToBeAddedToDbCount, + ); + return validAliasTxsToBeAddedToDb; + } else { + return []; + } + }, };