@bithomp/xrpl-api
Version:
A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger
88 lines (87 loc) • 3.49 kB
JavaScript
"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,
});
}
}
}
}
}