Skip to content

Commit 3c82361

Browse files
committed
Stricter config checks and fixes
1 parent e54c7a2 commit 3c82361

34 files changed

+269
-91
lines changed

bin/check-config.ts

+121-33
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { groupBy } from "lodash"
1+
import { chain, groupBy } from "lodash"
2+
import { addressBook, Chain as AddressBookChain } from "blockchain-addressbook"
23

34
type Hex = `0x${string}`
45

@@ -269,74 +270,161 @@ async function main() {
269270

270271
const dataFileContentPerChain = {} as any
271272

273+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
272274
// check for missing holder counts
275+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
273276
const missingHolderCounts: BeefyVault[] = []
274277
for (const vault of allConfigs) {
275278
const subgraphchain = vault.chain === "one" ? "harmony" : vault.chain
276-
dataFileContentPerChain[subgraphchain] = dataFileContentPerChain[subgraphchain] || { old_vaults: [], old_boosts: [] }
279+
dataFileContentPerChain[subgraphchain] = dataFileContentPerChain[subgraphchain] || { no_factory_vaults: [], no_factory_boosts: [] }
277280

278281
const level = vault.eol ? "ERROR" : "WARN"
279282
if (!countsPerToken[`${subgraphchain}:${vault.vault_address}`]) {
280-
console.error(`${level}: Missing holder count for ${vault.id} with address ${subgraphchain}:${vault.vault_address}`)
283+
console.error(
284+
`${level}: Missing holder count in balance api for ${vault.chain}:${vault.id} with address ${subgraphchain}:${vault.vault_address}`,
285+
)
281286
missingHolderCounts.push(vault)
282-
dataFileContentPerChain[subgraphchain].old_vaults.push(vault.vault_address)
287+
dataFileContentPerChain[subgraphchain].no_factory_vaults.push(vault.vault_address)
283288
}
284289
if (vault.protocol_type === "beefy_clm_vault") {
285290
if (!countsPerToken[`${subgraphchain}:${vault.beefy_clm_manager.vault_address}`]) {
286-
console.error(`${level}: Missing holder count for ${vault.id} with CLM address ${subgraphchain}:${vault.beefy_clm_manager.vault_address}`)
291+
console.error(
292+
`${level}: Missing holder count in balance api for ${vault.chain}:${vault.id} with CLM address ${subgraphchain}:${vault.beefy_clm_manager.vault_address}`,
293+
)
287294
missingHolderCounts.push(vault)
288-
dataFileContentPerChain[subgraphchain].old_vaults.push(vault.beefy_clm_manager.vault_address)
295+
dataFileContentPerChain[subgraphchain].no_factory_vaults.push(vault.beefy_clm_manager.vault_address)
289296
}
290297
}
291298
for (const pool of vault.reward_pools) {
292299
if (!countsPerToken[`${subgraphchain}:${pool.clm_address}`]) {
293-
console.error(`${level}: Missing holder count for ${vault.id}'s Reward Pool with address ${subgraphchain}:${pool.reward_pool_address}`)
300+
console.error(
301+
`${level}: Missing holder count in balance api for ${vault.chain}:${vault.id}'s Reward Pool with address ${subgraphchain}:${pool.reward_pool_address}`,
302+
)
294303
missingHolderCounts.push(vault)
295-
dataFileContentPerChain[subgraphchain].old_boosts.push(pool.reward_pool_address)
304+
dataFileContentPerChain[subgraphchain].no_factory_boosts.push(pool.reward_pool_address)
296305
}
297306
}
298307
for (const boost of vault.boosts) {
299308
if (!countsPerToken[`${subgraphchain}:${boost.underlying_address}`]) {
300-
console.error(`${level}: Missing holder count for ${vault.id}'s BOOST with address ${subgraphchain}:${boost.boost_address}`)
309+
console.error(
310+
`${level}: Missing holder count in balance api for ${vault.chain}:${vault.id}'s BOOST with address ${subgraphchain}:${boost.boost_address}`,
311+
)
301312
missingHolderCounts.push(vault)
302-
dataFileContentPerChain[subgraphchain].old_boosts.push(boost.boost_address)
313+
dataFileContentPerChain[subgraphchain].no_factory_boosts.push(boost.boost_address)
303314
}
304315
}
305316
}
306317

307-
// write data files
308-
for (const chain of Object.keys(dataFileContentPerChain)) {
318+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
319+
// write data files with missing holder counts
320+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
321+
// for (const chain of Object.keys(dataFileContentPerChain)) {
322+
// const fs = require("fs")
323+
324+
// // only if the chain has a config file
325+
// if (!fs.existsSync(`./config/${chain}.json`)) {
326+
// continue
327+
// }
328+
329+
// const targetFile = `./data/${chain}_data.json`
330+
// const dataFileContent = dataFileContentPerChain[chain]
331+
// const existingDataFileContentIfAny = fs.existsSync(targetFile)
332+
// ? JSON.parse(fs.readFileSync(targetFile, "utf8"))
333+
// : { no_factory_vaults: [], no_factory_boosts: [] }
334+
335+
// dataFileContent.no_factory_vaults = dataFileContent.no_factory_vaults.concat(existingDataFileContentIfAny.no_factory_vaults)
336+
// dataFileContent.no_factory_boosts = dataFileContent.no_factory_boosts.concat(existingDataFileContentIfAny.no_factory_boosts)
337+
// dataFileContent.no_factory_vaults = Array.from(new Set(dataFileContent.no_factory_vaults))
338+
// dataFileContent.no_factory_boosts = Array.from(new Set(dataFileContent.no_factory_boosts))
339+
340+
// dataFileContent.no_factory_vaults.sort()
341+
// dataFileContent.no_factory_boosts.sort()
342+
343+
// fs.writeFileSync(targetFile, JSON.stringify(dataFileContent, null, 2))
344+
// }
345+
346+
// // display top 30 missing TVL to focus on the most important vaults
347+
// missingHolderCounts.sort((a, b) => b.tvl - a.tvl)
348+
// console.error(`\n\nMissing TVL for top 30 vaults:`)
349+
// missingHolderCounts.slice(0, 100).forEach((v) => {
350+
// const level = v.eol ? "ERROR" : "WARN"
351+
// console.error(`${level}: Missing TVL for ${v.chain}:${v.id}:${v.vault_address}: ${v.tvl}`)
352+
// })
353+
354+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
355+
// check that the chain config contains all the factory addresses in the addressbook
356+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
357+
const uniqChains = Array.from(new Set(allConfigs.map((v) => v.chain)))
358+
for (const chain of uniqChains) {
309359
const fs = require("fs")
310360

311361
// only if the chain has a config file
312362
if (!fs.existsSync(`./config/${chain}.json`)) {
313363
continue
314364
}
315365

316-
const targetFile = `./data/${chain}_data.json`
317-
const dataFileContent = dataFileContentPerChain[chain]
318-
const existingDataFileContentIfAny = fs.existsSync(targetFile)
319-
? JSON.parse(fs.readFileSync(targetFile, "utf8"))
320-
: { old_vaults: [], old_boosts: [] }
321-
322-
dataFileContent.old_vaults = dataFileContent.old_vaults.concat(existingDataFileContentIfAny.old_vaults)
323-
dataFileContent.old_boosts = dataFileContent.old_boosts.concat(existingDataFileContentIfAny.old_boosts)
324-
dataFileContent.old_vaults = Array.from(new Set(dataFileContent.old_vaults))
325-
dataFileContent.old_boosts = Array.from(new Set(dataFileContent.old_boosts))
326-
327-
dataFileContent.old_vaults.sort()
328-
dataFileContent.old_boosts.sort()
366+
const file = `./config/${chain}.json`
367+
const config = JSON.parse(fs.readFileSync(file, "utf8"))
368+
type BeefyConfig = AddressBookChain["platforms"]["beefyfinance"]
369+
// @ts-ignore
370+
const addressbookChainConfig: BeefyConfig = addressBook[chain as any].platforms.beefyfinance
371+
372+
// clm
373+
if (
374+
addressbookChainConfig.clmFactory?.toLowerCase() !== config.clmManagerFactoryAddress?.toLowerCase() &&
375+
addressbookChainConfig.clmFactory?.toLowerCase() !== config.clmManagerFactoryAddress_2?.toLowerCase()
376+
) {
377+
console.error(
378+
`${chain}: clmFactory address mismatch in config: ${addressbookChainConfig.clmFactory} !== ${config.clmManagerFactoryAddress} or ${config.clmManagerFactoryAddress_2}`,
379+
)
380+
}
381+
if (
382+
addressbookChainConfig.clmStrategyFactory?.toLowerCase() !== config.clmStrategyFactoryAddress?.toLowerCase() &&
383+
addressbookChainConfig.clmStrategyFactory?.toLowerCase() !== config.clmStrategyFactoryAddress_2?.toLowerCase()
384+
) {
385+
console.error(
386+
`${chain}: clmStrategyFactory address mismatch in config: ${addressbookChainConfig.clmStrategyFactory} !== ${config.clmStrategyFactoryAddress} or ${config.clmStrategyFactoryAddress_2}`,
387+
)
388+
}
389+
if (
390+
addressbookChainConfig.clmRewardPoolFactory?.toLowerCase() !== config.rewardPoolFactoryAddress?.toLowerCase() &&
391+
addressbookChainConfig.clmRewardPoolFactory?.toLowerCase() !== config.rewardPoolFactoryAddress_2?.toLowerCase()
392+
) {
393+
console.error(
394+
`${chain}: clmRewardPoolFactory address mismatch in config: ${addressbookChainConfig.clmRewardPoolFactory} !== ${config.rewardPoolFactoryAddress} or ${config.rewardPoolFactoryAddress_2}`,
395+
)
396+
}
329397

330-
fs.writeFileSync(targetFile, JSON.stringify(dataFileContent, null, 2))
398+
// beefy classic
399+
if (
400+
addressbookChainConfig.vaultFactory?.toLowerCase() !== config.beefyClassicVaultFactoryAddress?.toLowerCase() &&
401+
addressbookChainConfig.vaultFactory?.toLowerCase() !== config.beefyClassicVaultFactoryAddress_2?.toLowerCase()
402+
) {
403+
console.error(
404+
`${chain}: vaultFactory address mismatch in config: ${addressbookChainConfig.vaultFactory} !== ${config.beefyClassicVaultFactoryAddress} or ${config.beefyClassicVaultFactoryAddress_2}`,
405+
)
406+
}
331407
}
332408

333-
// display top 30 missing TVL to focus on the most important vaults
334-
missingHolderCounts.sort((a, b) => b.tvl - a.tvl)
335-
console.error(`\n\nMissing TVL for top 30 vaults:`)
336-
missingHolderCounts.slice(0, 100).forEach((v) => {
337-
const level = v.eol ? "ERROR" : "WARN"
338-
console.error(`${level}: Missing TVL for ${v.chain}:${v.id}:${v.vault_address}: ${v.tvl}`)
339-
})
409+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
410+
// check that reward pools are never considered as boosts in data files
411+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
412+
for (const chain of uniqChains) {
413+
const fs = require("fs")
414+
if (!fs.existsSync(`./data/${chain}_data.json`)) {
415+
continue
416+
}
417+
const data = JSON.parse(fs.readFileSync(`./data/${chain}_data.json`, "utf8"))
418+
419+
for (const potentially_a_misclassified_boost_address of data.no_factory_boosts) {
420+
const rewardPool = clmRewardPoolData.find(
421+
(r) => r.earnContractAddress.toLowerCase() === potentially_a_misclassified_boost_address.toLowerCase(),
422+
)
423+
if (rewardPool) {
424+
console.error(`${chain}:${potentially_a_misclassified_boost_address} is a reward pool but is considered as a boost in data file`)
425+
}
426+
}
427+
}
340428
}
341429

342430
main()

config/avax.json

+6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
"burnAddress": "0x000000000000000000000000000000000000dead",
66
"firstBlock": 10097386,
77

8+
"clmManagerFactoryAddress": "0xAF393b8ded8b8C1bd0c8707f43E6972C9bF19EE5",
9+
"clmManagerFactoryStartBlock": 50895319,
10+
"clmStrategyFactoryAddress": "0xEB385232b72dAFe4Ad1906BC6C4968D064a30FC4",
11+
"clmStrategyFactoryStartBlock": 50895349,
12+
"rewardPoolFactoryAddress": "0xbE03cb9f257bBA76178965D9391cA283767FF7Fe",
13+
"rewardPoolFactoryStartBlock": 50895324,
814
"beefyClassicVaultFactoryAddress": "0xee78529E158E82AC54c89608A9664F5597050526",
915
"beefyClassicVaultFactoryStartBlock": 23297126,
1016

config/mode.json

+7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
"beefyClassicVaultFactoryAddress": "0xBC4a342B0c057501E081484A2d24e576E854F823",
99
"beefyClassicVaultFactoryStartBlock": 7558107,
1010

11+
"clmManagerFactoryAddress": "0xd1bAb603eee03fA99A378d90d5d83186fEB81aA9",
12+
"clmManagerFactoryStartBlock": 15023980,
13+
"clmStrategyFactoryAddress": "0x5E0d19ACe839b2257F1A10Ee1E8b25E6D8930244",
14+
"clmStrategyFactoryStartBlock": 15024000,
15+
"rewardPoolFactoryAddress": "0x99097E6C293982f0e05937fdfB45F69eF8914F0e",
16+
"rewardPoolFactoryStartBlock": 15024000,
17+
1118
"beefyContractDeployerAddress": "0xcc536552A6214d6667fBC3EC38965F7f556A6391",
1219
"beefyContractDeployerStartBlock": 7587005,
1320

config/zksync.json

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
"clmManagerFactoryAddress": "0x59c7EC7387A480c0a5d953fCb45513D01B94286D",
99
"clmManagerFactoryStartBlock": 37399642,
10+
"clmManagerFactoryAddress_2": "0x0e02963318CD71f3084b89520b4c7dc7588db228",
11+
"clmManagerFactoryStartBlock_2": 37377539,
1012
"clmStrategyFactoryAddress": "0x3Da3658959D9Fc5233716487D050F73A3F659c2E",
1113
"clmStrategyFactoryStartBlock": 37377982,
1214
"rewardPoolFactoryAddress": "0x6Ff30Fde5b530d052d24AC104eC87ADbc33384Fd",

data/arbitrum_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x07db98358d58ba9be90cd0a18cd86af807ac3b4e",
44
"0x0b7ea1b9fbc9860f4a508e9d0dde04f2552d2ade",
55
"0x14555a3dd091aa0bd4657591b843ea4c2f83e6ef",
@@ -46,5 +46,5 @@
4646
"0xf785ef43a082c85abbe19ca888f91748aa604ac5",
4747
"0xfcdd5a02c611ba6fe2802f885281500ec95805d7"
4848
],
49-
"old_boosts": ["0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60"]
49+
"no_factory_boosts": ["0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60"]
5050
}

