stellar-plus
Version:
beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain
54 lines (53 loc) • 2.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeeBumpWrapperPlugin = void 0;
const tslib_1 = require("tslib");
const classic_sign_requirements_1 = require("../../../../../../stellar-plus/core/pipelines/classic-sign-requirements");
const fee_bump_1 = require("../../../../../../stellar-plus/core/pipelines/fee-bump");
const sign_transaction_1 = require("../../../../../../stellar-plus/core/pipelines/sign-transaction");
const types_1 = require("../../../../../../stellar-plus/core/pipelines/submit-transaction/types");
class FeeBumpWrapperPlugin {
constructor(feeBumpHeader) {
this.type = types_1.SubmitTransactionPipelineType.id;
this.name = 'FeeBumpWrapperPlugin';
this.feeBumpHeader = feeBumpHeader;
}
preProcess(item, meta) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { itemId } = meta;
const { transaction } = item;
if (transaction.innerTransaction) {
throw new Error('Transaction is already a FeeBump, FeeBumpWrapperPlugin should not be used');
}
//
//
// No fee bump is applied if both conditions are met:
// - source is the same for the fee bump and the transaction
// - fee in the original transaction is equal or higher than the fee in the fee bump
//
// A Fee bump for the same source account is only effective if the fee is increased in the process.
// A lower or equal fee will result in errors during processing.
//
if (transaction.source === this.feeBumpHeader.header.source &&
transaction.fee >= this.feeBumpHeader.header.fee) {
return item;
}
const feeBumpPipeline = new fee_bump_1.FeeBumpPipeline();
const feeBumpEnvelope = yield feeBumpPipeline.execute({
innerTransaction: transaction,
feeBumpHeader: this.feeBumpHeader,
}, itemId);
const classicSignRequirementsPipeline = new classic_sign_requirements_1.ClassicSignRequirementsPipeline();
const classicSignRequirements = yield classicSignRequirementsPipeline.execute(feeBumpEnvelope, itemId);
const signTransactionPipeline = new sign_transaction_1.SignTransactionPipeline();
const signedTransaction = yield signTransactionPipeline.execute({
transaction: feeBumpEnvelope,
signatureRequirements: classicSignRequirements,
signers: this.feeBumpHeader.signers,
}, itemId);
const updatedItem = Object.assign(Object.assign({}, item), { transaction: signedTransaction });
return updatedItem;
});
}
}
exports.FeeBumpWrapperPlugin = FeeBumpWrapperPlugin;