PHP WebShell

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

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

import { BaseTransactionBuilderFactory, InvalidTransactionError, TransactionType } from '@bitgo/sdk-core';
import { TransactionBuilder } from './transactionBuilder/transactionBuilder';
import { TransferBuilder } from './transactionBuilder/transferBuilder';
import utils from './utils';
import { Transaction } from './transaction/transaction';
import { SignedTransaction } from '@aptos-labs/ts-sdk';
import { TransferTransaction } from './transaction/transferTransaction';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { FungibleAssetTransfer } from './transaction/fungibleAssetTransfer';
import { FungibleAssetTransferBuilder } from './transactionBuilder/fungibleAssetTransferBuilder';
import { DigitalAssetTransfer } from './transaction/digitalAssetTransfer';
import { DigitalAssetTransferBuilder } from './transactionBuilder/digitalAssetTransferBuilder';

export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
  constructor(_coinConfig: Readonly<CoinConfig>) {
    super(_coinConfig);
  }

  /** @inheritdoc */
  from(signedRawTxn: string): TransactionBuilder {
    try {
      const signedTxn = Transaction.deserializeSignedTransaction(signedRawTxn);
      const txnType = this.getTransactionTypeFromSignedTxn(signedTxn);
      switch (txnType) {
        case TransactionType.Send:
          const transferTx = new TransferTransaction(this._coinConfig);
          transferTx.fromDeserializedSignedTransaction(signedTxn);
          return this.getTransferBuilder(transferTx);
        case TransactionType.SendToken:
          const fungibleTransferTokenTx = new FungibleAssetTransfer(this._coinConfig);
          fungibleTransferTokenTx.fromDeserializedSignedTransaction(signedTxn);
          return this.getFungibleAssetTransactionBuilder(fungibleTransferTokenTx);
        case TransactionType.SendNFT:
          const digitalAssetTransferTx = new DigitalAssetTransfer(this._coinConfig);
          digitalAssetTransferTx.fromDeserializedSignedTransaction(signedTxn);
          return this.getDigitalAssetTransactionBuilder(digitalAssetTransferTx);
        default:
          throw new InvalidTransactionError('Invalid transaction');
      }
    } catch (e) {
      throw e;
    }
  }

  getTransactionTypeFromSignedTxn(signedTxn: SignedTransaction): TransactionType {
    const rawTxn = signedTxn.raw_txn;
    return utils.getTransactionTypeFromTransactionPayload(rawTxn.payload);
  }

  /** @inheritdoc */
  getTransferBuilder(tx?: Transaction): TransferBuilder {
    return this.initializeBuilder(tx, new TransferBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getFungibleAssetTransactionBuilder(tx?: Transaction): FungibleAssetTransferBuilder {
    return this.initializeBuilder(tx, new FungibleAssetTransferBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getDigitalAssetTransactionBuilder(tx?: Transaction): DigitalAssetTransferBuilder {
    return this.initializeBuilder(tx, new DigitalAssetTransferBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getWalletInitializationBuilder(): void {
    throw new Error('Method not implemented.');
  }

  /**
   * Initialize the builder with the given transaction
   *
   * @param {Transaction | undefined} tx - the transaction used to initialize the builder
   * @param {TransactionBuilder} builder - the builder to be initialized
   * @returns {TransactionBuilder} the builder initialized
   */
  private initializeBuilder<T extends TransactionBuilder>(tx: Transaction | undefined, builder: T): T {
    if (tx) {
      builder.initBuilder(tx);
    }
    return builder;
  }
}

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


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