UNPKG

stellar-plus

Version:

beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain

49 lines (48 loc) 3.18 kB
"use strict"; 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;