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

Added an Aave integration #1081

Merged
merged 65 commits into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from 52 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
2bab4e4
Implemented a basic version of the `addLiquidity` circuit breaker
jalextowle Jun 20, 2024
e126839
Fixed `test_lp_withdrawal_long_and_short_maturity`
jalextowle Jun 20, 2024
3a8590a
Fixed the remaining tests
jalextowle Jun 20, 2024
f82cf1c
add priceDiscoveryCheck to LPMath and also check it in initialize
jrhea Jun 20, 2024
352a224
use initial price
jrhea Jun 21, 2024
9cb9b44
add tests and fix placement of check
jrhea Jun 23, 2024
f9f1564
remove lib from LPMath
jrhea Jun 23, 2024
9893146
remove comment
jrhea Jun 23, 2024
594aad7
remove console import
jrhea Jun 23, 2024
e66c54d
remove console import
jrhea Jun 23, 2024
a0b8ed6
fix price discovery tests
jrhea Jun 23, 2024
e13b077
fixed tests
jrhea Jun 23, 2024
8bb3932
commit test to investigate
jrhea Jun 23, 2024
6917109
add test_solvency_at_0_apr
jrhea Jun 23, 2024
a763694
add test_solvency_cross_checkpoint_long_short
jrhea Jun 23, 2024
d2b3830
address review feedback
jrhea Jun 24, 2024
d8a405d
Update test/integrations/hyperdrive/PriceDiscovery.t.sol
jrhea Jun 24, 2024
6d6019c
Added some testing examples
jalextowle Jun 26, 2024
7b30415
Minor updates
jalextowle Jul 1, 2024
523b824
Updated `verifyPriceDiscovery` to `calculateSolvencyAfterMaxLong`
jalextowle Jul 3, 2024
b82da81
Cleaned up the tests
jalextowle Jul 3, 2024
968ba56
Increased the efficiency of the solvency check
jalextowle Jul 3, 2024
b653410
Fixed the code size issue
jalextowle Jul 3, 2024
00a20c9
Addressed Saw Mon's comment
jalextowle Jul 3, 2024
f1822f7
Improved one of the price discovery tests
jalextowle Jul 3, 2024
ea13eac
Updated the price discovery tests
jalextowle Jul 6, 2024
2af24ac
Fixed the remaining tests
jalextowle Jul 6, 2024
7733dca
Addressed review feedback from @mcclurejt
jalextowle Jul 6, 2024
4ea19f3
Fixed the deployment scripts
jalextowle Jul 7, 2024
c7b3b68
Generated the code for the Aave integration
jalextowle Jul 8, 2024
12fc2c0
forge install: aave-v3-core
jalextowle Jul 8, 2024
301010b
Fixed codegen and compiler errors
jalextowle Jul 8, 2024
e43b6b5
Implemented `_convertToBase` and `_convertToShares` for AaveHyperdrive
jalextowle Jul 8, 2024
5adf1be
Implemented the deposit functions for the AaveHyperdrive instance
jalextowle Jul 8, 2024
73d2d25
Implemented the withdrawal logic for ATokens
jalextowle Jul 8, 2024
8b67f32
Addressed most of the remaining FIXMEs
jalextowle Jul 8, 2024
ac1ef3c
Merge remote-tracking branch 'origin/main' into jalextowle/integratio…
jalextowle Jul 8, 2024
8203862
Reduced the code-size of the Aave integration
jalextowle Jul 9, 2024
890c4ec
Copied over the instance test
jalextowle Jul 9, 2024
30e3a63
Added a fourth target to fix the codesize issues
jalextowle Jul 9, 2024
a0697a7
Started work on the AaveHyperdrive tests
jalextowle Jul 10, 2024
da6df6c
Fixed some of the tests
jalextowle Jul 11, 2024
ce1b133
Fixed more tests
jalextowle Jul 11, 2024
bfa56e4
Fixed the remaining Aave instance tests
jalextowle Jul 11, 2024
9fd0e44
Fixed the other instance tests
jalextowle Jul 11, 2024
7edce95
Addressed remaining FIXMEs and fixed the code generator
jalextowle Jul 11, 2024
bd1702b
Merge remote-tracking branch 'origin/main' into jalextowle/integratio…
jalextowle Jul 11, 2024
8963770
Fixed the publish scripts
jalextowle Jul 11, 2024
7f4f727
Lowered the minimum share reserves
jalextowle Jul 12, 2024
7149e69
Addressed review feedback from @jrhea
jalextowle Jul 12, 2024
5cdc185
Added conversion functions to the public interfaces for instances and…
jalextowle Jul 12, 2024
4347939
Merge remote-tracking branch 'origin/main' into jalextowle/integratio…
jalextowle Jul 12, 2024
43d6ac1
Update contracts/src/deployers/aave/AaveHyperdriveDeployerCoordinator…
jalextowle Jul 14, 2024
6a64d4b
Update contracts/src/deployers/erc4626/ERC4626HyperdriveDeployerCoord…
jalextowle Jul 14, 2024
104dc7a
Update contracts/src/deployers/ezeth/EzETHHyperdriveDeployerCoordinat…
jalextowle Jul 14, 2024
f56fbc7
Update contracts/src/deployers/lseth/LsETHHyperdriveDeployerCoordinat…
jalextowle Jul 14, 2024
06a1142
Update contracts/src/deployers/reth/RETHHyperdriveDeployerCoordinator…
jalextowle Jul 14, 2024
2da9696
Update contracts/src/deployers/steth/StETHHyperdriveDeployerCoordinat…
jalextowle Jul 14, 2024
8790254
Update contracts/src/interfaces/IStETHHyperdriveDeployerCoordinator.sol
jalextowle Jul 14, 2024
852a0f1
Update contracts/src/interfaces/IRETHHyperdriveDeployerCoordinator.sol
jalextowle Jul 14, 2024
5bb8c92
Update contracts/src/interfaces/ILsETHHyperdriveDeployerCoordinator.sol
jalextowle Jul 14, 2024
fe88e48
Update contracts/src/interfaces/IEzETHHyperdriveDeployerCoordinator.sol
jalextowle Jul 14, 2024
0a725c6
Update contracts/src/interfaces/IERC4626HyperdriveDeployerCoordinator…
jalextowle Jul 14, 2024
e5af822
Update contracts/src/interfaces/IAaveHyperdriveDeployerCoordinator.sol
jalextowle Jul 14, 2024
5eb74a5
Added a getter for Aave's vault
jalextowle Jul 14, 2024
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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@
[submodule "lib/ExcessivelySafeCall"]
path = lib/ExcessivelySafeCall
url = https://github.com/nomad-xyz/ExcessivelySafeCall
[submodule "lib/aave-v3-core"]
path = lib/aave-v3-core
url = https://github.com/aave/aave-v3-core
3 changes: 3 additions & 0 deletions codegen/example/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ name:
# names, and comments.
capitalized: "TestETH"