data/avax_data.json

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x02a0c97be6d8f4f144afe5f41c51b5cef192480c",
44
"0x02be142346cbcaf2a1d8a8f7b4a5f2d929259270",
55
"0x0421ae152e3967361a54396486c970257c14e096",
@@ -171,15 +171,5 @@
171171
"0xfe27d61f8386370d6cfa63ea06470ed55f6dbfe7",
172172
"0xfea7976733f47557860f4483f2147a3e99c76b58"
173173
],
174-
"old_boosts": [
175-
"0x03e73383c9a8ed221c6c134bcc08555fa93fe091",
176-
"0x051b9d5f40727a35038a9ba1f1c27cbddd5fb54c",
177-
"0x0fad7fa9d3d71eea524f7989831c4eb031488cc7",
178-
"0x240248628b7b6850352764c5dfa50d1592a033a8",
179-
"0x35c038032ae84b6ea6dab218914a60e0e9ef69a9",
180-
"0x4a132000670179d6497170e315c1311aefc66e8e",
181-
"0x86fc9a6cdeb75cc6461120a000e925672524c0d4",
182-
"0xba245c7ed7a440466802f316c202a25570e4d424",
183-
"0xe87e3721a89d4a9a2782996afbe86adf07997567"
184-
]
174+
"no_factory_boosts": []
185175
}

