From a4be9a132c7c11d869f1fd8f05173b51b678bf87 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Mon, 6 Jun 2022 07:42:53 +0200 Subject: [PATCH] Add more pinksale addresses --- projects/helper/utils.js | 12 ++-- projects/pinksale/abi.js | 76 +++++++++++++++++++++++++ projects/pinksale/config.js | 83 ++++++++++++++++++++++++++++ projects/pinksale/index.js | 107 ++++++++++++++++-------------------- 4 files changed, 212 insertions(+), 66 deletions(-) create mode 100644 projects/pinksale/config.js diff --git a/projects/helper/utils.js b/projects/helper/utils.js index 0bcb2a039..28b035820 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -78,13 +78,13 @@ function isLP(symbol, token, chain) { // if (token && blacklisted_LPS.includes(token.toLowerCase())) return false if (chain === 'bsc' && ['OLP', 'DLP', 'MLP', 'LP'].includes(symbol)) return false if (!symbol) return false - if (symbol.startsWith('ZLK-LP')) { - console.log('Blacklisting Zenlink LP because they have different abi for get reservers', symbol, token) - return false - } + let label - if (symbol.includes('DMM-LP')) { - console.log('Blacklisting Kybe DMM LP because they have different abi for get reservers', symbol, token) + if (symbol.startsWith('ZLK-LP') || symbol.includes('DMM-LP') || (chain === 'avax' && 'DLP' === symbol)) + label = 'Blackisting this LP because of unsupported abi' + + if (label) { + if (DEBUG_MODE) console.log(label, token, symbol) return false } diff --git a/projects/pinksale/abi.js b/projects/pinksale/abi.js index 353fc8258..f9667e3f4 100644 --- a/projects/pinksale/abi.js +++ b/projects/pinksale/abi.js @@ -63,4 +63,80 @@ module.exports = { "stateMutability": "view", "type": "function" }, + getLockAt: { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getLockAt", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lockDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tgeDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tgeBps", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cycle", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cycleBps", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unlockedAmount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "internalType": "struct PinkLock02.Lock", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, } \ No newline at end of file diff --git a/projects/pinksale/config.js b/projects/pinksale/config.js new file mode 100644 index 000000000..9fdfde986 --- /dev/null +++ b/projects/pinksale/config.js @@ -0,0 +1,83 @@ +module.exports = { + bsc: { + vaults: [ + '0x7ee058420e5937496F5a2096f04caA7721cF70cc', + '0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE', + ], + coreAssets: [ + '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + '0xe9e7cea3dedca5984780bafc599bd69add087d56', // BUSD + '0x55d398326f99059ff775485246999027b3197955', // USDT token + '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // USDC token + ], + blacklist: [ + '0x602ba546a7b06e0fc7f58fd27eb6996ecc824689', + '0x17e65e6b9b166fb8e7c59432f0db126711246bc0', + '0xee6cacddd3a9370d87db581ee6728226883578e5', + '0x6d163b653010740bfb41bed4bee23f94b3285cba', + '0xb0228eb6c0b49f8265e6e161c3a987eed7471f42', + '0x9888d3d9fbc12487259d1c82665b2ffd009936c6', + '0x49a9f9a2271d8c5da44c57e7102aca79c222f4a9', + '0x25f6212eb410e22956856ccb0383ec1a86fceaf9', + '0x851b7cb21d7428fa1ed87a7c45da8048079b0a90', + '0xb08f67c04bfdf069017365969ca19a0ae6e66b85', + '0x4aee9d30893c5c73e5a5b8637a10d9537497f1c8', + '0x9FBff386a9405b4C98329824418ec02b5C20976b', + ], + log_coreAssetPrices: [ + 300/ 1e18, + 1/ 1e18, + 1/ 1e18, + 1/ 1e18, + ], + log_minTokenValue: 1e6, + }, + ethereum: { + vaults: [ + '0x33d4cC8716Beb13F814F538Ad3b2de3b036f5e2A', + '0x71B5759d73262FBb223956913ecF4ecC51057641', + ], + coreAssets: [ + '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + '0xdAC17F958D2ee523a2206206994597C13D831ec7', + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + ], + }, + polygon: { + vaults: [ + '0x5fb71Dbf7248a01bf96cE2AB2DA34EEAbE58c261', + '0x6C9A0D8B1c7a95a323d744dE30cf027694710633', + ], + coreAssets: [ + '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + ], + }, + avax: { + vaults: [ + '0x4DffB05d1Bc222A2852799e2076e956acb589322', + '0x9479C6484a392113bB829A15E7c9E033C9e70D30', + ], + coreAssets: [ + '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', + ], + }, + fantom: { + vaults: [ + '0xdd6e31a046b828cbbafb939c2a394629aff8bbdc', + '0x0E1757b9d6501e60B2e4Ca0D000e49532948CF6c', + ], + coreAssets: [ + '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', + ], + }, + cronos: { + vaults: [ + '0xdD6E31A046b828CbBAfb939C2a394629aff8BBdC', + '0x102137A9F278B013419332f82aCEA429D944Fc34', + ], + coreAssets: [ + '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23', + ], + }, + +} \ No newline at end of file diff --git a/projects/pinksale/index.js b/projects/pinksale/index.js index d39dcea21..d727e45c0 100644 --- a/projects/pinksale/index.js +++ b/projects/pinksale/index.js @@ -1,68 +1,55 @@ const sdk = require("@defillama/sdk") const abi = require('./abi') +const config = require('./config') const { sumTokensSingle } = require('../helper/unknownTokens') -const chain = 'bsc' -const vault = '0x7ee058420e5937496F5a2096f04caA7721cF70cc' +module.exports = {} -const tvl = async (timestamp, _block, { [chain]: block }) => { - let calls = [] - const { output: size } = await sdk.api.abi.call({ - target: vault, - abi: abi.getTotalLockCount, - chain, block, - }) +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (timestamp, _block, { [chain]: block }) => { + const balances = {} + const { vaults, coreAssets, blacklist, log_coreAssetPrices, log_minTokenValue, } = config[chain] + for (const vault of vaults) { - for (let i = 0; i < +size; i++) - calls.push({ params: i }) - let { output: tokens } = await sdk.api.abi.multiCall({ - target: vault, - abi: abi.getLock, - calls, - chain, block, - }) + let calls = [] + const { output: size } = await sdk.api.abi.call({ + target: vault, + abi: abi.getTotalLockCount, + chain, block, + }) - tokens = tokens.map(i => i.output[1]) - return sumTokensSingle({ - coreAssets: [ - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB - '0xe9e7cea3dedca5984780bafc599bd69add087d56', // BUSD - '0x55d398326f99059ff775485246999027b3197955', // USDT token - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // USDC token - ], - blacklist: [ - '0x602ba546a7b06e0fc7f58fd27eb6996ecc824689', - '0x17e65e6b9b166fb8e7c59432f0db126711246bc0', - '0xee6cacddd3a9370d87db581ee6728226883578e5', - '0x6d163b653010740bfb41bed4bee23f94b3285cba', - '0xb0228eb6c0b49f8265e6e161c3a987eed7471f42', - '0x9888d3d9fbc12487259d1c82665b2ffd009936c6', - '0x49a9f9a2271d8c5da44c57e7102aca79c222f4a9', - '0x25f6212eb410e22956856ccb0383ec1a86fceaf9', - '0x851b7cb21d7428fa1ed87a7c45da8048079b0a90', - '0xb08f67c04bfdf069017365969ca19a0ae6e66b85', - '0x4aee9d30893c5c73e5a5b8637a10d9537497f1c8', - '0x9FBff386a9405b4C98329824418ec02b5C20976b', - ], - owner: vault, - tokens, - block, chain, - restrictTokenPrice: true, - skipConversion: false, - onlyLPs: false, - minLPRatio: 0.01, - log_coreAssetPrices: [ - 300/ 1e18, - 1/ 1e18, - 1/ 1e18, - 1/ 1e18, - ], - log_minTokenValue: 1e6, - }) -}; + const isLastVault = vault === vaults[vaults.length - 1] + const lockAbi = isLastVault ? abi.getLockAt : abi.getLock + for (let i = 0; i < +size; i++) + calls.push({ params: i }) + let { output: tokens } = await sdk.api.abi.multiCall({ + target: vault, + abi: lockAbi, + calls, + chain, block, + }) -module.exports = { - bsc: { - tvl, - }, -} + tokens = tokens.map(i => i.output[1]) + const balance = await sumTokensSingle({ + coreAssets, + blacklist, + owner: vault, + tokens, + block, chain, + restrictTokenPrice: true, + skipConversion: false, + onlyLPs: false, + minLPRatio: 0.01, + log_coreAssetPrices, + log_minTokenValue, + }) + + Object.entries(balance).forEach(([token, bal]) => sdk.util.sumSingleBalance(balances, token, bal)) + } + + return balances + } + + } +})