UNPKG

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
"use strict"; 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]; };