@radixdlt/atom-transaction-mapping
Version:
49 lines • 2.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeSimpleTransitioner = exports.makeTransitioner = void 0;
const atom_1 = require("@radixdlt/atom");
const primitives_1 = require("@radixdlt/primitives");
const neverthrow_1 = require("neverthrow");
/* eslint-disable functional/immutable-data, functional/no-let, functional/no-loop-statement, prefer-const, max-lines-per-function */
const makeTransitioner = (input) => {
const inputAmountMapper = input.inputAmountMapper;
const inputCreator = input.inputCreator;
const outputCreator = input.outputCreator;
return {
// eslint-disable-next-line complexity
transition: (input) => {
let spunParticles = [];
let amountLeftToTransfer = input.totalAmountToTransfer;
for (const currentParticle of input.currentParticles) {
spunParticles.push(atom_1.spunDownParticle(currentParticle));
const particleAmount = inputAmountMapper(currentParticle);
if (particleAmount.greaterThan(amountLeftToTransfer)) {
const sendBackToSelf = particleAmount
.subtracting(amountLeftToTransfer)
.unwrapOr(primitives_1.zero);
const migratedResult = inputCreator(sendBackToSelf, currentParticle);
if (migratedResult.isErr())
return neverthrow_1.err(new Error('Failed to migrate particle'));
spunParticles.push(atom_1.spunUpParticle(migratedResult.value));
}
if (particleAmount.greaterThanOrEquals(amountLeftToTransfer)) {
const outputResult = outputCreator(input.totalAmountToTransfer, currentParticle);
if (outputResult.isErr())
return neverthrow_1.err(new Error('Failed to create output particle'));
spunParticles.push(atom_1.spunUpParticle(outputResult.value));
return neverthrow_1.ok(spunParticles);
}
amountLeftToTransfer = amountLeftToTransfer
.subtracting(particleAmount)
.unwrapOr(primitives_1.zero);
}
return neverthrow_1.err(new Error('Insufficient balance.'));
},
};
};
exports.makeTransitioner = makeTransitioner;
const makeSimpleTransitioner = (input) => {
return exports.makeTransitioner(Object.assign(Object.assign({}, input), { inputCreator: (amount, _) => neverthrow_1.ok(input.inputCreator(amount)), outputCreator: (amount, _) => neverthrow_1.ok(input.outputCreator(amount)) }));
};
exports.makeSimpleTransitioner = makeSimpleTransitioner;
//# sourceMappingURL=fungibleParticleTransitioner.js.map