UNPKG

@angleprotocol/sdk

Version:
120 lines 5.21 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isWhitelisted = exports.getWhitelist = exports.isBlacklisted = exports.getBlacklist = exports.buildPoolList = exports.tokensFromTree = exports.buildMerklTree = void 0; const ethers_1 = require("ethers"); const keccak256_1 = __importDefault(require("keccak256")); const merkletreejs_1 = __importDefault(require("merkletreejs")); const types_1 = require("../types"); const utils_1 = require("../types/utils"); const buildMerklTree = (underylingTreeData) => { var _a, _b; const users = []; for (const id of Object.keys(underylingTreeData)) { const rewardUsers = Object.keys(underylingTreeData[id].holders); for (const r of rewardUsers) { if (!users.includes(r)) { users.push(r); } } } const tokens = (0, exports.tokensFromTree)(underylingTreeData); const elements = []; for (const u of users) { for (const t of tokens) { let sum = ethers_1.BigNumber.from(0); for (const id of Object.keys(underylingTreeData)) { const distribution = underylingTreeData[id]; if (distribution.token === t) { sum = sum === null || sum === void 0 ? void 0 : sum.add((_b = (_a = distribution === null || distribution === void 0 ? void 0 : distribution.holders[u]) === null || _a === void 0 ? void 0 : _a.amount.toString()) !== null && _b !== void 0 ? _b : 0); } } const hash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'address', 'uint256'], [ethers_1.utils.getAddress(u), t, sum])); elements.push(hash); } } const tree = new merkletreejs_1.default(elements, keccak256_1.default, { hashLeaves: false, sortPairs: true, sortLeaves: true }); return { tokens, tree, }; }; exports.buildMerklTree = buildMerklTree; const tokensFromTree = (json) => { const tokens = []; for (const id of Object.keys(json)) { if (!tokens.includes(json[id].token)) { tokens.push(json[id].token); } } return tokens; }; exports.tokensFromTree = tokensFromTree; const buildPoolList = (chainId, data) => __awaiter(void 0, void 0, void 0, function* () { const pools = []; yield Promise.all(data.map((d) => __awaiter(void 0, void 0, void 0, function* () { return (() => __awaiter(void 0, void 0, void 0, function* () { try { const amm = yield (0, utils_1.fetchMerklAMMType)(chainId, d.base.uniV3Pool); if (!pools.map((pool) => pool.address).includes(d.base.uniV3Pool)) { pools.push({ address: d.base.uniV3Pool, amm: amm }); } } catch (_a) { console.log(`${d.base.uniV3Pool.toLowerCase()} not found in the graphs`); } }))(); }))); return pools; }); exports.buildPoolList = buildPoolList; const getBlacklist = (wrapperList, wrapperType) => { const blacklist = []; if (!wrapperList || wrapperList.length !== wrapperType.length) return blacklist; for (let k = 0; k < wrapperType.length; k++) { if (wrapperType[k] === types_1.BlacklistWrapper.Blacklist) { blacklist.push(wrapperList[k]); } } return blacklist; }; exports.getBlacklist = getBlacklist; const isBlacklisted = (user, wrapperList, wrapperType) => { const pos = wrapperList.indexOf(ethers_1.utils.getAddress(user)); if (pos === -1) return false; return wrapperType[pos] === types_1.BlacklistWrapper.Blacklist; }; exports.isBlacklisted = isBlacklisted; const getWhitelist = (wrapperList, wrapperType) => { const whitelist = []; if (!wrapperList || wrapperList.length !== wrapperType.length) return whitelist; for (let k = 0; k < wrapperType.length; k++) { if (wrapperType[k] === types_1.WhitelistWrapper.Whitelist) { whitelist.push(wrapperList[k]); } } return whitelist; }; exports.getWhitelist = getWhitelist; const isWhitelisted = (user, whitelist) => { const pos = whitelist.indexOf(ethers_1.utils.getAddress(user)); if (pos === -1) return false; return true; }; exports.isWhitelisted = isWhitelisted; //# sourceMappingURL=merkl.js.map