PHP WebShell

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

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

import { CosmosTransaction, CosmosUtils, TransactionExplanation, TxData } from '@bitgo/abstract-cosmos';
import { Entry, InvalidTransactionError, TransactionRecipient, TransactionType } from '@bitgo/sdk-core';
import { BabylonSpecificMessages, WithdrawRewardMessage } from './iface';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { UNAVAILABLE_TEXT } from './constants';

export class BabylonTransaction extends CosmosTransaction<BabylonSpecificMessages> {
  constructor(_coinConfig: Readonly<CoinConfig>, _utils: CosmosUtils<BabylonSpecificMessages>) {
    super(_coinConfig, _utils);
  }

  override explainTransactionInternal(
    json: TxData<BabylonSpecificMessages>,
    explanationResult: TransactionExplanation
  ): TransactionExplanation {
    let outputs: TransactionRecipient[];
    let outputAmount;
    switch (json.type) {
      case TransactionType.CustomTx:
        explanationResult.type = TransactionType.CustomTx;
        outputAmount = BigInt(0);
        outputs = json.sendMessages.flatMap((message) => {
          const value = message.value as BabylonSpecificMessages;
          switch (value._kind) {
            case 'CreateBtcDelegation':
              return [];
            case 'WithdrawReward':
              return [
                {
                  address: (value as WithdrawRewardMessage).address,
                  amount: UNAVAILABLE_TEXT,
                },
              ];
            default:
              throw new InvalidTransactionError(`Unsupported BabylonSpecificMessages message`);
          }
        });
        break;
      default:
        return super.explainTransactionInternal(json, explanationResult);
    }
    if (json.memo) {
      outputs.forEach((output) => {
        output.memo = json.memo;
      });
    }
    return {
      ...explanationResult,
      outputAmount: outputAmount?.toString(),
      outputs,
    };
  }

  override loadInputsAndOutputs(): void {
    if (this.type === undefined || !this.cosmosLikeTransaction) {
      throw new InvalidTransactionError('Transaction type or cosmosLikeTransaction is not set');
    }

    const outputs: Entry[] = [];
    const inputs: Entry[] = [];
    switch (this.type) {
      case TransactionType.CustomTx:
        this.cosmosLikeTransaction.sendMessages.forEach((message) => {
          const value = message.value as BabylonSpecificMessages;
          switch (value._kind) {
            case 'CreateBtcDelegation':
              break;
            case 'WithdrawReward':
              inputs.push({
                address: (value as WithdrawRewardMessage).address,
                value: UNAVAILABLE_TEXT,
                coin: this._coinConfig.name,
              });
              outputs.push({
                address: (value as WithdrawRewardMessage).address,
                value: UNAVAILABLE_TEXT,
                coin: this._coinConfig.name,
              });
              break;
            default:
              throw new InvalidTransactionError(`Unsupported BabylonSpecificMessages message`);
          }
        });
        break;
      default:
        return super.loadInputsAndOutputs();
    }
    this._inputs = inputs;
    this._outputs = outputs;
  }
}

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


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