PHP WebShell

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

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

import { TestBitGo } from '@bitgo/sdk-test';
import { BitGo } from '../../../src/bitgo';

import * as nock from 'nock';
import { bip32 } from '@bitgo/utxo-lib';
import { common, TransactionType } from '@bitgo/sdk-core';
import { AvaxC as AvaxCAccountLib, getBuilder } from '../../../../account-lib';

nock.enableNetConnect();

describe('MMI:', function () {
  let bitgo;
  describe('MMI', async function () {
    before(function () {
      const bitgoKeyXprv =
        'xprv9s21ZrQH143K3tpWBHWe31sLoXNRQ9AvRYJgitkKxQ4ATFQMwvr7hHNqYRUnS7PsjzB7aK1VxqHLuNQjj1sckJ2Jwo2qxmsvejwECSpFMfC';
      const bitgoKey = bip32.fromBase58(bitgoKeyXprv);
      if (!bitgoKey.privateKey) {
        throw new Error('no privateKey');
      }
      const bitgoXpub = bitgoKey.neutered().toBase58();

      const env = 'test';
      bitgo = TestBitGo.decorate(BitGo, { env: 'test' });
      common.Environments[env].hsmXpub = bitgoXpub;
      bitgo.initializeTestVars();
    });

    after(function () {
      nock.cleanAll();
    });

    it(`should sign an eth mmi transaction with custodianTransactionId`, async function () {
      const coin = bitgo.coin('hteth');
      const userKeychain = {
        prv: 'xprv9s21ZrQH143K3hekyNj7TciR4XNYe1kMj68W2ipjJGNHETWP7o42AjDnSPgKhdZ4x8NBAvaL72RrXjuXNdmkMqLERZza73oYugGtbLFXG8g',
        pub: 'xpub661MyMwAqRbcGBjE5QG7pkf9cZD33UUD6K46q7ELrbuG7FqXfLNGiXYGHeEnGBb5AWREnk1eA28g8ArZvURbhshXWkTtddHRo54fgyVvLdb',
        rawPub: '023636e68b7b204573abda2616aff6b584910dece2543f1cc6d842caac7d74974b',
        rawPrv: '7438a50010ce7b1dfd86e68046cc78ba1ebd242d6d85d9904d3fcc08734bc172',
      };
      const params = {
        custodianTransactionId: 'mmitx',
        txPrebuild: {
          eip1559: { maxPriorityFeePerGas: 10, maxFeePerGas: 10 },
          isBatch: false,
          recipients: [
            {
              amount: '0',
              address: '0xc93b13642d93b4218bb85f67317d6b37286e8028',
            },
          ],
          expireTime: 1627949214,
          contractSequenceId: 12,
          gasLimit: undefined,
          gasPrice: undefined,
          hopTransaction: undefined,
          backupKeyNonce: undefined,
          sequenceId: undefined,
          nextContractSequenceId: 0,
        },
        prv: userKeychain.prv,
      };
      const halfSignedTransaction = await coin.signTransaction(params);

      halfSignedTransaction.halfSigned.custodianTransactionId.should.equal('mmitx');
    });

    it(`should sign an avax mmi transaction with custodianTransactionId`, async function () {
      const coin = bitgo.coin('tavaxc');

      const account_1 = {
        address: '0xeeaf0F05f37891ab4a21208B105A0687d12c5aF7',
        owner_1: '4ee089aceabf3ddbf748db79b1066c33b7d3ea1ab3eb7e325121bba2bff2f5ca',
        owner_2: '5ca116d25aec5f765465432cc421ff25ef9ffdc330b10bb3d9ad61e3baad88d7',
        owner_3: '1fae946cc84af8bd74d610a88537e24e19c3349d478d86fc5bb59ba4c88fb9cc',
      };

      const account_2 = {
        address: '0x8Ce59c2d1702844F8EdED451AA103961bC37B4e8',
        owner_1: '4ee089aceabf3ddbf748db79b1066c33b7d3ea1ab3eb7e325121bba2bff2f5ca',
        owner_2: '5c7e4efff7304d4dfff6d5f1591844ec6f2adfa6a47e9fece6a3c1a4d755f1e3',
        owner_3: '4421ab25dd91e1a3180d03d57c323a7886dcc313d3b3a4b4256a5791572bf597',
      };

      const builder = getBuilder('tavaxc') as AvaxCAccountLib.TransactionBuilder;
      builder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      builder.counter(1);
      builder.type(TransactionType.Send);
      builder.contract(account_1.address);
      builder.transfer().amount('1').to(account_2.address).expirationTime(10000).contractSequenceId(1);

      const unsignedTx = await builder.build();
      const unsignedTxForBroadcasting = unsignedTx.toBroadcastFormat();

      const halfSignedRawTx = await coin.signTransaction({
        custodianTransactionId: 'mmitx',
        txPrebuild: {
          txHex: unsignedTxForBroadcasting,
          eip1559: {
            maxFeePerGas: '7593123',
            maxPriorityFeePerGas: '150',
          },
        },
        prv: account_1.owner_2,
      });

      halfSignedRawTx.halfSigned.custodianTransactionId.should.equal('mmitx');
    });
  });
});

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


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