data/base_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": ["0x62e5b9934dcb87618cfc74b222305d16c997e8c1"],
3-
"old_boosts": []
2+
"no_factory_vaults": ["0x62e5b9934dcb87618cfc74b222305d16c997e8c1"],
3+
"no_factory_boosts": []
44
}

data/bsc_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x00aec34489a7ade91a0507b6b9dbb0a50938b7c0",
44
"0x00ecbb8f9853dbc621b39ab205a148a26eac3b11",
55
"0x00f204f524a433f45a6278c2c0e10f5292b3c5b9",
@@ -742,7 +742,7 @@
742742
"0xff494b7cb341311f86da21a49c5ff176637aa85e",
743743
"0xff750ee63f1e428de1d6c8d9d92676b5fc8376a8"
744744
],
745-
"old_boosts": [
745+
"no_factory_boosts": [
746746
"0x04756126f044634c9a0f0e985e60c88a51acc206",
747747
"0x3bc5ac0dfdc871b365d159f728dd1b9a0b5481e8",
748748
"0xc3c7d422809852031b44ab29eec9f1eff2a58756"

data/ethereum_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": ["0xa95a7c9413b562f8d0581b91ec9d51a4fb5bab7e"],
3-
"old_boosts": []
2+
"no_factory_vaults": ["0xa95a7c9413b562f8d0581b91ec9d51a4fb5bab7e"],
3+
"no_factory_boosts": []
44
}

data/fantom_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x0139c853539bf1edf221cf9d665f282c2701335a",
44
"0x01760ea1e63aa89b5e567ed616e104220b4e2e9b",
55
"0x01cc6c3262e24e0d7f45c968e84a8b2ddc12b9cf",
@@ -286,5 +286,5 @@
286286
"0xfd30cead8e54568fe535747929775e95fdb6d3f7",
287287
"0xfd393c038deaaf14d3186d6da638d2dd6bfed90b"
288288
],
289-
"old_boosts": ["0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60"]
289+
"no_factory_boosts": ["0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60"]
290290
}

