PHP WebShell

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

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

import { BaseTransactionBuilderFactory, InvalidTransactionError } from '@bitgo/sdk-core';
import { TransferBuilder } from './transferBuilder';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { Transaction } from './transaction';
import { StakingBuilder } from './stakingBuilder';
import {
  CustomProgrammableTransaction,
  StakingProgrammableTransaction,
  SuiTransaction,
  SuiTransactionType,
  TransferProgrammableTransaction,
  UnstakingProgrammableTransaction,
  SuiProgrammableTransaction,
  TokenTransferProgrammableTransaction,
  WalrusStakingProgrammableTransaction,
  WalrusWithdrawStakeProgrammableTransaction,
} from './iface';
import { StakingTransaction } from './stakingTransaction';
import { TransferTransaction } from './transferTransaction';
import { TransactionBuilder } from './transactionBuilder';
import utils from './utils';
import { UnstakingBuilder } from './unstakingBuilder';
import { UnstakingTransaction } from './unstakingTransaction';
import { CustomTransaction } from './customTransaction';
import { CustomTransactionBuilder } from './customTransactionBuilder';
import { TokenTransferBuilder } from './tokenTransferBuilder';
import { TokenTransferTransaction } from './tokenTransferTransaction';
import { WalrusStakingBuilder } from './walrusStakingBuilder';
import { WalrusStakingTransaction } from './walrusStakingTransaction';
import { WalrusWithdrawStakeBuilder } from './walrusWithdrawStakeBuilder';
import { WalrusWithdrawStakeTransaction } from './walrusWithdrawStakeTransaction';

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

  /** @inheritdoc */
  from(raw: string): TransactionBuilder<SuiProgrammableTransaction> {
    utils.validateRawTransaction(raw);
    const tx = this.parseTransaction(raw);
    try {
      switch (tx.type) {
        case SuiTransactionType.Transfer:
          const transferTx = new TransferTransaction(this._coinConfig);
          transferTx.fromRawTransaction(raw);
          return this.getTransferBuilder(transferTx);
        case SuiTransactionType.AddStake:
          const stakingTransaction = new StakingTransaction(this._coinConfig);
          stakingTransaction.fromRawTransaction(raw);
          return this.getStakingBuilder(stakingTransaction);
        case SuiTransactionType.WithdrawStake:
          const unstakingTransaction = new UnstakingTransaction(this._coinConfig);
          unstakingTransaction.fromRawTransaction(raw);
          return this.getUnstakingBuilder(unstakingTransaction);
        case SuiTransactionType.CustomTx:
          const customTransaction = new CustomTransaction(this._coinConfig);
          customTransaction.fromRawTransaction(raw);
          return this.getCustomTransactionBuilder(customTransaction);
        case SuiTransactionType.TokenTransfer:
          const tokenTransferTx = new TokenTransferTransaction(this._coinConfig);
          tokenTransferTx.fromRawTransaction(raw);
          return this.getTokenTransferBuilder(tokenTransferTx);
        case SuiTransactionType.WalrusStakeWithPool:
          const walrusStakeTx = new WalrusStakingTransaction(this._coinConfig);
          walrusStakeTx.fromRawTransaction(raw);
          return this.getWalrusStakingBuilder(walrusStakeTx);
        case SuiTransactionType.WalrusRequestWithdrawStake:
        case SuiTransactionType.WalrusWithdrawStake:
          const walrusRequestWithdrawStakeTransaction = new WalrusWithdrawStakeTransaction(this._coinConfig);
          walrusRequestWithdrawStakeTransaction.fromRawTransaction(raw);
          return this.getWalrusRequestWithdrawStakeBuilder(walrusRequestWithdrawStakeTransaction);
        default:
          throw new InvalidTransactionError('Invalid transaction');
      }
    } catch (e) {
      throw e;
    }
  }

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

  /** @inheritdoc */
  getStakingBuilder(tx?: Transaction<StakingProgrammableTransaction>): StakingBuilder {
    return this.initializeBuilder(tx, new StakingBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getUnstakingBuilder(tx?: Transaction<UnstakingProgrammableTransaction>): UnstakingBuilder {
    return this.initializeBuilder(tx, new UnstakingBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getCustomTransactionBuilder(tx?: Transaction<CustomProgrammableTransaction>): CustomTransactionBuilder {
    return this.initializeBuilder(tx, new CustomTransactionBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getTokenTransferBuilder(tx?: Transaction<TokenTransferProgrammableTransaction>): TokenTransferBuilder {
    return this.initializeBuilder(tx, new TokenTransferBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getWalrusStakingBuilder(tx?: Transaction<WalrusStakingProgrammableTransaction>): WalrusStakingBuilder {
    return this.initializeBuilder(tx, new WalrusStakingBuilder(this._coinConfig));
  }

  /** @inheritdoc */
  getWalrusRequestWithdrawStakeBuilder(
    tx?: Transaction<WalrusWithdrawStakeProgrammableTransaction>
  ): WalrusWithdrawStakeBuilder {
    return this.initializeBuilder(tx, new WalrusWithdrawStakeBuilder(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<SuiProgrammableTransaction>>(
    tx: Transaction<SuiProgrammableTransaction> | undefined,
    builder: T
  ): T {
    if (tx) {
      builder.initBuilder(tx);
    }
    return builder;
  }

  /** Parse the transaction from a raw transaction
   *
   * @param {string} rawTransaction - the raw tx
   * @returns {Transaction} parsedtransaction
   */
  private parseTransaction(rawTransaction: string): SuiTransaction<SuiProgrammableTransaction> {
    return Transaction.deserializeSuiTransaction(rawTransaction);
  }
}

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


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