stellar-plus
Version:
beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain
49 lines (48 loc) • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExtractTransactionResourcesPlugin = void 0;
const tslib_1 = require("tslib");
const types_1 = require("../../../../../../stellar-plus/core/pipelines/simulate-transaction/types");
class ExtractTransactionResourcesPlugin {
constructor(callback) {
this.type = types_1.SimulateTransactionPipelineType.id;
this.name = 'ExtractTransactionResourcesPlugin';
this.callback = callback;
}
postProcess(item, meta) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b;
const simulatedTransaction = item.response;
const calculateEventSize = (event) => {
var _a;
if (((_a = event.event()) === null || _a === void 0 ? void 0 : _a.type().name) === 'diagnostic') {
return 0;
}
return event.toXDR().length;
};
const sorobanTransactionData = simulatedTransaction.transactionData.build();
const events = (_a = simulatedTransaction.events) === null || _a === void 0 ? void 0 : _a.map((event) => calculateEventSize(event));
const returnValueSize = (_b = simulatedTransaction.result) === null || _b === void 0 ? void 0 : _b.retval.toXDR().length;
const transactionDataSize = sorobanTransactionData.toXDR().length;
const eventsSize = events === null || events === void 0 ? void 0 : events.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
const resources = {
cpuInstructions: Number(sorobanTransactionData === null || sorobanTransactionData === void 0 ? void 0 : sorobanTransactionData.resources().instructions()),
ram: 0, //Number(simulatedTransaction.cost?.memBytes), //Review during refactor for v1
minResourceFee: Number(simulatedTransaction.minResourceFee),
ledgerReadBytes: sorobanTransactionData === null || sorobanTransactionData === void 0 ? void 0 : sorobanTransactionData.resources().readBytes(),
ledgerWriteBytes: sorobanTransactionData === null || sorobanTransactionData === void 0 ? void 0 : sorobanTransactionData.resources().writeBytes(),
ledgerEntryReads: sorobanTransactionData === null || sorobanTransactionData === void 0 ? void 0 : sorobanTransactionData.resources().footprint().readOnly().length,
ledgerEntryWrites: sorobanTransactionData === null || sorobanTransactionData === void 0 ? void 0 : sorobanTransactionData.resources().footprint().readWrite().length,
eventSize: eventsSize,
returnValueSize: returnValueSize,
transactionSize: transactionDataSize,
};
const updatedItem = Object.assign(Object.assign({}, item), { output: Object.assign(Object.assign({}, item.output), { resources }) });
if (this.callback) {
this.callback(resources, meta.itemId);
}
return updatedItem;
});
}
}
exports.ExtractTransactionResourcesPlugin = ExtractTransactionResourcesPlugin;