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']);