locklift
Version:
Node JS framework for working with Ever contracts. Inspired by Truffle and Hardhat. Helps you to build, test, run and maintain your smart contracts.
41 lines (40 loc) • 1.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTokenBalanceChange = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const utils_1 = require("../../utils");
const getTokenBalanceChange = (viewTrace, tokenWallet) => {
const msg = viewTrace.decodedMsg;
const balanceChange = viewTrace.contract.contract.address.equals((0, utils_1.extractAddress)(tokenWallet)) && isChangeTokenBalanceTransaction(msg)
? getBalanceUpdates({ amount: msg.params.amount, method: msg.method })
: new bignumber_js_1.default(0);
return viewTrace.outTraces.reduce((acc, internalTrace) => acc.plus((0, exports.getTokenBalanceChange)(internalTrace, tokenWallet)), balanceChange);
};
exports.getTokenBalanceChange = getTokenBalanceChange;
var BalanceChange;
(function (BalanceChange) {
BalanceChange["INCREASE"] = "INCREASE";
BalanceChange["DECREASE"] = "DECREASE";
})(BalanceChange || (BalanceChange = {}));
const tokenTransferMatchers = {
transfer: BalanceChange.DECREASE,
transferToWallet: BalanceChange.DECREASE,
burn: BalanceChange.DECREASE,
acceptTransfer: BalanceChange.INCREASE,
acceptMint: BalanceChange.INCREASE,
};
const getBalanceUpdates = ({ amount, method, }) => {
const operation = tokenTransferMatchers[method];
switch (operation) {
case BalanceChange.INCREASE:
return new bignumber_js_1.default(amount);
case BalanceChange.DECREASE:
return new bignumber_js_1.default(amount).negated();
}
};
const isChangeTokenBalanceTransaction = (msg) => {
return !!msg?.method && msg.method !== "constructor" && !!tokenTransferMatchers[msg.method];
};