# All upper case name to be used for constants.
uppercase: "TEST_ETH"

# All lower case name to be used for directories.
lowercase: "testeth"

Expand Down
1 change: 1 addition & 0 deletions codegen/hyperdrive_codegen/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Name(BaseModel):
"""Holds different versions of the instance name."""

capitalized: str
uppercase: str
lowercase: str
camelcase: str

Expand Down
2 changes: 0 additions & 2 deletions codegen/hyperdrive_codegen/templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ class FileInfo:
TemplatePathInfo("deployers/Target1Deployer.sol.jinja", "Target1Deployer", "deployers"),
TemplatePathInfo("deployers/Target2Deployer.sol.jinja", "Target2Deployer", "deployers"),
TemplatePathInfo("deployers/Target3Deployer.sol.jinja", "Target3Deployer", "deployers"),
TemplatePathInfo("deployers/Target4Deployer.sol.jinja", "Target4Deployer", "deployers"),
]

instance_templates = [
Expand All @@ -51,7 +50,6 @@ class FileInfo:
TemplatePathInfo("instances/Target1.sol.jinja", "Target1", "instances"),
TemplatePathInfo("instances/Target2.sol.jinja", "Target2", "instances"),
TemplatePathInfo("instances/Target3.sol.jinja", "Target3", "instances"),
TemplatePathInfo("instances/Target4.sol.jinja", "Target4", "instances"),
]

interface_templates = [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.20;

import { I{{ name.capitalized }} } from "../../interfaces/I{{ name.capitalized }}.sol";
import { IHyperdrive } from "../../interfaces/IHyperdrive.sol";
import { IHyperdriveCoreDeployer } from "../../interfaces/IHyperdriveCoreDeployer.sol";
import { {{ name.capitalized }}Hyperdrive } from "../../instances/{{ name.lowercase }}/{{ name.capitalized }}Hyperdrive.sol";
Expand All @@ -14,22 +13,22 @@ import { {{ name.capitalized }}Hyperdrive } from "../../instances/{{ name.lowerc
/// particular legal or regulatory significance.
contract {{ name.capitalized }}HyperdriveCoreDeployer is IHyperdriveCoreDeployer {
/// @notice Deploys a Hyperdrive instance with the given parameters.
/// @param __name The name of the Hyperdrive pool.
/// @param _config The configuration of the Hyperdrive pool.
/// @param _target0 The target0 address.
/// @param _target1 The target1 address.
/// @param _target2 The target2 address.
/// @param _target3 The target3 address.
/// @param _target4 The target4 address.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Hyperdrive instance.
function deploy(
function deployHyperdrive(
string memory __name,
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData,
address _target0,
address _target1,
address _target2,
address _target3,
address _target4,
bytes32 _salt
) external returns (address) {
return (
Expand All @@ -38,7 +37,7 @@ contract {{ name.capitalized }}HyperdriveCoreDeployer is IHyperdriveCoreDeployer
// front-running of deployments.
new {{ name.capitalized }}Hyperdrive{
salt: keccak256(abi.encode(msg.sender, _salt))
}(_config, _target0, _target1, _target2, _target3, _target4)
}(_config, _target0, _target1, _target2, _target3)
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { I{{ name.capitalized }} } from "../../interfaces/I{{ name.capitalized }
import { IHyperdrive } from "../../interfaces/IHyperdrive.sol";
import { I{{ name.capitalized }}Hyperdrive } from "../../interfaces/I{{ name.capitalized }}Hyperdrive.sol";
import { IHyperdriveDeployerCoordinator } from "../../interfaces/IHyperdriveDeployerCoordinator.sol";
import { {{ name.uppercase }}_HYPERDRIVE_DEPLOYER_COORDINATOR_KIND } from "../../libraries/Constants.sol";
import { ONE } from "../../libraries/FixedPointMath.sol";
import { HyperdriveDeployerCoordinator } from "../HyperdriveDeployerCoordinator.sol";

Expand All @@ -20,7 +21,12 @@ import { HyperdriveDeployerCoordinator } from "../HyperdriveDeployerCoordinator.
contract {{ name.capitalized }}HyperdriveDeployerCoordinator is HyperdriveDeployerCoordinator {
using SafeERC20 for ERC20;

/// @notice The deployer coordinator's kind.
string public constant override kind =
{{ name.uppercase }}_HYPERDRIVE_DEPLOYER_COORDINATOR_KIND;

/// @notice Instantiates the deployer coordinator.
/// @param _name The deployer coordinator's name.
/// @param _factory The factory that this deployer will be registered with.
/// @param _coreDeployer The core deployer.
/// @param _target0Deployer The target0 deployer.
Expand All @@ -29,6 +35,7 @@ contract {{ name.capitalized }}HyperdriveDeployerCoordinator is HyperdriveDeploy
/// @param _target3Deployer The target3 deployer.
/// @param _target4Deployer The target4 deployer.
constructor(
string memory _name,
address _factory,
address _coreDeployer,
address _target0Deployer,
Expand All @@ -38,6 +45,7 @@ contract {{ name.capitalized }}HyperdriveDeployerCoordinator is HyperdriveDeploy
address _target4Deployer
)
HyperdriveDeployerCoordinator(
_name,
_factory,
_coreDeployer,
_target0Deployer,
Expand Down Expand Up @@ -128,10 +136,12 @@ contract {{ name.capitalized }}HyperdriveDeployerCoordinator is HyperdriveDeploy
}

{% if contract.payable %}
/// @dev Allows the contract to receive ether.
/// @dev We override the message value check since this integration is
/// payable.
function _checkMessageValue() internal view override {}
{% else %}
/// @dev Prevents the contract from receiving ether.
/// @dev We override the message value check since this integration is
/// not payable.
function _checkMessageValue() internal view override {
if (msg.value != 0) {
revert IHyperdriveDeployerCoordinator.NotPayable();
Expand Down
2 changes: 1 addition & 1 deletion codegen/templates/deployers/Target0Deployer.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract {{ name.capitalized }}Target0Deployer is IHyperdriveTargetDeployer {
/// @param _config The configuration of the Hyperdrive pool.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Target0 instance.
function deploy(
function deployTarget(
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData
bytes32 _salt
Expand Down
2 changes: 1 addition & 1 deletion codegen/templates/deployers/Target1Deployer.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract {{ name.capitalized }}Target1Deployer is IHyperdriveTargetDeployer {
/// @param _config The configuration of the Hyperdrive pool.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Target1 instance.
function deploy(
function deployTarget(
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData
bytes32 _salt
Expand Down
2 changes: 1 addition & 1 deletion codegen/templates/deployers/Target2Deployer.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract {{ name.capitalized }}Target2Deployer is IHyperdriveTargetDeployer {
/// @param _config The configuration of the Hyperdrive pool.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Target2 instance.
function deploy(
function deployTarget(
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData
bytes32 _salt
Expand Down
2 changes: 1 addition & 1 deletion codegen/templates/deployers/Target3Deployer.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract {{ name.capitalized }}Target3Deployer is IHyperdriveTargetDeployer {
/// @param _config The configuration of the Hyperdrive pool.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Target3 instance.
function deploy(
function deployTarget(
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData
bytes32 _salt
Expand Down
2 changes: 1 addition & 1 deletion codegen/templates/deployers/Target4Deployer.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ contract {{ name.capitalized }}Target4Deployer is IHyperdriveTargetDeployer {
/// @param _config The configuration of the Hyperdrive pool.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed {{ name.capitalized }}Target4 instance.
function deploy(
function deployTarget(
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData
bytes32 _salt
Expand Down
7 changes: 6 additions & 1 deletion codegen/templates/instances/Hyperdrive.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,27 @@ contract {{ name.capitalized }}Hyperdrive is Hyperdrive, {{ name.capitalized }}B
using SafeERC20 for ERC20;

/// @notice Instantiates Hyperdrive with a {{ name.capitalized }} vault as the yield source.
/// @param __name The pool's name.
/// @param _config The configuration of the Hyperdrive pool.
/// @param _target0 The target0 address.
/// @param _target1 The target1 address.
/// @param _target2 The target2 address.
/// @param _target3 The target3 address.
/// @param _target4 The target4 address.
constructor(
string memory __name,
IHyperdrive.PoolConfig memory _config,
address _target0,
address _target1,
address _target2,
address _target3,
address _target4
)
Hyperdrive(_config, _target0, _target1, _target2, _target3, _target4)
Hyperdrive(_config, _target0, _target1, _target2, _target3)
{
// ****************************************************************
// FIXME: Implement this for new instances. ERC4626 example provided.

// Approve the base token with 1 wei. This ensures that all of the
// subsequent approvals will be writing to a dirty storage slot.
ERC20(address(_config.baseToken)).forceApprove(
Expand Down
6 changes: 6 additions & 0 deletions codegen/templates/instances/Target0.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pragma solidity 0.8.20;

import { HyperdriveTarget0 } from "../../external/HyperdriveTarget0.sol";
import { IHyperdrive } from "../../interfaces/IHyperdrive.sol";
import { {{ name.uppercase }}_HYPERDRIVE_KIND } from "../../libraries/Constants.sol";
import { {{ name.capitalized }}Base } from "./{{ name.capitalized }}Base.sol";

/// @author DELV
Expand All @@ -20,4 +21,9 @@ contract {{ name.capitalized }}Target0 is HyperdriveTarget0, {{ name.capitalized
IHyperdrive.PoolConfig memory _config
) HyperdriveTarget0(_config) {}

/// @notice Returns the instance's kind.
/// @return The instance's kind.
function kind() external pure override returns (string memory) {
_revert(abi.encode({{ name.uppercase }}_HYPERDRIVE_KIND));
}
}
2 changes: 1 addition & 1 deletion codegen/templates/instances/Target4.sol.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { {{ name.capitalized }}Base } from "./{{ name.capitalized }}Base.sol";

/// @author DELV
/// @title {{ name.capitalized }}Target4
/// @notice {{ name.capitalized }}Hyperdrive's target4 logic contract. This contract contains
/// @notice {{ name.capitalized }}Hyperdrive's target3 logic contract. This contract contains
/// several stateful functions that couldn't fit into the Hyperdrive
/// contract.
/// @custom:disclaimer The language used in this code is for coding convenience
Expand Down
25 changes: 23 additions & 2 deletions contracts/src/deployers/HyperdriveDeployerCoordinator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ abstract contract HyperdriveDeployerCoordinator is
address target2;
/// @dev The address of the HyperdriveTarget3 contract.
address target3;
/// @dev The address of the HyperdriveTarget4 contract.
address target4;
}

/// @notice The factory that this deployer will be registered with.
Expand All @@ -62,6 +64,9 @@ abstract contract HyperdriveDeployerCoordinator is
/// @notice The contract used to deploy new instances of HyperdriveTarget3.
address public immutable target3Deployer;

/// @notice The contract used to deploy new instances of HyperdriveTarget4.
address public immutable target4Deployer;

/// @notice The deployer coordinator's name.
string public override name;

Expand All @@ -75,14 +80,17 @@ abstract contract HyperdriveDeployerCoordinator is
/// @param _target0Deployer The target0 deployer.
/// @param _target1Deployer The target1 deployer.
/// @param _target2Deployer The target2 deployer.
/// @param _target3Deployer The target3 deployer.
/// @param _target4Deployer The target4 deployer.
constructor(
string memory _name,
address _factory,
address _coreDeployer,
address _target0Deployer,
address _target1Deployer,
address _target2Deployer,
address _target3Deployer
address _target3Deployer,
address _target4Deployer
) {
name = _name;
factory = _factory;
Expand All @@ -91,6 +99,7 @@ abstract contract HyperdriveDeployerCoordinator is
target1Deployer = _target1Deployer;
target2Deployer = _target2Deployer;
target3Deployer = _target3Deployer;
target4Deployer = _target4Deployer;
}

/// @dev Ensures that the contract is being called by the associated
Expand Down Expand Up @@ -144,7 +153,8 @@ abstract contract HyperdriveDeployerCoordinator is
deployment.target0 == address(0) ||
deployment.target1 == address(0) ||
deployment.target2 == address(0) ||
deployment.target3 == address(0)
deployment.target3 == address(0) ||
deployment.target4 == address(0)
) {
revert IHyperdriveDeployerCoordinator.IncompleteDeployment();
}
Expand Down Expand Up @@ -182,6 +192,7 @@ abstract contract HyperdriveDeployerCoordinator is
deployment.target1,
deployment.target2,
deployment.target3,
deployment.target4,
// NOTE: We hash the deployment ID with the salt to prevent the
// front-running of deployments.
keccak256(abi.encode(deploymentId, salt))
Expand Down Expand Up @@ -319,6 +330,16 @@ abstract contract HyperdriveDeployerCoordinator is
keccak256(abi.encode(msg.sender, _deploymentId, _salt))
);
deployment.target3 = target;
} else if (_targetIndex == 4) {
if (deployment.target4 != address(0)) {
revert IHyperdriveDeployerCoordinator.TargetAlreadyDeployed();
}
target = IHyperdriveTargetDeployer(target4Deployer).deployTarget(
config,
_extraData,
keccak256(abi.encode(msg.sender, _deploymentId, _salt))
);
deployment.target4 = target;
} else {
revert IHyperdriveDeployerCoordinator.InvalidTargetIndex();
}
Expand Down
54 changes: 54 additions & 0 deletions contracts/src/deployers/aave/AaveHyperdriveCoreDeployer.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.20;

import { IHyperdrive } from "../../interfaces/IHyperdrive.sol";
import { IHyperdriveCoreDeployer } from "../../interfaces/IHyperdriveCoreDeployer.sol";
import { AaveHyperdrive } from "../../instances/aave/AaveHyperdrive.sol";

/// @author DELV
/// @title AaveHyperdriveCoreDeployer
/// @notice The core deployer for the AaveHyperdrive implementation.
/// @custom:disclaimer The language used in this code is for coding convenience
/// only, and is not intended to, and does not, have any
/// particular legal or regulatory significance.
contract AaveHyperdriveCoreDeployer is IHyperdriveCoreDeployer {
/// @notice Deploys a Hyperdrive instance with the given parameters.
/// @param __name The name of the Hyperdrive pool.
/// @param _config The configuration of the Hyperdrive pool.
/// @param _target0 The target0 address.
/// @param _target1 The target1 address.
/// @param _target2 The target2 address.
/// @param _target3 The target3 address.
/// @param _target4 The target4 address.
/// @param _salt The create2 salt used in the deployment.
/// @return The address of the newly deployed AaveHyperdrive instance.
function deployHyperdrive(
string memory __name,
IHyperdrive.PoolConfig memory _config,
bytes memory, // unused _extraData,
address _target0,
address _target1,
address _target2,
address _target3,
address _target4,
bytes32 _salt
) external returns (address) {
return (
address(
// NOTE: We hash the sender with the salt to prevent the
// front-running of deployments.
new AaveHyperdrive{
salt: keccak256(abi.encode(msg.sender, _salt))
}(
__name,
_config,
_target0,
_target1,
_target2,
_target3,
_target4
)
)
);
}
}
Loading
Loading