UNPKG

@radixdlt/atom-transaction-mapping

Version:
54 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.burnTokensActionToParticleGroupsMapper = void 0; const actions_1 = require("@radixdlt/actions"); const atom_1 = require("@radixdlt/atom"); const neverthrow_1 = require("neverthrow"); const fungibleParticleTransitioner_1 = require("./fungibleParticleTransitioner"); const validation_1 = require("./validation"); const utils_1 = require("./utils"); const particleGroupsFromBurnTokensAction = (input) => { const burnAction = input.burnTokensAction; const transitioner = fungibleParticleTransitioner_1.makeTransitioner({ inputAmountMapper: (from) => from.amount, inputCreator: utils_1.transferrableTokensParticleFromOther.bind(null, burnAction.sender), outputCreator: (amount, fromTTP) => neverthrow_1.ok(atom_1.unallocatedTokensParticle(Object.assign(Object.assign({}, fromTTP), { permissions: fromTTP.permissions.permissions, amount, nonce: undefined }))), }); const consumableParticles = input.upParticles .map((sp) => sp.particle) .filter((p) => p.resourceIdentifier.equals(burnAction.resourceIdentifier)); return transitioner .transition({ currentParticles: consumableParticles, totalAmountToTransfer: burnAction.amount, }) .map((spp) => atom_1.spunParticles(spp)) .map((sps) => [atom_1.ParticleGroup.create(sps)]); }; const tokenDefinitionValidation = (input) => { if (!atom_1.isMutableTokenDefinitionParticle(input.tokenDefinitionParticle)) { return neverthrow_1.err(new Error(`Can only burn tokens with mutable supply.`)); } const mutableToken = input.tokenDefinitionParticle; const isTokenOwner = () => mutableToken.resourceIdentifier.address.equals(input.burner); if (!mutableToken.permissions.canBeBurned(isTokenOwner)) { return neverthrow_1.err(new Error(`Not permission to burn token.`)); } return neverthrow_1.ok({ witness: 'Has permission to burn' }); }; const burnTokensActionToParticleGroupsMapper = () => { const actionType = actions_1.UserActionType.BURN_TOKENS; return { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment actionType, particleGroupsFromAction: (input) => validation_1.validate(validation_1.validateUserActionSender, validation_1.validateUserActionType(actionType), validation_1.validateConsumeTokensAction(tokenDefinitionValidation))(input) .andThen((res) => neverthrow_1.combine(utils_1.collectUpParticles(res))) .andThen((upParticles) => particleGroupsFromBurnTokensAction({ burnTokensAction: input.action, upParticles: upParticles, addressOfActiveAccount: input.addressOfActiveAccount, })), }; }; exports.burnTokensActionToParticleGroupsMapper = burnTokensActionToParticleGroupsMapper; //# sourceMappingURL=burnTokensActionToParticleGroupsMapper.js.map