PHP WebShell

Текущая директория: /opt/BitGoJS/modules/statics/src

Просмотр файла: utxo.ts

import { BaseCoin, BaseUnit, CoinFeature, CoinKind, KeyCurve, UnderlyingAsset } from './base';
import { Networks, UtxoNetwork } from './networks';

interface UtxoConstructorOptions {
  id: string;
  fullName: string;
  name: string;
  network: UtxoNetwork;
  features: CoinFeature[];
  asset: UnderlyingAsset;
  baseUnit: BaseUnit;
  prefix?: string;
  suffix?: string;
  primaryKeyCurve: KeyCurve;
}

export class UtxoCoin extends BaseCoin {
  public static readonly DEFAULT_FEATURES = [
    CoinFeature.UNSPENT_MODEL,
    CoinFeature.CHILD_PAYS_FOR_PARENT,
    CoinFeature.CUSTODY,
    CoinFeature.CUSTODY_BITGO_TRUST,
    CoinFeature.CUSTODY_BITGO_MENA_FZE,
    CoinFeature.CUSTODY_BITGO_CUSTODY_MENA_FZE,
    CoinFeature.MULTISIG_COLD,
    CoinFeature.PAYGO,
  ];

  /**
   * Additional fields for utxo coins
   */
  public readonly network: UtxoNetwork;

  constructor(options: UtxoConstructorOptions) {
    super({
      ...options,
      kind: CoinKind.CRYPTO,
      isToken: false,
      decimalPlaces: 8,
    });

    this.network = options.network;
  }

  protected disallowedFeatures(): Set<CoinFeature> {
    return new Set([CoinFeature.ACCOUNT_MODEL]);
  }

  protected requiredFeatures(): Set<CoinFeature> {
    return new Set([CoinFeature.UNSPENT_MODEL]);
  }
}

/**
 * Factory function for utxo coin instances.
 *
 * @param id uuid v4 of the coin
 * @param name unique identifier of the coin
 * @param fullName Complete human-readable name of the coin
 * @param network Network object for this coin
 * @param asset Asset which this coin represents. This is the same for both mainnet and testnet variants of a coin.
 * @param features? Features of this coin. Defaults to the DEFAULT_FEATURES defined in `UtxoCoin`
 * @param prefix? Optional coin prefix. Defaults to empty string
 * @param suffix? Optional coin suffix. Defaults to coin name.
 * @param primaryKeyCurve The elliptic curve for this chain/token
 */
export function utxo(
  id: string,
  name: string,
  fullName: string,
  network: UtxoNetwork,
  asset: UnderlyingAsset,
  baseUnit: BaseUnit,
  features: CoinFeature[] = UtxoCoin.DEFAULT_FEATURES,
  prefix = '',
  suffix: string = name.toUpperCase(),
  /** All UTXOs BitGo supports are SECP256K1 **/
  primaryKeyCurve: KeyCurve = KeyCurve.Secp256k1
) {
  return Object.freeze(
    new UtxoCoin({
      id,
      name,
      fullName,
      network,
      prefix,
      suffix,
      features,
      asset,
      primaryKeyCurve,
      baseUnit,
    })
  );
}