data/fraxtal_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": [],
3-
"old_boosts": []
2+
"no_factory_vaults": [],
3+
"no_factory_boosts": []
44
}

data/gnosis_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x1de0375e770efb9c92d7958cbb5b53c9fb8eb1cb",
44
"0x21c4d71882364b395209c07a7710a9251c285d73",
55
"0x3e442af13db47e27b48de6caf2708b2d180b10f9",
@@ -14,5 +14,5 @@
1414
"0xf49de23df72c886946eef19d1b751b3d997ef668",
1515
"0xf9ac09ec1ab2e4cd5ca2cf9451d3a49fd6b25cc5"
1616
],
17-
"old_boosts": []
17+
"no_factory_boosts": []
1818
}

data/linea_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": [],
3-
"old_boosts": []
2+
"no_factory_vaults": [],
3+
"no_factory_boosts": []
44
}

data/lisk_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": [],
3-
"old_boosts": []
2+
"no_factory_vaults": [],
3+
"no_factory_boosts": []
44
}

data/manta_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"old_vaults": [],
3-
"old_boosts": []
2+
"no_factory_vaults": [],
3+
"no_factory_boosts": []
44
}

data/mantle_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x08175349da602674a255398516187984fedd5738",
44
"0x15a318cfc01b50bd77c3a8d0dd560fdf44b5c046",
55
"0x15f5169d7fd528f6c8bcfb0a239833d53f454ff2",
@@ -28,5 +28,5 @@
2828
"0xf2605791de7b82a903f369364797cf10c57712f3",
2929
"0xfb038d9f7ed2e754612381af193f5570470c5182"
3030
],
31-
"old_boosts": ["0x25356aeca4210ef7553140edb9b8026089e49396"]
31+
"no_factory_boosts": ["0x25356aeca4210ef7553140edb9b8026089e49396"]
3232
}

data/metis_data.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"old_vaults": [
2+
"no_factory_vaults": [
33
"0x085bf6f912a42d0d8ed53d4998b07f9a535315f0",
44
"0x0d281ff551351c8b88d019ecd23481723a1cc8e3",
55
"0x0fb94775d16e14627678391d24e4576fda05e3ed",
@@ -31,5 +31,5 @@
3131
"0xea01ca0423acb8476e1d3bae572021c2aa9bd410",
3232
"0xfe118360beac5c2ac9da77d2366b8738bbfeb2d9"
3333
],
34-
"old_boosts": []
34+
"no_factory_boosts": []
3535
}

0 commit comments

Comments
 (0)