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.
51 lines (50 loc) • 2.36 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapParams = exports.extractFeeAndSentValueFromMessage = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const lodash_1 = __importDefault(require("lodash"));
const everscale_inpage_provider_1 = require("everscale-inpage-provider");
const utils_1 = require("../utils");
const extractFeeAndSentValueFromMessage = (traceTree) => {
const value = new bignumber_js_1.default(traceTree.msg.value || 0);
const totalFees = new bignumber_js_1.default(traceTree.msg.dstTransaction?.totalFees || 0)
.plus(traceTree.msg.dstTransaction?.action?.totalFwdFees || 0)
.minus(traceTree.msg.dstTransaction?.action?.totalActionFees || 0);
const sentValue = traceTree.outTraces.reduce((acc, next) => acc.plus(next.msg.value || 0), new bignumber_js_1.default(0));
return {
value,
totalFees,
sentValue,
balanceChange: value.minus(totalFees).minus(sentValue),
};
};
exports.extractFeeAndSentValueFromMessage = extractFeeAndSentValueFromMessage;
const mapParams = (obj, contracts, isFullPrint) => {
if (Array.isArray(obj)) {
return obj.map(mapRules(contracts, isFullPrint));
}
return (0, lodash_1.default)(obj).mapValues(mapRules(contracts, isFullPrint)).value();
};
exports.mapParams = mapParams;
const mapRules = (contracts, isFullPrint) => (value) => {
if (value instanceof everscale_inpage_provider_1.Address) {
const contractName = contracts?.filter(utils_1.isT).find(contract => contract.contract.address.equals(value))?.name;
const contractAddress = isFullPrint
? value.toString()
: value.toString().slice(0, 5) + "..." + value.toString().slice(-5);
return contractName ? `${contractName}(${contractAddress})` : contractAddress;
}
if (typeof value === "string" && value.length >= 20 && !isFullPrint) {
return value.slice(0, 4) + "..." + value.slice(-4);
}
if (Array.isArray(value)) {
return (0, exports.mapParams)(value, contracts);
}
if (typeof value === "object") {
return (0, exports.mapParams)(value, contracts);
}
return value;
};