PHP WebShell

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

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

import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { proto } from '@hashgraph/proto';
import {
  BaseKey,
  BuildTransactionError,
  InvalidParameterValueError,
  SigningError,
  TransactionType,
} from '@bitgo/sdk-core';
import { Recipient } from './iface';
import { TransactionBuilder } from './transactionBuilder';
import { Transaction } from './transaction';
import { isValidAddress, isValidAmount } from './utils';
import { DEFAULT_SIGNER_NUMBER } from './constants';

export class TransferBuilder extends TransactionBuilder {
  protected readonly _txBodyData: proto.CryptoTransferTransactionBody;
  protected _recipients: Recipient[];

  constructor(_coinConfig: Readonly<CoinConfig>) {
    super(_coinConfig);
    this._txBodyData = new proto.CryptoTransferTransactionBody();
    this._txBody.cryptoTransfer = this._txBodyData;
    this._recipients = [];
  }

  /** @inheritdoc */
  protected async buildImplementation(): Promise<Transaction> {
    this.transaction.setTransactionType(TransactionType.Send);
    return await super.buildImplementation();
  }

  /** @inheritdoc */
  protected signImplementation(key: BaseKey): Transaction {
    if (this._multiSignerKeyPairs.length >= DEFAULT_SIGNER_NUMBER) {
      throw new SigningError('A maximum of ' + DEFAULT_SIGNER_NUMBER + ' can sign the transaction.');
    }
    return super.signImplementation(key);
  }

  // region Transfer fields
  /**
   * Set the recipient to be transferred
   *
   * @param {Recipient} recipient - recipient to transfer consisting destination address and amount
   * @returns {TransferBuilder} - The builder with the new parameter set
   */
  send(recipient: Recipient): this {
    if (!isValidAddress(recipient.address)) {
      throw new InvalidParameterValueError('Invalid address');
    }
    if (!isValidAmount(recipient.amount)) {
      throw new InvalidParameterValueError('Invalid amount');
    }
    this._recipients.push(recipient);
    return this;
  }
  // endregion

  // region Validators
  validateMandatoryFields(): void {
    if (this._recipients.length === 0) {
      throw new BuildTransactionError('Invalid transaction: missing recipients');
    }
    super.validateMandatoryFields();
  }
  // endregion
}

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


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