const BCH_FEATURES = [
  ...UtxoCoin.DEFAULT_FEATURES,
  CoinFeature.BULK_TRANSACTION,
  CoinFeature.CUSTODY_BITGO_GERMANY,
  CoinFeature.CUSTODY_BITGO_NEW_YORK,
  CoinFeature.CUSTODY_BITGO_FRANKFURT,
  CoinFeature.CUSTODY_BITGO_SINGAPORE,
];
const BTC_FEATURES = [
  ...UtxoCoin.DEFAULT_FEATURES,
  CoinFeature.CUSTODY_BITGO_GERMANY,
  CoinFeature.CUSTODY_BITGO_NEW_YORK,
  CoinFeature.CUSTODY_BITGO_FRANKFURT,
  CoinFeature.CUSTODY_BITGO_SISTER_TRUST_ONE,
  CoinFeature.CUSTODY_BITGO_KOREA,
  CoinFeature.CUSTODY_BITGO_EUROPE_APS,
  CoinFeature.BULK_TRANSACTION,
  CoinFeature.DISTRIBUTED_CUSTODY,
  CoinFeature.CUSTODY_BITGO_SINGAPORE,
  CoinFeature.CUSTODY_BITGO_SWITZERLAND,
  CoinFeature.STUCK_TRANSACTION_MANAGEMENT_ONCHAIN,
  CoinFeature.STAKING,
];
const BTG_FEATURES = [
  ...UtxoCoin.DEFAULT_FEATURES,
  CoinFeature.CUSTODY_BITGO_GERMANY,
  CoinFeature.CUSTODY_BITGO_FRANKFURT,
];
const LTC_FEATURES = [
  ...UtxoCoin.DEFAULT_FEATURES,
  CoinFeature.CUSTODY_BITGO_GERMANY,
  CoinFeature.CUSTODY_BITGO_NEW_YORK,
  CoinFeature.CUSTODY_BITGO_FRANKFURT,
  CoinFeature.CUSTODY_BITGO_SINGAPORE,
  CoinFeature.BULK_TRANSACTION,
];
const DOGE_FEATURES = [
  ...UtxoCoin.DEFAULT_FEATURES,
  CoinFeature.CUSTODY_BITGO_GERMANY,
  CoinFeature.CUSTODY_BITGO_FRANKFURT,
  CoinFeature.CUSTODY_BITGO_SINGAPORE,
  CoinFeature.CUSTODY_BITGO_NEW_YORK,
  CoinFeature.BULK_TRANSACTION,
];
const DASH_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.BULK_TRANSACTION];
const TDASH_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.BULK_TRANSACTION];
const ZEC_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.BULK_TRANSACTION];
export const utxoCoins: Readonly<BaseCoin>[] = [
  utxo(
    '8d6e08d5-399f-414f-8430-6ceca1798cbf',
    'bch',
    'Bitcoin Cash',
    Networks.main.bitcoinCash,
    UnderlyingAsset.BCH,
    BaseUnit.BTC,
    BCH_FEATURES
  ),
  utxo(
    'aae6fafc-5091-4b10-9a11-aa6cefea2805',
    'tbch',
    'Testnet Bitcoin Cash',
    Networks.test.bitcoinCash,
    UnderlyingAsset.BCH,
    BaseUnit.BTC,
    BCH_FEATURES
  ),
  utxo(
    '941587ce-1c7a-4305-b908-15455d15e961',
    'bcha',
    'ECash',
    Networks.main.eCash,
    UnderlyingAsset.BCHA,
    BaseUnit.BTC
  ),
  utxo(
    'af8de1e0-3e33-47bf-94d3-fb3c2bebead2',
    'tbcha',
    'Testnet ECash',
    Networks.test.eCash,
    UnderlyingAsset.BCHA,
    BaseUnit.BTC
  ),
  utxo(
    'f728cfc7-d0cf-4f99-bca0-d25273e65fcf',
    'bsv',
    'Bitcoin SV',
    Networks.main.bitcoinSV,
    UnderlyingAsset.BSV,
    BaseUnit.BTC,
    [CoinFeature.DEPRECATED, ...UtxoCoin.DEFAULT_FEATURES]
  ),
  utxo(
    '7cb81518-85d7-400f-960e-7bc00b3bfa62',
    'tbsv',
    'Testnet Bitcoin SV',
    Networks.test.bitcoinSV,
    UnderlyingAsset.BSV,
    BaseUnit.BTC,
    [CoinFeature.DEPRECATED, ...UtxoCoin.DEFAULT_FEATURES]
  ),
  utxo(
    '5c1691c5-c9cc-49ed-abe0-c433dab2edaa',
    'btc',
    'Bitcoin',
    Networks.main.bitcoin,
    UnderlyingAsset.BTC,
    BaseUnit.BTC,
    BTC_FEATURES
  ),
  utxo(
    'cde7559d-a536-4d12-8de4-90baa09f90bd',
    'tbtc',
    'Testnet Bitcoin',
    Networks.test.bitcoin,
    UnderlyingAsset.BTC,
    BaseUnit.BTC,
    BTC_FEATURES
  ),
  utxo(
    'a0d53dc9-2dcc-4ebb-a2d4-51983fe20da6',
    'tbtcsig',
    'Public Signet Bitcoin',
    Networks.test.bitcoinPublicSignet,
    UnderlyingAsset.BTC,
    BaseUnit.BTC,
    BTC_FEATURES
  ),
  utxo(
    'f76cec3f-7aef-473d-af5d-4c47dd40dfa8',
    'tbtc4',
    'Testnet4 Bitcoin',
    Networks.test.bitcoinTestnet4,
    UnderlyingAsset.BTC,
    BaseUnit.BTC,
    BTC_FEATURES
  ),
  utxo(
    '722522dc-a613-4bff-a1d1-183ebe5138ae',
    'tbtcbgsig',
    'BitGo Signet Bitcoin',
    Networks.test.bitcoinBitGoSignet,
    UnderlyingAsset.BTC,
    BaseUnit.BTC,
    BTC_FEATURES
  ),
  utxo(
    '8feb110d-0d68-44ce-ae97-b8c30ec870a9',
    'btg',
    'Bitcoin Gold',
    Networks.main.bitcoinGold,
    UnderlyingAsset.BTG,
    BaseUnit.BTC,
    BTG_FEATURES
  ),
  utxo(
    '633246f2-af21-41b8-8b9e-ba9ae25d386f',
    'tbtg',
    'Testnet Bitcoin Gold',
    Networks.test.bitcoinGold,
    UnderlyingAsset.BTG,
    BaseUnit.BTC,
    BTG_FEATURES.filter((f) => f !== CoinFeature.MULTISIG_COLD)
  ),
  utxo(
    '9c8097f1-5d2c-4a62-a94c-96c271c0e5e0',
    'ltc',
    'Litecoin',
    Networks.main.litecoin,
    UnderlyingAsset.LTC,
    BaseUnit.LTC,
    LTC_FEATURES
  ),
  utxo(
    '1aca32c8-a3e5-42eb-82df-4c263d8bfc68',
    'tltc',
    'Testnet Litecoin',
    Networks.test.litecoin,
    UnderlyingAsset.LTC,
    BaseUnit.LTC,
    LTC_FEATURES
  ),
  utxo(
    '0739be6a-c72e-468d-9464-ca5601965708',
    'dash',
    'Dash',
    Networks.main.dash,
    UnderlyingAsset.DASH,
    BaseUnit.DASH,
    DASH_FEATURES
  ),
  utxo(
    '5950d78f-e8dd-457a-ab5d-310e6b476bb1',
    'tdash',
    'Testnet Dash',
    Networks.test.dash,
    UnderlyingAsset.DASH,
    BaseUnit.DASH,
    TDASH_FEATURES
  ),
  utxo(
    '508f6b53-1e6e-41fd-b541-b2498b7c4b61',
    'zec',
    'ZCash',
    Networks.main.zCash,
    UnderlyingAsset.ZEC,
    BaseUnit.ZEC,
    ZEC_FEATURES
  ),
  utxo(
    '549a4499-387c-42d3-9048-c01d6724d98a',
    'tzec',
    'Testnet ZCash',
    Networks.test.zCash,
    UnderlyingAsset.ZEC,
    BaseUnit.ZEC,
    ZEC_FEATURES
  ),
  utxo(
    'c93a9160-458f-4a31-bea0-4a93ae8b1d2d',
    'doge',
    'Dogecoin',
    Networks.main.dogecoin,
    UnderlyingAsset.DOGE,
    BaseUnit.BTC,
    DOGE_FEATURES
  ),
  utxo(
    '7a1597e8-fd8e-4b68-8086-f9159e37e0ce',
    'tdoge',
    'Testnet Dogecoin',
    Networks.test.dogecoin,
    UnderlyingAsset.DOGE,
    BaseUnit.BTC,
    DOGE_FEATURES
  ),
];

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


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