mirror of
https://github.com/mempool/mempool.git
synced 2026-08-13 12:33:11 +02:00
parse dmnd stratum v2 tags
This commit is contained in:
parent
d63a8b6358
commit
265fec4639
3 changed files with 30 additions and 3 deletions
|
|
@ -37,7 +37,7 @@ import { calculateGoodBlockCpfp } from './cpfp';
|
|||
import blockProcessor, { BlockProcessingResult, detectTemplateAlgorithm, saveCpfpDataToCpfpSummary } from './block-processor';
|
||||
import mempool from './mempool';
|
||||
import CpfpRepository from '../repositories/CpfpRepository';
|
||||
import { parseDATUMTemplateCreator } from '../utils/bitcoin-script';
|
||||
import { parseDATUMTemplateCreator, parseDMNDTemplateCreator } from '../utils/bitcoin-script';
|
||||
import database from '../database';
|
||||
import { getBlockFirstSeenFromLogs, getOldestLogTimestampFromLogs, scanLogsForBlocksFirstSeen } from '../utils/file-read';
|
||||
|
||||
|
|
@ -359,6 +359,8 @@ class Blocks {
|
|||
|
||||
if (extras.pool.name === 'OCEAN') {
|
||||
extras.pool.minerNames = parseDATUMTemplateCreator(extras.coinbaseRaw);
|
||||
} else if (extras.pool.name === 'DMND') {
|
||||
extras.pool.minerNames = parseDMNDTemplateCreator(extras.coinbaseRaw);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import chainTips from '../api/chain-tips';
|
|||
import blocks from '../api/blocks';
|
||||
import BlocksAuditsRepository from './BlocksAuditsRepository';
|
||||
import transactionUtils from '../api/transaction-utils';
|
||||
import { parseDATUMTemplateCreator } from '../utils/bitcoin-script';
|
||||
import { parseDATUMTemplateCreator, parseDMNDTemplateCreator } from '../utils/bitcoin-script';
|
||||
import poolsUpdater from '../tasks/pools-updater';
|
||||
|
||||
interface DatabaseBlock {
|
||||
|
|
@ -1374,6 +1374,8 @@ class BlocksRepository {
|
|||
|
||||
if (extras.pool.name === 'OCEAN') {
|
||||
extras.pool.minerNames = parseDATUMTemplateCreator(extras.coinbaseRaw);
|
||||
} else if (extras.pool.name === 'DMND') {
|
||||
extras.pool.minerNames = parseDMNDTemplateCreator(extras.coinbaseRaw);
|
||||
}
|
||||
|
||||
blk.extras = <BlockExtension>extras;
|
||||
|
|
|
|||
|
|
@ -224,4 +224,27 @@ export function parseDATUMTemplateCreator(coinbaseRaw: string): string[] | null
|
|||
tagString = tagString.replace('\x00', '');
|
||||
|
||||
return tagString.split('\x0f').map((name) => name.replace(/[^a-zA-Z0-9 ]/g, ''));
|
||||
}
|
||||
}
|
||||
|
||||
/** Extracts miner names from a DMND coinbase transaction */
|
||||
export function parseDMNDTemplateCreator(coinbaseRaw: string): string[] {
|
||||
try {
|
||||
if (!coinbaseRaw || coinbaseRaw.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(coinbaseRaw)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const bytes = Buffer.from(coinbaseRaw, 'hex');
|
||||
const blockHeightLength = bytes[0];
|
||||
const tagDelimiterIndex = 1 + blockHeightLength;
|
||||
if (bytes.length <= tagDelimiterIndex || bytes[tagDelimiterIndex] !== 0x00) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const tagStart = tagDelimiterIndex + 1;
|
||||
const tagEnd = bytes.indexOf(0x00, tagStart);
|
||||
const tags = bytes.subarray(tagStart, tagEnd === -1 ? undefined : tagEnd);
|
||||
return tags.toString('utf8').split('/').slice(1, -1);
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue