Skip to content

Commit 99d3575

Browse files
authored
Merge pull request #324 from euler-xyz/development
Development
2 parents 31fe8eb + e04bc55 commit 99d3575

File tree

89 files changed

+2737
-565
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+2737
-565
lines changed

script/02_PeripheryFactories.s.sol

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {EulerRouterFactory} from "../src/EulerRouterFactory/EulerRouterFactory.s
77
import {SnapshotRegistry} from "../src/SnapshotRegistry/SnapshotRegistry.sol";
88
import {EulerKinkIRMFactory} from "../src/IRMFactory/EulerKinkIRMFactory.sol";
99
import {EulerKinkyIRMFactory} from "../src/IRMFactory/EulerKinkyIRMFactory.sol";
10+
import {EulerFixedCyclicalBinaryIRMFactory} from "../src/IRMFactory/EulerFixedCyclicalBinaryIRMFactory.sol";
1011
import {EulerIRMAdaptiveCurveFactory} from "../src/IRMFactory/EulerIRMAdaptiveCurveFactory.sol";
1112
import {GovernorAccessControlEmergencyFactory} from "../src/GovernorFactory/GovernorAccessControlEmergencyFactory.sol";
1213
import {CapRiskStewardFactory} from "../src/GovernorFactory/CapRiskStewardFactory.sol";
@@ -18,6 +19,7 @@ contract PeripheryFactories is ScriptUtils {
1819
address externalVaultRegistry;
1920
address kinkIRMFactory;
2021
address kinkyIRMFactory;
22+
address fixedCyclicalBinaryIRMFactory;
2123
address adaptiveCurveIRMFactory;
2224
address irmRegistry;
2325
address governorAccessControlEmergencyFactory;
@@ -40,6 +42,9 @@ contract PeripheryFactories is ScriptUtils {
4042
vm.serializeAddress("peripheryFactories", "externalVaultRegistry", deployedContracts.externalVaultRegistry);
4143
object = vm.serializeAddress("peripheryFactories", "kinkIRMFactory", deployedContracts.kinkIRMFactory);
4244
object = vm.serializeAddress("peripheryFactories", "kinkyIRMFactory", deployedContracts.kinkyIRMFactory);
45+
object = vm.serializeAddress(
46+
"peripheryFactories", "fixedCyclicalBinaryIRMFactory", deployedContracts.fixedCyclicalBinaryIRMFactory
47+
);
4348
object = vm.serializeAddress(
4449
"peripheryFactories", "adaptiveCurveIRMFactory", deployedContracts.adaptiveCurveIRMFactory
4550
);
@@ -64,6 +69,7 @@ contract PeripheryFactories is ScriptUtils {
6469
deployedContracts.externalVaultRegistry = address(new SnapshotRegistry(evc, getDeployer()));
6570
deployedContracts.kinkIRMFactory = address(new EulerKinkIRMFactory());
6671
deployedContracts.kinkyIRMFactory = address(new EulerKinkyIRMFactory());
72+
deployedContracts.fixedCyclicalBinaryIRMFactory = address(new EulerFixedCyclicalBinaryIRMFactory());
6773
deployedContracts.adaptiveCurveIRMFactory = address(new EulerIRMAdaptiveCurveFactory());
6874
deployedContracts.irmRegistry = address(new SnapshotRegistry(evc, getDeployer()));
6975
deployedContracts.governorAccessControlEmergencyFactory =

script/08_Lenses.s.sol

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,17 @@ contract Lenses is ScriptUtils {
1919
address oracleAdapterRegistry = vm.parseJsonAddress(json, ".oracleAdapterRegistry");
2020
address kinkIRMFactory = vm.parseJsonAddress(json, ".kinkIRMFactory");
2121
address adaptiveCurveIRMFactory = vm.parseJsonAddress(json, ".adaptiveCurveIRMFactory");
22-
23-
lenses = execute(eVaultFactory, oracleAdapterRegistry, kinkIRMFactory, adaptiveCurveIRMFactory);
22+
address kinkyIRMFactory = vm.parseJsonAddress(json, ".kinkyIRMFactory");
23+
address fixedCyclicalBinaryIRMFactory = vm.parseJsonAddress(json, ".fixedCyclicalBinaryIRMFactory");
24+
25+
lenses = execute(
26+
eVaultFactory,
27+
oracleAdapterRegistry,
28+
kinkIRMFactory,
29+
adaptiveCurveIRMFactory,
30+
kinkyIRMFactory,
31+
fixedCyclicalBinaryIRMFactory
32+
);
2433

2534
string memory object;
2635
object = vm.serializeAddress("lenses", "accountLens", lenses[0]);
@@ -36,21 +45,34 @@ contract Lenses is ScriptUtils {
3645
address eVaultFactory,
3746
address oracleAdapterRegistry,
3847
address kinkIRMFactory,
39-
address adaptiveCurveIRMFactory
48+
address adaptiveCurveIRMFactory,
49+
address kinkyIRMFactory,
50+
address fixedCyclicalBinaryIRMFactory
4051
) public broadcast returns (address[] memory lenses) {
41-
lenses = execute(eVaultFactory, oracleAdapterRegistry, kinkIRMFactory, adaptiveCurveIRMFactory);
52+
lenses = execute(
53+
eVaultFactory,
54+
oracleAdapterRegistry,
55+
kinkIRMFactory,
56+
adaptiveCurveIRMFactory,
57+
kinkyIRMFactory,
58+
fixedCyclicalBinaryIRMFactory
59+
);
4260
}
4361

4462
function execute(
4563
address eVaultFactory,
4664
address oracleAdapterRegistry,
4765
address kinkIRMFactory,
48-
address adaptiveCurveIRMFactory
66+
address adaptiveCurveIRMFactory,
67+
address kinkyIRMFactory,
68+
address fixedCyclicalBinaryIRMFactory
4969
) public returns (address[] memory lenses) {
5070
lenses = new address[](6);
5171
lenses[0] = address(new AccountLens());
5272
lenses[1] = address(new OracleLens(oracleAdapterRegistry));
53-
lenses[2] = address(new IRMLens(kinkIRMFactory, adaptiveCurveIRMFactory));
73+
lenses[2] = address(
74+
new IRMLens(kinkIRMFactory, adaptiveCurveIRMFactory, kinkyIRMFactory, fixedCyclicalBinaryIRMFactory)
75+
);
5476
lenses[3] = address(new UtilsLens(eVaultFactory, address(lenses[1])));
5577
lenses[4] = address(new VaultLens(address(lenses[1]), address(lenses[3]), address(lenses[2])));
5678
lenses[5] = address(new EulerEarnVaultLens(address(lenses[3])));
@@ -107,24 +129,34 @@ contract LensIRMDeployer is ScriptUtils {
107129
string memory json = getScriptFile(inputScriptFileName);
108130
address kinkIRMFactory = vm.parseJsonAddress(json, ".kinkIRMFactory");
109131
address adaptiveCurveIRMFactory = vm.parseJsonAddress(json, ".adaptiveCurveIRMFactory");
132+
address kinkyIRMFactory = vm.parseJsonAddress(json, ".kinkyIRMFactory");
133+
address fixedCyclicalBinaryIRMFactory = vm.parseJsonAddress(json, ".fixedCyclicalBinaryIRMFactory");
110134

111-
irmLens = execute(kinkIRMFactory, adaptiveCurveIRMFactory);
135+
irmLens = execute(kinkIRMFactory, adaptiveCurveIRMFactory, kinkyIRMFactory, fixedCyclicalBinaryIRMFactory);
112136

113137
string memory object;
114138
object = vm.serializeAddress("lens", "irmLens", irmLens);
115139
vm.writeJson(object, string.concat(vm.projectRoot(), "/script/", outputScriptFileName));
116140
}
117141

118-
function deploy(address kinkIRMFactory, address adaptiveCurveIRMFactory)
119-
public
120-
broadcast
121-
returns (address irmLens)
122-
{
123-
irmLens = execute(kinkIRMFactory, adaptiveCurveIRMFactory);
142+
function deploy(
143+
address kinkIRMFactory,
144+
address adaptiveCurveIRMFactory,
145+
address kinkyIRMFactory,
146+
address fixedCyclicalBinaryIRMFactory
147+
) public broadcast returns (address irmLens) {
148+
irmLens = execute(kinkIRMFactory, adaptiveCurveIRMFactory, kinkyIRMFactory, fixedCyclicalBinaryIRMFactory);
124149
}
125150

126-
function execute(address kinkIRMFactory, address adaptiveCurveIRMFactory) public returns (address irmLens) {
127-
irmLens = address(new IRMLens(kinkIRMFactory, adaptiveCurveIRMFactory));
151+
function execute(
152+
address kinkIRMFactory,
153+
address adaptiveCurveIRMFactory,
154+
address kinkyIRMFactory,
155+
address fixedCyclicalBinaryIRMFactory
156+
) public returns (address irmLens) {
157+
irmLens = address(
158+
new IRMLens(kinkIRMFactory, adaptiveCurveIRMFactory, kinkyIRMFactory, fixedCyclicalBinaryIRMFactory)
159+
);
128160
}
129161
}
130162

script/20_EulerEarnFactory.s.sol

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,48 @@ pragma solidity ^0.8.0;
44

55
import {ScriptUtils} from "./utils/ScriptUtils.s.sol";
66

7-
contract EulerEarnFactory is ScriptUtils {
8-
function run() public broadcast returns (address eulerEarnfactory) {
7+
contract EulerEarnFactoryDeployer is ScriptUtils {
8+
function run() public broadcast returns (address eulerEarnfactory, address eulerEarnPublicAllocator) {
99
string memory inputScriptFileName = "21_EulerEarnFactory_input.json";
1010
string memory outputScriptFileName = "21_EulerEarnFactory_output.json";
1111
string memory json = getScriptFile(inputScriptFileName);
1212
address evc = vm.parseJsonAddress(json, ".evc");
1313
address permit2 = vm.parseJsonAddress(json, ".permit2");
1414
address perspective = vm.parseJsonAddress(json, ".perspective");
1515

16-
eulerEarnfactory = execute(evc, permit2, perspective);
16+
(eulerEarnfactory, eulerEarnPublicAllocator) = execute(evc, permit2, perspective);
1717

1818
string memory object;
1919
object = vm.serializeAddress("factory", "eulerEarnfactory", eulerEarnfactory);
20+
object = vm.serializeAddress("publicAllocator", "eulerEarnPublicAllocator", eulerEarnPublicAllocator);
2021

2122
vm.writeJson(object, string.concat(vm.projectRoot(), "/script/", outputScriptFileName));
2223
}
2324

24-
function deploy(address evc, address permit2, address perspective) public broadcast returns (address factory) {
25-
factory = execute(evc, permit2, perspective);
25+
function deploy(address evc, address permit2, address perspective)
26+
public
27+
broadcast
28+
returns (address factory, address publicAllocator)
29+
{
30+
(factory, publicAllocator) = execute(evc, permit2, perspective);
2631
}
2732

28-
function execute(address evc, address permit2, address perspective) public returns (address factory) {
33+
function execute(address evc, address permit2, address perspective)
34+
public
35+
returns (address factory, address publicAllocator)
36+
{
2937
bytes memory bytecode = abi.encodePacked(
3038
vm.getCode("out-euler-earn/EulerEarnFactory.sol/EulerEarnFactory.json"),
3139
abi.encode(getDeployer(), evc, permit2, perspective)
3240
);
3341
assembly {
3442
factory := create(0, add(bytecode, 0x20), mload(bytecode))
3543
}
44+
45+
bytecode =
46+
abi.encodePacked(vm.getCode("out-euler-earn/PublicAllocator.sol/PublicAllocator.json"), abi.encode(evc));
47+
assembly {
48+
publicAllocator := create(0, add(bytecode, 0x20), mload(bytecode))
49+
}
3650
}
3751
}

script/50_CoreAndPeriphery.s.sol

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import {EVaultFactoryGovernorDeployer, TimelockControllerDeployer} from "./12_Go
3434
import {TermsOfUseSignerDeployer} from "./13_TermsOfUseSigner.s.sol";
3535
import {OFTAdapterUpgradeableDeployer, MintBurnOFTAdapterDeployer} from "./14_OFT.s.sol";
3636
import {EdgeFactoryDeployer} from "./15_EdgeFactory.s.sol";
37-
import {EulerEarnFactory} from "./20_EulerEarnFactory.s.sol";
37+
import {EulerEarnFactoryDeployer} from "./20_EulerEarnFactory.s.sol";
3838
import {EulerSwapImplementationDeployer} from "./21_EulerSwapImplementation.s.sol";
3939
import {EulerSwapFactoryDeployer} from "./22_EulerSwapFactory.s.sol";
4040
import {EulerSwapPeripheryDeployer} from "./23_EulerSwapPeriphery.s.sol";
@@ -99,9 +99,6 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
9999
int256 adjustmentSpeed;
100100
}
101101

102-
mapping(uint256 chainId => bool isHarvestCoolDownCheckOn) internal EULER_EARN_HARVEST_COOL_DOWN_CHECK_ON;
103-
uint256[1] internal EULER_EARN_HARVEST_COOL_DOWN_CHECK_ON_CHAIN_IDS = [1];
104-
105102
address internal constant BURN_ADDRESS = address(0xdead);
106103
uint256 internal constant EUL_HUB_CHAIN_ID = 1;
107104
uint8 internal constant EUL_DECIMALS = 18;
@@ -138,11 +135,6 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
138135
AdaptiveCurveIRMParams[] internal DEFAULT_ADAPTIVE_CURVE_IRMS_PARAMS;
139136

140137
constructor() {
141-
for (uint256 i = 0; i < EULER_EARN_HARVEST_COOL_DOWN_CHECK_ON_CHAIN_IDS.length; ++i) {
142-
uint256 chainId = EULER_EARN_HARVEST_COOL_DOWN_CHECK_ON_CHAIN_IDS[i];
143-
EULER_EARN_HARVEST_COOL_DOWN_CHECK_ON[chainId] = true;
144-
}
145-
146138
for (uint256 i = 0; i < IRM_INITIAL_RATES_AT_TARGET.length; ++i) {
147139
DEFAULT_ADAPTIVE_CURVE_IRMS_PARAMS.push(
148140
AdaptiveCurveIRMParams({
@@ -472,7 +464,10 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
472464
console.log("- OFT Adapter already deployed. Skipping...");
473465
}
474466

475-
if (containsOftHubChainId(block.chainid) && bridgeAddresses.oftAdapter != address(0)) {
467+
if (
468+
containsOftHubChainId(block.chainid) && bridgeAddresses.oftAdapter != address(0)
469+
&& !getSkipOFTHubChainConfig()
470+
) {
476471
console.log("+ Attempting to configure OFT Adapter on chain %s", block.chainid);
477472

478473
LayerZeroUtil lzUtil = new LayerZeroUtil();
@@ -661,6 +656,7 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
661656
&& peripheryAddresses.oracleAdapterRegistry == address(0)
662657
&& peripheryAddresses.externalVaultRegistry == address(0) && peripheryAddresses.kinkIRMFactory == address(0)
663658
&& peripheryAddresses.kinkyIRMFactory == address(0)
659+
&& peripheryAddresses.fixedCyclicalBinaryIRMFactory == address(0)
664660
&& peripheryAddresses.adaptiveCurveIRMFactory == address(0) && peripheryAddresses.irmRegistry == address(0)
665661
&& peripheryAddresses.governorAccessControlEmergencyFactory == address(0)
666662
&& peripheryAddresses.capRiskStewardFactory == address(0)
@@ -674,6 +670,7 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
674670
peripheryAddresses.externalVaultRegistry = peripheryContracts.externalVaultRegistry;
675671
peripheryAddresses.kinkIRMFactory = peripheryContracts.kinkIRMFactory;
676672
peripheryAddresses.kinkyIRMFactory = peripheryContracts.kinkyIRMFactory;
673+
peripheryAddresses.fixedCyclicalBinaryIRMFactory = peripheryContracts.fixedCyclicalBinaryIRMFactory;
677674
peripheryAddresses.adaptiveCurveIRMFactory = peripheryContracts.adaptiveCurveIRMFactory;
678675
peripheryAddresses.irmRegistry = peripheryContracts.irmRegistry;
679676
peripheryAddresses.governorAccessControlEmergencyFactory =
@@ -859,13 +856,13 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
859856
console.log("- EulerUngovernedNzxPerspective already deployed. Skipping...");
860857
}
861858

862-
if (coreAddresses.eulerEarnFactory == address(0)) {
863-
console.log("+ Deploying EulerEarn factory...");
864-
EulerEarnFactory deployer = new EulerEarnFactory();
865-
coreAddresses.eulerEarnFactory =
859+
if (coreAddresses.eulerEarnFactory == address(0) && peripheryAddresses.eulerEarnPublicAllocator == address(0)) {
860+
console.log("+ Deploying EulerEarn factory and public allocator...");
861+
EulerEarnFactoryDeployer deployer = new EulerEarnFactoryDeployer();
862+
(coreAddresses.eulerEarnFactory, peripheryAddresses.eulerEarnPublicAllocator) =
866863
deployer.deploy(coreAddresses.evc, coreAddresses.permit2, peripheryAddresses.evkFactoryPerspective);
867864
} else {
868-
console.log("- EulerEarn factory already deployed. Skipping...");
865+
console.log("- EulerEarn factory and public allocator already deployed. Skipping...");
869866
if (vm.isDir("out-euler-earn")) vm.removeDir("out-euler-earn", true);
870867
}
871868

@@ -927,8 +924,12 @@ contract CoreAndPeriphery is BatchBuilder, SafeMultisendBuilder {
927924
if (lensAddresses.irmLens == address(0)) {
928925
console.log("+ Deploying LensIRM...");
929926
LensIRMDeployer deployer = new LensIRMDeployer();
930-
lensAddresses.irmLens =
931-
deployer.deploy(peripheryAddresses.kinkIRMFactory, peripheryAddresses.adaptiveCurveIRMFactory);
927+
lensAddresses.irmLens = deployer.deploy(
928+
peripheryAddresses.kinkIRMFactory,
929+
peripheryAddresses.adaptiveCurveIRMFactory,
930+
peripheryAddresses.kinkyIRMFactory,
931+
peripheryAddresses.fixedCyclicalBinaryIRMFactory
932+
);
932933
} else {
933934
console.log("- LensIRM already deployed. Skipping...");
934935
}

script/interactiveDeployment.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ if ! script/utils/checkEnvironment.sh "$@"; then
3737
exit 1
3838
fi
3939

40-
eulerEarnCompilerOptions="--via-ir --optimize --optimizer-runs 800 --use 0.8.26 --out out-euler-earn"
40+
eulerEarnCompilerOptions="--via-ir --optimize --optimizer-runs 200 --use 0.8.26 --out out-euler-earn"
4141
eulerSwapCompilerOptions="--optimize --optimizer-runs 1000000 --use 0.8.27 --out out-euler-swap"
4242

4343
while true; do
@@ -779,10 +779,16 @@ while true; do
779779
--arg eVaultFactory "$eVaultFactory" \
780780
--arg oracleAdapterRegistry "$oracle_adapter_registry" \
781781
--arg kinkIRMFactory "$kink_irm_factory" \
782+
--arg adaptiveCurveIRMFactory "$adaptive_curve_irm_factory" \
783+
--arg kinkyIRMFactory "$kinky_irm_factory" \
784+
--arg fixedCyclicalBinaryIRMFactory "$fixed_cyclical_binary_irm_factory" \
782785
'{
783786
eVaultFactory: $eVaultFactory,
784787
oracleAdapterRegistry: $oracleAdapterRegistry,
785-
kinkIRMFactory: $kinkIRMFactory
788+
kinkIRMFactory: $kinkIRMFactory,
789+
adaptiveCurveIRMFactory: $adaptiveCurveIRMFactory,
790+
kinkyIRMFactory: $kinkyIRMFactory,
791+
fixedCyclicalBinaryIRMFactory: $fixedCyclicalBinaryIRMFactory
786792
}' --indent 4 > script/${jsonName}_input.json
787793
;;
788794
1)

script/production/ConfigWhitelistGovernedPerspective.sh

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ eval 'set -- $SCRIPT_ARGS'
1616
addresses_dir_path="${ADDRESSES_DIR_PATH%/}/$(cast chain-id --rpc-url $DEPLOYMENT_RPC_URL)"
1717
evc=$(jq -r '.evc' "$addresses_dir_path/CoreAddresses.json")
1818

19+
if [[ "$@" != *"--earn"* && "$@" != *"--evk"* ]]; then
20+
echo "Error: Either --earn or --evk option must be provided"
21+
echo "Usage: $0 <csv_file_path> [--earn|--evk] [other_options...]"
22+
exit 1
23+
fi
24+
1925
if [[ "$@" == *"--earn"* ]]; then
2026
governed_perspective=$(jq -r '.eulerEarnGovernedPerspective' "$addresses_dir_path/PeripheryAddresses.json")
2127
else
@@ -100,6 +106,7 @@ items="["
100106

101107
while IFS=, read -r -a columns || [ -n "$columns" ]; do
102108
vault="${columns[0]}"
109+
label="${columns[1]}"
103110
whitelist="${columns[2]}"
104111

105112
if [[ "$vault" == "Vault" ]]; then
@@ -110,20 +117,20 @@ while IFS=, read -r -a columns || [ -n "$columns" ]; do
110117

111118
if [[ "$whitelist" == "Yes" ]]; then
112119
if [[ $isVerified == *false* ]]; then
113-
echo "Adding 'perspectiveVerify' batch item for vault $vault"
120+
echo "Adding 'perspectiveVerify' batch item for vault $vault ($label)"
114121
items+="($governed_perspective,$onBehalfOf,0,$(cast calldata "perspectiveVerify(address,bool)" $vault true)),"
115122
elif [[ "$verbose" == "--verbose" ]]; then
116-
echo "Vault $vault is already verified. Skipping..."
123+
echo "Vault $vault ($label) is already verified. Skipping..."
117124
fi
118125
elif [[ "$whitelist" == "No" ]]; then
119126
if [[ $isVerified == *true* ]]; then
120-
echo "Adding 'perspectiveUnverify' batch item for vault $vault"
127+
echo "Adding 'perspectiveUnverify' batch item for vault $vault ($label)"
121128
items+="($governed_perspective,$onBehalfOf,0,$(cast calldata "perspectiveUnverify(address)" $vault)),"
122129
elif [[ "$verbose" == "--verbose" ]]; then
123-
echo "Vault $vault is not verified. Skipping..."
130+
echo "Vault $vault ($label) is not verified. Skipping..."
124131
fi
125132
else
126-
echo "Invalid Whitelist value for vault $vault. Skipping..."
133+
echo "Invalid Whitelist value for vault $vault ($label). Skipping..."
127134
fi
128135
done < <(tr -d '\r' < "$csv_file")
129136

0 commit comments

Comments
 (0)