UNPKG

@bithomp/xrpl-api

Version:

A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger

88 lines (87 loc) 3.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseMPTokenChanges = parseMPTokenChanges; const bignumber_js_1 = __importDefault(require("bignumber.js")); const common_1 = require("../../common"); function parseMPTokenChanges(tx) { return new MPTokenChanges(tx).call(); } class MPTokenChanges { constructor(tx) { this.tx = tx; this.changes = {}; } call() { if (this.hasAffectedNodes() === false) { return this.changes; } this.parseAffectedNodes(); return this.changes; } hasAffectedNodes() { if (this.tx.meta?.AffectedNodes === undefined) { return false; } if (this.tx.meta?.AffectedNodes?.length === 0) { return false; } return true; } addChange(mptIssuanceID, account, change) { if (!this.changes[mptIssuanceID]) { this.changes[mptIssuanceID] = {}; } this.changes[mptIssuanceID][account] = (0, common_1.removeUndefined)(change); } parseAffectedNodes() { for (const affectedNode of this.tx.meta.AffectedNodes) { const node = affectedNode.CreatedNode || affectedNode.ModifiedNode || affectedNode.DeletedNode; if (node?.LedgerEntryType === "MPToken" && node?.LedgerIndex) { if (affectedNode.CreatedNode) { const mptIssuanceID = node.NewFields.MPTokenIssuanceID; const account = node.NewFields.Account; this.addChange(mptIssuanceID, account, { status: "added", flags: node.NewFields.Flags, mptIssuanceID, account, amount: node.NewFields.MPTAmount, }); } if (affectedNode.ModifiedNode) { const mptIssuanceID = node.FinalFields.MPTokenIssuanceID; const account = node.FinalFields.Account; let amountChange = new bignumber_js_1.default(node.FinalFields.MPTAmount ?? 0) .minus(node.PreviousFields.MPTAmount ?? 0) .toString(); if (amountChange === "0") { amountChange = undefined; } this.addChange(mptIssuanceID, account, { status: "modified", flags: node.FinalFields.Flags, mptIssuanceID, account, amount: node.FinalFields.MPTAmount, amountChange, flagsChange: node.PreviousFields.Flags, }); } if (affectedNode.DeletedNode) { const mptIssuanceID = node.FinalFields.MPTokenIssuanceID; const account = node.FinalFields.Account; this.addChange(mptIssuanceID, account, { status: "removed", flags: node.FinalFields.Flags, mptIssuanceID, account, amount: node.FinalFields.MPTAmount, }); } } } } }