@radixdlt/atom-transaction-mapping
Version:
54 lines • 2.98 kB
JavaScript
;
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