diff --git a/apps/ecash-herald/scripts/sendTestTgMsgs.js b/apps/ecash-herald/scripts/sendTestTgMsgs.js --- a/apps/ecash-herald/scripts/sendTestTgMsgs.js +++ b/apps/ecash-herald/scripts/sendTestTgMsgs.js @@ -10,7 +10,7 @@ */ 'use strict'; -const config = require('../config'); +const { sendBlockSummary } = require('../src/telegram'); const secrets = require('../secrets'); const TelegramBot = require('node-telegram-bot-api'); const { dev } = secrets; @@ -19,9 +19,9 @@ const telegramBotDev = new TelegramBot(botId, { polling: true }); const blocks = require('../test/mocks/blocks'); -function returnTelegramBotSendMessagePromise(msg, options) { +function returnSendBlockSummaryPromise(tgMsgStrings, telegramBot, channelId) { return new Promise((resolve, reject) => { - telegramBotDev.sendMessage(channelId, msg, options).then( + sendBlockSummary(tgMsgStrings, telegramBot, channelId).then( result => { resolve(result); }, @@ -36,10 +36,14 @@ const testTgMsgPromises = []; for (let i in blocks) { const thisBlock = blocks[i]; - const { tgMsg } = thisBlock; + const { blockSummaryTgMsgs } = thisBlock; testTgMsgPromises.push( - returnTelegramBotSendMessagePromise(tgMsg, config.tgMsgOptions), + returnSendBlockSummaryPromise( + blockSummaryTgMsgs, + telegramBotDev, + channelId, + ), ); } @@ -49,7 +53,7 @@ testTgMsgsSuccess = await Promise.all(testTgMsgPromises); console.log( '\x1b[32m%s\x1b[0m', - `✔ Sent ${testTgMsgsSuccess.length} telegram messages to ${testTgMsgsSuccess[0].chat.title}`, + `✔ Sent ${testTgMsgsSuccess.length} telegram messages to ${testTgMsgsSuccess[0][0].chat.title}`, ); // Exit in success condition 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 @@ -5,6 +5,7 @@ const config = require('../config'); const { parseBlock, getBlockTgMessage } = require('./parse'); const { getCoingeckoPrices } = require('./utils'); +const { sendBlockSummary } = require('./telegram'); module.exports = { handleBlockConnected: async function ( @@ -61,7 +62,10 @@ const { coingeckoResponse, coingeckoPrices } = await getCoingeckoPrices( config.priceApi, ); - const tgMsg = getBlockTgMessage(parsedBlock, coingeckoPrices); + const blockSummaryTgMsgs = getBlockTgMessage( + parsedBlock, + coingeckoPrices, + ); // returnMocks is used in the script function generateMocks // Using it as a flag here ensures the script is always using the same function @@ -73,22 +77,19 @@ parsedBlock, coingeckoResponse, coingeckoPrices, - tgMsg, - tgMsgPriceFailure: getBlockTgMessage(parsedBlock, false), + blockSummaryTgMsgs, + blockSummaryTgMsgsPriceFailure: getBlockTgMessage( + parsedBlock, + false, + ), }; } - try { - return await telegramBot.sendMessage( - channelId, - tgMsg, - config.tgMsgOptions, - ); - } catch (err) { - console.log( - `Error in telegramBot.sendMessage(channelId=${channelId}, msg=${tgMsg}, options=${config.tgMsgOptions})`, - err, - ); - } - return false; + + // Broadcast block summary telegram message(s) + return await sendBlockSummary( + blockSummaryTgMsgs, + telegramBot, + channelId, + ); }, }; 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,7 +5,10 @@ 'use strict'; const config = require('../config'); const cashaddr = require('ecashaddrjs'); -const { prepareStringForTelegramHTML } = require('./telegram'); +const { + prepareStringForTelegramHTML, + splitOverflowTgMsg, +} = require('./telegram'); const { formatPrice, returnAddressPreview } = require('./utils'); module.exports = { parseBlock: function (chronikBlockResponse) { @@ -459,7 +462,6 @@ tgMsg = tgMsg.concat(xecSendTxTgMsgLines); } - // Join array with newLine char, \n - return tgMsg.join('\n'); + return splitOverflowTgMsg(tgMsg); }, }; 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 @@ -3,6 +3,9 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. 'use strict'; +const config = require('../config'); +// undocumented API behavior of HTML parsing mode, discovered through brute force +const TG_MSG_MAX_LENGTH = 4096; module.exports = { prepareStringForTelegramHTML: function (string) { @@ -21,4 +24,111 @@ return tgReadyString; }, + splitOverflowTgMsg: function (tgMsgArray) { + /* splitOverflowTgMsg + * + * Params + * tgMsgArray - an array of unjoined strings prepared by getBlockTgMessage + * each string has length <= 4096 characters + * + * Output + * tgMsgStrings - an array of ready-to-broadcast HTML-parsed telegram messages, all under + * the 4096 character limit + */ + + // Iterate over tgMsgArray to build an array of messages under the TG_MSG_MAX_LENGTH ceiling + const tgMsgStrings = []; + + let thisTgMsgStringLength = 0; + let sliceStartIndex = 0; + for (let i = 0; i < tgMsgArray.length; i += 1) { + const thisLine = tgMsgArray[i]; + // Account for the .join('\n'), each line has an extra 2 characters + // Note: this is undocumented behavior of telegram API HTML parsing mode + // '\n' is counted as 2 characters and also is parsed as a new line in HTML mode + thisTgMsgStringLength += thisLine.length + 2; + console.assert(thisLine.length + 2 <= TG_MSG_MAX_LENGTH, '%o', { + length: thisLine.length + 2, + line: thisLine, + error: 'Telegram message line is longer than 4096 characters', + }); + + // If this particular message line pushes the message over TG_MSG_MAX_LENGTH + // less 2 as there is no `\n` at the end of the last line of the msg + if (thisTgMsgStringLength - 2 > TG_MSG_MAX_LENGTH) { + // Build a msg string with preceding lines, i.e. do not include this i'th line + const sliceEndIndex = i; // Note that the slice end index is not included + tgMsgStrings.push( + tgMsgArray.slice(sliceStartIndex, sliceEndIndex).join('\n'), + ); + // Reset sliceStartIndex and thisTgMsgStringLength for the next message + sliceStartIndex = sliceEndIndex; + thisTgMsgStringLength = 0; + } + } + + // Build a tg msg of all unused lines, if you have them + if (sliceStartIndex < tgMsgArray.length) { + tgMsgStrings.push(tgMsgArray.slice(sliceStartIndex).join('\n')); + } + + return tgMsgStrings; + }, + sendBlockSummary: async function (tgMsgStrings, telegramBot, channelId) { + /* sendBlockSummary + * + * Params + * tgMsgStrings - an array of ready-to-be broadcast HTML-parsed telegram messages, + * all under the 4096 character length limit + * telegramBot - a telegram bot instance + * channelId - the channel where the messages will be broadcast + * + * Output + * Message(s) will be broadcast by telegramBot to channelId + * If there are multiple messages, each message will be sent as a reply to its + * preceding message + * Function returns 'false' if there is an error in sending any one message + * Function returns an array of msgSuccess objects for each successfully send msg + */ + + let msgReplyId = false; + let msgSuccessArray = []; + for (let i = 0; i < tgMsgStrings.length; i += 1) { + const thisMsg = tgMsgStrings[i]; + let msgSuccess; + const thisMsgOptions = msgReplyId + ? { + ...config.tgMsgOptions, + reply_to_message_id: msgReplyId, + } + : config.tgMsgOptions; + try { + msgSuccess = await telegramBot.sendMessage( + channelId, + thisMsg, + thisMsgOptions, + ); + msgReplyId = msgSuccess.message_id; + msgSuccessArray.push(msgSuccess); + } catch (err) { + console.log( + `Error in sending msg in sendBlockSummary, telegramBot.send(${thisMsg}) for msg ${ + i + 1 + } of ${tgMsgStrings.length}`, + err, + ); + return false; + } + } + if (msgSuccessArray.length === tgMsgStrings.length) { + return msgSuccessArray; + } + // Catch potential edge case + console.log({ + msgsSent: msgSuccessArray.length, + msgsAttempted: tgMsgStrings.length, + error: 'Failed to send all messages', + }); + return 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 @@ -123,7 +123,7 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); - const thisBlockExpectedMsg = thisBlock.tgMsg; + const thisBlockExpectedMsgs = thisBlock.blockSummaryTgMsgs; // Mock a chronik websocket msg of correct format const mockWsMsg = { @@ -151,16 +151,19 @@ channelId, ); - // Check that sendMessage was called successfully - assert.strictEqual(telegramBot.messageSent, true); + // Build expected array of successful msg returns + let msgSuccessArray = []; + for (let i = 0; i < thisBlockExpectedMsgs.length; i += 1) { + msgSuccessArray.push({ + success: true, + channelId, + msg: thisBlockExpectedMsgs[i], + options: config.tgMsgOptions, + }); + } // Check that the correct msg info was sent - assert.deepEqual(result, { - success: true, - channelId, - msg: thisBlockExpectedMsg, - options: config.tgMsgOptions, - }); + 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 () { @@ -177,7 +180,8 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); - const thisBlockExpectedMsg = thisBlock.tgMsgPriceFailure; + const thisBlockExpectedMsgs = + thisBlock.blockSummaryTgMsgsPriceFailure; // Mock a chronik websocket msg of correct format const mockWsMsg = { @@ -203,16 +207,22 @@ channelId, ); + // Build expected array of successful msg returns + let msgSuccessArray = []; + for (let i = 0; i < thisBlockExpectedMsgs.length; i += 1) { + msgSuccessArray.push({ + success: true, + channelId, + msg: thisBlockExpectedMsgs[i], + options: config.tgMsgOptions, + }); + } + // Check that sendMessage was called successfully assert.strictEqual(telegramBot.messageSent, true); // Check that the correct msg info was sent - assert.deepEqual(result, { - success: true, - channelId, - msg: thisBlockExpectedMsg, - options: config.tgMsgOptions, - }); + assert.deepEqual(result, msgSuccessArray); } }); it('parseWebsocketMessage returns false if telegram msg fails to send', async function () { 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 @@ -29,7 +29,7 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); - const thisBlockExpectedMsg = thisBlock.tgMsg; + const thisBlockExpectedMsgs = thisBlock.blockSummaryTgMsgs; const telegramBot = new MockTelegramBot(); const channelId = mockChannelId; @@ -55,13 +55,19 @@ // Check that sendMessage was called successfully assert.strictEqual(telegramBot.messageSent, true); + // Build expected array of successful msg returns + let msgSuccessArray = []; + for (let i = 0; i < thisBlockExpectedMsgs.length; i += 1) { + msgSuccessArray.push({ + success: true, + channelId, + msg: thisBlockExpectedMsgs[i], + options: config.tgMsgOptions, + }); + } + // Check that the correct msg info was sent - assert.deepEqual(result, { - success: true, - channelId, - msg: thisBlockExpectedMsg, - options: config.tgMsgOptions, - }); + 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 () { @@ -78,7 +84,8 @@ input: thisBlockHash, output: thisBlockChronikBlockResponse, }); - const thisBlockExpectedMsg = thisBlock.tgMsgPriceFailure; + const thisBlockExpectedMsgs = + thisBlock.blockSummaryTgMsgsPriceFailure; const telegramBot = new MockTelegramBot(); const channelId = mockChannelId; @@ -102,13 +109,19 @@ // Check that sendMessage was called successfully assert.strictEqual(telegramBot.messageSent, true); + // Build expected array of successful msg returns + let msgSuccessArray = []; + for (let i = 0; i < thisBlockExpectedMsgs.length; i += 1) { + msgSuccessArray.push({ + success: true, + channelId, + msg: thisBlockExpectedMsgs[i], + options: config.tgMsgOptions, + }); + } + // Check that the correct msg info was sent - assert.deepEqual(result, { - success: true, - channelId, - msg: thisBlockExpectedMsg, - options: config.tgMsgOptions, - }); + assert.deepEqual(result, msgSuccessArray); } }); it('handleBlockConnected sends desired backup msg if it encounters an error in message creation', async function () { 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 @@ -78,35 +78,38 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '0 | 1 tx | unknown\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895', - tgMsgPriceFailure: + blockSummaryTgMsgs: [ + '0 | 1 tx | unknown\n1 XEC = $0.00002876\n1 BTC = $28,546\n1 ETH = $1,861', + ], + blockSummaryTgMsgsPriceFailure: [ '0 | 1 tx | unknown', + ], blockName: 'genesisBlock', }, { @@ -7804,35 +7807,44 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '700722 | 97 txs | unknown\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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\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\nqp9...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\nqqn...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', - tgMsgPriceFailure: - '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\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\nqp9...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\nqqn...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', + 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', + '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: [ + '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', + ], blockName: 'etokenGenesisTx', }, { @@ -13279,35 +13291,40 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '782665 | 43 txs | ViaBTC\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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\nqq6...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', - tgMsgPriceFailure: - '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\nqq6...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', + 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', + ], + blockSummaryTgMsgsPriceFailure: [ + '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', + ], blockName: 'multipleGenesis', }, { @@ -13850,35 +13867,38 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '782571 | 5 txs | ViaBTC\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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', - tgMsgPriceFailure: + 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', + ], + blockSummaryTgMsgsPriceFailure: [ '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', }, { @@ -15000,35 +15020,38 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '782657 | 10 txs | ViaBTC\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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', - tgMsgPriceFailure: + 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', + ], + blockSummaryTgMsgsPriceFailure: [ '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', }, { @@ -17187,35 +17210,38 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '782785 | 17 txs | Mining-Dutch\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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', - tgMsgPriceFailure: + 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', + ], + blockSummaryTgMsgsPriceFailure: [ '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', }, { @@ -18236,35 +18262,38 @@ }, coingeckoResponse: { bitcoin: { - usd: 29160.02775612, + usd: 28546.41121148, }, ecash: { - usd: 0.00002943, + usd: 0.00002876, }, ethereum: { - usd: 1894.98574958, + usd: 1861.31220549, }, }, coingeckoPrices: [ { fiat: 'usd', - price: 0.00002943, + price: 0.00002876, ticker: 'XEC', }, { fiat: 'usd', - price: 29160.02775612, + price: 28546.41121148, ticker: 'BTC', }, { fiat: 'usd', - price: 1894.98574958, + price: 1861.31220549, ticker: 'ETH', }, ], - tgMsg: '782774 | 10 txs | ViaBTC\n1 XEC = $0.00002943\n1 BTC = $29,160\n1 ETH = $1,895\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', - tgMsgPriceFailure: + 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', + ], + blockSummaryTgMsgsPriceFailure: [ '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/telegramMsgs.js b/apps/ecash-herald/test/mocks/telegramMsgs.js new file mode 100644 --- /dev/null +++ b/apps/ecash-herald/test/mocks/telegramMsgs.js @@ -0,0 +1,171 @@ +// 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 = { + overflowMsg: [ + '700722 | 97 txs | unknown', + '', + '1 new eToken created:', + 'Lambda Variant Variants (LVV) [doc]', + '', + 'App txs:', + 'no app: 1629498127|85', + 'no app: 1629500089|91', + 'no app: 1629497915|79', + 'no app: 1629500647|79', + 'no app: 1629499023|76', + 'no app: 1629497534|78', + 'no app: 1629498535|87', + 'no app: 1629500798|79', + 'no app: 1629497457|77', + 'no app: 1629498288|72', + 'no app: 1629499274|64', + 'no app: 1629500162|80', + 'no app: 1629500720|82', + 'no app: 1629499774|94', + 'no app: 1629497610|79', + 'no app: 1629499360|84', + 'no app: 1629498460|71', + 'no app: 1629500318|76', + 'no app: 1629497132|78', + 'no app: 1629498060|88', + 'no app: 1629499897|105', + 'no app: 1629497763|75', + 'no app: 1629499571|93', + 'no app: 1629497054|74', + 'no app: 1629499185|75', + 'no app: 1629498375|70', + 'no app: 1629498610|74', + 'no app: 1629497293|68', + 'no app: 1629497209|76', + 'no app: 1629499706|88', + 'no app: 1629497685|81', + 'no app: 1629499504|84', + 'no app: 1629498864|64', + 'no app: 1629498773|66', + 'no app: 1629499955|96', + 'no app: 1629500566|71', + 'no app: 1629497990|82', + 'no app: 1629498205|77', + 'no app: 1629499836|98', + 'no app: 1629498688|79', + 'no app: 1629497840|81', + 'no app: 1629500240|77', + 'no app: 1629500399|75', + 'no app: 1629498945|79', + 'no app: 1629497378|72', + 'no app: 1629499638|91', + 'no app: 1629499432|84', + 'no app: 1629500022|85', + 'no app: 1629500482|72', + 'no app: 1629499103|75', + '', + '45 eCash txs:', + 'qqv...y7y sent 201,835,617 XEC to qqn...gd2 and 1 others | 1.00 sats per byte', + 'qrf...ldm sent 6,354 XEC to qr8...kys and 1 others | 1.00 sats per byte', + 'qq4...xph sent 2,099,979 XEC to qp0...rj6 | 10.69 sats per byte', + 'qru...y7r sent 240,420 XEC to qz5...7p8 and 1 others | 1.23 sats per byte', + 'qp5...pck sent 4,261,646 XEC to qqz...cc8 | 1.06 sats per byte', + 'qrh...47a sent 47,684,497 XEC to qz0...c8j and 1 others | 1.00 sats per byte', + 'qp9...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', + 'qr9...3zm sent 425,718,894 XEC to qzx...xg8 and 1 others | 1.00 sats per byte', + 'qq4...w64 sent 110,320,517 XEC to qqt...q7t and 2 others | 4.10 sats per byte', + 'qph...72y sent 15,326 XEC to qz2...035 | 2.01 sats per byte', + 'qrp...rtz sent 1,008,221 XEC to qp2...qa4 and 1 others | 5.02 sats per byte', + 'qzs...qn7 sent 6,941,377 XEC to qqh...ytf and 1 others | 1.00 sats per byte', + 'qrz...k3d sent 2,571,837 XEC to qr4...kxh | 150.87 sats per byte', + 'qz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.12 sats per byte', + 'qzq...mzs sent 717,296 XEC to qzj...e2s and 1 others | 5.00 sats per byte', + 'qql...h03 sent 89,006,076 XEC to qzj...ksg | 2.13 sats per byte', + 'qp0...t92 sent 612,181 XEC to qzj...ztx and 1 others | 1.00 sats per byte', + 'qpm...k9g sent 199,999,998 XEC to qqp...zqu and 1 others | 1.00 sats per byte', + 'qpa...czv sent 612,208 XEC to qp0...t92 and 1 others | 1.00 sats per byte', + 'ppt...gny sent 88,521,997 XEC to qz3...rj3 and 2 others | 15.28 sats per byte', + 'qp2...pca sent 294,905 XEC to qp4...0fg and 1 others | 1.00 sats per byte', + 'qpm...k9g sent 199,999,997 XEC to qpl...eep and 2 others | 1.00 sats per byte', + 'qp4...yuu sent 289,611,690 XEC to qqh...zy3 and 1 others | 1.00 sats per byte', + 'qr4...ffa sent 1,975,381 XEC to qr3...w9u and 2 others | 1.00 sats per byte', + 'qql...y4w sent 30,000,000 XEC to qz8...0fa | 4.16 sats per byte', + 'qzn...amg sent 3,285,159 XEC to qzt...rag and 1 others | 1.00 sats per byte', + 'qp9...jlg sent 10,000 XEC to qpv...jap | 4.16 sats per byte', + 'qp9...jlg sent 45,000 XEC to qry...tf4 | 4.16 sats per byte', + 'qp9...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', + 'qpp...p3l sent 1,217,361 XEC to qz3...hef and 1 others | 1.00 sats per byte', + 'qz5...7p8 sent 150 XEC to qre...t4t and 1 others | 1.17 sats per byte', + 'qzj...ksg sent 937,282,770 XEC to qz3...rj3 and 4 others | 1.92 sats per byte', + 'qpm...k9g sent 199,999,998 XEC to qrd...vnm and 1 others | 1.00 sats per byte', + 'pqu...4ws sent 551,094 XEC to qp2...thh and 1 others | 1.05 sats per byte', + 'qzl...52p sent 159,000,922 XEC to qpt...67y and 1 others | 1.01 sats per byte', + 'qz5...7p8 sent 750 XEC to qrf...py0 and 1 others | 1.13 sats per byte', + 'qz5...7p8 sent 2,300 XEC to qrf...py0 | 1.14 sats per byte', + 'qp9...jlg sent 971,154,369 XEC to qpu...qhj | 4.16 sats per byte', + 'qq4...qvq sent 5,167,950 XEC to qqu...vun and 1 others | 1.00 sats per byte', + 'qqn...gnz sent 10,499,318 XEC to qrj...eya and 1 others | 2.21 sats per byte', + 'qze...e3p sent 504,025 XEC to qzv...geu | 5.00 sats per byte', + 'qqs...7c5 sent 101,520,270 XEC to pzz...qn8 and 3 others | 1.00 sats per byte', + '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', + ], + 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', + options: { + disable_web_page_preview: true, + parse_mode: 'HTML', + }, + success: true, + }, + { + 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', + options: { + disable_web_page_preview: true, + parse_mode: 'HTML', + }, + success: true, + }, + { + 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', + options: { + disable_web_page_preview: true, + parse_mode: 'HTML', + }, + success: true, + }, + { + 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', + options: { + disable_web_page_preview: true, + parse_mode: 'HTML', + }, + success: true, + }, + ], + nonOverflowMsg: [ + '0 | 1 tx | unknown', + ], + nonOverflowMsgSuccess: [ + { + channelId: '-1001999999999', + msg: '0 | 1 tx | unknown', + options: { + disable_web_page_preview: true, + parse_mode: 'HTML', + }, + success: true, + }, + ], +}; 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 @@ -20,12 +20,16 @@ it('All test blocks', function () { for (let i = 0; i < blocks.length; i += 1) { const thisBlock = blocks[i]; - const { blockDetails, parsedBlock, coingeckoPrices, tgMsg } = - thisBlock; + const { + blockDetails, + parsedBlock, + coingeckoPrices, + blockSummaryTgMsgs, + } = thisBlock; assert.deepEqual(parseBlock(blockDetails), parsedBlock); assert.deepEqual( getBlockTgMessage(parsedBlock, coingeckoPrices), - tgMsg, + 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 @@ -4,8 +4,21 @@ 'use strict'; const assert = require('assert'); -const { prepareStringForTelegramHTML } = require('../src/telegram'); +const { + prepareStringForTelegramHTML, + splitOverflowTgMsg, + sendBlockSummary, +} = require('../src/telegram'); const { telegramHtmlStrings } = require('./mocks/templates'); +const { + overflowMsg, + overflowMsgSplit, + overflowMsgSuccess, + nonOverflowMsg, + nonOverflowMsgSuccess, +} = require('./mocks/telegramMsgs'); +const blocks = require('./mocks/blocks'); +const { MockTelegramBot, mockChannelId } = require('./mocks/telegramBotMock'); describe('ecash-herald telegram.js functions', function () { it(`prepareStringForTelegramHTML replaces '<', '>', and '&' per specifications`, function () { @@ -19,4 +32,61 @@ noChangeExpected, ); }); + 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 shorter than 4096 characters, splitOverflowTgMsg returns an array of a single string shorter than 4096 characters`, function () { + assert.deepEqual(splitOverflowTgMsg(nonOverflowMsg), nonOverflowMsg); + }); + it(`sendBlockSummary returns false if there is an error in telegramBot.sendMessage`, async function () { + const tgMsgStrings = nonOverflowMsg; + const telegramBot = new MockTelegramBot(); + const channelId = mockChannelId; + + // Set an expected error in sendMessage method + telegramBot.setExpectedError( + 'sendMessage', + 'Error: message failed to send', + ); + + assert.strictEqual( + await sendBlockSummary(tgMsgStrings, telegramBot, channelId), + false, + ); + }); + it(`sendBlockSummary returns an array containing one msg success item if original msg is not > 4096 characters`, async function () { + const tgMsgStrings = nonOverflowMsg; + const telegramBot = new MockTelegramBot(); + const channelId = mockChannelId; + + assert.deepEqual( + await sendBlockSummary(tgMsgStrings, telegramBot, channelId), + nonOverflowMsgSuccess, + ); + }); + it(`sendBlockSummary returns an array containing a msg success item for each sent msg if original msg is > 4096 characters`, async function () { + const tgMsgStrings = overflowMsgSplit; + const telegramBot = new MockTelegramBot(); + const channelId = mockChannelId; + + assert.deepEqual( + await sendBlockSummary(tgMsgStrings, telegramBot, channelId), + overflowMsgSuccess, + ); + }); + it(`None of the prepared telegram messages exceed the character limit of 4096`, function () { + const TG_MSG_MAX_LENGTH = 4096; + + for (let i = 0; i < blocks.length; i += 1) { + const thisBlock = blocks[i]; + const { blockSummaryTgMsgs } = thisBlock; + for (let j = 0; j < blockSummaryTgMsgs.length; j += 1) { + console.log(blockSummaryTgMsgs[j].length); + assert.strictEqual( + blockSummaryTgMsgs[j].length <= TG_MSG_MAX_LENGTH, + true, + ); + } + } + }); });