Files
warp/tools/transactions-checker.ts
2021-09-24 17:55:13 +02:00

89 lines
2.9 KiB
TypeScript

import interactions from './data/interactions.json';
import Arweave from 'arweave';
import { LoggerFactory } from '../src';
import { TsLogFactory } from '../src/logging/node/TsLogFactory';
import { GQLEdgeInterface } from 'smartweave/lib/interfaces/gqlResult';
import fs from 'fs';
import path from 'path';
async function main() {
LoggerFactory.use(new TsLogFactory());
const logger = LoggerFactory.INST.create('checker');
LoggerFactory.INST.logLevel('debug');
const arweave = Arweave.init({
host: 'arweave.net', // Hostname or IP address for a Arweave host
port: 443, // Port
protocol: 'https', // Network protocol http or https
timeout: 60000, // Network request timeouts in milliseconds
logging: false // Enable network request logging
});
const result = [];
for (const t of (interactions['cachedValue'] as Array<GQLEdgeInterface>)) {
const index: number = (interactions['cachedValue'] as Array<GQLEdgeInterface>).indexOf(t);
const tx = t.node;
logger.debug('Checking', {
index,
height: tx.block.height,
id: tx.id
});
const transactionStatus = await arweave.transactions.getStatus(tx.id);
let numberOfConfirmations = null;
let blockHeight = null;
let properNumberOfConfirmations = null;
let confirmationsDiff = null;
let currentHeight = null;
let lowConfirmations = false;
let tooBigConfirmationsDiff = false;
if (transactionStatus.status !== 404 && transactionStatus.confirmed !== null) {
const info = await arweave.network.getInfo();
currentHeight = info.height;
logger.debug('Current height:', currentHeight);
numberOfConfirmations = transactionStatus.confirmed.number_of_confirmations;
if (numberOfConfirmations < 10) {
logger.warn('Low amount of confirmations:', numberOfConfirmations);
lowConfirmations = true;
}
blockHeight = transactionStatus.confirmed.block_height;
properNumberOfConfirmations = currentHeight - blockHeight;
confirmationsDiff = currentHeight - blockHeight - numberOfConfirmations;
if (confirmationsDiff > 2) {
logger.warn('Too big confirmations diff', {
numberOfConfirmations,
properNumberOfConfirmations,
confirmationsDiff
});
tooBigConfirmationsDiff = true;
}
} else {
logger.warn('Wrong status', transactionStatus);
}
result.push({
index: index,
id: tx.id,
status: transactionStatus.status,
networkHeight: currentHeight,
confirmations: numberOfConfirmations,
height: blockHeight,
theoreticalNumberOfConfirmations: properNumberOfConfirmations,
confirmationsDiff: confirmationsDiff,
lowConfirmations: lowConfirmations,
tooBigConfirmationsDiff: tooBigConfirmationsDiff
});
}
const resultString = JSON.stringify(result);
fs.writeFileSync(path.join(__dirname, 'result_fixed.json'), resultString);
}
main().catch((e) => console.error(e));