diff --git a/apps/ecash-herald/package-lock.json b/apps/ecash-herald/package-lock.json --- a/apps/ecash-herald/package-lock.json +++ b/apps/ecash-herald/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "axios": "^1.3.4", "axios-mock-adapter": "^1.21.4", + "bignumber.js": "^9.1.1", "chronik-client": "^0.8.2", "ecashaddrjs": "^1.2.0", "node-telegram-bot-api": "^0.61.0" @@ -1171,6 +1172,14 @@ "node": ">=0.6" } }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -5812,6 +5821,11 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" }, + "bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", diff --git a/apps/ecash-herald/package.json b/apps/ecash-herald/package.json --- a/apps/ecash-herald/package.json +++ b/apps/ecash-herald/package.json @@ -23,6 +23,7 @@ "dependencies": { "axios": "^1.3.4", "axios-mock-adapter": "^1.21.4", + "bignumber.js": "^9.1.1", "chronik-client": "^0.8.2", "ecashaddrjs": "^1.2.0", "node-telegram-bot-api": "^0.61.0" diff --git a/apps/ecash-herald/src/chronik.js b/apps/ecash-herald/src/chronik.js new file mode 100644 --- /dev/null +++ b/apps/ecash-herald/src/chronik.js @@ -0,0 +1,26 @@ +// Copyright (c) 2023 The Bitcoin developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +'use strict'; +const { returnChronikTokenInfoPromise } = require('./utils'); + +module.exports = { + getTokenInfoMap: async function (chronik, tokenIdSet) { + let tokenInfoMap = new Map(); + const tokenInfoPromises = []; + tokenIdSet.forEach(tokenId => { + tokenInfoPromises.push( + returnChronikTokenInfoPromise(chronik, tokenId, tokenInfoMap), + ); + }); + + try { + await Promise.all(tokenInfoPromises); + } catch (err) { + console.log(`Error in await Promise.all(tokenInfoPromises)`, err); + console.log(`tokenIdSet`, tokenIdSet); + return false; + } + return tokenInfoMap; + }, +}; diff --git a/apps/ecash-herald/src/events.js b/apps/ecash-herald/src/events.js --- a/apps/ecash-herald/src/events.js +++ b/apps/ecash-herald/src/events.js @@ -6,6 +6,7 @@ const { parseBlock, getBlockTgMessage } = require('./parse'); const { getCoingeckoPrices } = require('./utils'); const { sendBlockSummary } = require('./telegram'); +const { getTokenInfoMap } = require('./chronik'); module.exports = { handleBlockConnected: async function ( @@ -58,6 +59,11 @@ const parsedBlock = parseBlock(blockDetails); + // Get token genesis info for token IDs in this block + const { tokenIds } = parsedBlock; + + const tokenInfoMap = await getTokenInfoMap(chronik, tokenIds); + // Get price info for tg msg, if available const { coingeckoResponse, coingeckoPrices } = await getCoingeckoPrices( config.priceApi, @@ -65,6 +71,7 @@ const blockSummaryTgMsgs = getBlockTgMessage( parsedBlock, coingeckoPrices, + tokenInfoMap, ); // returnMocks is used in the script function generateMocks @@ -77,10 +84,12 @@ parsedBlock, coingeckoResponse, coingeckoPrices, + tokenInfoMap, blockSummaryTgMsgs, - blockSummaryTgMsgsPriceFailure: getBlockTgMessage( + blockSummaryTgMsgsApiFailure: getBlockTgMessage( parsedBlock, - false, + false, // failed coingecko price lookup + false, // failed chronik token ID lookup ), }; } diff --git a/apps/ecash-herald/src/parse.js b/apps/ecash-herald/src/parse.js --- a/apps/ecash-herald/src/parse.js +++ b/apps/ecash-herald/src/parse.js @@ -5,6 +5,7 @@ 'use strict'; const config = require('../config'); const cashaddr = require('ecashaddrjs'); +const BigNumber = require('bignumber.js'); const { prepareStringForTelegramHTML, splitOverflowTgMsg, @@ -25,7 +26,17 @@ for (let i = 1; i < txs.length; i += 1) { parsedTxs.push(module.exports.parseTx(txs[i])); } - return { hash, height, miner, numTxs, parsedTxs }; + + // Collect token info needed to parse token send txs + const tokenIds = new Set(); // we only need each tokenId once + for (let i = 0; i < parsedTxs.length; i += 1) { + const thisParsedTx = parsedTxs[i]; + if (thisParsedTx.tokenSendInfo) { + tokenIds.add(thisParsedTx.tokenSendInfo.tokenId); + } + } + + return { hash, height, miner, numTxs, parsedTxs, tokenIds }; }, getMinerFromCoinbase: function (coinbaseHexString) { const knownMiners = config.knownMiners; @@ -52,6 +63,19 @@ let genesisInfo = false; let opReturnInfo = false; + /* Token send parsing info + * + * Note that token send amounts received from chronik do not account for + * token decimals. Decimalized amounts require token genesisInfo + * decimals param to calculate + */ + + let tokenSendInfo = false; // This will only be an object for token send txs + let tokenSendingOutputScripts = new Set(); + let tokenReceivingOutputs = new Map(); + let tokenChangeOutputs = new Map(); + let undecimalizedTokenInputAmount = new BigNumber(0); + /* Collect xecSendInfo for all txs, since all txs are XEC sends * You may later want to render xecSendInfo for tokenSends, appTxs, etc, * maybe on special conditions, e.g.a token send tx that also sends a bunch of xec @@ -66,6 +90,7 @@ if (tx.slpTxData !== null && typeof tx.slpTxData !== 'undefined') { isTokenTx = true; + // Determine if this is an etoken genesis tx if ( tx.slpTxData.slpMeta !== null && typeof tx.slpTxData.slpMeta !== 'undefined' && @@ -75,11 +100,30 @@ ) { genesisInfo = tx.slpTxData.genesisInfo; } + // Determine if this is an etoken send tx + if ( + tx.slpTxData.slpMeta !== null && + typeof tx.slpTxData.slpMeta !== 'undefined' && + tx.slpTxData.slpMeta.txType === 'SEND' + ) { + // Initialize tokenSendInfo as an object with the sent tokenId + tokenSendInfo = { tokenId: tx.slpTxData.slpMeta.tokenId }; + } } for (let i in inputs) { const thisInput = inputs[i]; xecSendingOutputScripts.add(thisInput.outputScript); xecInputAmountSats += parseInt(thisInput.value); + // The input that sent the token utxos will have key 'slpToken' + if (typeof thisInput.slpToken !== 'undefined') { + // Add amount to undecimalizedTokenInputAmount + undecimalizedTokenInputAmount = + undecimalizedTokenInputAmount.plus( + thisInput.slpToken.amount, + ); + // Collect the input outputScripts to identify change output + tokenSendingOutputScripts.add(thisInput.outputScript); + } } // Iterate over outputs to check for OP_RETURN msgs @@ -120,12 +164,49 @@ thisOutput.outputScript, ); } + // For etoken send txs, parse outputs for tokenSendInfo object + if (typeof thisOutput.slpToken !== 'undefined') { + // Check output script to confirm does not match tokenSendingOutputScript + if (tokenSendingOutputScripts.has(thisOutput.outputScript)) { + // change + tokenChangeOutputs.set( + thisOutput.outputScript, + ( + tokenChangeOutputs.get(thisOutput.outputScript) ?? + new BigNumber(0) + ).plus(thisOutput.slpToken.amount), + ); + } else { + /* This is the sent token qty + * + * Add outputScript and undecimalizedTokenReceivedAmount to map + * If this outputScript is already in tokenReceivingOutputs, increment undecimalizedTokenReceivedAmount + * note that thisOutput.slpToken.amount is a string so you do not want to add it + * BigNumber library is required for token calculations + */ + tokenReceivingOutputs.set( + thisOutput.outputScript, + ( + tokenReceivingOutputs.get( + thisOutput.outputScript, + ) ?? new BigNumber(0) + ).plus(thisOutput.slpToken.amount), + ); + } + } } // Determine tx fee const txFee = xecInputAmountSats - xecOutputAmountSats; const satsPerByte = txFee / size; + // If this is a token send tx, return token send parsing info and not 'false' for tokenSendInfo + if (tokenSendInfo) { + tokenSendInfo.tokenChangeOutputs = tokenChangeOutputs; + tokenSendInfo.tokenReceivingOutputs = tokenReceivingOutputs; + tokenSendInfo.tokenSendingOutputScripts = tokenSendingOutputScripts; + } + return { txid, genesisInfo, @@ -134,6 +215,7 @@ xecSendingOutputScripts, xecChangeOutputs, xecReceivingOutputs, + tokenSendInfo, }; }, parseOpReturn: function (outputScript) { @@ -273,12 +355,13 @@ return { app, msg }; } }, - getBlockTgMessage: function (parsedBlock, coingeckoPrices) { + getBlockTgMessage: function (parsedBlock, coingeckoPrices, tokenInfoMap) { const { hash, height, miner, numTxs, parsedTxs } = parsedBlock; // Define newsworthy types of txs in parsedTxs // These arrays will be used to present txs in batches by type const genesisTxTgMsgLines = []; + const tokenSendTxTgMsgLines = []; const opReturnTxTgMsgLines = []; const xecSendTxTgMsgLines = []; @@ -293,6 +376,7 @@ xecSendingOutputScripts, xecChangeOutputs, xecReceivingOutputs, + tokenSendInfo, } = thisParsedTx; if (genesisInfo) { // The txid of a genesis tx is the tokenId @@ -321,6 +405,105 @@ // This parsed tx has a tg msg line. Move on to the next one. continue; } + // Only parse tokenSendInfo txs if you successfuly got tokenMapInfo from chronik + if (tokenSendInfo && tokenInfoMap) { + let { + tokenId, + tokenSendingOutputScripts, + tokenChangeOutputs, + tokenReceivingOutputs, + } = tokenSendInfo; + + // Get token info from tokenInfoMap + const thisTokenInfo = tokenInfoMap.get(tokenId); + + let { tokenTicker, tokenName, decimals } = thisTokenInfo; + // Note: tokenDocumentUrl and tokenDocumentHash are also available from thisTokenInfo + + // Make sure tokenName does not contain telegram html escape characters + tokenName = prepareStringForTelegramHTML(tokenName); + // Make sure tokenName does not contain telegram html escape characters + tokenTicker = prepareStringForTelegramHTML(tokenTicker); + + // Initialize tokenSendMsg + let tokenSendMsg; + + // Parse token self-send txs + if (tokenReceivingOutputs.size === 0) { + // self send tx + let undecimalizedTokenChangeAmount = new BigNumber(0); + for (const tokenChangeAmount of tokenChangeOutputs.values()) { + undecimalizedTokenChangeAmount = + undecimalizedTokenChangeAmount.plus( + tokenChangeAmount, + ); + } + // Calculate true tokenChangeAmount using decimals + // Use decimals to calculate the sent amount as string + const decimalizedTokenChangeAmount = new BigNumber( + undecimalizedTokenChangeAmount, + ) + .shiftedBy(-1 * decimals) + .toString(); + + // Self send tokenSendMsg + tokenSendMsg = `${tokenSendingOutputScripts.size} ${ + tokenSendingOutputScripts.size > 1 + ? 'addresses' + : 'address' + } sent ${decimalizedTokenChangeAmount} ${tokenTicker} to ${ + tokenSendingOutputScripts.size > 1 + ? 'themselves' + : 'itself' + }`; + } else { + // Normal token send tx + let undecimalizedTokenReceivedAmount = new BigNumber(0); + for (const tokenReceivedAmount of tokenReceivingOutputs.values()) { + undecimalizedTokenReceivedAmount = + undecimalizedTokenReceivedAmount.plus( + tokenReceivedAmount, + ); + } + // Calculate true tokenReceivedAmount using decimals + // Use decimals to calculate the received amount as string + const decimalizedTokenReceivedAmount = new BigNumber( + undecimalizedTokenReceivedAmount, + ) + .shiftedBy(-1 * decimals) + .toString(); + tokenSendMsg = `${returnAddressPreview( + cashaddr.encodeOutputScript( + tokenSendingOutputScripts.values().next().value, + ), + )} sent ${decimalizedTokenReceivedAmount.toLocaleString( + 'en-US', + { + minimumFractionDigits: decimals, + }, + )} ${tokenTicker} to ${returnAddressPreview( + cashaddr.encodeOutputScript( + tokenReceivingOutputs.keys().next().value, + ), + )}${ + tokenReceivingOutputs.size > 1 + ? ` and ${tokenReceivingOutputs.size - 1} others` + : '' + }`; + } + + tokenSendTxTgMsgLines.push(tokenSendMsg); + // This parsed tx has a tg msg line. Move on to the next one. + continue; + } // Txs not parsed above are parsed as xec send txs /* We do the totalSatsSent calculation here in getBlockTgMsg and not above in parseTx @@ -429,6 +612,23 @@ tgMsg = tgMsg.concat(genesisTxTgMsgLines); } + // eToken Send txs + if (tokenSendTxTgMsgLines.length > 0) { + // Line break for new section + tgMsg.push(''); + + // 1 eToken send tx: + // or + // eToken send txs: + tgMsg.push( + `${tokenSendTxTgMsgLines.length} eToken send tx${ + tokenSendTxTgMsgLines.length > 1 ? `s` : '' + }`, + ); + + tgMsg = tgMsg.concat(tokenSendTxTgMsgLines); + } + // OP_RETURN txs if (opReturnTxTgMsgLines.length > 0) { // Line break for new section diff --git a/apps/ecash-herald/src/telegram.js b/apps/ecash-herald/src/telegram.js --- a/apps/ecash-herald/src/telegram.js +++ b/apps/ecash-herald/src/telegram.js @@ -63,7 +63,8 @@ ); // Reset sliceStartIndex and thisTgMsgStringLength for the next message sliceStartIndex = sliceEndIndex; - thisTgMsgStringLength = 0; + // You will be including this 'i'th line in the next batch, don't reset to zero + thisTgMsgStringLength = thisLine.length + 2; } } diff --git a/apps/ecash-herald/src/utils.js b/apps/ecash-herald/src/utils.js --- a/apps/ecash-herald/src/utils.js +++ b/apps/ecash-herald/src/utils.js @@ -5,6 +5,7 @@ 'use strict'; const axios = require('axios'); const config = require('../config'); +const BigNumber = require('bignumber.js'); module.exports = { returnAddressPreview: function (cashAddress, sliceSize = 3) { @@ -102,9 +103,32 @@ }, jsonReplacer: function (key, value) { if (value instanceof Map) { + const keyValueArray = Array.from(value.entries()); + + for (let i = 0; i < keyValueArray.length; i += 1) { + const thisKeyValue = keyValueArray[i]; // [key, value] + // If this is not an empty map + if (typeof thisKeyValue !== 'undefined') { + // Note: this value is an array of length 2 + // [key, value] + // Check if value is a big number + if (thisKeyValue[1] instanceof BigNumber) { + // Replace it + thisKeyValue[1] = { + // Note, if you use dataType: 'BigNumber', it will not work + // This must be reserved + // Use a term that is definitely not reserved but also recognizable as + // "the dev means BigNumber here" + dataType: 'BigNumberReplacer', + value: thisKeyValue[1].toString(), + }; + } + } + } + return { dataType: 'Map', - value: Array.from(value.entries()), + value: keyValueArray, }; } else if (value instanceof Set) { return { @@ -118,6 +142,33 @@ jsonReviver: function (key, value) { if (typeof value === 'object' && value !== null) { if (value.dataType === 'Map') { + // If the map is not empty + if (typeof value.value[0] !== 'undefined') { + /* value.value is an array of keyValue arrays + * e.g. + * [ + * [key1, value1], + * [key2, value2], + * [key3, value3], + * ] + */ + // Iterate over each keyValue of the map + for (let i = 0; i < value.value.length; i += 1) { + const thisKeyValuePair = value.value[i]; // [key, value] + let thisValue = thisKeyValuePair[1]; + if ( + thisValue && + thisValue.dataType === 'BigNumberReplacer' + ) { + // If this is saved BigNumber, replace it with an actual BigNumber + // note, you can't use thisValue = new BigNumber(thisValue.value) + // Need to use this specific array entry + value.value[i][1] = new BigNumber( + value.value[i][1].value, + ); + } + } + } return new Map(value.value); } if (value.dataType === 'Set') { @@ -126,4 +177,31 @@ } return value; }, + returnChronikTokenInfoPromise: function (chronik, tokenId, tokenInfoMap) { + /* returnChronikTokenInfoPromise + * + * For best performance, we want to use Promise.all() to make several + * chronik API calls at the same time + * + * This function returns a promise to ask chronik for token genesis info + * and add this info to a map + */ + return new Promise((resolve, reject) => { + chronik.tx(tokenId).then( + txDetails => { + console.assert( + typeof txDetails.slpTxData.genesisInfo !== 'undefined', + `Error: no genesisInfo object for ${tokenId}`, + ); + // Note: txDetails.slpTxData.genesisInfo only exists for token genesis txs + const genesisInfo = txDetails.slpTxData.genesisInfo; + tokenInfoMap.set(tokenId, genesisInfo); + resolve(true); + }, + err => { + reject(err); + }, + ); + }); + }, }; diff --git a/apps/ecash-herald/test/chronikTests.js b/apps/ecash-herald/test/chronikTests.js new file mode 100644 --- /dev/null +++ b/apps/ecash-herald/test/chronikTests.js @@ -0,0 +1,87 @@ +// Copyright (c) 2023 The Bitcoin developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +'use strict'; +const assert = require('assert'); +const { MockChronikClient } = require('./mocks/chronikMock'); +const { getTokenInfoMap } = require('../src/chronik'); +const { tx } = require('./mocks/chronikResponses'); +// Initialize chronik on app startup + +const TOKEN_ID_SET = new Set([ + '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109', // BearNip + 'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a', // POW + '54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484', // Alita +]); + +describe('chronik.js functions', function () { + it('getTokenInfoMap returns a map of expected format given an array of tokenIds', async function () { + // Initialize chronik mock + const mockedChronik = new MockChronikClient(); + + const expectedTokenInfoMap = new Map(); + // Tell mockedChronik what responses we expect + // Also build the expected map result from these responses + TOKEN_ID_SET.forEach(tokenId => { + mockedChronik.setMock('tx', { + input: tokenId, + output: tx[tokenId], + }); + expectedTokenInfoMap.set( + tokenId, + tx[tokenId].slpTxData.genesisInfo, + ); + }); + const tokenInfoMap = await getTokenInfoMap(mockedChronik, TOKEN_ID_SET); + + assert.deepEqual(tokenInfoMap, expectedTokenInfoMap); + }); + it('getTokenInfoMap returns a map of expected format given an array of one tokenId', async function () { + // Initialize chronik mock + const mockedChronik = new MockChronikClient(); + + const expectedTokenInfoMap = new Map(); + // Tell mockedChronik what responses we expect + // Also build the expected map result from these responses + + // Create a set of only one token id + const thisTokenId = TOKEN_ID_SET.values().next().value; + const tokenIdSet = new Set(); + tokenIdSet.add(thisTokenId); + mockedChronik.setMock('tx', { + input: thisTokenId, + output: tx[thisTokenId], + }); + expectedTokenInfoMap.set( + thisTokenId, + tx[thisTokenId].slpTxData.genesisInfo, + ); + const tokenInfoMap = await getTokenInfoMap(mockedChronik, tokenIdSet); + + assert.deepEqual(tokenInfoMap, expectedTokenInfoMap); + }); + it('getTokenInfoMap returns false if there is an error in any chronik call', async function () { + // Initialize chronik mock + const mockedChronik = new MockChronikClient(); + + const TOKEN_ID_ARRAY = Array.from(TOKEN_ID_SET); + // Tell mockedChronik what responses we expect + // Include one error response + mockedChronik.setMock('tx', { + input: TOKEN_ID_ARRAY[0], + output: tx[TOKEN_ID_ARRAY[0]], + }); + mockedChronik.setMock('tx', { + input: TOKEN_ID_ARRAY[1], + output: tx[TOKEN_ID_ARRAY[1]], + }); + mockedChronik.setMock('tx', { + input: TOKEN_ID_ARRAY[2], + output: new Error('some error'), + }); + + const tokenInfoMap = await getTokenInfoMap(mockedChronik, TOKEN_ID_SET); + + assert.strictEqual(tokenInfoMap, false); + }); +}); diff --git a/apps/ecash-herald/test/chronikWsHandlerTests.js b/apps/ecash-herald/test/chronikWsHandlerTests.js --- a/apps/ecash-herald/test/chronikWsHandlerTests.js +++ b/apps/ecash-herald/test/chronikWsHandlerTests.js @@ -6,7 +6,9 @@ const assert = require('assert'); const config = require('../config'); const cashaddr = require('ecashaddrjs'); -const blocks = require('./mocks/blocks'); +const unrevivedBlocks = require('./mocks/blocks'); +const { jsonReviver } = require('../src/utils'); +const blocks = JSON.parse(JSON.stringify(unrevivedBlocks), jsonReviver); const { initializeWebsocket, parseWebsocketMessage, @@ -109,11 +111,11 @@ assert.deepEqual(result, false); } }); - it('parseWebsocketMessage creates and sends a telegram msg with prices for all mocked blocks on successful price API call', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); - + it('parseWebsocketMessage creates and sends a telegram msg with prices and token send info for all mocked blocks on successful API calls', async function () { for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(); + const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; @@ -123,6 +125,24 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); + // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + tokenIds.forEach(tokenId => { + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + }); + } const thisBlockExpectedMsgs = thisBlock.blockSummaryTgMsgs; // Mock a chronik websocket msg of correct format @@ -166,11 +186,10 @@ assert.deepEqual(result, msgSuccessArray); } }); - it('parseWebsocketMessage creates and sends a telegram msg without prices for all mocked blocks on failed price API call', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); - + it('parseWebsocketMessage creates and sends a telegram msg without prices or token send info for all mocked blocks on failed API calls', async function () { for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(); const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; @@ -179,9 +198,36 @@ mockedChronik.setMock('block', { input: thisBlockHash, output: thisBlockChronikBlockResponse, - }); + }); // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + let index = 0; + tokenIds.forEach(tokenId => { + // If this is the first one, set an error response + if (index === 0) { + mockedChronik.setMock('tx', { + input: tokenId, + output: new Error('some error'), + }); + } else { + index += 1; + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + } + }); + } const thisBlockExpectedMsgs = - thisBlock.blockSummaryTgMsgsPriceFailure; + thisBlock.blockSummaryTgMsgsApiFailure; // Mock a chronik websocket msg of correct format const mockWsMsg = { @@ -226,10 +272,10 @@ } }); it('parseWebsocketMessage returns false if telegram msg fails to send', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); - for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(); + const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; @@ -240,6 +286,35 @@ output: thisBlockChronikBlockResponse, }); + // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + let index = 0; + tokenIds.forEach(tokenId => { + // If this is the first one, set an error response + if (index === 0) { + mockedChronik.setMock('tx', { + input: tokenId, + output: new Error('some error'), + }); + } else { + index += 1; + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + } + }); + } + // Mock a chronik websocket msg of correct format const mockWsMsg = { type: 'BlockConnected', diff --git a/apps/ecash-herald/test/eventsTests.js b/apps/ecash-herald/test/eventsTests.js --- a/apps/ecash-herald/test/eventsTests.js +++ b/apps/ecash-herald/test/eventsTests.js @@ -5,7 +5,9 @@ 'use strict'; const assert = require('assert'); const config = require('../config'); -const blocks = require('./mocks/blocks'); +const unrevivedBlocks = require('./mocks/blocks'); +const { jsonReviver } = require('../src/utils'); +const blocks = JSON.parse(JSON.stringify(unrevivedBlocks), jsonReviver); const { handleBlockConnected } = require('../src/events'); const { MockChronikClient } = require('./mocks/chronikMock'); @@ -15,11 +17,10 @@ const MockAdapter = require('axios-mock-adapter'); describe('ecash-herald events.js', async function () { - it('handleBlockConnected creates and sends a telegram msg with price info for all mocked blocks if api call succeeds', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); - + it('handleBlockConnected creates and sends a telegram msg with price and token send info for all mocked blocks if api call succeeds', async function () { for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(); const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; @@ -29,6 +30,26 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); + + // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + tokenIds.forEach(tokenId => { + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + }); + } + const thisBlockExpectedMsgs = thisBlock.blockSummaryTgMsgs; const telegramBot = new MockTelegramBot(); @@ -70,22 +91,50 @@ assert.deepEqual(result, msgSuccessArray); } }); - it('handleBlockConnected creates and sends a telegram msg without price info for all mocked blocks if api call fails', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); - + it('handleBlockConnected creates and sends a telegram msg without price or token info for all mocked blocks if api calls fail', async function () { for (let i = 0; i < blocks.length; i += 1) { const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; + // Initialize chronik mock for each block + const mockedChronik = new MockChronikClient(); + // Tell mockedChronik what response we expect for chronik.block(thisBlockHash) mockedChronik.setMock('block', { input: thisBlockHash, output: thisBlockChronikBlockResponse, }); + // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + let index = 0; + tokenIds.forEach(tokenId => { + // If this is the first one, set an error response + if (index === 0) { + mockedChronik.setMock('tx', { + input: tokenId, + output: new Error('some error'), + }); + } else { + index += 1; + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + } + }); + } const thisBlockExpectedMsgs = - thisBlock.blockSummaryTgMsgsPriceFailure; + thisBlock.blockSummaryTgMsgsApiFailure; const telegramBot = new MockTelegramBot(); const channelId = mockChannelId; @@ -125,9 +174,9 @@ } }); it('handleBlockConnected sends desired backup msg if it encounters an error in message creation', async function () { - // Initialize chronik mock - const mockedChronik = new MockChronikClient(); for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(); const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; @@ -165,10 +214,11 @@ it('handleBlockConnected returns false if it encounters an error in telegram bot sendMessage routine', async function () { const wsTestAddress = 'ecash:prfhcnyqnl5cgrnmlfmms675w93ld7mvvqd0y8lz07'; - // Initialize chronik mock - const mockedChronik = new MockChronikClient(wsTestAddress, []); for (let i = 0; i < blocks.length; i += 1) { + // Initialize new chronik mock for each block + const mockedChronik = new MockChronikClient(wsTestAddress, []); + const thisBlock = blocks[i]; const thisBlockHash = thisBlock.blockDetails.blockInfo.hash; const thisBlockChronikBlockResponse = thisBlock.blockDetails; @@ -179,6 +229,35 @@ output: thisBlockChronikBlockResponse, }); + // Tell mockedChronik what response we expect for chronik.tx + const { parsedBlock, tokenInfoMap } = thisBlock; + const { tokenIds } = parsedBlock; + // Will only have chronik call if the set is not empty + if (tokenIds.size > 0) { + // Instead of saving all the chronik responses as mocks, which would be very large + // Just set them as mocks based on tokenInfoMap, which contains the info we need + let index = 0; + tokenIds.forEach(tokenId => { + // If this is the first one, set an error response + if (index === 0) { + mockedChronik.setMock('tx', { + input: tokenId, + output: new Error('some error'), + }); + } else { + index += 1; + mockedChronik.setMock('tx', { + input: tokenId, + output: { + slpTxData: { + genesisInfo: tokenInfoMap.get(tokenId), + }, + }, + }); + } + }); + } + const telegramBot = new MockTelegramBot(); telegramBot.setExpectedError( 'sendMessage', diff --git a/apps/ecash-herald/test/mocks/blocks.js b/apps/ecash-herald/test/mocks/blocks.js --- a/apps/ecash-herald/test/mocks/blocks.js +++ b/apps/ecash-herald/test/mocks/blocks.js @@ -75,39 +75,47 @@ miner: 'unknown', numTxs: '1', parsedTxs: [], + tokenIds: { + dataType: 'Set', + value: [], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [], + }, blockSummaryTgMsgs: [ - '0 | 1 tx | unknown\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861', + '0 | 1 tx | unknown\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '0 | 1 tx | unknown', ], blockName: 'genesisBlock', @@ -5032,6 +5040,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '0473d97d997b61c5018205b27316b6ae660a9b7835a46166fa87e0b1b26de2dd', @@ -5060,6 +5069,7 @@ dataType: 'Map', value: [['6a0a31363239343938313237023835', 0]], }, + tokenSendInfo: false, }, { txid: '05b4fd23fbe566b5d789f536cc41e77539e6e23e1f5ecb6d8ae67e386ba2e94b', @@ -5089,6 +5099,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '05dbfb3db7f4a73de336745335f419ced31b42b2c3e05cdba4cb50e06eb16471', @@ -5114,6 +5125,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '074d2111cd7014c04d626cf4d96ca273234f5a7c014e5edb0e03145e53a838f2', @@ -5143,6 +5155,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '0d0a722a21aeca90ebb3d0954475ccb67f18c02945bc138c1f2ae6d507e3feb7', @@ -5171,6 +5184,7 @@ dataType: 'Map', value: [['6a0a31363239353030303839023931', 0]], }, + tokenSendInfo: false, }, { txid: '0d9a82afc6b2605b25f8dab8b398579c3d408dc4c25919f6827a1afa5a0f6e5a', @@ -5194,6 +5208,7 @@ dataType: 'Map', value: [['6a0a31363239343937393135023739', 0]], }, + tokenSendInfo: false, }, { txid: '0e64f62f9cb16a31cfa2188d6c9ec674c13f3d2f5320672fc45f02a8a1aba38d', @@ -5225,6 +5240,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '1205ec2b6105716eccb95f5b26c5d65d81a390ac8bacc6ee1f20aa1757015143', @@ -5253,6 +5269,7 @@ dataType: 'Map', value: [['6a0a31363239353030363437023739', 0]], }, + tokenSendInfo: false, }, { txid: '134b0feae8567aa52d73975746376b785564cbc907f8ce7dfc44f90edd869145', @@ -5276,6 +5293,7 @@ dataType: 'Map', value: [['6a0a31363239343939303233023736', 0]], }, + tokenSendInfo: false, }, { txid: '136742fdb231e1342f790a5123f46414c3957f7d199b80ea729ecba274e3b787', @@ -5304,6 +5322,7 @@ dataType: 'Map', value: [['6a0a31363239343937353334023738', 0]], }, + tokenSendInfo: false, }, { txid: '1478f35e98cff2227a826bc93463d2813b5161929267806d49ec994088747bfa', @@ -5332,6 +5351,7 @@ dataType: 'Map', value: [['6a0a31363239343938353335023837', 0]], }, + tokenSendInfo: false, }, { txid: '15461fbfdafca9999d195353f6fcbafef4769cb100585315829dafddc66c5ccc', @@ -5361,6 +5381,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '17da7f7d89c687a99b2ed270014fe79be67938d75cf6fffd5afdfa18dcf92624', @@ -5391,6 +5412,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '2061d46821889fe8767c6fb747b87e37e3961eab46e8a7dc9098719d170fca52', @@ -5419,6 +5441,7 @@ dataType: 'Map', value: [['6a0a31363239353030373938023739', 0]], }, + tokenSendInfo: false, }, { txid: '26df82bc6624d8814fe23073ba1b1b8b1ddff68de955ba01fd8dbb5e2db34eb6', @@ -5447,6 +5470,7 @@ dataType: 'Map', value: [['6a0a31363239343937343537023737', 0]], }, + tokenSendInfo: false, }, { txid: '28bfff0be82734dbfa346cda5d45fb8deeaacce6edc817bd9d6f2c6c82c203ea', @@ -5475,6 +5499,7 @@ dataType: 'Map', value: [['6a0a31363239343938323838023732', 0]], }, + tokenSendInfo: false, }, { txid: '29e4bcf352a9524856099ae43fa25b2c67f661e0486875a35a3dc5e02466c4b5', @@ -5503,6 +5528,7 @@ dataType: 'Map', value: [['6a0a31363239343939323734023634', 0]], }, + tokenSendInfo: false, }, { txid: '2fddd13d532ec44c43ee4fa68b587f15d575e73d566e7d30f6bc495a61074e42', @@ -5531,6 +5557,7 @@ dataType: 'Map', value: [['6a0a31363239353030313632023830', 0]], }, + tokenSendInfo: false, }, { txid: '30cfe0f7b05197b371e050eb06642e969d037754f456f76272e98890b8ed2581', @@ -5559,6 +5586,7 @@ dataType: 'Map', value: [['6a0a31363239353030373230023832', 0]], }, + tokenSendInfo: false, }, { txid: '32f7ca6768bedb81603dfd5618263f84c7cb42fa4bae4eeb2dda8a4eac0cdd4d', @@ -5587,6 +5615,7 @@ dataType: 'Map', value: [['6a0a31363239343939373734023934', 0]], }, + tokenSendInfo: false, }, { txid: '3411daaf624965c7731bc169e7831d9e56075986a1639cb1dc74e1b8d9c797b9', @@ -5615,6 +5644,7 @@ dataType: 'Map', value: [['6a0a31363239343937363130023739', 0]], }, + tokenSendInfo: false, }, { txid: '35d7346a26f456fcb2b5dec7801964de18d15b90c68711b70742dde052cbc0d4', @@ -5645,6 +5675,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '3d53a4e291acccb5af5f8f65518edf28de61e5004b21150145bd73acf6303cf3', @@ -5680,6 +5711,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '43c50a9f8bb247a389e5233ff38eb59be3df550feb3a18d0dcc967eea9b0748a', @@ -5715,6 +5747,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '4b0ae95c4571709ea1634ea1b70946845a0d9e9a4c5b0f4d298feb8c8f5df026', @@ -5745,6 +5778,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '4bf5a856c75adbc50669ac3f7184958424db99da65d218d986e194d2bb8b3cdf', @@ -5774,6 +5808,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '4cf484655aa1948cfc3cd291a119806c8b2b5e0d233e44866dc0c9015b24ce1e', @@ -5802,6 +5837,7 @@ dataType: 'Map', value: [['6a0a31363239343939333630023834', 0]], }, + tokenSendInfo: false, }, { txid: '4d46bd9ba22889a496cf4d37e5f0307216c8be93885ba82fcc0d3965c63693c3', @@ -5830,6 +5866,7 @@ dataType: 'Map', value: [['6a0a31363239343938343630023731', 0]], }, + tokenSendInfo: false, }, { txid: '4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875', @@ -5866,6 +5903,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '4f55182147356e5ccbf6c06225e817ac405a50fbe04c0f6eb5a4eb04462c7b12', @@ -5894,6 +5932,7 @@ dataType: 'Map', value: [['6a0a31363239353030333138023736', 0]], }, + tokenSendInfo: false, }, { txid: '500e26ccb9a73e0a3b4b2973c5b37af1ddeae23cfce41b987d1ba3e942387c54', @@ -5923,6 +5962,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '5200a3bf8928a7aae450aa58b550957333e0bebfa352bcc4c108e9b396a4626f', @@ -5953,6 +5993,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '53c43d805bbbb9618e48cde71f5ff659fea02689f825cde823984b30443f0b30', @@ -5981,6 +6022,7 @@ dataType: 'Map', value: [['6a0a31363239343937313332023738', 0]], }, + tokenSendInfo: false, }, { txid: '545f14c319f00273c894e02e7e4170e2f186da3e9022629f659f8f6b1e579a1c', @@ -6015,6 +6057,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '56bc3c81bb81bc92ba25acc407602207a0fdada4261f7f205d141ab34b616ce9', @@ -6043,6 +6086,7 @@ dataType: 'Map', value: [['6a0a31363239343938303630023838', 0]], }, + tokenSendInfo: false, }, { txid: '592f4435d3ef8e2e2f0108cffc7b727798f359bad8521a084ca668bad55512c3', @@ -6071,6 +6115,7 @@ dataType: 'Map', value: [['6a0a3136323934393938393703313035', 0]], }, + tokenSendInfo: false, }, { txid: '5d4f5668277ac87f170711461f0bef8f716556b6433c39729a4d0f22a1f1a9ae', @@ -6099,6 +6144,7 @@ dataType: 'Map', value: [['6a0a31363239343937373633023735', 0]], }, + tokenSendInfo: false, }, { txid: '5dc730eafbde4aeec06bf63995e76ecb957ac9266427e63eb23454e49b9f35c0', @@ -6128,6 +6174,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '63ee98065e0c2358423ccc2ceae21a00ff8ed5e132d460a463334f1368ae3936', @@ -6156,6 +6203,7 @@ dataType: 'Map', value: [['6a0a31363239343939353731023933', 0]], }, + tokenSendInfo: false, }, { txid: '64d204d6dd894e2b93ec2a9a518fb6c9fb9313098a06859b605e440884372c60', @@ -6184,6 +6232,7 @@ dataType: 'Map', value: [['6a0a31363239343937303534023734', 0]], }, + tokenSendInfo: false, }, { txid: '67b05c5f3cc1d1d2415aae8232254bc790fe8d1965e9b529fc3b7bae4acf818d', @@ -6212,6 +6261,7 @@ dataType: 'Map', value: [['6a0a31363239343939313835023735', 0]], }, + tokenSendInfo: false, }, { txid: '6d88f6ad363660c11cc53d6630b6b99b2f99d0ab68b00dd06ba63636e7b15891', @@ -6239,6 +6289,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '6fb44256ab3b7ecdb4dd4955d94dd1f6dc1bdeee8a523651fd71e699c524af01', @@ -6267,6 +6318,7 @@ dataType: 'Map', value: [['6a0a31363239343938333735023730', 0]], }, + tokenSendInfo: false, }, { txid: '707051559904c61d0873824b9a215b93c90452724be49342554438215ba392d0', @@ -6295,6 +6347,7 @@ dataType: 'Map', value: [['6a0a31363239343938363130023734', 0]], }, + tokenSendInfo: false, }, { txid: '70cf40ea8427d0fa12c411434f5f753780ba986f51947f43eaa5eb1ee4c4b9d7', @@ -6324,6 +6377,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7168c1feb93bba72b68c5ac833a9f428dcb88a9e199f53db1613bcc07a70dfec', @@ -6352,6 +6406,7 @@ dataType: 'Map', value: [['6a0a31363239343937323933023638', 0]], }, + tokenSendInfo: false, }, { txid: '73db52181851a5a5734a21a19c9082c84f0e3827284e26d2cded7e5d2bea8363', @@ -6381,6 +6436,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '74352cbc58d6e5891dcff7714575735d31b4fd3441f557a2aa5d1c4cb34d3274', @@ -6410,6 +6466,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7453cfad5d4ef44c4033acfcd694fff185be18fa08528ac3d33953c38dfb8d74', @@ -6445,6 +6502,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '76f684f3c861f5ba39872f322d0dd759729a74895a6b376ace563dd8db494f15', @@ -6474,6 +6532,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7d85c406e5a0cd75fb92388f8d875e3e7eded9584d01414f18f57793063b1e69', @@ -6502,6 +6561,7 @@ dataType: 'Map', value: [['6a0a31363239343937323039023736', 0]], }, + tokenSendInfo: false, }, { txid: '7e4596fc927d0da2c1d4ee1290ffaf3731d873951bd2da60676848d5c8495ee8', @@ -6535,6 +6595,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7ed7de6b7709faafca4d5f92db0af65df90852f7457284039e583554d0d6f527', @@ -6563,6 +6624,7 @@ dataType: 'Map', value: [['6a0a31363239343939373036023838', 0]], }, + tokenSendInfo: false, }, { txid: '7f6d27c7f7869d8f0a1bce28b955238b4999d176b0be5b7f8738741c67b6585f', @@ -6598,6 +6660,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7f70502f4a0fe4ffc993648a440a56d048298c442e12d6e4d2cd12497357a702', @@ -6631,6 +6694,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '817c602ce380eda55eae2e64f1501499ea66e9fbffd6aee4c013f5a0e0d8bb77', @@ -6659,6 +6723,7 @@ dataType: 'Map', value: [['6a0a31363239343937363835023831', 0]], }, + tokenSendInfo: false, }, { txid: '826ca512fdaa287c0a38ced748713ff7e9b199f3f43aedf6d49d35d9700bfb6d', @@ -6688,6 +6753,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8692a0f9ee9217faaf60f76044adc6aec3afe7ebde1f46c52f06da4bf28b126b', @@ -6717,6 +6783,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8a459bb01fe0304d3617a11004b1651ef4f6cf7173e98894f5ded93b3f98eca4', @@ -6747,6 +6814,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8ae36d52d6d053da7252f8c34284d0b1296990271e22f82acd0ef8e5daf8ebdc', @@ -6777,6 +6845,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8d15e3628717cca44be6838c6bedbd254650ab8cc5ed66dd1d3cc5ea6f8c9c2c', @@ -6807,6 +6876,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8dc7771f7904fd00bfbb810e6fdf35e90cfcd495f9e822db5620959d021ccb89', @@ -6837,6 +6907,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8f595f2617777d72231772c8994cb8ec4e6c7ec3678cc77c88f7f4c799f8f752', @@ -6866,6 +6937,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '9162b6dac6e0945f6438343c57d08b69e6306f4e09d94842bcc4aeca22f854be', @@ -6894,6 +6966,7 @@ dataType: 'Map', value: [['6a0a31363239343939353034023834', 0]], }, + tokenSendInfo: false, }, { txid: '96cf034489782a60d9346e508bf9d97094293ccf51166bd49a4e1f6cb7538c04', @@ -6928,6 +7001,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '9bd8383325ec538562c92d8f28f19804d9727196fe1457aec5cace66c1d96fda', @@ -6956,6 +7030,7 @@ dataType: 'Map', value: [['6a0a31363239343938383634023634', 0]], }, + tokenSendInfo: false, }, { txid: 'a0895e299c51d87548a63aecc49edc2db717815a32ada2c19718643f1acc99a9', @@ -7002,6 +7077,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'a1974c915f3a274907be819533a3c3d4bbbcbf112d3be82970b9100641eccbf3', @@ -7030,6 +7106,7 @@ dataType: 'Map', value: [['6a0a31363239343938373733023636', 0]], }, + tokenSendInfo: false, }, { txid: 'a1e4bd0b2b151ce40efd30cdedb663e75d438cd518c52c7d3b09e8eb5e9518f8', @@ -7058,6 +7135,7 @@ dataType: 'Map', value: [['6a0a31363239343939393535023936', 0]], }, + tokenSendInfo: false, }, { txid: 'a7064b6bed0cfcd245af8e76d5f521539152238d3f54e4cad4def3e53a0efe61', @@ -7086,6 +7164,7 @@ dataType: 'Map', value: [['6a0a31363239353030353636023731', 0]], }, + tokenSendInfo: false, }, { txid: 'ad531c21ee34e502b8ebf131fa6d75faacb91eec9afca2c7e4c1c058ee88bf40', @@ -7114,6 +7193,7 @@ dataType: 'Map', value: [['6a0a31363239343937393930023832', 0]], }, + tokenSendInfo: false, }, { txid: 'ae01d244f951d4d1a781fc61a9df0dbd13bff47adb0a52efd05e78828d73932d', @@ -7143,6 +7223,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'aeb6af4e6b341950c72079ec20fff64e041564ff3d28ca2da2c592f16245bc56', @@ -7171,6 +7252,7 @@ dataType: 'Map', value: [['6a0a31363239343938323035023737', 0]], }, + tokenSendInfo: false, }, { txid: 'b0a4e83dba5e7fbbd563bde7fba6ffe12a4c177d7983714c3325b6a75b28980d', @@ -7200,6 +7282,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'b150577f2e443eebe6878f143345f3b44d0aedb182af416b90f8e90fefb8328d', @@ -7231,6 +7314,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'beb17b996dfbcea463334fca9f090dd4f5f3d514e5da7e0eedc1e599e6eb81e8', @@ -7265,6 +7349,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'c044e68b45fa2806f5da654ff7026b25b78a92b7cceff39c19612a92af0fb86c', @@ -7293,6 +7378,7 @@ dataType: 'Map', value: [['6a0a31363239343939383336023938', 0]], }, + tokenSendInfo: false, }, { txid: 'c125f4fb2cf67a105eb2a75a4ecb810a7fd1f27a522868cdd27366f9bb7224c6', @@ -7321,6 +7407,7 @@ dataType: 'Map', value: [['6a0a31363239343938363838023739', 0]], }, + tokenSendInfo: false, }, { txid: 'c4a481f1228414ede06e580dfdb7949afea20ca92b30a2e164a0d8519f43b685', @@ -7349,6 +7436,7 @@ dataType: 'Map', value: [['6a0a31363239343937383430023831', 0]], }, + tokenSendInfo: false, }, { txid: 'd1a2187b8ac0a4af195d041d217396c6bdffa4410fc477b4d9c04ca0851456fe', @@ -7377,6 +7465,7 @@ dataType: 'Map', value: [['6a0a31363239353030323430023737', 0]], }, + tokenSendInfo: false, }, { txid: 'd84be37cbc6a429e19e6946aeaca645be5ddb908fa9193e77a097cff4d333a86', @@ -7407,6 +7496,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'da8e9086128365532152a791dc6a647c5e33f0daee39b1cd86d2fce7f0ddb6d9', @@ -7437,6 +7527,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'dadfb51c7b27b6df4c062d0f671c8eada8e88666afa84bac39b504452bc76a2b', @@ -7467,6 +7558,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'dbcea63c91f4b03fb4cbd50c6d187243a4dabe95ea3ed7c99219acb194a4a070', @@ -7495,6 +7587,7 @@ dataType: 'Map', value: [['6a0a31363239353030333939023735', 0]], }, + tokenSendInfo: false, }, { txid: 'dc222e2a8f62441be0781771cdc7aa52a0f27b819cbb082bed7095521b5e5876', @@ -7524,6 +7617,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'dc237a1db441e29593cd423a8e6156084f89b975fcf7c6219bd4399120bc0515', @@ -7552,6 +7646,7 @@ dataType: 'Map', value: [['6a0a31363239343938393435023739', 0]], }, + tokenSendInfo: false, }, { txid: 'de56767590f1f8e5dbef4f9d89eb06e21cc39507e87f821bb12b707912a3d5dd', @@ -7580,6 +7675,7 @@ dataType: 'Map', value: [['6a0a31363239343937333738023732', 0]], }, + tokenSendInfo: false, }, { txid: 'e73ac16df97c2d88db8474da8a10cace811137d719827726488239e38745769e', @@ -7608,6 +7704,7 @@ dataType: 'Map', value: [['6a0a31363239343939363338023931', 0]], }, + tokenSendInfo: false, }, { txid: 'eee95b08153dd77e0666c230c5dcdcd73d0338ea4ca3e228761d6bec21824d0b', @@ -7636,6 +7733,7 @@ dataType: 'Map', value: [['6a0a31363239343939343332023834', 0]], }, + tokenSendInfo: false, }, { txid: 'f0bbf184b8e3ebc8b2e153c157c0acc4535d9af4e4db0f4b9260620884cc94d7', @@ -7661,6 +7759,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'f0ce51a1e1cd309ee9a03b134411604c10659ba576383f97306a53214068bc02', @@ -7698,6 +7797,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'f12c38e8d9748a933db7ea36ec95c72b91b6e46641949ff08c0748743f94e27a', @@ -7721,6 +7821,7 @@ dataType: 'Map', value: [['6a0a31363239353030303232023835', 0]], }, + tokenSendInfo: false, }, { txid: 'f8f937a56055bc876938ada58bd695397b8904217336804670cc64192cf69b03', @@ -7749,6 +7850,7 @@ dataType: 'Map', value: [['6a0a31363239353030343832023732', 0]], }, + tokenSendInfo: false, }, { txid: 'fc251d54c2de4e47a0222150d0964f178ef06a4702a8e25a5d9ab285e005794a', @@ -7774,6 +7876,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'fd8362916275878dcb45127ad8464c51cff592c1ec81fcf57fccc08313be46b8', @@ -7802,48 +7905,57 @@ dataType: 'Map', value: [['6a0a31363239343939313033023735', 0]], }, + tokenSendInfo: false, }, ], + tokenIds: { + dataType: 'Set', + value: [], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [], + }, blockSummaryTgMsgs: [ - '700722 | 97 txs | unknown\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68', + '700722 | 97 txs | unknown\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68', 'no app: 1629497209|76\nno app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte', 'qp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte\nqr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte', 'qqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte\nqpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '700722 | 97 txs | unknown\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68\nno app: 1629497209|76', - 'no app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte\nqp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte', - 'qr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte\nqqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte', - 'qpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', + 'no app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte', + 'qp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte\nqr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte', + 'qqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte\nqpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', ], blockName: 'etokenGenesisTx', }, @@ -11980,6 +12092,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '36', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '086f329794679d9f7968c218157f2999465b49ba946a7180820b7a4d12b75d6b', @@ -12014,6 +12152,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374556200', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '400', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: '0fda4cdb6a83ee85696b95553682a07a903520ba1aa0a73548687851e6e7f030', @@ -12044,6 +12216,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '1122', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '10336f54a76f7020557074b14422dffd24bad211bbf9715684dbea1acc04864b', @@ -12074,6 +12272,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '512', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '114105f8f9c3636faa465e4c8517355b68c49633d47a4a84619689fa92c6950b', @@ -12108,6 +12332,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374555500', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '700', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: '12569fb6dfdf972945b119392e2bbd9e320527ba3ab414160265caa505d11e46', @@ -12133,6 +12391,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '1f7b1bb6b028cefedfe32b56cff88f8c840b250ce1aca1c470f2727935e83d50', @@ -12162,6 +12421,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '2095ebd23a146fbfdd0184efb6c9766a9a5d542fb55a063df3fff1670f1bb273', @@ -12196,6 +12456,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374554000', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '500', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: '21092fb6e223e4549333b0f79a05d84b259e56e1bb5b090b5d463cbe19f1a597', @@ -12221,6 +12515,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '22836e6b6f4861d0b8f18735e6e342981e2edc0c686cdf06da892ab7d7d75512', @@ -12256,6 +12551,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '264a42c30ea9d82bdbf3f8c4d9b7fea006984f96aa9f561f55116684ea21d0f5', @@ -12290,6 +12586,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '949656550', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a91428cabb69be3e20707574d7a0ddc65a801b6ae59988ac', + { + dataType: 'BigNumberReplacer', + value: '200', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: '2881e1d6bed3b16b2c17428ba42610152ac1fbd21e72567f6140c312b2c6ac83', @@ -12320,6 +12650,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '242', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '28f3ec1f134dc8ea2e37a0645774fa2aa19e0bc2871b6edcc7e99cd86d77b1b6', @@ -12353,6 +12709,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '3d83bc3b70bd190d27c17df3585fdb693d852d654ced5c46cfdac76afb889b7f', @@ -12387,6 +12744,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374553000', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '1000', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109', @@ -12423,6 +12814,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '56ccc295c58381980ece3ab43a5510532d9b2e83f2959c15baa07f1aea98748d', @@ -12453,6 +12845,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '657646f7a4e7237fca4ed8231c27d95afc8086f678244d5560be2230d920ff70', @@ -12487,6 +12880,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + { + dataType: 'BigNumberReplacer', + value: '999848', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac', + { + dataType: 'BigNumberReplacer', + value: '17', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + ], + }, + }, }, { txid: '72152010b53b46f74f84477c7c6b86b9fe2f2aeddfe43d49952960bf4f4de69e', @@ -12517,6 +12944,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '66381', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '79c5a1cec698350dd93f645fcae8d6ff3902b7cdc582839dfface3cb0c83d823', @@ -12553,6 +13006,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7d53e2bf385b0dc071d1e64c50e358227a7a6832cc80b6df73d524a98e9a64f9', @@ -12578,6 +13032,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7df5934f7a1ac0d4fa18bff20994199756f2756db9753ac0833f09811be9eaa5', @@ -12617,6 +13072,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '808ec05abe93ab44b24c1fa0d4f1771f392213ecb234c56b79d5267ece96b2a4', @@ -12656,6 +13112,47 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + { + dataType: 'BigNumberReplacer', + value: '18301223', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '15219', + }, + ], + [ + '76a914dee50f576362377dd2f031453c0bb09009acaf8188ac', + { + dataType: 'BigNumberReplacer', + value: '100', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '863417f2dc28b6f9f28fbfae9979294924b0241100bf5e51a807b4c82016c9fd', @@ -12686,6 +13183,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '8970772be0812a5b0e9d47472a7162bb8787d259f111a94b6eefcade547d4845', @@ -12716,6 +13214,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '227', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '8b03983b86dce1b76dfa2cc1254dd169e62723c708f2b57190e93e085550144b', @@ -12746,6 +13270,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '19', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '9ae4769c2378deec3d8be3a036430cface057600e02c3c12afdbc9b7345b82a5', @@ -12776,6 +13326,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '96625', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: '9bcc60b3d8453b42bccb23be5f19ac99a3a637af5df2855b8337bcad17d4f6da', @@ -12810,6 +13386,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + { + dataType: 'BigNumberReplacer', + value: '999846', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac', + { + dataType: 'BigNumberReplacer', + value: '2', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + ], + }, + }, }, { txid: '9df6bc46650bce722aa2e3e06413d461441355aeb49e9cc4e0da8d0420ae8f03', @@ -12840,6 +13450,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '471', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: 'ac65e147971fbe61e65113b8d68fa176809220199682d2a7e46a74296e092881', @@ -12865,6 +13501,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'b6f643aa5a5b26bab1a51d904b23c0799f384c469cd2dd5f27bc90754664d730', @@ -12899,6 +13536,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374554500', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '300', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: 'c5dd423b784236e30bf149391ffebb83654b77e6d246fa1944c066e553fcf03a', @@ -12924,6 +13595,7 @@ dataType: 'Map', value: [], }, + tokenSendInfo: false, }, { txid: 'c88eb6c181c8879707f8d950e8e06dd6158d7440ae0424e2ea0f9ed5c54c9985', @@ -12954,6 +13626,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '10000', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: 'cdae3b8be1552792d7045193effa6b51646456aadca52f16bd81726cbc2f387f', @@ -12988,6 +13686,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '9879374554800', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914e1d5310eebf49c6a04360385d943bc74d541502088ac', + { + dataType: 'BigNumberReplacer', + value: '700', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: 'dec19c8c1bc7bf6b6ffc8cd629da642618cb3e3025f72d9f3d4c1905e4f2abd9', @@ -13022,6 +13754,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + 'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + { + dataType: 'BigNumberReplacer', + value: '8989', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac', + { + dataType: 'BigNumberReplacer', + value: '11', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + ], + }, + }, }, { txid: 'df12658b2361a33c3a772398ad1f76000c865754e8b2a9423bca0fb1908b4e8b', @@ -13052,6 +13818,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'e2b11003706e934b68c563db37d2f6b4cf435ce43cdb6c77e68c93be36616c60', @@ -13082,6 +13849,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '167', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: 'ec659dfb1c2ea784fd3d4ec6616f738293a5be631c0f7d09258558e64b49d9e6', @@ -13116,6 +13909,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'ed1d839b287abb65b838622d9acf64b399b1653bcf6bea503442bcaef81890c4', @@ -13150,6 +13944,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + { + dataType: 'BigNumberReplacer', + value: '949656450', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a91428cabb69be3e20707574d7a0ddc65a801b6ae59988ac', + { + dataType: 'BigNumberReplacer', + value: '100', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a914d94bba6bfd2f5d9036452d9b6b12a254df6aab3188ac', + ], + }, + }, }, { txid: 'ef0b6ebc21f83013144cf95f527218a616add4e7238ded9aa68a3d30cdeb8702', @@ -13187,6 +14015,46 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '53902', + }, + ], + [ + '76a91445d12108b291141bcb09aa6cc2caa1254d20128488ac', + { + dataType: 'BigNumberReplacer', + value: '1999', + }, + ], + [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + { + dataType: 'BigNumberReplacer', + value: '499', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + 'a91454594a4a445be66bfd95f9c90ee7aec7f5cb4ef587', + ], + }, + }, }, { txid: 'f449be6418db7e2216903aaba545302c9c71f1e958cddde6eea2517719d8e6db', @@ -13217,6 +14085,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '101', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, { txid: 'fd7e9edf78e9ae34c287cb15977a5b3007d70ad016d532b071e0e96578204c08', @@ -13256,6 +14150,47 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '164488', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914dee50f576362377dd2f031453c0bb09009acaf8188ac', + { + dataType: 'BigNumberReplacer', + value: '3600', + }, + ], + [ + 'a91454594a4a445be66bfd95f9c90ee7aec7f5cb4ef587', + { + dataType: 'BigNumberReplacer', + value: '56400', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + ], + }, + }, }, { txid: 'fe12b212d65d373a6a57451f4d03ecf3c35a8964025572c02d424890b908da37', @@ -13286,42 +14221,134 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + { + dataType: 'BigNumberReplacer', + value: '8878', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac', + ], + }, + }, }, ], + tokenIds: { + dataType: 'Set', + value: [ + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + '4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875', + 'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc', + ], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [ + [ + '2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a', + { + tokenTicker: 'tst', + tokenName: 'test', + tokenDocumentUrl: 'https://cashtab.com/', + tokenDocumentHash: '', + decimals: 2, + }, + ], + [ + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + { + tokenTicker: 'GRP', + tokenName: 'GRUMPY', + tokenDocumentUrl: 'https://bit.ly/GrumpyDoc', + tokenDocumentHash: '', + decimals: 2, + }, + ], + [ + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + { + tokenTicker: 'BUX', + tokenName: 'Badger Universal Token', + tokenDocumentUrl: 'https://bux.digital', + tokenDocumentHash: '', + decimals: 4, + }, + ], + [ + '4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875', + { + tokenTicker: 'LVV', + tokenName: 'Lambda Variant Variants', + tokenDocumentUrl: 'https://cashtabapp.com/', + tokenDocumentHash: '', + decimals: 0, + }, + ], + [ + 'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc', + { + tokenTicker: 'CTD', + tokenName: 'Cashtab Dark', + tokenDocumentUrl: 'https://cashtab.com/', + tokenDocumentHash: '', + decimals: 0, + }, + ], + ], + }, blockSummaryTgMsgs: [ - '782665 | 43 txs | ViaBTC\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\n2 new eTokens created:\nBearNip (BEAR) [doc]\neCash Herald (TRIB) [doc]\n\nApp txs:\nmemo: Reply to memo|�V��iM�j�t[P\u001c\u000e����J\u0018_�z7�\b�k\u0005u\n|From what I\'m gathering, it seems that the media went from questioning authority to doing their bidding as a collective NPC hivemind!\nAlias: 12345\n\n38 eCash txs:\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqzx...efz sent 999,998 XEC to qq6...f27 | 1.08 sats per byte\nqqc...c8e sent 18,698,998 XEC to qz4...n9l and 1 others | 1.03 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqqj...9g4 sent 936 XEC to qpw...x5g | 2.38 sats per byte\nqqh...lpy sent 29,022,106 XEC to qqu...0av and 1 others | 10.05 sats per byte\nqrv...ffd sent 5 XEC to qq5...fn0 | 2.36 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqrx...4nm sent 1,000 XEC to qz9...jhz | 1.00 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqpl...4l0 sent 984,178 XEC to qpu...4d7 | 1.44 sats per byte\nqpt...2wg sent 23,656,838 XEC to qz6...74j and 2 others | 10.05 sats per byte', - 'qq6...eq7 sent 11 XEC to qpx...kvj and 1 others | 1.47 sats per byte\nqq3...x4u sent 807,228 XEC to qrh...pdm | 1.00 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqz9...m57 sent 950 XEC to qqj...9g4 | 2.16 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\n1 address sent 237.57 XEC to itself\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.36 sats per byte\nqpy...6yp sent 2,000 XEC to qqn...678 | 2.02 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qq5...fn0 | 2.37 sats per byte\npp2...mza sent 16 XEC to qpx...kvj and 2 others | 1.01 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqpx...kvj sent 32 XEC to qr0...d2u and 1 others | 2.03 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte', + '782665 | 43 txs | ViaBTC\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\n2 new eTokens created:\nBearNip (BEAR) [doc]\neCash Herald (TRIB) [doc]\n\n27 eToken send txs\nqq6...eq7 sent 0.0036 BUX to qpx...kvj\nqrv...ffd sent 4 tst to qrs...6k9\nqq6...eq7 sent 0.1122 BUX to qpx...kvj\nqq6...eq7 sent 0.0512 BUX to qpx...kvj\nqrv...ffd sent 7 tst to qrs...6k9\nqrv...ffd sent 5 tst to qrs...6k9\nqrv...ffd sent 2 GRP to qq5...fn0\nqq6...eq7 sent 0.0242 BUX to qpx...kvj\nqrv...ffd sent 10 tst to qrs...6k9\nqz2...035 sent 17 LVV to qp8...gg6\nqq6...eq7 sent 6.6381 BUX to qpx...kvj\nqq6...eq7 sent 1.5319 BUX to qpx...kvj and 1 others\nqq6...eq7 sent 0.0227 BUX to qpx...kvj\nqq6...eq7 sent 0.0019 BUX to qpx...kvj', + 'qq6...eq7 sent 9.6625 BUX to qpx...kvj\nqz2...035 sent 2 LVV to qp8...gg6\nqq6...eq7 sent 0.0471 BUX to qpx...kvj\nqrv...ffd sent 3 tst to qrs...6k9\nqq6...eq7 sent 1 BUX to qpx...kvj\nqrv...ffd sent 7 tst to qrs...6k9\nqz2...035 sent 11 CTD to qp8...gg6\nqq6...eq7 sent 0.0167 BUX to qpx...kvj\nqrv...ffd sent 1 GRP to qq5...fn0\npp2...mza sent 5.64 BUX to qpx...kvj and 2 others\nqq6...eq7 sent 0.0101 BUX to qpx...kvj\nqpx...kvj sent 6 BUX to qr0...d2u and 1 others\nqq6...eq7 sent 0.8878 BUX to qpx...kvj\n\nApp txs:\nmemo: Reply to memo|�V��iM�j�t[P\u001c\u000e����J\u0018_�z7�\b�k\u0005u\n|From what I\'m gathering, it seems that the media went from questioning authority to doing their bidding as a collective NPC hivemind!\nAlias: 12345\n\n11 eCash txs:\nqzx...efz sent 999,998 XEC to qq6...f27 | 1.08 sats per byte\nqqc...c8e sent 18,698,998 XEC to qz4...n9l and 1 others | 1.03 sats per byte', + 'qqj...9g4 sent 936 XEC to qpw...x5g | 2.38 sats per byte\nqqh...lpy sent 29,022,106 XEC to qqu...0av and 1 others | 10.05 sats per byte\nqrx...4nm sent 1,000 XEC to qz9...jhz | 1.00 sats per byte\nqpl...4l0 sent 984,178 XEC to qpu...4d7 | 1.44 sats per byte\nqpt...2wg sent 23,656,838 XEC to qz6...74j and 2 others | 10.05 sats per byte\nqq3...x4u sent 807,228 XEC to qrh...pdm | 1.00 sats per byte\nqz9...m57 sent 950 XEC to qqj...9g4 | 2.16 sats per byte\n1 address sent 237.57 XEC to itself\nqpy...6yp sent 2,000 XEC to qqn...678 | 2.02 sats per byte', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '782665 | 43 txs | ViaBTC\n\n2 new eTokens created:\nBearNip (BEAR) [doc]\neCash Herald (TRIB) [doc]\n\nApp txs:\nmemo: Reply to memo|�V��iM�j�t[P\u001c\u000e����J\u0018_�z7�\b�k\u0005u\n|From what I\'m gathering, it seems that the media went from questioning authority to doing their bidding as a collective NPC hivemind!\nAlias: 12345\n\n38 eCash txs:\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqzx...efz sent 999,998 XEC to qq6...f27 | 1.08 sats per byte\nqqc...c8e sent 18,698,998 XEC to qz4...n9l and 1 others | 1.03 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqqj...9g4 sent 936 XEC to qpw...x5g | 2.38 sats per byte\nqqh...lpy sent 29,022,106 XEC to qqu...0av and 1 others | 10.05 sats per byte\nqrv...ffd sent 5 XEC to qq5...fn0 | 2.36 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqrx...4nm sent 1,000 XEC to qz9...jhz | 1.00 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqpl...4l0 sent 984,178 XEC to qpu...4d7 | 1.44 sats per byte\nqpt...2wg sent 23,656,838 XEC to qz6...74j and 2 others | 10.05 sats per byte', 'qq6...eq7 sent 11 XEC to qpx...kvj and 1 others | 1.47 sats per byte\nqq3...x4u sent 807,228 XEC to qrh...pdm | 1.00 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqz9...m57 sent 950 XEC to qqj...9g4 | 2.16 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\n1 address sent 237.57 XEC to itself\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qrs...6k9 | 2.37 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.36 sats per byte\nqpy...6yp sent 2,000 XEC to qqn...678 | 2.02 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqrv...ffd sent 5 XEC to qq5...fn0 | 2.37 sats per byte\npp2...mza sent 16 XEC to qpx...kvj and 2 others | 1.01 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte\nqpx...kvj sent 32 XEC to qr0...d2u and 1 others | 2.03 sats per byte\nqq6...eq7 sent 5 XEC to qpx...kvj | 2.56 sats per byte', ], @@ -13772,6 +14799,32 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a9146d69b5cbe7c85d87628473c43620c0daa9a8102988ac', + { + dataType: 'BigNumberReplacer', + value: '3566918', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a9146d69b5cbe7c85d87628473c43620c0daa9a8102988ac', + ], + }, + }, }, { txid: '25345b0bf921a2a9080c647768ba440bbe84499f4c7773fba8a1b03e88ae7fe7', @@ -13806,6 +14859,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a9141c13ddb8dd422bbe02dc2ae8798b4549a67a3c1d88ac', + { + dataType: 'BigNumberReplacer', + value: '33943689000', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914dadf34cde9c774fdd6340cd2916a9b9c5d57cf4388ac', + { + dataType: 'BigNumberReplacer', + value: '500000000', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a9141c13ddb8dd422bbe02dc2ae8798b4549a67a3c1d88ac', + ], + }, + }, }, { txid: '34cf0f2a51b80dc4c48c8dae9017af6282298f275c7823cb70d3f5b05785456c', @@ -13837,6 +14924,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'ea54f221be5c17dafc852f581f0e20dea0e72d7f0b3c691b4333fc1577bf0724', @@ -13862,41 +14950,74 @@ ], ], }, + tokenSendInfo: false, }, ], + tokenIds: { + dataType: 'Set', + value: [ + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + ], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [ + [ + 'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa', + { + tokenTicker: 'GRP', + tokenName: 'GRUMPY', + tokenDocumentUrl: 'https://bit.ly/GrumpyDoc', + tokenDocumentHash: '', + decimals: 2, + }, + ], + [ + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + { + tokenTicker: 'BUX', + tokenName: 'Badger Universal Token', + tokenDocumentUrl: 'https://bux.digital', + tokenDocumentHash: '', + decimals: 4, + }, + ], + ], + }, blockSummaryTgMsgs: [ - '782571 | 5 txs | ViaBTC\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\n4 eCash txs:\n1 address sent 10.92 XEC to itself\nqqw...6v4 sent 5 XEC to qrd...9j0 | 2.37 sats per byte\nqpk...pga sent 1,061,524 XEC to qrt...4v7 | 1.10 sats per byte\n1 address sent 0 XEC to itself', + '782571 | 5 txs | ViaBTC\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\n2 eToken send txs\n1 address sent 356.6918 BUX to itself\nqqw...6v4 sent 5000000 GRP to qrd...9j0\n\n2 eCash txs:\nqpk...pga sent 1,061,524 XEC to qrt...4v7 | 1.10 sats per byte\n1 address sent 0 XEC to itself', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '782571 | 5 txs | ViaBTC\n\n4 eCash txs:\n1 address sent 10.92 XEC to itself\nqqw...6v4 sent 5 XEC to qrd...9j0 | 2.37 sats per byte\nqpk...pga sent 1,061,524 XEC to qrt...4v7 | 1.10 sats per byte\n1 address sent 0 XEC to itself', ], blockName: 'buxTxs', @@ -14754,6 +15875,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '36902d988d7e309c2131e59a1256dd950443155aa9f6929d24055971d0b105b5', @@ -14784,6 +15906,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '3d90c355be7e3aeb18d5885109a167fd2c8446ec657865ffba6577a81243f71b', @@ -14813,6 +15936,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '97f3ebde1a5753b6772128d69a081fd514322fac0ab63303b9f22b0079a5aac8', @@ -14842,6 +15966,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '9c1bfad01aad003052441327081622df4f1430454d9e4072c8ebddd7d13cc13b', @@ -14871,6 +15996,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'cd9cf4bf000b413c49d45aad382716c98d4ca2a39bc0db825bd80192962dc05d', @@ -14904,6 +16030,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'da98b479e957e34b462025e483644c13c0a6924f04a31ab6473fe5c23babc5fa', @@ -14941,6 +16068,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'ea0a799f0e3bab448064925b3ccdb6e8ff3ef07105c6739f6eec0a4aa674e1f3', @@ -14983,6 +16111,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'ec584ba3c1734a422c16ec40d598fe91f870c8d17c5f9d2b6c4e1cbaf82f7237', @@ -15015,41 +16144,50 @@ ], ], }, + tokenSendInfo: false, }, ], + tokenIds: { + dataType: 'Set', + value: [], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [], + }, blockSummaryTgMsgs: [ - '782657 | 10 txs | ViaBTC\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\nApp txs:\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL|110.00000000000001|\u0000|�Ϩ�O���+�u������Y�(���\u000e<D=�ήX|\u0001|\u0000|2747\nCashtab Msg: Sending a message transaction to test parsing in ecash telegram bot. With an emoji bc why not? 🤔\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL\n\n6 eCash txs:\nqzr...tfg sent 4,681,584 XEC to qqt...2qc and 1 others | 1.00 sats per byte\nqp9...jlg sent 2,993,000 XEC to qr5...taj | 4.18 sats per byte\nqpw...ms5 sent 2,843,535 XEC to qpw...f2s and 1 others | 1.91 sats per byte\nqp0...c3a sent 67,528,995 XEC to qph...tg5 and 1 others | 1.00 sats per byte\nqrn...54p sent 10,255 XEC to qqs...tsk and 1 others | 1.00 sats per byte\nqzt...zwy sent 18,832,831 XEC to qrv...rm2 | 1.00 sats per byte', + '782657 | 10 txs | ViaBTC\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\nApp txs:\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL|110.00000000000001|\u0000|�Ϩ�O���+�u������Y�(���\u000e<D=�ήX|\u0001|\u0000|2747\nCashtab Msg: Sending a message transaction to test parsing in ecash telegram bot. With an emoji bc why not? 🤔\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL\n\n6 eCash txs:\nqzr...tfg sent 4,681,584 XEC to qqt...2qc and 1 others | 1.00 sats per byte\nqp9...jlg sent 2,993,000 XEC to qr5...taj | 4.18 sats per byte\nqpw...ms5 sent 2,843,535 XEC to qpw...f2s and 1 others | 1.91 sats per byte\nqp0...c3a sent 67,528,995 XEC to qph...tg5 and 1 others | 1.00 sats per byte\nqrn...54p sent 10,255 XEC to qqs...tsk and 1 others | 1.00 sats per byte\nqzt...zwy sent 18,832,831 XEC to qrv...rm2 | 1.00 sats per byte', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '782657 | 10 txs | ViaBTC\n\nApp txs:\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL|110.00000000000001|\u0000|�Ϩ�O���+�u������Y�(���\u000e<D=�ήX|\u0001|\u0000|2747\nCashtab Msg: Sending a message transaction to test parsing in ecash telegram bot. With an emoji bc why not? 🤔\nunknown app: SWP\u0000|\u0001|\u0001|���]�𷕪��7���؉�v��\u0018�\u001b�֯�\u001d��|SELL\n\n6 eCash txs:\nqzr...tfg sent 4,681,584 XEC to qqt...2qc and 1 others | 1.00 sats per byte\nqp9...jlg sent 2,993,000 XEC to qr5...taj | 4.18 sats per byte\nqpw...ms5 sent 2,843,535 XEC to qpw...f2s and 1 others | 1.91 sats per byte\nqp0...c3a sent 67,528,995 XEC to qph...tg5 and 1 others | 1.00 sats per byte\nqrn...54p sent 10,255 XEC to qqs...tsk and 1 others | 1.00 sats per byte\nqzt...zwy sent 18,832,831 XEC to qrv...rm2 | 1.00 sats per byte', ], blockName: 'cashtabMsg', @@ -16676,6 +17814,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '0d07e0722247e4df90213755a5a90b2d1155499c98ae37062462715d45dee835', @@ -16710,6 +17849,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a9141969d9250b61a67c45fe6c392ce8d5ee657e5c7988ac', + { + dataType: 'BigNumberReplacer', + value: '409', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a91454b92693bd9379068c033c5f98790ef89526bb2f88ac', + { + dataType: 'BigNumberReplacer', + value: '6000', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a9141969d9250b61a67c45fe6c392ce8d5ee657e5c7988ac', + ], + }, + }, }, { txid: '3e486edda471d69d1a55c9a4006f3c0ba39ff452dcb06a6d85b6cc97c5703a07', @@ -16735,6 +17908,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '425deba1bef907163aa546aca36d4bd6c0e2c1a6944fde23b2f0503a5a88cabe', @@ -16772,6 +17946,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '564f79a4fd7c798ca5d4460899e0bae06ad84055ec5693885142346fa80aa841', @@ -16797,6 +17972,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '649123ec1b2357baa4588581a83aa6aa3da7825f9d736d93f77752caa156fd26', @@ -16834,6 +18010,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '804e4cb47961434546c951c718351b3c33b1e4ddfbde3a262d7a191b2b6a8c60', @@ -16864,6 +18041,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '86f2bc22c9d2e9545335dc759cb3274a37ab64d83eb26bc19d7938b1f08c952a', @@ -16898,6 +18076,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + '036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a9141069c0f04b4ca8693344e6ff778f34a6e05724ac88ac', + { + dataType: 'BigNumberReplacer', + value: '335', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a91454b92693bd9379068c033c5f98790ef89526bb2f88ac', + { + dataType: 'BigNumberReplacer', + value: '6000', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a9141069c0f04b4ca8693344e6ff778f34a6e05724ac88ac', + ], + }, + }, }, { txid: '8728cc3ee8c2e6eb584f4f97bd7b4692476f418767d6815721b9806ca0c6b219', @@ -16923,6 +18135,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '9e89a1e464c13a10e2a0a693ac111d4f054daac13d6c22a8592c73063c93143b', @@ -16952,6 +18165,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'a51b843c19bde5b37f1199564f6a0ff705690ee300a228a6dd8f65fd9a876eb0', @@ -16981,6 +18195,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'adb8f5232d92e94a8f0abb2321ff91175afc66b090bc7de40a337cc13759d637', @@ -17048,6 +18263,96 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91410c6a5beca4acfe75eba5762efb22507d560790588ac', + { + dataType: 'BigNumberReplacer', + value: '10594', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914640de2abeaace5867f163e139d05ce9c1394ded488ac', + { + dataType: 'BigNumberReplacer', + value: '4424', + }, + ], + [ + '76a914145dcfd9d0fd303f747f189577aeeafa40c3d3ce88ac', + { + dataType: 'BigNumberReplacer', + value: '22', + }, + ], + [ + '76a9141fd95bf62f6f19dfd496f09b32cf5582debb83b488ac', + { + dataType: 'BigNumberReplacer', + value: '31', + }, + ], + [ + '76a91494a8643a988a18125eba629737fdcdc8a1de56f288ac', + { + dataType: 'BigNumberReplacer', + value: '31', + }, + ], + [ + '76a914b91b48680a1536c19fde25cdd0d122d61da8abe888ac', + { + dataType: 'BigNumberReplacer', + value: '63', + }, + ], + [ + '76a914d6c4ec6ec1b1711fe66eb771ef33e8801bb4f7b888ac', + { + dataType: 'BigNumberReplacer', + value: '8', + }, + ], + [ + '76a9141beee7879f4cb427e99558199b116a2f7238e57e88ac', + { + dataType: 'BigNumberReplacer', + value: '16', + }, + ], + [ + '76a914be621b1aa458f726583cea23c4af515a846f05b288ac', + { + dataType: 'BigNumberReplacer', + value: '8', + }, + ], + [ + '76a914ae789c93c904055b1ad88b1c645645d9f045178588ac', + { + dataType: 'BigNumberReplacer', + value: '100', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91410c6a5beca4acfe75eba5762efb22507d560790588ac', + ], + }, + }, }, { txid: 'de484cdc438bd2e4773d2a50ab951928b5c22a25f04093e57350c19d68a573d9', @@ -17077,6 +18382,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'dfa431134fdd2569afce9e7ec873ef6231dc13d89c530d6608061f22d5a94281', @@ -17113,6 +18419,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'f13a8d2897f75c30657dc736f51afc4835dd4639c084ef52d2809955b458591b', @@ -17180,6 +18487,96 @@ ], ], }, + tokenSendInfo: { + tokenId: + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91410c6a5beca4acfe75eba5762efb22507d560790588ac', + { + dataType: 'BigNumberReplacer', + value: '15297', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a914640de2abeaace5867f163e139d05ce9c1394ded488ac', + { + dataType: 'BigNumberReplacer', + value: '4424', + }, + ], + [ + '76a914145dcfd9d0fd303f747f189577aeeafa40c3d3ce88ac', + { + dataType: 'BigNumberReplacer', + value: '22', + }, + ], + [ + '76a9141fd95bf62f6f19dfd496f09b32cf5582debb83b488ac', + { + dataType: 'BigNumberReplacer', + value: '31', + }, + ], + [ + '76a91494a8643a988a18125eba629737fdcdc8a1de56f288ac', + { + dataType: 'BigNumberReplacer', + value: '31', + }, + ], + [ + '76a914b91b48680a1536c19fde25cdd0d122d61da8abe888ac', + { + dataType: 'BigNumberReplacer', + value: '63', + }, + ], + [ + '76a914d6c4ec6ec1b1711fe66eb771ef33e8801bb4f7b888ac', + { + dataType: 'BigNumberReplacer', + value: '8', + }, + ], + [ + '76a9141beee7879f4cb427e99558199b116a2f7238e57e88ac', + { + dataType: 'BigNumberReplacer', + value: '16', + }, + ], + [ + '76a914be621b1aa458f726583cea23c4af515a846f05b288ac', + { + dataType: 'BigNumberReplacer', + value: '8', + }, + ], + [ + '76a914ae789c93c904055b1ad88b1c645645d9f045178588ac', + { + dataType: 'BigNumberReplacer', + value: '100', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91410c6a5beca4acfe75eba5762efb22507d560790588ac', + ], + }, + }, }, { txid: 'fb913d9c9abe7ba7c1c33fd5afb2ba048e41b75719ec607b8939e439e9e5173f', @@ -17205,41 +18602,74 @@ ], ], }, + tokenSendInfo: false, }, ], + tokenIds: { + dataType: 'Set', + value: [ + '036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5', + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + ], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [ + [ + '036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5', + { + tokenTicker: 'eLPS', + tokenName: 'eLPS Token', + tokenDocumentUrl: 'elpstoken.com', + tokenDocumentHash: '', + decimals: 2, + }, + ], + [ + '7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5', + { + tokenTicker: 'BUX', + tokenName: 'Badger Universal Token', + tokenDocumentUrl: 'https://bux.digital', + tokenDocumentHash: '', + decimals: 4, + }, + ], + ], + }, blockSummaryTgMsgs: [ - '782785 | 17 txs | Mining-Dutch\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\n1 new eToken created:\n<><><> (&&&) [doc]\n\nApp txs:\nCashtab Msg: Testing a normal message but give it some <i> spice </i> because <b>why not</b>?<a href="https://cashtab.com/">Cashtab link test</a>\nCashtab Msg: <b>Try to hack the format</b> ${true && <i>yes</i>}\n\n13 eCash txs:\nqq3...x4u sent 256,510 XEC to qp3...scq | 1.00 sats per byte\nqqv...wwc sent 5 XEC to qp2...dce | 1.07 sats per byte\nqzx...vth sent 10,039 XEC to qza...e7g | 5.01 sats per byte\nqp3...f6c sent 20,294 XEC to qza...e7g | 5.01 sats per byte\nqr7...wlz sent 223,965 XEC to qqr...8y8 and 1 others | 1.00 sats per byte\nqqg...q4a sent 5 XEC to qp2...dce | 1.07 sats per byte\nqp3...scq sent 256,506 XEC to qpu...ez7 | 2.38 sats per byte\nqpw...ms5 sent 849,061 XEC to qz8...y4c and 1 others | 1.90 sats per byte\nqrm...f33 sent 17,099,643 XEC to qrx...y9d and 1 others | 2.44 sats per byte\nqqg...v4e sent 49 XEC to qpj...yv6 and 8 others | 1.20 sats per byte\nqrh...6em sent 3,125,893 XEC to qz8...tu7 and 1 others | 2.01 sats per byte\nqqg...v4e sent 49 XEC to qpj...yv6 and 8 others | 1.20 sats per byte\nqpu...ez7 sent 256,501 XEC to qp0...upp | 2.38 sats per byte', + '782785 | 17 txs | Mining-Dutch\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\n1 new eToken created:\n<><><> (&&&) [doc]\n\n4 eToken send txs\nqqv...wwc sent 60 eLPS to qp2...dce\nqqg...q4a sent 60 eLPS to qp2...dce\nqqg...v4e sent 0.4703 BUX to qpj...yv6 and 8 others\nqqg...v4e sent 0.4703 BUX to qpj...yv6 and 8 others\n\nApp txs:\nCashtab Msg: Testing a normal message but give it some <i> spice </i> because <b>why not</b>?<a href="https://cashtab.com/">Cashtab link test</a>\nCashtab Msg: <b>Try to hack the format</b> ${true && <i>yes</i>}\n\n9 eCash txs:\nqq3...x4u sent 256,510 XEC to qp3...scq | 1.00 sats per byte\nqzx...vth sent 10,039 XEC to qza...e7g | 5.01 sats per byte\nqp3...f6c sent 20,294 XEC to qza...e7g | 5.01 sats per byte\nqr7...wlz sent 223,965 XEC to qqr...8y8 and 1 others | 1.00 sats per byte\nqp3...scq sent 256,506 XEC to qpu...ez7 | 2.38 sats per byte\nqpw...ms5 sent 849,061 XEC to qz8...y4c and 1 others | 1.90 sats per byte\nqrm...f33 sent 17,099,643 XEC to qrx...y9d and 1 others | 2.44 sats per byte\nqrh...6em sent 3,125,893 XEC to qz8...tu7 and 1 others | 2.01 sats per byte\nqpu...ez7 sent 256,501 XEC to qp0...upp | 2.38 sats per byte', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '782785 | 17 txs | Mining-Dutch\n\n1 new eToken created:\n<><><> (&&&) [doc]\n\nApp txs:\nCashtab Msg: Testing a normal message but give it some <i> spice </i> because <b>why not</b>?<a href="https://cashtab.com/">Cashtab link test</a>\nCashtab Msg: <b>Try to hack the format</b> ${true && <i>yes</i>}\n\n13 eCash txs:\nqq3...x4u sent 256,510 XEC to qp3...scq | 1.00 sats per byte\nqqv...wwc sent 5 XEC to qp2...dce | 1.07 sats per byte\nqzx...vth sent 10,039 XEC to qza...e7g | 5.01 sats per byte\nqp3...f6c sent 20,294 XEC to qza...e7g | 5.01 sats per byte\nqr7...wlz sent 223,965 XEC to qqr...8y8 and 1 others | 1.00 sats per byte\nqqg...q4a sent 5 XEC to qp2...dce | 1.07 sats per byte\nqp3...scq sent 256,506 XEC to qpu...ez7 | 2.38 sats per byte\nqpw...ms5 sent 849,061 XEC to qz8...y4c and 1 others | 1.90 sats per byte\nqrm...f33 sent 17,099,643 XEC to qrx...y9d and 1 others | 2.44 sats per byte\nqqg...v4e sent 49 XEC to qpj...yv6 and 8 others | 1.20 sats per byte\nqrh...6em sent 3,125,893 XEC to qz8...tu7 and 1 others | 2.01 sats per byte\nqqg...v4e sent 49 XEC to qpj...yv6 and 8 others | 1.20 sats per byte\nqpu...ez7 sent 256,501 XEC to qp0...upp | 2.38 sats per byte', ], blockName: 'htmlEscapeTest', @@ -18019,6 +19449,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '4d6845d856e34b03ef6830313c4cc75f80daee491eee7b8d55f32cdb8c2b72e6', @@ -18044,6 +19475,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: '7b0802223d4376f3bca1a76c9a2deab0c18c2fc5f070d4adb65abdb18d328f08', @@ -18074,6 +19506,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'a2f704933049b5c5a712a9943ac2e264fbeb1354cd5f2187e31eb68a8f38aa72', @@ -18111,6 +19544,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'ac4e0acbe7f0e0e25ef3366e2d066ebaa543c0fe8721e998d4cab03fbeb8a5a9', @@ -18136,6 +19570,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'b4fee092558400fa905336da8c0465e6be857bb6fad758825a20e90a6a12c323', @@ -18161,6 +19596,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'c04ae7f139eb16023a70d1bb39b1ae8745667edb09833e994a5b4d48976a111d', @@ -18195,6 +19631,40 @@ ], ], }, + tokenSendInfo: { + tokenId: + 'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7', + tokenChangeOutputs: { + dataType: 'Map', + value: [ + [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + { + dataType: 'BigNumberReplacer', + value: '3', + }, + ], + ], + }, + tokenReceivingOutputs: { + dataType: 'Map', + value: [ + [ + '76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac', + { + dataType: 'BigNumberReplacer', + value: '2', + }, + ], + ], + }, + tokenSendingOutputScripts: { + dataType: 'Set', + value: [ + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + ], + }, + }, }, { txid: 'c7bfee6cb99bfd021e3d6f38f08391d111463a2872d50b6bc3c5351015707adc', @@ -18220,6 +19690,7 @@ ], ], }, + tokenSendInfo: false, }, { txid: 'd9915ae3c4a7ec176746d3902295c1d2cf8912db589289842c14803a67cfc9d1', @@ -18257,41 +19728,63 @@ ], ], }, + tokenSendInfo: false, }, ], + tokenIds: { + dataType: 'Set', + value: [ + 'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7', + ], + }, }, coingeckoResponse: { bitcoin: { - usd: 28546.41121148, + usd: 29044.28917291, }, ecash: { - usd: 0.00002876, + usd: 0.00002915, }, ethereum: { - usd: 1861.31220549, + usd: 1904.45164636, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002876, + price: 0.00002915, ticker: 'XEC', }, { fiat: 'usd', - price: 28546.41121148, + price: 29044.28917291, ticker: 'BTC', }, { fiat: 'usd', - price: 1861.31220549, + price: 1904.45164636, ticker: 'ETH', }, ], + tokenInfoMap: { + dataType: 'Map', + value: [ + [ + 'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7', + { + tokenTicker: 'SRM', + tokenName: 'Server Redundancy Mint', + tokenDocumentUrl: 'https://cashtab.com/', + tokenDocumentHash: '', + decimals: 0, + }, + ], + ], + }, blockSummaryTgMsgs: [ - '782774 | 10 txs | ViaBTC\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861\n\nApp txs:\nCashtab Msg: Why not another one, this time with emojis 🤔\nCashtab Msg: Can\'t believe already need to test again\nCashtab Msg: Another Cashtab message to the TG bot. Making it longer to see if spacing is a problem. Is spacing a problem? Is parsing a problem? Who can tell. We will only know after this message appears (or doesn\'t). \n\n6 eCash txs:\nqrw...re7 sent 21 XEC to qza...e7g | 5.00 sats per byte\nqp4...v8x sent 4,568,709 XEC to pqg...tlg and 1 others | 2.02 sats per byte\nqq5...ck4 sent 10,280 XEC to qza...e7g | 5.01 sats per byte\nqzj...u85 sent 29 XEC to qza...e7g | 5.02 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqrk...wcf sent 8,220 XEC to qza...e7g | 5.01 sats per byte', + '782774 | 10 txs | ViaBTC\n1 XEC = $0.00002915\n1 BTC = $29,044\n1 ETH = $1,904\n\n1 eToken send tx\nqz2...035 sent 2 SRM to qp8...gg6\n\nApp txs:\nCashtab Msg: Why not another one, this time with emojis 🤔\nCashtab Msg: Can\'t believe already need to test again\nCashtab Msg: Another Cashtab message to the TG bot. Making it longer to see if spacing is a problem. Is spacing a problem? Is parsing a problem? Who can tell. We will only know after this message appears (or doesn\'t). \n\n5 eCash txs:\nqrw...re7 sent 21 XEC to qza...e7g | 5.00 sats per byte\nqp4...v8x sent 4,568,709 XEC to pqg...tlg and 1 others | 2.02 sats per byte\nqq5...ck4 sent 10,280 XEC to qza...e7g | 5.01 sats per byte\nqzj...u85 sent 29 XEC to qza...e7g | 5.02 sats per byte\nqrk...wcf sent 8,220 XEC to qza...e7g | 5.01 sats per byte', ], - blockSummaryTgMsgsPriceFailure: [ + blockSummaryTgMsgsApiFailure: [ '782774 | 10 txs | ViaBTC\n\nApp txs:\nCashtab Msg: Why not another one, this time with emojis 🤔\nCashtab Msg: Can\'t believe already need to test again\nCashtab Msg: Another Cashtab message to the TG bot. Making it longer to see if spacing is a problem. Is spacing a problem? Is parsing a problem? Who can tell. We will only know after this message appears (or doesn\'t). \n\n6 eCash txs:\nqrw...re7 sent 21 XEC to qza...e7g | 5.00 sats per byte\nqp4...v8x sent 4,568,709 XEC to pqg...tlg and 1 others | 2.02 sats per byte\nqq5...ck4 sent 10,280 XEC to qza...e7g | 5.01 sats per byte\nqzj...u85 sent 29 XEC to qza...e7g | 5.02 sats per byte\nqz2...035 sent 5 XEC to qp8...gg6 | 2.37 sats per byte\nqrk...wcf sent 8,220 XEC to qza...e7g | 5.01 sats per byte', ], blockName: 'cashtabMsgMulti', diff --git a/apps/ecash-herald/test/mocks/chronikMock.js b/apps/ecash-herald/test/mocks/chronikMock.js --- a/apps/ecash-herald/test/mocks/chronikMock.js +++ b/apps/ecash-herald/test/mocks/chronikMock.js @@ -22,6 +22,7 @@ self.mockedResponses = { block: {}, txHistory: [], + tx: {}, }; self.mockedMethods = { p2pkh: {}, p2sh: {} }; @@ -30,6 +31,15 @@ self.block = function (blockHashOrHeight) { return self.mockedResponses.block[blockHashOrHeight]; }; + // Return assigned tx mocks + self.tx = async function (txid) { + const mockedTxResponse = self.mockedResponses.tx[txid]; + // If the user set this response to be an error, throw it + if (mockedTxResponse instanceof Error) { + throw mockedTxResponse; + } + return self.mockedResponses.tx[txid]; + }; // Return assigned script mocks self.script = function (type, hash) { return self.mockedMethods[type][hash]; @@ -69,6 +79,7 @@ // Allow user to set expected chronik call response self.setMock = function (call, options) { // e.g. ('block', {input: '', output: ''}) + // e.g. ('tx', {input: , output: {}}) const { input, output } = options; self.mockedResponses[call][input] = output; }; diff --git a/apps/ecash-herald/test/mocks/chronikResponses.js b/apps/ecash-herald/test/mocks/chronikResponses.js new file mode 100644 --- /dev/null +++ b/apps/ecash-herald/test/mocks/chronikResponses.js @@ -0,0 +1,238 @@ +// Copyright (c) 2023 The Bitcoin developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// @generated +'use strict'; + +module.exports = { + tx: { + '54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484': { + txid: '54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484', + version: 2, + inputs: [ + { + prevOut: { + txid: '72eeff7b43dc066164d92e4c3fece47af3a40e89d46e893df1647cd29dd9f1e3', + outIdx: 0, + }, + inputScript: + '473044022075166617aa473e86c72f34a5576029eb8766a035b481864ebc75759155efcce00220147e2d7e662123bd728fac700f109a245a0278959f65fc402a1e912e0a5732004121034cdb43b7a1277c4d818dc177aaea4e0bed5d464d240839d5488a278b716facd5', + outputScript: + '76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac', + value: '1000', + sequenceNo: 4294967295, + }, + { + prevOut: { + txid: '46b6f61ca026e243d55668bf304df6a21e1fcb2113943cc6bd1fdeceaae85612', + outIdx: 2, + }, + inputScript: + '4830450221009e98db4b91441190bb7e4745b9f249201d0b54c81c0a816af5f3491ffb21a7e902205a4d1347a5a9133c14e4f55319af00f1df836eba6552f30b44640e9373f4cabf4121034cdb43b7a1277c4d818dc177aaea4e0bed5d464d240839d5488a278b716facd5', + outputScript: + '76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac', + value: '750918004', + sequenceNo: 4294967295, + }, + ], + outputs: [ + { + value: '0', + outputScript: + '6a04534c500001010747454e4553495305416c69746105416c6974610a616c6974612e636173684c0001044c00080000befe6f672000', + }, + { + value: '546', + outputScript: + '76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac', + slpToken: { + amount: '210000000000000', + isMintBaton: false, + }, + spentBy: { + txid: '2c336374c05f1c8f278d2a1d5f3195a17fe1bc50189ff67c9769a6afcd908ea9', + outIdx: 1, + }, + }, + { + value: '750917637', + outputScript: + '76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac', + spentBy: { + txid: 'ca70157d5cf6275e0a36adbc3fabf671e3987f343cb35ec4ee7ed5c8d37b3233', + outIdx: 0, + }, + }, + ], + lockTime: 0, + slpTxData: { + slpMeta: { + tokenType: 'FUNGIBLE', + txType: 'GENESIS', + tokenId: + '54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484', + }, + genesisInfo: { + tokenTicker: 'Alita', + tokenName: 'Alita', + tokenDocumentUrl: 'alita.cash', + tokenDocumentHash: '', + decimals: 4, + }, + }, + block: { + height: 756373, + hash: '00000000000000000d62f1b66c08f0976bcdec2f08face2892ae4474b50100d9', + timestamp: '1662611972', + }, + timeFirstSeen: '1662611666', + size: 436, + isCoinbase: false, + network: 'XEC', + }, + 'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a': { + txid: 'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a', + version: 2, + inputs: [ + { + prevOut: { + txid: '33938d6bd403e4ffef94de3e9e2ba487f095dcba3544ac8fad4a93808cea0116', + outIdx: 1, + }, + inputScript: + '483045022100dad1d237b541b4a4d29197dbb01fa9755c2e17bbafb42855f38442b428f0df6b02205772d3fb00b7a053b07169e1534770c091fce42b9e1d63199f46ff89856b3fc6412102ceb4a6eca1eec20ff8e7780326932e8d8295489628c7f2ec9acf8f37f639235e', + outputScript: + '76a91485bab3680833cd9b3cc60953344fa740a2235bbd88ac', + value: '49998867', + sequenceNo: 4294967295, + }, + ], + outputs: [ + { + value: '0', + outputScript: + '6a04534c500001010747454e4553495303504f571850726f6f666f6657726974696e672e636f6d20546f6b656e2168747470733a2f2f7777772e70726f6f666f6677726974696e672e636f6d2f32364c0001004c000800000000000f4240', + }, + { + value: '546', + outputScript: + '76a91485bab3680833cd9b3cc60953344fa740a2235bbd88ac', + slpToken: { + amount: '1000000', + isMintBaton: false, + }, + spentBy: { + txid: '69238630eb9e6a9864bf6970ff5d326800cea41a819feebecfe1a6f0ed651f5c', + outIdx: 1, + }, + }, + { + value: '49997563', + outputScript: + '76a91485bab3680833cd9b3cc60953344fa740a2235bbd88ac', + spentBy: { + txid: '3c665488929f852d93a5dfb6e4b4df7bc8f7a25fb4a2480d39e3de7a30437f69', + outIdx: 0, + }, + }, + ], + lockTime: 0, + slpTxData: { + slpMeta: { + tokenType: 'FUNGIBLE', + txType: 'GENESIS', + tokenId: + 'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a', + }, + genesisInfo: { + tokenTicker: 'POW', + tokenName: 'ProofofWriting.com Token', + tokenDocumentUrl: 'https://www.proofofwriting.com/26', + tokenDocumentHash: '', + decimals: 0, + }, + }, + block: { + height: 685949, + hash: '0000000000000000436e71d5291d2fb067decc838dcb85a99ff6da1d28b89fad', + timestamp: '1620712051', + }, + timeFirstSeen: '0', + size: 329, + isCoinbase: false, + network: 'XEC', + }, + '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109': { + txid: '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109', + version: 2, + inputs: [ + { + prevOut: { + txid: '0e737a2f6373649341b406334341202a5ddbbdb389c55da40570b641dc23d036', + outIdx: 1, + }, + inputScript: + '473044022055444db90f98b462ca29a6f51981da4015623ddc34dc1f575852426ccb785f0402206e786d4056be781ca1720a0a915b040e0a9e8716b8e4d30b0779852c191fdeb3412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6', + outputScript: + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + value: '6231556', + sequenceNo: 4294967294, + }, + ], + outputs: [ + { + value: '0', + outputScript: + '6a04534c500001010747454e45534953044245415207426561724e69701468747470733a2f2f636173687461622e636f6d2f4c0001004c0008000000000000115c', + }, + { + value: '546', + outputScript: + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + slpToken: { + amount: '4444', + isMintBaton: false, + }, + spentBy: { + txid: '9e7f91826cfd3adf9867c1b3d102594eff4743825fad9883c35d26fb3bdc1693', + outIdx: 1, + }, + }, + { + value: '6230555', + outputScript: + '76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac', + spentBy: { + txid: '27a2471afab33d82b9404df12e1fa242488a9439a68e540dcf8f811ef39c11cf', + outIdx: 0, + }, + }, + ], + lockTime: 0, + slpTxData: { + slpMeta: { + tokenType: 'FUNGIBLE', + txType: 'GENESIS', + tokenId: + '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109', + }, + genesisInfo: { + tokenTicker: 'BEAR', + tokenName: 'BearNip', + tokenDocumentUrl: 'https://cashtab.com/', + tokenDocumentHash: '', + decimals: 0, + }, + }, + block: { + height: 782665, + hash: '00000000000000001239831f90580c859ec174316e91961cf0e8cde57c0d3acb', + timestamp: '1678408305', + }, + timeFirstSeen: '1678408231', + size: 299, + isCoinbase: false, + network: 'XEC', + }, + }, +}; diff --git a/apps/ecash-herald/test/mocks/telegramMsgs.js b/apps/ecash-herald/test/mocks/telegramMsgs.js --- a/apps/ecash-herald/test/mocks/telegramMsgs.js +++ b/apps/ecash-herald/test/mocks/telegramMsgs.js @@ -7,6 +7,9 @@ module.exports = { overflowMsg: [ '700722 | 97 txs | unknown', + '1 XEC = $0.00002862', + '1 BTC = $28,595', + '1 ETH = $1,881', '', '1 new eToken created:', 'Lambda Variant Variants (LVV) [doc]', @@ -111,15 +114,76 @@ 'qpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', ], overflowMsgSplit: [ - '700722 | 97 txs | unknown\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68\nno app: 1629497209|76', - 'no app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte\nqp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte', - 'qr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte\nqqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte', - 'qpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', + '700722 | 97 txs | unknown\n1 XEC = $0.00002862\n1 BTC = $28,595\n1 ETH = $1,881\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68', + 'no app: 1629497209|76\nno app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte', + 'qp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte\nqr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte', + 'qqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte\nqpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', + ], + overflowMsgTwo: [ + '782665 | 43 txs | ViaBTC', + '1 XEC = $0.00002848', + '1 BTC = $28,562', + '1 ETH = $1,876', + '', + '2 new eTokens created:', + 'BearNip (BEAR) [doc]', + 'eCash Herald (TRIB) [doc]', + '', + '27 eToken send txs', + 'qq6...eq7 sent 0.0036 BUX to qpx...kvj', + 'qrv...ffd sent 4 tst to qrs...6k9', + 'qq6...eq7 sent 0.1122 BUX to qpx...kvj', + 'qq6...eq7 sent 0.0512 BUX to qpx...kvj', + 'qrv...ffd sent 7 tst to qrs...6k9', + 'qrv...ffd sent 5 tst to qrs...6k9', + 'qrv...ffd sent 2 GRP to qq5...fn0', + 'qq6...eq7 sent 0.0242 BUX to qpx...kvj', + 'qrv...ffd sent 10 tst to qrs...6k9', + 'qz2...035 sent 17 LVV to qp8...gg6', + 'qq6...eq7 sent 6.6381 BUX to qpx...kvj', + 'qq6...eq7 sent 1.5319 BUX to qpx...kvj and 1 others', + 'qq6...eq7 sent 0.0227 BUX to qpx...kvj', + 'qq6...eq7 sent 0.0019 BUX to qpx...kvj', + 'qq6...eq7 sent 9.6625 BUX to qpx...kvj', + 'qz2...035 sent 2 LVV to qp8...gg6', + 'qq6...eq7 sent 0.0471 BUX to qpx...kvj', + 'qrv...ffd sent 3 tst to qrs...6k9', + 'qq6...eq7 sent 1 BUX to qpx...kvj', + 'qrv...ffd sent 7 tst to qrs...6k9', + 'qz2...035 sent 11 CTD to qp8...gg6', + 'qq6...eq7 sent 0.0167 BUX to qpx...kvj', + 'qrv...ffd sent 1 GRP to qq5...fn0', + 'pp2...mza sent 5.64 BUX to qpx...kvj and 2 others', + 'qq6...eq7 sent 0.0101 BUX to qpx...kvj', + 'qpx...kvj sent 6 BUX to qr0...d2u and 1 others', + 'qq6...eq7 sent 0.8878 BUX to qpx...kvj', + '', + 'App txs:', + 'memo: Reply to memo|�V��iM�j�t[P\u001c\u000e����J\u0018_�z7�\b�k\u0005u\n|From what I\'m gathering, it seems that the media went from questioning authority to doing their bidding as a collective NPC hivemind!', + 'Alias: 12345', + '', + '11 eCash txs:', + 'qzx...efz sent 999,998 XEC to qq6...f27 | 1.08 sats per byte', + 'qqc...c8e sent 18,698,998 XEC to qz4...n9l and 1 others | 1.03 sats per byte', + 'qqj...9g4 sent 936 XEC to qpw...x5g | 2.38 sats per byte', + 'qqh...lpy sent 29,022,106 XEC to qqu...0av and 1 others | 10.05 sats per byte', + 'qrx...4nm sent 1,000 XEC to qz9...jhz | 1.00 sats per byte', + 'qpl...4l0 sent 984,178 XEC to qpu...4d7 | 1.44 sats per byte', + 'qpt...2wg sent 23,656,838 XEC to qz6...74j and 2 others | 10.05 sats per byte', + 'qq3...x4u sent 807,228 XEC to qrh...pdm | 1.00 sats per byte', + 'qz9...m57 sent 950 XEC to qqj...9g4 | 2.16 sats per byte', + '1 address sent 237.57 XEC to itself', + 'qpy...6yp sent 2,000 XEC to qqn...678 | 2.02 sats per byte', + ], + overflowMsgSplitTwo: [ + '782665 | 43 txs | ViaBTC\n1 XEC = $0.00002848\n1 BTC = $28,562\n1 ETH = $1,876\n\n2 new eTokens created:\nBearNip (BEAR) [doc]\neCash Herald (TRIB) [doc]\n\n27 eToken send txs\nqq6...eq7 sent 0.0036 BUX to qpx...kvj\nqrv...ffd sent 4 tst to qrs...6k9\nqq6...eq7 sent 0.1122 BUX to qpx...kvj\nqq6...eq7 sent 0.0512 BUX to qpx...kvj\nqrv...ffd sent 7 tst to qrs...6k9\nqrv...ffd sent 5 tst to qrs...6k9\nqrv...ffd sent 2 GRP to qq5...fn0\nqq6...eq7 sent 0.0242 BUX to qpx...kvj\nqrv...ffd sent 10 tst to qrs...6k9\nqz2...035 sent 17 LVV to qp8...gg6\nqq6...eq7 sent 6.6381 BUX to qpx...kvj\nqq6...eq7 sent 1.5319 BUX to qpx...kvj and 1 others\nqq6...eq7 sent 0.0227 BUX to qpx...kvj\nqq6...eq7 sent 0.0019 BUX to qpx...kvj', + 'qq6...eq7 sent 9.6625 BUX to qpx...kvj\nqz2...035 sent 2 LVV to qp8...gg6\nqq6...eq7 sent 0.0471 BUX to qpx...kvj\nqrv...ffd sent 3 tst to qrs...6k9\nqq6...eq7 sent 1 BUX to qpx...kvj\nqrv...ffd sent 7 tst to qrs...6k9\nqz2...035 sent 11 CTD to qp8...gg6\nqq6...eq7 sent 0.0167 BUX to qpx...kvj\nqrv...ffd sent 1 GRP to qq5...fn0\npp2...mza sent 5.64 BUX to qpx...kvj and 2 others\nqq6...eq7 sent 0.0101 BUX to qpx...kvj\nqpx...kvj sent 6 BUX to qr0...d2u and 1 others\nqq6...eq7 sent 0.8878 BUX to qpx...kvj\n\nApp txs:\nmemo: Reply to memo|�V��iM�j�t[P\u001c\u000e����J\u0018_�z7�\b�k\u0005u\n|From what I\'m gathering, it seems that the media went from questioning authority to doing their bidding as a collective NPC hivemind!\nAlias: 12345\n\n11 eCash txs:\nqzx...efz sent 999,998 XEC to qq6...f27 | 1.08 sats per byte\nqqc...c8e sent 18,698,998 XEC to qz4...n9l and 1 others | 1.03 sats per byte', + 'qqj...9g4 sent 936 XEC to qpw...x5g | 2.38 sats per byte\nqqh...lpy sent 29,022,106 XEC to qqu...0av and 1 others | 10.05 sats per byte\nqrx...4nm sent 1,000 XEC to qz9...jhz | 1.00 sats per byte\nqpl...4l0 sent 984,178 XEC to qpu...4d7 | 1.44 sats per byte\nqpt...2wg sent 23,656,838 XEC to qz6...74j and 2 others | 10.05 sats per byte\nqq3...x4u sent 807,228 XEC to qrh...pdm | 1.00 sats per byte\nqz9...m57 sent 950 XEC to qqj...9g4 | 2.16 sats per byte\n1 address sent 237.57 XEC to itself\nqpy...6yp sent 2,000 XEC to qqn...678 | 2.02 sats per byte', ], overflowMsgSuccess: [ { channelId: '-1001999999999', - msg: '700722 | 97 txs | unknown\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68\nno app: 1629497209|76', + msg: '700722 | 97 txs | unknown\n1 XEC = $0.00002862\n1 BTC = $28,595\n1 ETH = $1,881\n\n1 new eToken created:\nLambda Variant Variants (LVV) [doc]\n\nApp txs:\nno app: 1629498127|85\nno app: 1629500089|91\nno app: 1629497915|79\nno app: 1629500647|79\nno app: 1629499023|76\nno app: 1629497534|78\nno app: 1629498535|87\nno app: 1629500798|79\nno app: 1629497457|77\nno app: 1629498288|72\nno app: 1629499274|64\nno app: 1629500162|80\nno app: 1629500720|82\nno app: 1629499774|94\nno app: 1629497610|79\nno app: 1629499360|84\nno app: 1629498460|71\nno app: 1629500318|76\nno app: 1629497132|78\nno app: 1629498060|88\nno app: 1629499897|105\nno app: 1629497763|75\nno app: 1629499571|93\nno app: 1629497054|74\nno app: 1629499185|75\nno app: 1629498375|70\nno app: 1629498610|74\nno app: 1629497293|68', options: { disable_web_page_preview: true, parse_mode: 'HTML', @@ -128,7 +192,7 @@ }, { channelId: '-1001999999999', - msg: 'no app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte\nqp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte', + msg: 'no app: 1629497209|76\nno app: 1629499706|88\nno app: 1629497685|81\nno app: 1629499504|84\nno app: 1629498864|64\nno app: 1629498773|66\nno app: 1629499955|96\nno app: 1629500566|71\nno app: 1629497990|82\nno app: 1629498205|77\nno app: 1629499836|98\nno app: 1629498688|79\nno app: 1629497840|81\nno app: 1629500240|77\nno app: 1629500399|75\nno app: 1629498945|79\nno app: 1629497378|72\nno app: 1629499638|91\nno app: 1629499432|84\nno app: 1629500022|85\nno app: 1629500482|72\nno app: 1629499103|75\n\n45 eCash txs:\nqqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte\nqrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte\nqq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte\nqru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte\nqp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte\nqrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte\nqp9...jlg sent 69,850 XEC to qpu...dtm | 4.18 sats per byte', options: { disable_web_page_preview: true, parse_mode: 'HTML', @@ -137,7 +201,7 @@ }, { channelId: '-1001999999999', - msg: 'qr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte\nqqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte', + msg: 'qp9...jlg sent 10,000 XEC to qqm...uqa | 4.18 sats per byte\nqr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte\nqq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte\nqph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte\nqrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte\nqzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte\nqrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte\nqzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte\nqql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte\nqp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte\nqpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte\nppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte\nqp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte\nqpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte\nqp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte\nqr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte\nqql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte\nqzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte\nqp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte\nqp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte\nqp9...jlg sent 95,000 XEC to qrt...lp5 | 4.16 sats per byte', options: { disable_web_page_preview: true, parse_mode: 'HTML', @@ -146,7 +210,7 @@ }, { channelId: '-1001999999999', - msg: 'qpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', + msg: 'qqn...e9j sent 21,197,785 XEC to qr2...rh9 and 1 others | 4.10 sats per byte\nqpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte\nqz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte\nqzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte\nqpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte\npqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte\nqzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte\nqz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte\nqz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte\nqp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte\nqq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte\nqqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte\nqze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte\nqqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte\nqpp...m7l sent 23,026 XEC to qqe...fmm | 5.01 sats per byte', options: { disable_web_page_preview: true, parse_mode: 'HTML', diff --git a/apps/ecash-herald/test/parseTests.js b/apps/ecash-herald/test/parseTests.js --- a/apps/ecash-herald/test/parseTests.js +++ b/apps/ecash-herald/test/parseTests.js @@ -24,11 +24,12 @@ blockDetails, parsedBlock, coingeckoPrices, + tokenInfoMap, blockSummaryTgMsgs, } = thisBlock; assert.deepEqual(parseBlock(blockDetails), parsedBlock); assert.deepEqual( - getBlockTgMessage(parsedBlock, coingeckoPrices), + getBlockTgMessage(parsedBlock, coingeckoPrices, tokenInfoMap), blockSummaryTgMsgs, ); } diff --git a/apps/ecash-herald/test/telegramTests.js b/apps/ecash-herald/test/telegramTests.js --- a/apps/ecash-herald/test/telegramTests.js +++ b/apps/ecash-herald/test/telegramTests.js @@ -12,7 +12,9 @@ const { telegramHtmlStrings } = require('./mocks/templates'); const { overflowMsg, + overflowMsgTwo, overflowMsgSplit, + overflowMsgSplitTwo, overflowMsgSuccess, nonOverflowMsg, nonOverflowMsgSuccess, @@ -35,6 +37,12 @@ it(`Given a block summary string array longer than 4096 characters, splitOverflowTgMsg returns an array of strings each shorter than 4096 characters`, function () { assert.deepEqual(splitOverflowTgMsg(overflowMsg), overflowMsgSplit); }); + it(`Given a block summary string array much longer than 4096 characters, splitOverflowTgMsg returns an array of strings each shorter than 4096 characters`, function () { + assert.deepEqual( + splitOverflowTgMsg(overflowMsgTwo), + overflowMsgSplitTwo, + ); + }); it(`Given a block summary string array shorter than 4096 characters, splitOverflowTgMsg returns an array of a single string shorter than 4096 characters`, function () { assert.deepEqual(splitOverflowTgMsg(nonOverflowMsg), nonOverflowMsg); }); @@ -81,7 +89,14 @@ const thisBlock = blocks[i]; const { blockSummaryTgMsgs } = thisBlock; for (let j = 0; j < blockSummaryTgMsgs.length; j += 1) { - console.log(blockSummaryTgMsgs[j].length); + console.assert( + blockSummaryTgMsgs[j].length <= TG_MSG_MAX_LENGTH, + '%o', + { + length: blockSummaryTgMsgs[j].length, + msg: blockSummaryTgMsgs[j], + }, + ); assert.strictEqual( blockSummaryTgMsgs[j].length <= TG_MSG_MAX_LENGTH, true, diff --git a/apps/ecash-herald/test/utilsTests.js b/apps/ecash-herald/test/utilsTests.js --- a/apps/ecash-herald/test/utilsTests.js +++ b/apps/ecash-herald/test/utilsTests.js @@ -4,6 +4,7 @@ 'use strict'; const assert = require('assert'); +const BigNumber = require('bignumber.js'); const axios = require('axios'); const MockAdapter = require('axios-mock-adapter'); const config = require('../config'); @@ -167,6 +168,14 @@ it('formatPrice omits a currency symbol if it cannot find it', async function () { assert.strictEqual(formatPrice(100000.999923422, 'cad'), `100,001`); }); + it('jsonReplacer and jsonReviver can encode and decode an empty Map to and from JSON', async function () { + const map = new Map(); + + const jsonText = JSON.stringify(map, jsonReplacer); + const roundTrip = JSON.parse(jsonText, jsonReviver); + + assert.deepEqual(map, roundTrip); + }); it('jsonReplacer and jsonReviver can encode and decode a Map to and from JSON', async function () { const map = new Map([ [1, 'one'], @@ -179,6 +188,31 @@ assert.deepEqual(map, roundTrip); }); + it('jsonReplacer and jsonReviver can encode and decode an empty Set to and from JSON', async function () { + const set = new Set(); + + const jsonText = JSON.stringify(set, jsonReplacer); + const roundTrip = JSON.parse(jsonText, jsonReviver); + + assert.deepEqual(set, roundTrip); + }); + it('jsonReplacer and jsonReviver can encode and decode Map containing a BigNumber', async function () { + const bigNumberMap = new Map([ + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + new BigNumber(36), + ], + [ + '76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac', + new BigNumber(72), + ], + ]); + + const jsonText = JSON.stringify(bigNumberMap, jsonReplacer); + const roundTrip = JSON.parse(jsonText, jsonReviver); + + assert.deepEqual(bigNumberMap, roundTrip); + }); it('jsonReplacer and jsonReviver can encode and decode a Set to and from JSON', async function () { const set = new Set(['one', 'two', 'three']);