PHP WebShell

Текущая директория: /opt/BitGoJS/modules/bitgo/test/v2/unit/coins/utxo/util

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

/**
 * @prettier
 */
import { Triple } from '@bitgo/sdk-core';
import { encrypt } from '@bitgo/sdk-api';
import { getSeed } from '@bitgo/sdk-test';
import { bip32, BIP32Interface, bitgo } from '@bitgo/utxo-lib';

type RootWalletKeys = bitgo.RootWalletKeys;

export type KeychainBase58 = {
  pub: string;
  prv: string;
};

export type KeyDoc = {
  id: string;
  pub: string;
  source: string;
  encryptedPrv: string;
  coinSpecific: any;
};

export function toKeychainBase58(k: BIP32Interface): KeychainBase58 {
  if (k.isNeutered()) {
    throw new Error(`must provide private key`);
  }
  return {
    prv: k.toBase58(),
    pub: k.neutered().toBase58(),
  };
}

export function toKeychainObjects(rootWalletKeys: RootWalletKeys, walletPassphrase: string): KeyDoc[] {
  return rootWalletKeys.triple.map((bip32, keyIdx) => {
    const pub = bip32.neutered().toBase58();
    return {
      id: getSeed(pub).toString('hex'),
      pub,
      source: KeyNames[keyIdx],
      encryptedPrv: encrypt(walletPassphrase, bip32.toBase58()),
      coinSpecific: {},
    };
  });
}

export const KeyNames = ['user', 'backup', 'bitgo'];

export const keychainsBase58: Triple<KeychainBase58> = [
  {
    pub: 'xpub661MyMwAqRbcGiQhVk1J7cD1YodF9tc5Y1B8vpTjjB1pcB1J1m1QX8fMtYP2sYqFmW6J2ra69tNoARKjvTGo9cGUrbPbJdjwrSzGGzPzWWS',
    prv: 'xprv9s21ZrQH143K4ELEPiUHkUGGzmnkkRtEAnFY8S48AqUqjNg9UDh9yLLt3FcfATyCjbsMB9JCGHAD8MeBTAK1P7trFppkoswu5ZAsHYASfbk',
  },
  {
    pub: 'xpub661MyMwAqRbcFzLXuganogQvd7MrefQQqCcJP2ZDumnCdQecf5cw1P1nD5qBz8SNS1yCLSC9VqpNUWnQU3V6qmnPt2r21oXhicQFzPA6Lby',
    prv: 'xprv9s21ZrQH143K3WG4of3nSYUC55XNFCgZTyghae9cMSFDkcKU7YJgTahJMpdTY9CjCcjgSo2TJ635uUVx176BufUMBFpieKYVJD9J3VvrGRm',
  },
  {
    pub: 'xpub661MyMwAqRbcFHpwWrzPB61U2CgBmdD21WNVM1JKUn9rEExkoGE4yafUVFbPSd78vdX8tWcEUQWaALFkU9fUbUM4Cc49DKEJSCYGRnbzCym',
    prv: 'xprv9s21ZrQH143K2okUQqTNox4jUAqhNAVAeHStYcthvScsMSdcFiupRnLzdxzfJithak5Zs92FQJeeJ9Jiya63KfUNxawuMZDCp2cGT9cdMKs',
  },
];

export const keychains: Triple<BIP32Interface> = keychainsBase58.map(({ pub, prv }) => {
  const k = bip32.fromBase58(prv);
  if (k.neutered().toBase58() !== pub) {
    throw new Error(`mismatch`);
  }
  return k;
}) as Triple<BIP32Interface>;

export function getWalletUnspentSignerUserBitGo(
  keys: Triple<BIP32Interface>
): bitgo.WalletUnspentSigner<RootWalletKeys> {
  return new bitgo.WalletUnspentSigner(keys, keys[0], keys[2]);
}

export function getDefaultWalletKeys(): RootWalletKeys {
  return new bitgo.RootWalletKeys(keychains);
}

export function getDefaultWalletUnspentSigner(): bitgo.WalletUnspentSigner<RootWalletKeys> {
  return getWalletUnspentSignerUserBitGo(keychains);
}

export function encryptKeychain(password: string, keychain: KeychainBase58): string {
  return encrypt(password, keychain.prv);
}

export function getWalletKeys(seed: string): RootWalletKeys {
  return new bitgo.RootWalletKeys(
    Array.from({ length: 3 }).map((_, i) => bip32.fromSeed(getSeed(`${seed}/${i}`))) as Triple<BIP32Interface>
  );
}

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


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