PHP WebShell

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

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

import { getBuilderFactory } from '../getBuilderFactory';
import { coins } from '@bitgo/statics';
import * as testData from '../../resources/apt';
import { TransactionType } from '@bitgo/sdk-core';
import should from 'should';
import { DigitalAssetTransfer } from '../../../src/lib/transaction/digitalAssetTransfer';

describe('Apt Digital Asset Transfer Builder', () => {
  const factory = getBuilderFactory('tapt');
  //TODO: change coin 'tapt' to digital asset (nft) when configured
  it('should build a digital asset transfer', async function () {
    const digitalAssetTransfer = new DigitalAssetTransfer(coins.get('tapt'));
    const txBuilder = factory.getDigitalAssetTransactionBuilder(digitalAssetTransfer);
    txBuilder.sender(testData.sender2.address);
    txBuilder.recipients(testData.digitalTokenRecipients);
    txBuilder.gasData({
      maxGasAmount: 200000,
      gasUnitPrice: 100,
    });
    txBuilder.assetId(testData.digitalAssetAddress);
    txBuilder.sequenceNumber(14);
    txBuilder.expirationTime(1736246155);
    txBuilder.addFeePayerAddress(testData.feePayer.address);
    const tx = (await txBuilder.build()) as DigitalAssetTransfer;
    should.equal(tx.sender, testData.sender2.address);
    should.equal(tx.recipients[0].address, testData.digitalTokenRecipients[0].address);
    should.equal(tx.recipient.address, testData.digitalTokenRecipients[0].address);
    should.equal(tx.assetId, testData.digitalAssetAddress);
    should.equal(tx.maxGasAmount, 200000);
    should.equal(tx.gasUnitPrice, 100);
    should.equal(tx.sequenceNumber, 14);
    should.equal(tx.expirationTime, 1736246155);
    should.equal(tx.type, TransactionType.SendNFT);
    tx.inputs.length.should.equal(1);
    tx.inputs[0].should.deepEqual({
      address: testData.sender2.address,
      value: testData.digitalTokenRecipients[0].amount,
      coin: 'tapt',
    });
    tx.outputs.length.should.equal(1);
    tx.outputs[0].should.deepEqual({
      address: testData.digitalTokenRecipients[0].address,
      value: testData.digitalTokenRecipients[0].amount,
      coin: 'tapt',
    });
    const rawTx = tx.toBroadcastFormat();
    should.equal(txBuilder.isValidRawTransaction(rawTx), true);
    rawTx.should.equal(
      '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e00000000000000020000000000000000000000000000000000000000000000000000000000000001066f626a656374087472616e736665720107000000000000000000000000000000000000000000000000000000000000000405746f6b656e05546f6b656e0002202e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd20f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9400d03000000000064000000000000008b037d670000000002030020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
    );
  });

  it('should build and send a signed tx', async function () {
    const txBuilder = factory.from(testData.DIGITAL_ASSET_TRANSFER);
    const tx = (await txBuilder.build()) as DigitalAssetTransfer;
    should.equal(tx.type, TransactionType.SendNFT);
    tx.inputs.length.should.equal(1);
    tx.inputs[0].should.deepEqual({
      address: testData.sender2.address,
      value: testData.digitalTokenRecipients[0].amount,
      coin: 'tapt',
    });
    tx.outputs.length.should.equal(1);
    tx.outputs[0].should.deepEqual({
      address: testData.digitalTokenRecipients[0].address,
      value: testData.digitalTokenRecipients[0].amount,
      coin: 'tapt',
    });
    should.equal(tx.id, '0x3a97bbf538a73f98625b65c770bbf69d032ac18cd028b871182a127f10ab5666');
    should.equal(tx.maxGasAmount, 200000);
    should.equal(tx.gasUnitPrice, 100);
    should.equal(tx.sequenceNumber, 171);
    should.equal(tx.expirationTime, 1738041170);
    should.equal(tx.type, TransactionType.SendNFT);
    const rawTx = tx.toBroadcastFormat();
    should.equal(txBuilder.isValidRawTransaction(rawTx), true);
    should.equal(rawTx, testData.DIGITAL_ASSET_TRANSFER);
  });

  it('should succeed to validate a valid signablePayload', async function () {
    const transaction = new DigitalAssetTransfer(coins.get('tapt'));
    const txBuilder = factory.getDigitalAssetTransactionBuilder(transaction);
    txBuilder.sender(testData.sender2.address);
    txBuilder.recipients([testData.digitalTokenRecipients[0]]);
    txBuilder.gasData({
      maxGasAmount: 200000,
      gasUnitPrice: 100,
    });
    txBuilder.sequenceNumber(14);
    txBuilder.expirationTime(1736246155);
    txBuilder.assetId(testData.digitalAssetAddress);
    txBuilder.addFeePayerAddress(testData.feePayer.address);
    const tx = (await txBuilder.build()) as DigitalAssetTransfer;
    const signablePayload = tx.signablePayload;
    should.equal(
      signablePayload.toString('hex'),
      '5efa3c4f02f83a0f4b2d69fc95c607cc02825cc4e7be536ef0992df050d9e67c011aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e00000000000000020000000000000000000000000000000000000000000000000000000000000001066f626a656374087472616e736665720107000000000000000000000000000000000000000000000000000000000000000405746f6b656e05546f6b656e0002202e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd20f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9400d03000000000064000000000000008b037d67000000000200dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2'
    );
  });

  it('should build a unsigned tx and validate its toJson', async function () {
    const transaction = new DigitalAssetTransfer(coins.get('tapt'));
    const txBuilder = factory.getDigitalAssetTransactionBuilder(transaction);
    txBuilder.sender(testData.sender2.address);
    txBuilder.recipients([testData.digitalTokenRecipients[0]]);
    txBuilder.gasData({
      maxGasAmount: 200000,
      gasUnitPrice: 100,
    });
    txBuilder.sequenceNumber(14);
    txBuilder.expirationTime(1736246155);
    txBuilder.assetId(testData.digitalAssetAddress);
    txBuilder.addFeePayerAddress(testData.feePayer.address);
    const tx = (await txBuilder.build()) as DigitalAssetTransfer;
    const toJson = tx.toJson();
    should.equal(toJson.sender, testData.sender2.address);
    should.deepEqual(toJson.recipients, [
      {
        address: testData.digitalTokenRecipients[0].address,
        amount: testData.digitalTokenRecipients[0].amount,
      },
    ]);
    should.deepEqual(toJson.recipient, {
      address: testData.digitalTokenRecipients[0].address,
      amount: testData.digitalTokenRecipients[0].amount,
    });
    should.equal(toJson.sequenceNumber, 14);
    should.equal(tx.assetId, testData.digitalAssetAddress);
    should.equal(toJson.maxGasAmount, 200000);
    should.equal(toJson.gasUnitPrice, 100);
    should.equal(toJson.expirationTime, 1736246155);
    should.equal(toJson.feePayer, testData.feePayer.address);
  });

  it('should build a signed tx and validate its toJson', async function () {
    const txBuilder = factory.from(testData.DIGITAL_ASSET_TRANSFER);
    const tx = (await txBuilder.build()) as DigitalAssetTransfer;
    const toJson = tx.toJson();
    should.equal(toJson.id, '0x3a97bbf538a73f98625b65c770bbf69d032ac18cd028b871182a127f10ab5666');
    should.equal(toJson.sender, testData.sender2.address);
    should.deepEqual(toJson.recipients, [
      {
        address: testData.digitalTokenRecipients[0].address,
        amount: testData.digitalTokenRecipients[0].amount.toString(),
      },
    ]);
    should.deepEqual(toJson.recipient, {
      address: testData.digitalTokenRecipients[0].address,
      amount: testData.digitalTokenRecipients[0].amount.toString(),
    });
    should.equal(tx.assetId, testData.digitalAssetAddress);
    should.equal(toJson.sequenceNumber, 171);
    should.equal(toJson.maxGasAmount, 200000);
    should.equal(toJson.gasUnitPrice, 100);
    should.equal(toJson.expirationTime, 1738041170);
  });

  describe('should test for deprecated field recipient in building transaction, without usage of recipients', () => {
    it('should build a digital asset transfer', async function () {
      const digitalAssetTransfer = new DigitalAssetTransfer(coins.get('tapt'));
      const txBuilder = factory.getDigitalAssetTransactionBuilder(digitalAssetTransfer);
      txBuilder.sender(testData.sender2.address);
      txBuilder.recipient(testData.digitalTokenRecipients[0]);
      txBuilder.gasData({
        maxGasAmount: 200000,
        gasUnitPrice: 100,
      });
      txBuilder.assetId(testData.digitalAssetAddress);
      txBuilder.sequenceNumber(14);
      txBuilder.expirationTime(1736246155);
      txBuilder.addFeePayerAddress(testData.feePayer.address);
      const tx = (await txBuilder.build()) as DigitalAssetTransfer;
      should.equal(tx.sender, testData.sender2.address);
      should.equal(tx.recipient.address, testData.digitalTokenRecipients[0].address);
      should.equal(tx.assetId, testData.digitalAssetAddress);
      should.equal(tx.maxGasAmount, 200000);
      should.equal(tx.gasUnitPrice, 100);
      should.equal(tx.sequenceNumber, 14);
      should.equal(tx.expirationTime, 1736246155);
      should.equal(tx.type, TransactionType.SendNFT);
      tx.inputs.length.should.equal(1);
      tx.inputs[0].should.deepEqual({
        address: testData.sender2.address,
        value: testData.digitalTokenRecipients[0].amount,
        coin: 'tapt',
      });
      tx.outputs.length.should.equal(1);
      tx.outputs[0].should.deepEqual({
        address: testData.digitalTokenRecipients[0].address,
        value: testData.digitalTokenRecipients[0].amount,
        coin: 'tapt',
      });
      const rawTx = tx.toBroadcastFormat();
      should.equal(txBuilder.isValidRawTransaction(rawTx), true);
      rawTx.should.equal(
        '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e00000000000000020000000000000000000000000000000000000000000000000000000000000001066f626a656374087472616e736665720107000000000000000000000000000000000000000000000000000000000000000405746f6b656e05546f6b656e0002202e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd20f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9400d03000000000064000000000000008b037d670000000002030020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
      );
      const toJson = tx.toJson();
      should.equal(toJson.sender, testData.sender2.address);
      should.deepEqual(toJson.recipient, {
        address: testData.digitalTokenRecipients[0].address,
        amount: testData.digitalTokenRecipients[0].amount,
      });
      should.equal(toJson.sequenceNumber, 14);
      should.equal(tx.assetId, testData.digitalAssetAddress);
      should.equal(toJson.maxGasAmount, 200000);
      should.equal(toJson.gasUnitPrice, 100);
      should.equal(toJson.expirationTime, 1736246155);
      should.equal(toJson.feePayer, testData.feePayer.address);
    });

    it('should build and send a signed tx', async function () {
      const txBuilder = factory.from(testData.DIGITAL_ASSET_TRANSFER);
      const tx = (await txBuilder.build()) as DigitalAssetTransfer;
      should.equal(tx.type, TransactionType.SendNFT);
      tx.inputs.length.should.equal(1);
      tx.inputs[0].should.deepEqual({
        address: testData.sender2.address,
        value: testData.digitalTokenRecipients[0].amount,
        coin: 'tapt',
      });
      tx.outputs.length.should.equal(1);
      tx.outputs[0].should.deepEqual({
        address: testData.digitalTokenRecipients[0].address,
        value: testData.digitalTokenRecipients[0].amount,
        coin: 'tapt',
      });
      should.equal(tx.id, '0x3a97bbf538a73f98625b65c770bbf69d032ac18cd028b871182a127f10ab5666');
      should.equal(tx.maxGasAmount, 200000);
      should.equal(tx.gasUnitPrice, 100);
      should.equal(tx.sequenceNumber, 171);
      should.equal(tx.expirationTime, 1738041170);
      should.equal(tx.type, TransactionType.SendNFT);
      const rawTx = tx.toBroadcastFormat();
      should.equal(txBuilder.isValidRawTransaction(rawTx), true);
      should.equal(rawTx, testData.DIGITAL_ASSET_TRANSFER);
      const toJson = tx.toJson();
      should.equal(toJson.id, '0x3a97bbf538a73f98625b65c770bbf69d032ac18cd028b871182a127f10ab5666');
      should.equal(toJson.sender, testData.sender2.address);
      should.deepEqual(toJson.recipient, {
        address: testData.digitalTokenRecipients[0].address,
        amount: testData.digitalTokenRecipients[0].amount.toString(),
      });
      should.equal(tx.assetId, testData.digitalAssetAddress);
      should.equal(toJson.sequenceNumber, 171);
      should.equal(toJson.maxGasAmount, 200000);
      should.equal(toJson.gasUnitPrice, 100);
      should.equal(toJson.expirationTime, 1738041170);
    });
  });
});

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


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