Skip to content
Open
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
3 changes: 2 additions & 1 deletion packages/contracts/.solhint.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"avoid-sha3": "warn",
"compiler-version": ["error", "^0.8.23"],
"func-visibility": ["warn", { "ignoreConstructors": true }],
"import-path-check": "off"
"import-path-check": "off",
"no-console": ["off", { "excludedFiles": ["script/**"] }]
}
}
8 changes: 6 additions & 2 deletions packages/contracts/script/Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ struct DeploySettings {
IV3SwapRouter swapRouter;
INonfungiblePositionManager nonfungiblePositionManager;
IUniswapV3Pool ethSupPool;
address agentWalletVerifier;
}

function _deployFontaineBeacon(ISuperToken fluid, address governor)
Expand Down Expand Up @@ -65,7 +66,8 @@ function _deployLockerBeacon(
settings.nonfungiblePositionManager,
settings.ethSupPool,
settings.swapRouter,
settings.treasury
settings.treasury,
settings.agentWalletVerifier
)
);
UpgradeableBeacon lockerBeacon = new UpgradeableBeacon(lockerLogicAddress);
Expand Down Expand Up @@ -206,6 +208,7 @@ contract DeployScript is Script {
INonfungiblePositionManager nonfungiblePositionManager =
INonfungiblePositionManager(vm.envAddress("NONFUNGIBLE_POSITION_MANAGER_ADDRESS"));
IUniswapV3Pool ethSupPool = IUniswapV3Pool(vm.envAddress("ETH_SUP_POOL_ADDRESS"));
address agentWalletVerifier = vm.envAddress("AGENT_WALLET_VERIFIER_ADDRESS");

// Purposedly not enforcing this at contract level in case governance decides to forfeit ownership of the contracts
if (governor == address(0)) {
Expand All @@ -221,7 +224,8 @@ contract DeployScript is Script {
unlockStatus: unlockStatus,
swapRouter: swapRouter,
nonfungiblePositionManager: nonfungiblePositionManager,
ethSupPool: ethSupPool
ethSupPool: ethSupPool,
agentWalletVerifier: agentWalletVerifier
});

_logDeploymentSettings(deployer, address(fluid), governor, treasury, factoryPauseStatus, unlockStatus);
Expand Down
28 changes: 28 additions & 0 deletions packages/contracts/script/SupDeployer.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

import { Script, console2 } from "forge-std/Script.sol";

abstract contract SupDeployer is Script {
function _startBroadcast() internal returns (address deployer) {
vm.startBroadcast();

// This is the way to get deployer address in foundry:
(, deployer,) = vm.readCallers();
}

function _stopBroadcast() internal {
vm.stopBroadcast();
}

function _showGitRevision() internal {
string[] memory inputs = new string[](2);
inputs[0] = "../tasks/show-git-rev.sh";
inputs[1] = "forge_ffi_mode";
try vm.ffi(inputs) returns (bytes memory res) {
console2.log("GIT REVISION : %s", string(res));
} catch {
console2.log("!! _showGitRevision: FFI not enabled");
}
}
}
292 changes: 292 additions & 0 deletions packages/contracts/script/config/AddressRegistry.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

library AddressRegistry {
struct FontaineDeploymentParameters {
address fontaineBeacon;
address sup;
}

struct ProgramManagerDeploymentParameters {
address programManager;
address taxDistributionPool;
}

struct StakingRewardControllerDeploymentParameters {
address stakingRewardController;
address sup;
}

struct FactoryDeploymentParameters {
address lockerFactory;
address lockerBeacon;
address stakingRewardController;
bool isPaused;
}

struct LockerDeploymentParameters {
address lockerBeacon;
address sup;
address programManager;
address stakingRewardController;
address fontaineBeacon;
address uniswapNonFungiblePositionManager;
address uniswapSupEthxPool;
address uniswapSwapRouter;
address daoTreasury;
address agentWalletVerifier;
bool isUnlockAvailable;
}

function getLockerDeploymentParameters(uint256 chainId)
internal
pure
returns (LockerDeploymentParameters memory addresses)
{
if (chainId == 8453) {
addresses = getBaseLockerDeploymentParameters();
} else if (chainId == 84_532) {
addresses = getBaseSepoliaLockerDeploymentParameters();
} else {
revert("Unsupported chainId");
}
}

function getFactoryDeploymentParameters(uint256 chainId)
internal
pure
returns (FactoryDeploymentParameters memory params)
{
if (chainId == 8453) {
params = getBaseFactoryDeploymentParameters();
} else if (chainId == 84_532) {
params = getBaseSepoliaFactoryDeploymentParameters();
} else {
revert("Unsupported chainId");
}
}

function getStakingRewardControllerDeploymentParameters(uint256 chainId)
internal
pure
returns (StakingRewardControllerDeploymentParameters memory params)
{
if (chainId == 8453) {
params = getBaseStakingRewardControllerDeploymentParameters();
} else if (chainId == 84_532) {
params = getBaseSepoliaStakingRewardControllerDeploymentParameters();
} else {
revert("Unsupported chainId");
}
}

function getProgramManagerDeploymentParameters(uint256 chainId)
internal
pure
returns (ProgramManagerDeploymentParameters memory params)
{
if (chainId == 8453) {
params = getBaseProgramManagerDeploymentParameters();
} else if (chainId == 84_532) {
params = getBaseSepoliaProgramManagerDeploymentParameters();
} else {
revert("Unsupported chainId");
}
}

function getFontaineDeploymentParameters(uint256 chainId)
internal
pure
returns (FontaineDeploymentParameters memory params)
{
if (chainId == 8453) {
params = getBaseFontaineDeploymentParameters();
} else if (chainId == 84_532) {
params = getBaseSepoliaFontaineDeploymentParameters();
} else {
revert("Unsupported chainId");
}
}

/**
* @dev Get Base Mainnet address registry
*/
function getBaseLockerDeploymentParameters() internal pure returns (LockerDeploymentParameters memory addresses) {
return LockerDeploymentParameters({
sup: 0xa69f80524381275A7fFdb3AE01c54150644c8792,
programManager: 0x1e32cf099992E9D3b17eDdDFFfeb2D07AED95C6a,
stakingRewardController: 0xb19Ae25A98d352B36CED60F93db926247535048b,
fontaineBeacon: 0xA26FbA47Da24F7DF11b3E4CF60Dcf7D1691Ae47d,
lockerBeacon: 0x664161f0974F5B17FB1fD3FDcE5D1679E829176c,
uniswapNonFungiblePositionManager: 0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1,
uniswapSupEthxPool: 0xBa154BEAa14172fF9384B82499732c669527d85D,
uniswapSwapRouter: 0x2626664c2603336E57B271c5C0b26F421741e481,
daoTreasury: 0xac808840f02c47C05507f48165d2222FF28EF4e1,
agentWalletVerifier: address(0), // FIXME update with production address
isUnlockAvailable: true
});
}

/**
* @dev Get Base Mainnet Factory deployment parameters
*/
function getBaseFactoryDeploymentParameters() internal pure returns (FactoryDeploymentParameters memory params) {
return FactoryDeploymentParameters({
lockerFactory: 0xA6694cAB43713287F7735dADc940b555db9d39D9,
lockerBeacon: 0x664161f0974F5B17FB1fD3FDcE5D1679E829176c,
stakingRewardController: 0xb19Ae25A98d352B36CED60F93db926247535048b,
isPaused: false
});
}

/**
* @dev Get Base Mainnet StakingRewardController deployment parameters
*/
function getBaseStakingRewardControllerDeploymentParameters()
internal
pure
returns (StakingRewardControllerDeploymentParameters memory params)
{
return StakingRewardControllerDeploymentParameters({
stakingRewardController: 0xb19Ae25A98d352B36CED60F93db926247535048b,
sup: 0xa69f80524381275A7fFdb3AE01c54150644c8792
});
}

/**
* @dev Get Base Mainnet EPProgramManager deployment parameters
*/
function getBaseProgramManagerDeploymentParameters()
internal
pure
returns (ProgramManagerDeploymentParameters memory params)
{
return ProgramManagerDeploymentParameters({
programManager: 0x1e32cf099992E9D3b17eDdDFFfeb2D07AED95C6a,
taxDistributionPool: 0xF0f494f4BD2C3A6bF8b49E6f798875301d944C0A
});
}

/**
* @dev Get Base Mainnet Fontaine deployment parameters
*/
function getBaseFontaineDeploymentParameters() internal pure returns (FontaineDeploymentParameters memory params) {
return FontaineDeploymentParameters({
fontaineBeacon: 0xA26FbA47Da24F7DF11b3E4CF60Dcf7D1691Ae47d,
sup: 0xa69f80524381275A7fFdb3AE01c54150644c8792
});
}

/**
* @dev Get Base Sepolia configuration
*/
function getBaseSepoliaLockerDeploymentParameters()
internal
pure
returns (LockerDeploymentParameters memory addresses)
{
return LockerDeploymentParameters({
sup: 0xFd62b398DD8a233ad37156690631fb9515059d6A,
programManager: 0x71a1975A1009e48E0BF2f621B6835db5Ea1f7706,
stakingRewardController: 0x9FC0Bb109F3e733Bd84B30F8D89685b0304fC018,
fontaineBeacon: 0xeBfA246A0BAd08A2A3ffB137ed75601AA41867dE,
lockerBeacon: 0xf2880c6D68080393C1784f978417a96ab4f37c38,
uniswapNonFungiblePositionManager: 0x27F971cb582BF9E50F397e4d29a5C7A34f11faA2,
uniswapSupEthxPool: 0xCa2054E3E5A940473DD6dCC4a67ECdfdFa8c0b72,
uniswapSwapRouter: 0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4,
daoTreasury: 0xe7143e87661418DEA122941e01Fdb3f9Acfd02aB,
agentWalletVerifier: address(0), // FIXME update with production address
isUnlockAvailable: true
});
}

/**
* @dev Get Base Sepolia Factory deployment parameters
*/
function getBaseSepoliaFactoryDeploymentParameters()
internal
pure
returns (FactoryDeploymentParameters memory params)
{
return FactoryDeploymentParameters({
lockerFactory: 0x897D343D24Ac5b84838B976Cf37036EDEfe3E967,
lockerBeacon: 0xf2880c6D68080393C1784f978417a96ab4f37c38,
stakingRewardController: 0x9FC0Bb109F3e733Bd84B30F8D89685b0304fC018,
isPaused: false
});
}

/**
* @dev Get Base Sepolia StakingRewardController deployment parameters
*/
function getBaseSepoliaStakingRewardControllerDeploymentParameters()
internal
pure
returns (StakingRewardControllerDeploymentParameters memory params)
{
return StakingRewardControllerDeploymentParameters({
stakingRewardController: 0x9FC0Bb109F3e733Bd84B30F8D89685b0304fC018,
sup: 0xFd62b398DD8a233ad37156690631fb9515059d6A
});
}

/**
* @dev Get Base Sepolia EPProgramManager deployment parameters
*/
function getBaseSepoliaProgramManagerDeploymentParameters()
internal
pure
returns (ProgramManagerDeploymentParameters memory params)
{
return ProgramManagerDeploymentParameters({
programManager: 0x71a1975A1009e48E0BF2f621B6835db5Ea1f7706,
taxDistributionPool: 0xBed96F4cE618798C286eE8BF7586BD607d491Ce7
});
}

/**
* @dev Get Base Sepolia Fontaine deployment parameters
*/
function getBaseSepoliaFontaineDeploymentParameters()
internal
pure
returns (FontaineDeploymentParameters memory params)
{
return FontaineDeploymentParameters({
fontaineBeacon: 0xeBfA246A0BAd08A2A3ffB137ed75601AA41867dE,
sup: 0xFd62b398DD8a233ad37156690631fb9515059d6A
});
}

function getLocalLockerDeploymentParameters() internal pure returns (LockerDeploymentParameters memory addresses) {
return getBaseLockerDeploymentParameters();
}

function getLocalFactoryDeploymentParameters() internal pure returns (FactoryDeploymentParameters memory params) {
return getBaseFactoryDeploymentParameters();
}

function getLocalStakingRewardControllerDeploymentParameters()
internal
pure
returns (StakingRewardControllerDeploymentParameters memory params)
{
return getBaseStakingRewardControllerDeploymentParameters();
}

function getLocalProgramManagerDeploymentParameters()
internal
pure
returns (ProgramManagerDeploymentParameters memory params)
{
return getBaseProgramManagerDeploymentParameters();
}

function getLocalFontaineDeploymentParameters()
internal
pure
returns (FontaineDeploymentParameters memory params)
{
return getBaseFontaineDeploymentParameters();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ contract DeploySIP8_PART_II is DeploySIP8 {
IUniswapV3Pool ethSupPool = IUniswapV3Pool(vm.envAddress("ETH_SUP_POOL_ADDRESS"));
IV3SwapRouter swapRouter = IV3SwapRouter(vm.envAddress("SWAP_ROUTER_ADDRESS"));
address daoTreasury = vm.envAddress("DAO_TREASURY_ADDRESS");
address agentWalletVerifier = vm.envAddress("AGENT_WALLET_VERIFIER_ADDRESS");

// Start Deployment :
address deployer = _startBroadcast();
Expand All @@ -183,7 +184,8 @@ contract DeploySIP8_PART_II is DeploySIP8 {
nonfungiblePositionManager,
ethSupPool,
swapRouter,
daoTreasury
daoTreasury,
agentWalletVerifier
)
);

Expand Down
Loading