PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-avaxc/test/unit/transactionBuilder

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

import assert from 'assert';
import should from 'should';

import { TransactionType } from '@bitgo/sdk-core';
import * as testData from '../../resources/avaxc';
import { ETHTransactionType, TxData } from '@bitgo/sdk-coin-eth';
import { getBuilder } from '../getBuilder';
import { TransactionBuilder } from '../../../src';

describe('AvaxC Wallet Initialization Builder', function () {
  let txBuilder: TransactionBuilder;

  const initTxBuilder = (): void => {
    txBuilder = getBuilder('tavaxc') as TransactionBuilder;
    txBuilder.fee({
      fee: '280000000000',
      gasLimit: '7000000',
    });
    txBuilder.counter(1);
    txBuilder.type(TransactionType.WalletInitialization);
  };

  describe('Avax C-Chain Wallet Initialization Transaction', () => {
    it('Should build walletInitialization', async () => {
      initTxBuilder();
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.owner(testData.OWNER_3.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });

      const tx = await txBuilder.build();
      const txJson: TxData = tx.toJson();

      tx.type.should.equal(TransactionType.WalletInitialization);
      txJson.gasLimit.should.equal('7000000');
      txJson._type.should.equals(ETHTransactionType.LEGACY);
      txJson.gasPrice!.should.equal('280000000000');
      should.equal(txJson.nonce, 1);
      should.equal(txJson.chainId!, '0xa869');
      should.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST);
    });

    it('Should build with counter 0 if not manually defined', async () => {
      txBuilder = getBuilder('tavaxc') as TransactionBuilder;
      txBuilder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      txBuilder.type(TransactionType.WalletInitialization);

      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.owner(testData.OWNER_3.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });

      const tx = await txBuilder.build();
      const txJson: TxData = tx.toJson();

      tx.type.should.equal(TransactionType.WalletInitialization);
      txJson.gasLimit.should.equal('7000000');
      txJson._type.should.equals(ETHTransactionType.LEGACY);
      txJson.gasPrice!.should.equal('280000000000');
      should.equal(txJson.chainId!, '0xa869');
      should.equal(txJson.v, '0x0150f5');
      should.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST_ZERO_NONCE);
    });

    it('Should throw if building walletInitialization without fee', async function () {
      txBuilder = getBuilder('tavaxc') as TransactionBuilder;
      txBuilder.counter(1);
      txBuilder.type(TransactionType.WalletInitialization);
      txBuilder.counter(1);
      txBuilder.type(TransactionType.WalletInitialization);
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.owner(testData.OWNER_3.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });

      txBuilder.build().should.be.rejectedWith('Invalid transaction: missing fee');
    });

    it('Should throw if building walletInitialization without type', async function () {
      txBuilder = getBuilder('tavaxc') as TransactionBuilder;
      txBuilder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      txBuilder.counter(1);
      assert.throws(
        () => txBuilder.owner(testData.OWNER_1.ethAddress),
        (e: any) => e.message === 'Multisig wallet owner can only be set for initialization transactions'
      );
    });

    it('Should throw if building walletInitialization without owners', async function () {
      initTxBuilder();
      txBuilder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      txBuilder.counter(1);
      txBuilder.type(TransactionType.WalletInitialization);
      assert.throws(
        () => txBuilder.sign({ key: testData.OWNER_1.ethKey }),
        (e: any) => e.message === 'Cannot sign an wallet initialization transaction without owners'
      );
    });

    it('Should throw if building walletInitialization with only one owner', async function () {
      initTxBuilder();
      txBuilder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      txBuilder.counter(1);
      txBuilder.type(TransactionType.WalletInitialization);
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });

      txBuilder.build().should.be.rejectedWith('Invalid transaction: wrong number of owners -- required: 3, found: 1');
    });

    it('Should throw if building walletInitialization with only two owners', async function () {
      initTxBuilder();
      txBuilder.fee({
        fee: '280000000000',
        gasLimit: '7000000',
      });
      txBuilder.counter(1);
      txBuilder.type(TransactionType.WalletInitialization);
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });

      txBuilder.build().should.be.rejectedWith('Invalid transaction: wrong number of owners -- required: 3, found: 2');
    });

    it('Should getting same tx from raw tx', async function () {
      initTxBuilder();
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.owner(testData.OWNER_3.ethAddress);
      txBuilder.sign({ key: testData.OWNER_1.ethKey });
      const tx = await txBuilder.build();
      const txBuiderFromRaw = getBuilder('tavaxc') as TransactionBuilder;
      txBuiderFromRaw.from(tx.toBroadcastFormat());
      const txFromRaw = await txBuiderFromRaw.build();
      should.deepEqual(tx.toJson(), txFromRaw.toJson());
      should.deepEqual(tx.toBroadcastFormat(), txFromRaw.toBroadcastFormat());
      should.deepEqual(tx.id, txFromRaw.id);
    });

    it('Should build tx with final v', async function () {
      initTxBuilder();
      txBuilder.owner(testData.OWNER_1.ethAddress);
      txBuilder.owner(testData.OWNER_2.ethAddress);
      txBuilder.owner(testData.OWNER_3.ethAddress);
      const tx = await txBuilder.build();
      should.deepEqual(tx.toJson().v, '0x0150f5');
    });
  });
});

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


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