Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix fork tests #2050

Merged
merged 5 commits into from
May 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 40 additions & 30 deletions contracts/contracts/interfaces/ISSVNetwork.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,46 @@ struct Cluster {
}

interface ISSVNetwork {
error ApprovalNotWithinTimeframe();
error CallerNotOwner();
error CallerNotWhitelisted();
error ClusterAlreadyEnabled();
error ClusterDoesNotExists();
error ClusterIsLiquidated();
error ClusterNotLiquidatable();
error ExceedValidatorLimit();
error FeeExceedsIncreaseLimit();
error FeeIncreaseNotAllowed();
error FeeTooHigh();
error FeeTooLow();
error IncorrectClusterState();
error IncorrectValidatorState();
error InsufficientBalance();
error InvalidOperatorIdsLength();
error InvalidPublicKeyLength();
error MaxValueExceeded();
error NewBlockPeriodIsBelowMinimum();
error NoFeeDeclared();
error NotAuthorized();
error OperatorAlreadyExists();
error OperatorDoesNotExist();
error OperatorsListNotUnique();
error SameFeeChangeNotAllowed();
error TargetModuleDoesNotExist();
error TokenTransferFailed();
error UnsortedOperatorsList();
error ValidatorAlreadyExists();
error ValidatorDoesNotExist();
/**********/
/* Errors */
/**********/

error CallerNotOwner(); // 0x5cd83192
error CallerNotWhitelisted(); // 0x8c6e5d71
error FeeTooLow(); // 0x732f9413
error FeeExceedsIncreaseLimit(); // 0x958065d9
error NoFeeDeclared(); // 0x1d226c30
error ApprovalNotWithinTimeframe(); // 0x97e4b518
error OperatorDoesNotExist(); // 0x961e3e8c
error InsufficientBalance(); // 0xf4d678b8
error ValidatorDoesNotExist(); // 0xe51315d2
error ClusterNotLiquidatable(); // 0x60300a8d
error InvalidPublicKeyLength(); // 0x637297a4
error InvalidOperatorIdsLength(); // 0x38186224
error ClusterAlreadyEnabled(); // 0x3babafd2
error ClusterIsLiquidated(); // 0x95a0cf33
error ClusterDoesNotExists(); // 0x185e2b16
error IncorrectClusterState(); // 0x12e04c87
error UnsortedOperatorsList(); // 0xdd020e25
error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac
error ExceedValidatorLimit(); // 0x6df5ab76
error TokenTransferFailed(); // 0x045c4b02
error SameFeeChangeNotAllowed(); // 0xc81272f8
error FeeIncreaseNotAllowed(); // 0x410a2b6c
error NotAuthorized(); // 0xea8e4eb5
error OperatorsListNotUnique(); // 0xa5a1ff5d
error OperatorAlreadyExists(); // 0x289c9494
error TargetModuleDoesNotExist(); // 0x8f9195fb
error MaxValueExceeded(); // 0x91aa3017
error FeeTooHigh(); // 0xcd4e6167
error PublicKeysSharesLengthMismatch(); // 0x9ad467b8
error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938
error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999
error EmptyPublicKeysList(); // df83e679

// legacy errors
error ValidatorAlreadyExists(); // 0x8d09a73e
error IncorrectValidatorState(); // 0x2feda3c1

event AdminChanged(address previousAdmin, address newAdmin);
event BeaconUpgraded(address indexed beacon);
Expand Down
10 changes: 5 additions & 5 deletions contracts/test/_global-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ mocha.before(function () {
const isHoleskyTestFile = s.file.endsWith(".holesky-fork-test.js");
const isArbTestFile = s.file.endsWith(".arb.fork-test.js");

if (isMainnetForkTest) {
return isMainnetForkTestFile;
if (isArbFork) {
return isArbTestFile;
} else if (isMainnetForkTest) {
return isMainnetForkTestFile && !isArbTestFile;
} else if (isHoleskyFork) {
return isHoleskyTestFile;
} else if (isArbFork) {
return isArbTestFile;
} else {
// else is unit test
return !isMainnetForkTestFile && !isHoleskyTestFile && !isArbTestFile;
return !isMainnetForkTestFile && !isHoleskyTestFile;
}
});

Expand Down
5 changes: 3 additions & 2 deletions contracts/test/behaviour/reward-tokens.fork.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const { BigNumber } = require("ethers");
shouldHaveRewardTokensConfigured(() => ({
harvester: fixture.harvester,
vault: fixture.vault,
ignoreTokens: [fixture.weth.address.toLowerCase()],
expectedConfigs: {
[fixture.cvx.address]: {
allowedSlippageBps: 300,
Expand Down Expand Up @@ -46,7 +47,7 @@ const shouldHaveRewardTokensConfigured = (context) => {

describe("Reward Tokens", () => {
it("Should have swap config for all reward tokens from strategies", async () => {
let { vault, harvester, expectedConfigs } = context();
let { vault, harvester, expectedConfigs, ignoreTokens } = context();
const strategies = await vault.getAllStrategies();

expectedConfigs = Object.keys(expectedConfigs).reduce(
Expand All @@ -57,7 +58,7 @@ const shouldHaveRewardTokensConfigured = (context) => {
{}
);

const checkedConfigs = [];
const checkedConfigs = ignoreTokens || [];

for (const strategyAddr of strategies) {
const strategy = await ethers.getContractAt("IStrategy", strategyAddr);
Expand Down
10 changes: 5 additions & 5 deletions contracts/test/strategies/nativeSsvStaking.fork-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ describe("ForkTest: Native SSV Staking Strategy", function () {
addresses: addresses.mainnet,
testValidator: {
publicKey:
"0xad9ade40c386259fe4161ec12d7746ab49a098a4760a279c56dc7e26b56fc4d985e74eeecdd2bc5a1decceb5174204f4",
operatorIds: [193, 196, 199, 202],
"0x93d60259213f491a910ee8f6504d51ba5fc28085981eccd6c20ca646525c626013c75b04f061fbf3de839ac602c64698",
operatorIds: [348, 352, 361, 377],
sharesData:
"0x8308e4b6ad536304f978077a0cd3685a98d5847bb1b05e0a4c5994ddf64ce48daa917f666d86f3125aac139a4fc7b07119ea2c7fc0fe5cfb316a5687dbddf621b0229e55230f0857d426697513ee2556d2c730595268358ebe8e16331bd2dd53acfd93e4e96c5fb510f78dc0f11e5097f83b2609a5711b233fa843935125dbbd90e43dc4f7d181221a42fcc02fe58aeb90fefb6a1d46faad099b6fa8e68351ff21f52d90a96bffeb33d1c0517bf39e413a441f1c290f1289021e9bd47146689ba139bccfaf7d6d1a6fba03c177d9ffca11f347b0f16a1cd8b1808a9b46ec0849ff45562a853ea137dfea3a0ed43ceac5805a993edd6b618cf7aa1441b2deeb2a7a573f0a44d9ed6bffb75573a91e9de2c21e198815d9b133ce7060ff339bf23b12af3c15f566b81842f307066205f09b40b4db045af881f5ca571289d1aa52555002544e8941b854b1b565b5e76c845c4b287a46890d6ad3e01185d2fb5485ecb136814a23378d37ff53244c1420af43db268f74bf0532dd235cb2afd49d1dce7158d1f51650bc32b790f29bdfc2bafc9990a55a15d005139c6ede259a6a9426400d67192ec697a8990c326bc63fe8a809515d0cc311059da2e333cb92331c45ac8b8d2e09a8cc4092016ade9f90a4b1a89a89f9da38818a5a77f84ae2aba340719dc6a01810ddfcd9e9cf9ebfab033363d2a58296cd1ab8e33ea4e04738111a3e2d80d34c601b0b49e95412cdd554a844f02a94f7f239e70cb72247c36218de79b5d0d73a7429cccf1999eca2611b1c486e8148451cac60bc60280764948f54100a39d9290c368a2ace60daa3ff1bf9dd7514afd02397c196b9cee8ef94478619a114cbebdf4475053857f2728c7621c5fb6739cbf8a15727c5d15a354e20ac054f31e51288a4f94a4215d00d23d2e5a82f745f2f15d6b147ecf817165913f2f72f492075de8f339efe54f163311f7de056c36a900949f7f026c17a96770edd29ba0301732bb83d218a0fb28d466858118e7240725ee74a45fd3acf8ca7310cb72f6cb3c6f8517b89984ad622ffeb39dad587d2e944d59fe849841fc5f09e9f1935cc59b10c795446eb18a2f87e6ee1a497fe0bb556164cd2d7b5c7cf5fdb758e8fc26711116bf59a08be68d2ddb9a97300d2ac43055877a0cc3be97c8b82ceb5dd59f6222c23d849dc7620ffca0393d685cb609059e0e8a76500c9c92d7878a3939c346897d10c6707d39bd10d0f546f6506b6b087dea16156478e11d9537d169d582ca26a04dceede25a38b5a4bf2e16db9db97bdb320f198632a0b60af8ebdf3e6a0bda19f34c9ddc7e437d3fef3da021cae41dd99d2898d825db9de51561dee2a5587fa75453609fff5aec3e949a34fd438f00ab6dbca03e385059003936db14c66d4fec38d6ba729051866c336c51c802507dc5b16b591a4905636736a05bbd0d39ba965de131abad34797e3521ff01612b1bd17aca6af61abf8bd24182a1e2848fc41819c0ce7065000747023db82de23eef601ed7cdaffd39b005e8bb8156f4986d9825e62cd2f13f8c0e33e5825e8d81730ef1a63dfd19af6afd08f9f102f403783dca89173456d9e60fb72b2c153bf0bb73bed799a15eb94923f7cadd9c9bc529a86051d8202b1af53ccb161179f9c4609084dd977091082fc14c20ff21efd70bb9ca56b0ea80c7fc16e2f1718c7b306944fa6c7572440c7d6035a22cea8858f64bb3b6d147a05743021ca1b79d71bac87888bb5fd343b1817a28dda336f1d640f8adae159020deba8d3e1e97ae0b9a4ba23112e59d93169a7b875fc878f66f13b2568ed326f9da7ba6c2bd08d37f5b0ef6bfe56febe20e366fa9d",
"0x861fce88da51de578b2a3f9fa32b3c56499b1261d33f8adbb24932cc906edfd6383b63ac37bfd8b2e9f7087622c1f14b1651426316c741bd8470315d63393bbdc8a0a097f1ac728315fbf17b79b675e9c40605913fff64800a5c7c2057e30f44abed76d8ce797db6f03219e077a3d1fa3945f37d8eeb4c52aee99b4a5f606be50515d347405db37b37a063cd1cd315818521decd2e44878a1a53e84a4186ea3e896a29e0e34c68091a4575b5834e6bfa6c5987916ae49d77347ee7b2f7428f8489a07e54e9d05690f5f8acc2eeab46f44a0f39e5e0e41fde76d29e2660fb5349e00d264527f92d71cfa27a51d9285873908757f42f8f9e40a9c3ec5d9adc966a4dde82d0b87c48ffaebfe2bda73ff388197829d24eb2b18cc50dbae96473a95d819dc1dc99959811e832396eec4773701dbaf86d6449c8310f7fa9ed289675a0ba1be59881fe7b1e64d4485654bab3f9010e575773262ac65f7fa24663f090d413ca74572dac7df3cf06c1fdc226acfc1380441c2d9c4b31fbdd5ee12d83e2d36b9512f4e9c5f0b3607b51665479a9ce035ee952c9d743b5d7b3fa1acec222b447bf8e98397a6e79569a1487adff39f06bfa0a51b022d1798738b37a0801a1f97498c6c3633404f251c137b21e0eec92bcb7a4eb00cad9c826327f4712643035e4b79d14d3e5b0bcf791e6bbfa447f30d362570c26c29787d7c9360b3566b1e9c6eb3f785c96c6d3642a2332910fe3f0b78d4d18d7d4bbedd0b919c8a2853a0babd353c695960d4ec00727a3a91192b8b3a4d4e7cfd1620cdb4936afd91f5155c20bbe8a3dd96790d5e623f9cea53fa32ebe8f2f2572d5d99686ba735d824aaa74a56fd0fde9c219811cb79760410be3815ca95b75551608ee945b895a5c08b760b90aa4836128048b4fd19e0ed475c720d83a76af7e8c3e571f11b0fc540c788d7daea8bc923db44a6f8d208e0140a18d1c811029419d27b4ed994f0ec21c8f65df2f0c83cf5d0111694c18076e7441b0e0fa8e58da3a6c3b94e819550322765d70fbd4f053f2edcba3050cfe14d0efe7280c4a3990182a46cdf4a7f8cf20e0fc17d4fb5becb35908a04e19f5be2df7db81edf9cae016ac88769cb1a644189d84e35e18ff0d2fea6b02a406129487009311525199ffec581fd587521a239f6514e6e10aeef63e531cbe4c37f08592999ce3c3146e76e2793a974d49e0c7264c214133bd2049eacb8f09b3184130812b71fb0cd02d2f044f1d38ab34d1a9bed9940b5691f396c7e2ad25b6baf6ed14baa0f70ef3fd2d5cafd16c7775f6583971223eab2276b98e1998e87692e8474647bc135fab8d8ff7bbdd3d669856897cf7776b594f7cf49ac02870df621eca1919b39f9d28bddee92f3b5150e806b9fe9db01e6e1474d09239799c1265bdab86e8eda0f69cebf921af3ba852f5b64d2129bfa09155dc411165d66c0d750fa9fc07a6be3fdbce769bb494b84eff41319618c1611fe3f62b39066e81ee5ead615d7a576cc8fe68e8bb6ba1d4088810c701f0c1873df8cd02d5019589c095bb730a5625a3996c0b240aaf4484f2502d4aa377d462894557615a5d486339b4ad108ef6ffef0a26ba0136e3d969b4337954069aaeaa73e64757477f30d723ba38dc644f6e371088d9e2b1ff50ecbddad48198e525963fabda4e196c9ddf0d89abcdc3a3d395a96b22254242ce93804e4d6673265e7c4d56b1195aada97bbe9050e843bd56181a533fa03e01285ade0f715d0f9830b1f0ae7586d8485bf76ace561ea6c8c4c9497674d96182a9e289ddcc722814f14b8ce8a70bbb6dec40f84cde55e0d16d4ec043561d6a1d16790b5bc4f02ab9",
signature:
"0xadf71438600db72305e4a277554c06359d25e59480e2c4d5ea9d12d132088893d2df141c60a0857c63edc10b9800ac0e0e3e3dcd7b5fdfbcab8fbf377816811becc8be9420c17a725dff9dac6653230b9c5c04fd2ea19f9313fe943e1a562a18",
"0x8522f6464ddc5550f70ed8cd58ed26961d8755111d5e967ee815730bc2e9ad24e7ca718fcf56f1af785bc25dfac719a615a4c4e029a352840edca0d78c9a46ef35202f42311918f70d8ddde9de25fe091889283b9778ea15403fe87dc5f7527e",
depositDataRoot:
"0x0d12c28849771f3f946d8d705a1f73683d97add9edaec5e6b30650cc03bc57d5",
"0xcbcd1da8a9ba0e30b2dd8a955591ac4a759bf5ee6f5295d72f5b89b1b175193b",
},
};
});
Expand Down
1 change: 1 addition & 0 deletions contracts/test/vault/oeth-vault.fork-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ describe("ForkTest: OETH Vault", function () {
shouldHaveRewardTokensConfigured(() => ({
vault: fixture.oethVault,
harvester: fixture.oethHarvester,
ignoreTokens: [fixture.weth.address.toLowerCase()],
expectedConfigs: {
[fixture.cvx.address]: {
allowedSlippageBps: 300,
Expand Down
17 changes: 12 additions & 5 deletions contracts/utils/resolvers.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,23 @@ const resolveAsset = async (symbol) => {
// "Hardhat can't be initialized while its config is being defined"
const hre = require("hardhat");

if (hre.network.name != "hardhat") {
// Not using helpers here as they import hardhat which won't work for Hardhat tasks
if (process.env.FORK === "true" || hre.network.name != "hardhat") {
const network =
hre.network.name != "hardhat"
? hre.network.name != "hardhat"
: hre.network.config.chainId == 17000
? "holesky"
: "mainnet";

const assetAddr =
addresses[hre.network.name][symbol + "Proxy"] ||
addresses[hre.network.name][symbol];
addresses[network][symbol + "Proxy"] || addresses[network][symbol];
if (!assetAddr) {
throw Error(
`Failed to resolve symbol "${symbol}" to an address on the "${hre.network.name}" network`
`Failed to resolve symbol "${symbol}" to an address on the "${network}" network`
);
}
log(`Resolved ${symbol} to ${assetAddr}`);
log(`Resolved ${symbol} to ${assetAddr} on the ${network} network`);
const asset = await ethers.getContractAt("IERC20Metadata", assetAddr);
return asset;
}
Expand Down
Loading