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,23 @@
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
+ */
+
+ /* tokenSendInfo
+ * `false` for txs that are not etoken send txs
+ * an object containing info about the token send for token send txs
+ */
+ let tokenSendInfo = false;
+ 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 +94,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 +104,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 +168,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 +219,7 @@
xecSendingOutputScripts,
xecChangeOutputs,
xecReceivingOutputs,
+ tokenSendInfo,
};
},
parseOpReturn: function (outputScript) {
@@ -273,12 +359,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 +380,7 @@
xecSendingOutputScripts,
xecChangeOutputs,
xecReceivingOutputs,
+ tokenSendInfo,
} = thisParsedTx;
if (genesisInfo) {
// The txid of a genesis tx is the tokenId
@@ -321,6 +409,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 +616,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/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
@@ -69,40 +69,48 @@
"height": 0,
"miner": "unknown",
"numTxs": "1",
- "parsedTxs": []
+ "parsedTxs": [],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": []
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": []
+ },
"blockSummaryTgMsgs": [
- "0 | 1 tx | unknown\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938"
+ "0 | 1 tx | unknown\n1 XEC = $0.00002843\n1 BTC = $29,452\n1 ETH = $1,992"
],
- "blockSummaryTgMsgsPriceFailure": [
+ "blockSummaryTgMsgsApiFailure": [
"0 | 1 tx | unknown"
],
"blockName": "genesisBlock"
@@ -4605,7 +4613,8 @@
18660017128
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "0473d97d997b61c5018205b27316b6ae660a9b7835a46166fa87e0b1b26de2dd",
@@ -4638,7 +4647,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "05b4fd23fbe566b5d789f536cc41e77539e6e23e1f5ecb6d8ae67e386ba2e94b",
@@ -4667,7 +4677,8 @@
634455
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "05dbfb3db7f4a73de336745335f419ced31b42b2c3e05cdba4cb50e06eb16471",
@@ -4692,7 +4703,8 @@
209997947
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "074d2111cd7014c04d626cf4d96ca273234f5a7c014e5edb0e03145e53a838f2",
@@ -4721,7 +4733,8 @@
23306976
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "0d0a722a21aeca90ebb3d0954475ccb67f18c02945bc138c1f2ae6d507e3feb7",
@@ -4754,7 +4767,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "0d9a82afc6b2605b25f8dab8b398579c3d408dc4c25919f6827a1afa5a0f6e5a",
@@ -4782,7 +4796,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "0e64f62f9cb16a31cfa2188d6c9ec674c13f3d2f5320672fc45f02a8a1aba38d",
@@ -4813,7 +4828,8 @@
426164618
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "1205ec2b6105716eccb95f5b26c5d65d81a390ac8bacc6ee1f20aa1757015143",
@@ -4846,7 +4862,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "134b0feae8567aa52d73975746376b785564cbc907f8ce7dfc44f90edd869145",
@@ -4874,7 +4891,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "136742fdb231e1342f790a5123f46414c3957f7d199b80ea729ecba274e3b787",
@@ -4907,7 +4925,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "1478f35e98cff2227a826bc93463d2813b5161929267806d49ec994088747bfa",
@@ -4940,7 +4959,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "15461fbfdafca9999d195353f6fcbafef4769cb100585315829dafddc66c5ccc",
@@ -4969,7 +4989,8 @@
3576130750
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "17da7f7d89c687a99b2ed270014fe79be67938d75cf6fffd5afdfa18dcf92624",
@@ -4999,7 +5020,8 @@
6985000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "2061d46821889fe8767c6fb747b87e37e3961eab46e8a7dc9098719d170fca52",
@@ -5032,7 +5054,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "26df82bc6624d8814fe23073ba1b1b8b1ddff68de955ba01fd8dbb5e2db34eb6",
@@ -5065,7 +5088,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "28bfff0be82734dbfa346cda5d45fb8deeaacce6edc817bd9d6f2c6c82c203ea",
@@ -5098,7 +5122,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "29e4bcf352a9524856099ae43fa25b2c67f661e0486875a35a3dc5e02466c4b5",
@@ -5131,7 +5156,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "2fddd13d532ec44c43ee4fa68b587f15d575e73d566e7d30f6bc495a61074e42",
@@ -5164,7 +5190,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "30cfe0f7b05197b371e050eb06642e969d037754f456f76272e98890b8ed2581",
@@ -5197,7 +5224,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "32f7ca6768bedb81603dfd5618263f84c7cb42fa4bae4eeb2dda8a4eac0cdd4d",
@@ -5230,7 +5258,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "3411daaf624965c7731bc169e7831d9e56075986a1639cb1dc74e1b8d9c797b9",
@@ -5263,7 +5292,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "35d7346a26f456fcb2b5dec7801964de18d15b90c68711b70742dde052cbc0d4",
@@ -5293,7 +5323,8 @@
1000000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "3d53a4e291acccb5af5f8f65518edf28de61e5004b21150145bd73acf6303cf3",
@@ -5328,7 +5359,8 @@
40819954735
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "43c50a9f8bb247a389e5233ff38eb59be3df550feb3a18d0dcc967eea9b0748a",
@@ -5363,7 +5395,8 @@
11005638042
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4b0ae95c4571709ea1634ea1b70946845a0d9e9a4c5b0f4d298feb8c8f5df026",
@@ -5393,7 +5426,8 @@
1532567
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4bf5a856c75adbc50669ac3f7184958424db99da65d218d986e194d2bb8b3cdf",
@@ -5422,7 +5456,8 @@
50411107
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4cf484655aa1948cfc3cd291a119806c8b2b5e0d233e44866dc0c9015b24ce1e",
@@ -5455,7 +5490,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4d46bd9ba22889a496cf4d37e5f0307216c8be93885ba82fcc0d3965c63693c3",
@@ -5488,7 +5524,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875",
@@ -5524,7 +5561,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4f55182147356e5ccbf6c06225e817ac405a50fbe04c0f6eb5a4eb04462c7b12",
@@ -5557,7 +5595,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "500e26ccb9a73e0a3b4b2973c5b37af1ddeae23cfce41b987d1ba3e942387c54",
@@ -5586,7 +5625,8 @@
245389245
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "5200a3bf8928a7aae450aa58b550957333e0bebfa352bcc4c108e9b396a4626f",
@@ -5616,7 +5656,8 @@
257183737
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "53c43d805bbbb9618e48cde71f5ff659fea02689f825cde823984b30443f0b30",
@@ -5649,7 +5690,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "545f14c319f00273c894e02e7e4170e2f186da3e9022629f659f8f6b1e579a1c",
@@ -5683,7 +5725,8 @@
546
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "56bc3c81bb81bc92ba25acc407602207a0fdada4261f7f205d141ab34b616ce9",
@@ -5716,7 +5759,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "592f4435d3ef8e2e2f0108cffc7b727798f359bad8521a084ca668bad55512c3",
@@ -5749,7 +5793,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "5d4f5668277ac87f170711461f0bef8f716556b6433c39729a4d0f22a1f1a9ae",
@@ -5782,7 +5827,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "5dc730eafbde4aeec06bf63995e76ecb957ac9266427e63eb23454e49b9f35c0",
@@ -5811,7 +5857,8 @@
68795544
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "63ee98065e0c2358423ccc2ceae21a00ff8ed5e132d460a463334f1368ae3936",
@@ -5844,7 +5891,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "64d204d6dd894e2b93ec2a9a518fb6c9fb9313098a06859b605e440884372c60",
@@ -5877,7 +5925,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "67b05c5f3cc1d1d2415aae8232254bc790fe8d1965e9b529fc3b7bae4acf818d",
@@ -5910,7 +5959,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "6d88f6ad363660c11cc53d6630b6b99b2f99d0ab68b00dd06ba63636e7b15891",
@@ -5937,7 +5987,8 @@
8900607564
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "6fb44256ab3b7ecdb4dd4955d94dd1f6dc1bdeee8a523651fd71e699c524af01",
@@ -5970,7 +6021,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "707051559904c61d0873824b9a215b93c90452724be49342554438215ba392d0",
@@ -6003,7 +6055,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "70cf40ea8427d0fa12c411434f5f753780ba986f51947f43eaa5eb1ee4c4b9d7",
@@ -6032,7 +6085,8 @@
683
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7168c1feb93bba72b68c5ac833a9f428dcb88a9e199f53db1613bcc07a70dfec",
@@ -6065,7 +6119,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "73db52181851a5a5734a21a19c9082c84f0e3827284e26d2cded7e5d2bea8363",
@@ -6094,7 +6149,8 @@
19953027475
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "74352cbc58d6e5891dcff7714575735d31b4fd3441f557a2aa5d1c4cb34d3274",
@@ -6123,7 +6179,8 @@
2383
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7453cfad5d4ef44c4033acfcd694fff185be18fa08528ac3d33953c38dfb8d74",
@@ -6158,7 +6215,8 @@
1432183485
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "76f684f3c861f5ba39872f322d0dd759729a74895a6b376ace563dd8db494f15",
@@ -6187,7 +6245,8 @@
10923801
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7d85c406e5a0cd75fb92388f8d875e3e7eded9584d01414f18f57793063b1e69",
@@ -6220,7 +6279,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7e4596fc927d0da2c1d4ee1290ffaf3731d873951bd2da60676848d5c8495ee8",
@@ -6253,7 +6313,8 @@
2761788
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7ed7de6b7709faafca4d5f92db0af65df90852f7457284039e583554d0d6f527",
@@ -6286,7 +6347,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7f6d27c7f7869d8f0a1bce28b955238b4999d176b0be5b7f8738741c67b6585f",
@@ -6321,7 +6383,8 @@
28655737383
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7f70502f4a0fe4ffc993648a440a56d048298c442e12d6e4d2cd12497357a702",
@@ -6354,7 +6417,8 @@
129306467
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "817c602ce380eda55eae2e64f1501499ea66e9fbffd6aee4c013f5a0e0d8bb77",
@@ -6387,7 +6451,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "826ca512fdaa287c0a38ced748713ff7e9b199f3f43aedf6d49d35d9700bfb6d",
@@ -6416,7 +6481,8 @@
3000000000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8692a0f9ee9217faaf60f76044adc6aec3afe7ebde1f46c52f06da4bf28b126b",
@@ -6445,7 +6511,8 @@
4753764
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8a459bb01fe0304d3617a11004b1651ef4f6cf7173e98894f5ded93b3f98eca4",
@@ -6475,7 +6542,8 @@
1000000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8ae36d52d6d053da7252f8c34284d0b1296990271e22f82acd0ef8e5daf8ebdc",
@@ -6505,7 +6573,8 @@
4500000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8d15e3628717cca44be6838c6bedbd254650ab8cc5ed66dd1d3cc5ea6f8c9c2c",
@@ -6535,7 +6604,8 @@
9500000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8dc7771f7904fd00bfbb810e6fdf35e90cfcd495f9e822db5620959d021ccb89",
@@ -6565,7 +6635,8 @@
119778476
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8f595f2617777d72231772c8994cb8ec4e6c7ec3678cc77c88f7f4c799f8f752",
@@ -6594,7 +6665,8 @@
121734563
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "9162b6dac6e0945f6438343c57d08b69e6306f4e09d94842bcc4aeca22f854be",
@@ -6627,7 +6699,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "96cf034489782a60d9346e508bf9d97094293ccf51166bd49a4e1f6cb7538c04",
@@ -6661,7 +6734,8 @@
546
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "9bd8383325ec538562c92d8f28f19804d9727196fe1457aec5cace66c1d96fda",
@@ -6694,7 +6768,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a0895e299c51d87548a63aecc49edc2db717815a32ada2c19718643f1acc99a9",
@@ -6740,7 +6815,8 @@
17335859300
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a1974c915f3a274907be819533a3c3d4bbbcbf112d3be82970b9100641eccbf3",
@@ -6773,7 +6849,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a1e4bd0b2b151ce40efd30cdedb663e75d438cd518c52c7d3b09e8eb5e9518f8",
@@ -6806,7 +6883,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a7064b6bed0cfcd245af8e76d5f521539152238d3f54e4cad4def3e53a0efe61",
@@ -6839,7 +6917,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ad531c21ee34e502b8ebf131fa6d75faacb91eec9afca2c7e4c1c058ee88bf40",
@@ -6872,7 +6951,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ae01d244f951d4d1a781fc61a9df0dbd13bff47adb0a52efd05e78828d73932d",
@@ -6901,7 +6981,8 @@
5009000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "aeb6af4e6b341950c72079ec20fff64e041564ff3d28ca2da2c592f16245bc56",
@@ -6934,7 +7015,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "b0a4e83dba5e7fbbd563bde7fba6ffe12a4c177d7983714c3325b6a75b28980d",
@@ -6963,7 +7045,8 @@
15109907
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "b150577f2e443eebe6878f143345f3b44d0aedb182af416b90f8e90fefb8328d",
@@ -6994,7 +7077,8 @@
15900000000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "beb17b996dfbcea463334fca9f090dd4f5f3d514e5da7e0eedc1e599e6eb81e8",
@@ -7028,7 +7112,8 @@
546
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "c044e68b45fa2806f5da654ff7026b25b78a92b7cceff39c19612a92af0fb86c",
@@ -7061,7 +7146,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "c125f4fb2cf67a105eb2a75a4ecb810a7fd1f27a522868cdd27366f9bb7224c6",
@@ -7094,7 +7180,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "c4a481f1228414ede06e580dfdb7949afea20ca92b30a2e164a0d8519f43b685",
@@ -7127,7 +7214,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "d1a2187b8ac0a4af195d041d217396c6bdffa4410fc477b4d9c04ca0851456fe",
@@ -7160,7 +7248,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "d84be37cbc6a429e19e6946aeaca645be5ddb908fa9193e77a097cff4d333a86",
@@ -7190,7 +7279,8 @@
230000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "da8e9086128365532152a791dc6a647c5e33f0daee39b1cd86d2fce7f0ddb6d9",
@@ -7220,7 +7310,8 @@
97115436942
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "dadfb51c7b27b6df4c062d0f671c8eada8e88666afa84bac39b504452bc76a2b",
@@ -7250,7 +7341,8 @@
511440400
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "dbcea63c91f4b03fb4cbd50c6d187243a4dabe95ea3ed7c99219acb194a4a070",
@@ -7283,7 +7375,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "dc222e2a8f62441be0781771cdc7aa52a0f27b819cbb082bed7095521b5e5876",
@@ -7312,7 +7405,8 @@
210000000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "dc237a1db441e29593cd423a8e6156084f89b975fcf7c6219bd4399120bc0515",
@@ -7345,7 +7439,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "de56767590f1f8e5dbef4f9d89eb06e21cc39507e87f821bb12b707912a3d5dd",
@@ -7378,7 +7473,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "e73ac16df97c2d88db8474da8a10cace811137d719827726488239e38745769e",
@@ -7411,7 +7507,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "eee95b08153dd77e0666c230c5dcdcd73d0338ea4ca3e228761d6bec21824d0b",
@@ -7444,7 +7541,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "f0bbf184b8e3ebc8b2e153c157c0acc4535d9af4e4db0f4b9260620884cc94d7",
@@ -7469,7 +7567,8 @@
50402475
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "f0ce51a1e1cd309ee9a03b134411604c10659ba576383f97306a53214068bc02",
@@ -7506,7 +7605,8 @@
7591109999
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "f12c38e8d9748a933db7ea36ec95c72b91b6e46641949ff08c0748743f94e27a",
@@ -7534,7 +7634,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "f8f937a56055bc876938ada58bd695397b8904217336804670cc64192cf69b03",
@@ -7567,7 +7668,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "fc251d54c2de4e47a0222150d0964f178ef06a4702a8e25a5d9ab285e005794a",
@@ -7592,7 +7694,8 @@
2302590
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "fd8362916275878dcb45127ad8464c51cff592c1ec81fcf57fccc08313be46b8",
@@ -7625,45 +7728,54 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
}
- ]
+ ],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": []
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": []
+ },
"blockSummaryTgMsgs": [
- "700722 | 97 txs | unknown\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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",
"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",
@@ -11390,6 +11502,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "36"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -11424,6 +11561,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11454,6 +11624,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "1122"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -11484,6 +11679,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "512"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -11518,6 +11738,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11543,7 +11796,8 @@
99999757
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "1f7b1bb6b028cefedfe32b56cff88f8c840b250ce1aca1c470f2727935e83d50",
@@ -11572,7 +11826,8 @@
1025339067
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "2095ebd23a146fbfdd0184efb6c9766a9a5d542fb55a063df3fff1670f1bb273",
@@ -11606,6 +11861,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11631,7 +11919,8 @@
93553
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "22836e6b6f4861d0b8f18735e6e342981e2edc0c686cdf06da892ab7d7d75512",
@@ -11666,7 +11955,8 @@
174237800
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "264a42c30ea9d82bdbf3f8c4d9b7fea006984f96aa9f561f55116684ea21d0f5",
@@ -11700,6 +11990,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11730,11 +12053,36 @@
546
]
]
- }
- },
- {
- "txid": "28f3ec1f134dc8ea2e37a0645774fa2aa19e0bc2871b6edcc7e99cd86d77b1b6",
- "genesisInfo": false,
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "242"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
+ }
+ },
+ {
+ "txid": "28f3ec1f134dc8ea2e37a0645774fa2aa19e0bc2871b6edcc7e99cd86d77b1b6",
+ "genesisInfo": false,
"opReturnInfo": {
"app": "memo",
"msg": "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!"
@@ -11763,7 +12111,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "3d83bc3b70bd190d27c17df3585fdb693d852d654ced5c46cfdac76afb889b7f",
@@ -11797,6 +12146,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11833,7 +12215,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "56ccc295c58381980ece3ab43a5510532d9b2e83f2959c15baa07f1aea98748d",
@@ -11863,7 +12246,8 @@
100000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "657646f7a4e7237fca4ed8231c27d95afc8086f678244d5560be2230d920ff70",
@@ -11897,6 +12281,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -11927,6 +12344,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "66381"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -11963,7 +12405,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7d53e2bf385b0dc071d1e64c50e358227a7a6832cc80b6df73d524a98e9a64f9",
@@ -11988,7 +12431,8 @@
98417832
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7df5934f7a1ac0d4fa18bff20994199756f2756db9753ac0833f09811be9eaa5",
@@ -12027,7 +12471,8 @@
1123907956
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "808ec05abe93ab44b24c1fa0d4f1771f392213ecb234c56b79d5267ece96b2a4",
@@ -12066,6 +12511,46 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12096,7 +12581,8 @@
80722796
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "8970772be0812a5b0e9d47472a7162bb8787d259f111a94b6eefcade547d4845",
@@ -12126,6 +12612,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "227"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12156,6 +12667,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "19"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12186,6 +12722,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "96625"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12220,6 +12781,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12250,6 +12844,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "471"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12275,7 +12894,8 @@
95017
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "b6f643aa5a5b26bab1a51d904b23c0799f384c469cd2dd5f27bc90754664d730",
@@ -12309,6 +12929,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12334,7 +12987,8 @@
"xecReceivingOutputs": {
"dataType": "Map",
"value": []
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "c88eb6c181c8879707f8d950e8e06dd6158d7440ae0424e2ea0f9ed5c54c9985",
@@ -12364,6 +13018,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "10000"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12398,6 +13077,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12432,6 +13144,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12462,7 +13207,8 @@
200000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "e2b11003706e934b68c563db37d2f6b4cf435ce43cdb6c77e68c93be36616c60",
@@ -12492,6 +13238,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "167"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12529,7 +13300,8 @@
554
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ed1d839b287abb65b838622d9acf64b399b1653bcf6bea503442bcaef81890c4",
@@ -12563,6 +13335,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12600,6 +13405,45 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12630,6 +13474,31 @@
546
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9144c1efd024f560e4e1aaf4b62416cd1e82fbed24f88ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "101"
+ }
+ ]
+ ]
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a91435d20230fcc09fe756f8680c3ae039b86fb4032d88ac"
+ ]
+ }
}
},
{
@@ -12669,6 +13538,46 @@
2606
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -12699,43 +13608,134 @@
546
]
]
+ },
+ "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": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": [
+ [
+ "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ {
+ "tokenTicker": "BUX",
+ "tokenName": "Badger Universal Token",
+ "tokenDocumentUrl": "https://bux.digital",
+ "tokenDocumentHash": "",
+ "decimals": 4
+ }
+ ],
+ [
+ "2c46c017466f06817ecd3ba1c76d11e2c37db21a3fd899b84d2ce7723beeba0a",
+ {
+ "tokenTicker": "tst",
+ "tokenName": "test",
+ "tokenDocumentUrl": "https://cashtab.com/",
+ "tokenDocumentHash": "",
+ "decimals": 2
+ }
+ ],
+ [
+ "4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875",
+ {
+ "tokenTicker": "LVV",
+ "tokenName": "Lambda Variant Variants",
+ "tokenDocumentUrl": "https://cashtabapp.com/",
+ "tokenDocumentHash": "",
+ "decimals": 0
+ }
+ ],
+ [
+ "fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa",
+ {
+ "tokenTicker": "GRP",
+ "tokenName": "GRUMPY",
+ "tokenDocumentUrl": "https://bit.ly/GrumpyDoc",
+ "tokenDocumentHash": "",
+ "decimals": 2
+ }
+ ],
+ [
+ "b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc",
+ {
+ "tokenTicker": "CTD",
+ "tokenName": "Cashtab Dark",
+ "tokenDocumentUrl": "https://cashtab.com/",
+ "tokenDocumentHash": "",
+ "decimals": 0
+ }
+ ]
+ ]
+ },
"blockSummaryTgMsgs": [
- "782665 | 43 txs | ViaBTC\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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"
],
@@ -13146,6 +14146,31 @@
0
]
]
+ },
+ "tokenSendInfo": {
+ "tokenId": "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "tokenChangeOutputs": {
+ "dataType": "Map",
+ "value": [
+ [
+ "76a9146d69b5cbe7c85d87628473c43620c0daa9a8102988ac",
+ {
+ "dataType": "BigNumberReplacer",
+ "value": "3566918"
+ }
+ ]
+ ]
+ },
+ "tokenReceivingOutputs": {
+ "dataType": "Map",
+ "value": []
+ },
+ "tokenSendingOutputScripts": {
+ "dataType": "Set",
+ "value": [
+ "76a9146d69b5cbe7c85d87628473c43620c0daa9a8102988ac"
+ ]
+ }
}
},
{
@@ -13180,6 +14205,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -13211,7 +14269,8 @@
106152387
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ea54f221be5c17dafc852f581f0e20dea0e72d7f0b3c691b4333fc1577bf0724",
@@ -13236,42 +14295,75 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
}
- ]
+ ],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": [
+ "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ "fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa"
+ ]
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": [
+ [
+ "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ {
+ "tokenTicker": "BUX",
+ "tokenName": "Badger Universal Token",
+ "tokenDocumentUrl": "https://bux.digital",
+ "tokenDocumentHash": "",
+ "decimals": 4
+ }
+ ],
+ [
+ "fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa",
+ {
+ "tokenTicker": "GRP",
+ "tokenName": "GRUMPY",
+ "tokenDocumentUrl": "https://bit.ly/GrumpyDoc",
+ "tokenDocumentHash": "",
+ "decimals": 2
+ }
+ ]
+ ]
+ },
"blockSummaryTgMsgs": [
- "782571 | 5 txs | ViaBTC\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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"
@@ -14029,7 +15121,8 @@
415534376
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "36902d988d7e309c2131e59a1256dd950443155aa9f6929d24055971d0b105b5",
@@ -14059,7 +15152,8 @@
299300000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "3d90c355be7e3aeb18d5885109a167fd2c8446ec657865ffba6577a81243f71b",
@@ -14088,7 +15182,8 @@
499204
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "97f3ebde1a5753b6772128d69a081fd514322fac0ab63303b9f22b0079a5aac8",
@@ -14117,7 +15212,8 @@
402049000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "9c1bfad01aad003052441327081622df4f1430454d9e4072c8ebddd7d13cc13b",
@@ -14146,7 +15242,8 @@
9000
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "cd9cf4bf000b413c49d45aad382716c98d4ca2a39bc0db825bd80192962dc05d",
@@ -14179,7 +15276,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "da98b479e957e34b462025e483644c13c0a6924f04a31ab6473fe5c23babc5fa",
@@ -14216,7 +15314,8 @@
3300
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ea0a799f0e3bab448064925b3ccdb6e8ff3ef07105c6739f6eec0a4aa674e1f3",
@@ -14258,7 +15357,8 @@
1883283149
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ec584ba3c1734a422c16ec40d598fe91f870c8d17c5f9d2b6c4e1cbaf82f7237",
@@ -14290,42 +15390,51 @@
95390
]
]
- }
+ },
+ "tokenSendInfo": false
}
- ]
+ ],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": []
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": []
+ },
"blockSummaryTgMsgs": [
- "782657 | 10 txs | ViaBTC\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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"
@@ -15772,7 +16881,8 @@
25651049
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "0d07e0722247e4df90213755a5a90b2d1155499c98ae37062462715d45dee835",
@@ -15806,6 +16916,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -15831,7 +16974,8 @@
1003862
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "425deba1bef907163aa546aca36d4bd6c0e2c1a6944fde23b2f0503a5a88cabe",
@@ -15868,7 +17012,8 @@
2200
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "564f79a4fd7c798ca5d4460899e0bae06ad84055ec5693885142346fa80aa841",
@@ -15893,7 +17038,8 @@
2029425
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "649123ec1b2357baa4588581a83aa6aa3da7825f9d736d93f77752caa156fd26",
@@ -15930,7 +17076,8 @@
1100
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "804e4cb47961434546c951c718351b3c33b1e4ddfbde3a262d7a191b2b6a8c60",
@@ -15960,7 +17107,8 @@
20322018
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "86f2bc22c9d2e9545335dc759cb3274a37ab64d83eb26bc19d7938b1f08c952a",
@@ -15994,6 +17142,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -16019,7 +17200,8 @@
25650594
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "9e89a1e464c13a10e2a0a693ac111d4f054daac13d6c22a8592c73063c93143b",
@@ -16048,7 +17230,8 @@
120348
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a51b843c19bde5b37f1199564f6a0ff705690ee300a228a6dd8f65fd9a876eb0",
@@ -16077,7 +17260,8 @@
1278764300
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "adb8f5232d92e94a8f0abb2321ff91175afc66b090bc7de40a337cc13759d637",
@@ -16144,6 +17328,95 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -16173,7 +17446,8 @@
257033764
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "dfa431134fdd2569afce9e7ec873ef6231dc13d89c530d6608061f22d5a94281",
@@ -16209,7 +17483,8 @@
0
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "f13a8d2897f75c30657dc736f51afc4835dd4639c084ef52d2809955b458591b",
@@ -16276,6 +17551,95 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -16301,42 +17665,75 @@
25650139
]
]
- }
+ },
+ "tokenSendInfo": false
}
- ]
+ ],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": [
+ "036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5",
+ "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5"
+ ]
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"ticker": "ETH"
}
],
+ "tokenInfoMap": {
+ "dataType": "Map",
+ "value": [
+ [
+ "7e7dacd72dcdb14e00a03dd3aff47f019ed51a6f1f4e4f532ae50692f62bc4e5",
+ {
+ "tokenTicker": "BUX",
+ "tokenName": "Badger Universal Token",
+ "tokenDocumentUrl": "https://bux.digital",
+ "tokenDocumentHash": "",
+ "decimals": 4
+ }
+ ],
+ [
+ "036b46fcca75948dec00bdcc95533677fdccb861497c0d9d33fb7da5d21986b5",
+ {
+ "tokenTicker": "eLPS",
+ "tokenName": "eLPS Token",
+ "tokenDocumentUrl": "elpstoken.com",
+ "tokenDocumentHash": "",
+ "decimals": 2
+ }
+ ]
+ ]
+ },
"blockSummaryTgMsgs": [
- "782785 | 17 txs | Mining-Dutch\n1 XEC = $0.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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"
@@ -17032,7 +18429,8 @@
700
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "4d6845d856e34b03ef6830313c4cc75f80daee491eee7b8d55f32cdb8c2b72e6",
@@ -17057,7 +18455,8 @@
2135
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "7b0802223d4376f3bca1a76c9a2deab0c18c2fc5f070d4adb65abdb18d328f08",
@@ -17087,7 +18486,8 @@
1272
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "a2f704933049b5c5a712a9943ac2e264fbeb1354cd5f2187e31eb68a8f38aa72",
@@ -17124,7 +18524,8 @@
1100
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "ac4e0acbe7f0e0e25ef3366e2d066ebaa543c0fe8721e998d4cab03fbeb8a5a9",
@@ -17149,7 +18550,8 @@
1027980
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "b4fee092558400fa905336da8c0465e6be857bb6fad758825a20e90a6a12c323",
@@ -17174,7 +18576,8 @@
2944
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "c04ae7f139eb16023a70d1bb39b1ae8745667edb09833e994a5b4d48976a111d",
@@ -17208,6 +18611,39 @@
546
]
]
+ },
+ "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"
+ ]
+ }
}
},
{
@@ -17233,7 +18669,8 @@
821962
]
]
- }
+ },
+ "tokenSendInfo": false
},
{
"txid": "d9915ae3c4a7ec176746d3902295c1d2cf8912db589289842c14803a67cfc9d1",
@@ -17270,44 +18707,66 @@
2200
]
]
- }
+ },
+ "tokenSendInfo": false
}
- ]
+ ],
+ "tokenIds": {
+ "dataType": "Set",
+ "value": [
+ "b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7"
+ ]
+ }
},
"coingeckoResponse": {
"bitcoin": {
- "usd": 29197.29473491
+ "usd": 29452.48207906
},
"ecash": {
- "usd": 0.00002841
+ "usd": 0.00002843
},
"ethereum": {
- "usd": 1937.87839962
+ "usd": 1992.05966869
}
},
"coingeckoPrices": [
{
"fiat": "usd",
- "price": 0.00002841,
+ "price": 0.00002843,
"ticker": "XEC"
},
{
"fiat": "usd",
- "price": 29197.29473491,
+ "price": 29452.48207906,
"ticker": "BTC"
},
{
"fiat": "usd",
- "price": 1937.87839962,
+ "price": 1992.05966869,
"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.00002841\n1 BTC = $29,197\n1 ETH = $1,938\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.00002843\n1 BTC = $29,452\n1 ETH = $1,992\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"
}
]
\ No newline at end of file
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,8 +114,8 @@
'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',
+ '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',
],
@@ -180,7 +183,7 @@
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',
@@ -189,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',
+ 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',
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,8 +12,8 @@
const { telegramHtmlStrings } = require('./mocks/templates');
const {
overflowMsg,
- overflowMsgSplit,
overflowMsgTwo,
+ overflowMsgSplit,
overflowMsgSplitTwo,
overflowMsgSuccess,
nonOverflowMsg,
@@ -89,10 +89,10 @@
const thisBlock = blocks[i];
const { blockSummaryTgMsgs } = thisBlock;
for (let j = 0; j < blockSummaryTgMsgs.length; j += 1) {
- console.log(blockSummaryTgMsgs[j].length);
assert.strictEqual(
blockSummaryTgMsgs[j].length <= TG_MSG_MAX_LENGTH,
true,
+ `Message is too long: ${blockSummaryTgMsgs[j].length} > ${TG_MSG_MAX_LENGTH}`,
);
}
}
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');
@@ -179,6 +180,23 @@
assert.deepEqual(map, 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']);