PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-staking/scripts

Просмотр файла: babylon-params.ts

import * as fs from 'fs/promises';

import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';

function getBaseUrl(network: 'mainnet' | 'testnet') {
  if (network === 'mainnet') {
    return 'https://babylon.nodes.guru/api';
  }
  return 'https://babylon-testnet-api.nodes.guru';
}

type BabylonNetwork = 'mainnet' | 'testnet';

async function getParams(network: BabylonNetwork, version: number): Promise<unknown> {
  const url = `${getBaseUrl(network)}/babylon/btcstaking/v1/params/${version}`;
  const resp = await fetch(url);
  if (!resp.ok) {
    throw new Error(`Failed to fetch ${url}: ${resp.status} ${resp.statusText}`);
  }
  return await resp.json();
}

async function getAllParams(network: BabylonNetwork): Promise<unknown[]> {
  const params: unknown[] = [];
  for (let i = 0; ; i++) {
    try {
      const p = await getParams(network, i);
      params.push(p);
    } catch (e) {
      console.error(`error fetching ${network} params version ${i}: ${e.message}`);
      break;
    }
  }
  return params;
}

async function syncParams(network: BabylonNetwork | undefined): Promise<void> {
  if (network === undefined) {
    await syncParams('testnet');
    await syncParams('mainnet');
    return;
  }

  const allParams = await getAllParams(network);
  const filename = __dirname + `/../src/babylon/params.${network}.json`;
  await fs.writeFile(filename, JSON.stringify(allParams, null, 2) + '\n');
  console.log(`Wrote ${allParams.length} params to ${filename}`);
}

yargs(hideBin(process.argv))
  .command({
    command: 'sync-babylon-params',
    describe: 'Sync Babylon params',
    builder(b) {
      return b.option('network', {
        choices: ['mainnet', 'testnet'] as const,
        description: 'Network',
      });
    },
    async handler(argv) {
      await syncParams(argv.network);
    },
  })
  .demandCommand()
  .help()
  .strict().argv;

Выполнить команду


Для локальной разработки. Не используйте в интернете!