PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-stx/src/lib
Просмотр файла: transactionBuilderFactory.ts
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { BufferReader, deserializeTransaction, PayloadType } from '@stacks/transactions';
import {
BaseTransactionBuilderFactory,
InvalidTransactionError,
NotImplementedError,
ParseTransactionError,
} from '@bitgo/sdk-core';
import { TransferBuilder } from './transferBuilder';
import { TransactionBuilder } from './transactionBuilder';
import { Transaction } from './transaction';
import { ContractBuilder } from './contractBuilder';
import { Utils } from '.';
import { SendmanyBuilder } from './sendmanyBuilder';
import { FungibleTokenTransferBuilder } from './fungibleTokenTransferBuilder';
export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
constructor(_coinConfig: Readonly<CoinConfig>) {
super(_coinConfig);
}
/** @inheritdoc */
from(raw: string): TransactionBuilder {
this.validateRawTransaction(raw);
try {
const tx = this.parseTransaction(raw);
switch (tx.stxTransaction.payload.payloadType) {
case PayloadType.TokenTransfer:
return this.getTransferBuilder(tx);
case PayloadType.ContractCall:
if (SendmanyBuilder.isValidContractCall(this._coinConfig, tx.stxTransaction.payload)) {
return this.getSendmanyBuilder(tx);
}
if (FungibleTokenTransferBuilder.isFungibleTokenTransferContractCall(tx.stxTransaction.payload)) {
return this.getFungibleTokenTransferBuilder(tx);
}
return this.getContractBuilder(tx);
default:
throw new InvalidTransactionError('Invalid transaction');
}
} catch (e) {
console.error(e);
throw new ParseTransactionError('There was an error parsing the raw transaction');
}
}
private parseTransaction(rawTransaction: string): Transaction {
const tx = new Transaction(this._coinConfig);
const stackstransaction = deserializeTransaction(
BufferReader.fromBuffer(Buffer.from(Utils.removeHexPrefix(rawTransaction), 'hex'))
);
tx.stxTransaction = stackstransaction;
return tx;
}
/** @inheritdoc */
getWalletInitializationBuilder(tx?: Transaction): void {
throw new NotImplementedError('method not implemented');
}
/** @inheritdoc */
getTransferBuilder(tx?: Transaction): TransferBuilder {
return TransactionBuilderFactory.initializeBuilder(new TransferBuilder(this._coinConfig), tx);
}
getContractBuilder(tx?: Transaction): ContractBuilder {
return TransactionBuilderFactory.initializeBuilder(new ContractBuilder(this._coinConfig), tx);
}
getSendmanyBuilder(tx?: Transaction): SendmanyBuilder {
return TransactionBuilderFactory.initializeBuilder(new SendmanyBuilder(this._coinConfig), tx);
}
getFungibleTokenTransferBuilder(tx?: Transaction): FungibleTokenTransferBuilder {
return TransactionBuilderFactory.initializeBuilder(new FungibleTokenTransferBuilder(this._coinConfig), tx);
}
/**
* 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 static initializeBuilder<T extends TransactionBuilder>(builder: T, tx: Transaction | undefined): T {
if (tx) {
builder.initBuilder(tx);
}
return builder;
}
/** @inheritdoc */
validateRawTransaction(rawTransaction: unknown): void {
if (!rawTransaction) {
throw new InvalidTransactionError('Raw transaction is empty');
}
if (!Utils.isValidRawTransaction(rawTransaction)) {
throw new ParseTransactionError('Invalid raw transaction');
}
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!