PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@bitgo-forks/avalanchejs/src/vms/avm

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

import { testContext } from '../../fixtures/context';
import {
  testAvaxAssetID,
  testOwnerXAddress,
  testUtxos,
} from '../../fixtures/transactions';
import {
  TransferableInput,
  TransferableOutput,
  UTXOID,
} from '../../serializable/avax';
import { Utxo } from '../../serializable/avax/utxo';
import type { BaseTx, ExportTx, ImportTx } from '../../serializable/avm';
import { Id } from '../../serializable/fxs/common';
import {
  Input,
  OutputOwners,
  TransferInput,
  TransferOutput,
} from '../../serializable/fxs/secp256k1';
import { BigIntPr, Int } from '../../serializable/primitives';
import { hexToBuffer } from '../../utils';
import { newExportTx, newImportTx } from '../pvm';
import { newBaseTx } from './builder';

describe('AVMBuilder', () => {
  let utxos: Utxo[];
  beforeEach(() => {
    utxos = testUtxos();
  });
  it('importTx', async () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    const tx = newImportTx(
      testContext,
      testContext.cBlockchainID,
      utxos,
      [toAddress],
      [testOwnerXAddress.toBytes()],
    );

    const importTx = tx.getTx() as ImportTx;

    expect(importTx.ins).toHaveLength(1);
    expect(importTx.ins[0].assetId).toEqual(testAvaxAssetID);
    expect(Number(importTx.ins[0].amount())).toEqual(50 * 1e9);
    expect(importTx.ins[0].utxoID.ID()).toEqual(utxos[2].ID());
  });

  it('importTx Low amt', async () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    utxos[2] = new Utxo(
      new UTXOID(Id.fromHex('0x1234512345123451234516'), new Int(0)),
      testAvaxAssetID,
      new TransferOutput(
        new BigIntPr(BigInt(50 * 1e5)),
        OutputOwners.fromNative([testOwnerXAddress.toBytes()]),
      ),
    );

    const tx = newImportTx(
      testContext,
      testContext.cBlockchainID,
      utxos,
      [toAddress],
      [testOwnerXAddress.toBytes()],
    );

    const importTx = tx.getTx() as ImportTx;

    expect(importTx.ins).toHaveLength(1);
    expect(importTx.ins[0].assetId).toEqual(testAvaxAssetID);
    expect(Number(importTx.ins[0].amount())).toEqual(50 * 1e5);
    expect((importTx.baseTx.outputs as TransferableOutput[])[0].amount()).toBe(
      BigInt(40 * 1e5),
    );
    expect(importTx.ins[0].utxoID.ID()).toEqual(utxos[2].ID());
  });

  it('importTx no utxos available', async () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    utxos.pop();

    expect(() =>
      newImportTx(
        testContext,
        testContext.cBlockchainID,
        utxos,
        [toAddress],
        [testOwnerXAddress.toBytes()],
      ),
    ).toThrow();
  });

  it('exportTx', () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    const tnsOut = TransferableOutput.fromNative(
      testAvaxAssetID.toString(),
      BigInt(5 * 1e9),
      [toAddress],
    );
    const tx = newExportTx(
      testContext,
      testContext.cBlockchainID,
      [testOwnerXAddress.toBytes()],
      utxos,
      [tnsOut],
    );
    const exportTx = tx.getTx() as ExportTx;
    expect(exportTx.outs as TransferableOutput[]).toEqual([tnsOut]);
    expect(exportTx.baseTx.inputs as TransferableInput[]).toEqual([
      new TransferableInput(
        utxos[2].utxoId,
        testAvaxAssetID,
        new TransferInput(
          new BigIntPr(BigInt(50 * 1e9)),
          Input.fromNative([0]),
        ),
      ),
    ]);

    expect(exportTx.baseTx.outputs as TransferableOutput[]).toEqual([
      new TransferableOutput(
        testAvaxAssetID,
        new TransferOutput(
          new BigIntPr(44999000000n),
          OutputOwners.fromNative([testOwnerXAddress.toBytes()]),
        ),
      ),
    ]);
  });

  it('exportTx', () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    const tnsOut = TransferableOutput.fromNative(
      testAvaxAssetID.toString(),
      BigInt(5 * 1e9),
      [toAddress],
    );
    utxos.pop();
    expect(() =>
      newExportTx(
        testContext,
        testContext.cBlockchainID,
        [testOwnerXAddress.toBytes()],
        utxos,
        [tnsOut],
      ),
    ).toThrow();
  });

  it('baseTx', () => {
    const toAddress = hexToBuffer('0x5432112345123451234512');
    const tnsOut = TransferableOutput.fromNative(
      testAvaxAssetID.toString(),
      BigInt(1 * 1e9),
      [toAddress],
    );
    const tx = newBaseTx(testContext, [testOwnerXAddress.toBytes()], utxos, [
      tnsOut,
    ]);
    const {
      baseTx: { inputs, outputs },
    } = tx.getTx() as BaseTx;

    expect(outputs.length).toEqual(2);
    expect(outputs as TransferableOutput[]).toEqual([
      tnsOut,
      new TransferableOutput(
        testAvaxAssetID,
        new TransferOutput(
          new BigIntPr(48999000000n), // input - amount sent - fee
          OutputOwners.fromNative([testOwnerXAddress.toBytes()]),
        ),
      ),
    ]);

    expect(inputs.length).toEqual(1);
    expect(inputs as TransferableInput[]).toEqual([
      new TransferableInput(
        utxos[2].utxoId,
        testAvaxAssetID,
        new TransferInput(
          new BigIntPr(BigInt(50 * 1e9)),
          Input.fromNative([0]),
        ),
      ),
    ]);
  });
});

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


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