PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-cspr/src/lib
Просмотр файла: transactionBuilderFactory.ts
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { DeployUtil } from 'casper-js-sdk';
import {
BaseTransactionBuilderFactory,
TransactionType,
InvalidTransactionError,
ParseTransactionError,
} from '@bitgo/sdk-core';
import { WalletInitializationBuilder } from './walletInitializationBuilder';
import { TransferBuilder } from './transferBuilder';
import { TransactionBuilder } from './transactionBuilder';
import { Transaction } from './transaction';
import { getDeployType } from './utils';
import { DelegateBuilder } from './delegateBuilder';
import { UndelegateBuilder } from './undelegateBuilder';
export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
constructor(_coinConfig: Readonly<CoinConfig>) {
super(_coinConfig);
}
/** @inheritdoc */
getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder {
return this.initializeBuilder(tx, new WalletInitializationBuilder(this._coinConfig));
}
/**
* Initialize an undelegate builder
*
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
* @returns {UndelegateBuilder} the builder initialized
*/
getUndelegateBuilder(tx?: Transaction): UndelegateBuilder {
return this.initializeBuilder(tx, new UndelegateBuilder(this._coinConfig));
}
/**
* Initialize an delegate builder
*
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
* @returns {DelegateBuilder} the builder initialized
*/
getDelegateBuilder(tx?: Transaction): DelegateBuilder {
return this.initializeBuilder(tx, new DelegateBuilder(this._coinConfig));
}
/** @inheritDoc */
getTransferBuilder(tx?: Transaction): TransferBuilder {
return this.initializeBuilder(tx, new TransferBuilder(this._coinConfig));
}
/** @inheritDoc */
from(raw: string): TransactionBuilder {
this.validateRawTransaction(raw);
const tx = new Transaction(this._coinConfig);
const deployJson = JSON.parse(raw);
try {
tx.casperTx = DeployUtil.deployFromJson(deployJson).unwrap();
} catch (e) {
throw new InvalidTransactionError('Invalid transaction: ' + e);
}
const casperDeployType = getDeployType(tx.casperTx.session);
switch (casperDeployType) {
case TransactionType.Send:
return this.getTransferBuilder(tx);
case TransactionType.WalletInitialization:
return this.getWalletInitializationBuilder(tx);
case TransactionType.StakingLock:
return this.getDelegateBuilder(tx);
case TransactionType.StakingUnlock:
return this.getUndelegateBuilder(tx);
default:
throw new InvalidTransactionError('Invalid transaction ' + tx.casperTx);
}
}
/**
* 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;
}
/**
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
*
* @param {any} rawTransaction - Transaction in any format
*/
private validateRawTransaction(rawTransaction: string) {
if (!rawTransaction) {
throw new ParseTransactionError('Invalid raw transaction: Undefined');
}
try {
JSON.parse(rawTransaction);
} catch (e) {
throw new ParseTransactionError('Invalid raw transaction format');
}
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!