Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/release'
Browse files Browse the repository at this point in the history
# Conflicts:
#	.env.clf
#	.env.deployments
#	packages/foundry/script/ParentPoolDeploy.s.sol
#	packages/foundry/test/ParentPool/Deposit.t.sol
#	packages/foundry/test/ParentPool/unitTests/DepositOnTheWayRequest.t.sol
#	packages/foundry/test/ParentPool/wrappers/ParentPool_DepositWrapper.sol
#	packages/foundry/test/ParentPool/wrappers/ParentPool_Wrapper.sol
#	packages/hardhat/constants/CLFSecrets.ts
#	packages/hardhat/constants/cNetworks.ts
#	packages/hardhat/contracts/ConceroAutomation.sol
#	packages/hardhat/contracts/ConceroParentPool.sol
#	packages/hardhat/contracts/Interfaces/IConceroAutomation.sol
#	packages/hardhat/contracts/Interfaces/IParentPool.sol
#	packages/hardhat/contracts/Libraries/ParentPoolStorage.sol
#	packages/hardhat/tasks/CLFScripts/dist/infra/DST.min.js
#	packages/hardhat/tasks/CLFScripts/dist/infra/SRC.js
#	packages/hardhat/tasks/CLFScripts/dist/infra/SRC.min.js
#	packages/hardhat/tasks/CLFScripts/dist/pool/getTotalBalance.js
#	packages/hardhat/tasks/CLFScripts/dist/pool/getTotalBalance.min.js
#	packages/hardhat/tasks/CLFScripts/src/infra/SRC.js
#	packages/hardhat/tasks/CLFScripts/src/pool/getTotalBalance.js
#	packages/hardhat/tasks/concero/deployInfra/deployInfra.ts
#	packages/hardhat/tasks/concero/liveChains.ts
#	packages/hardhat/tasks/index.ts
#	packages/hardhat/test/testnet/ParentPoolStartAndCompleteDeposit.ts
  • Loading branch information
olegkron committed Nov 9, 2024
2 parents a4d84f4 + 21ba120 commit 56c51a7
Show file tree
Hide file tree
Showing 13 changed files with 429 additions and 180 deletions.
16 changes: 8 additions & 8 deletions .env.clf
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ CLF_SUBID_CELO_ALFAJORES=66
# DON-HOSTED SECRETS VERSIONS
# testnet
CLF_DON_SECRETS_VERSION_SEPOLIA=0
CLF_DON_SECRETS_VERSION_ARBITRUM_SEPOLIA=1727380359
CLF_DON_SECRETS_VERSION_ARBITRUM_SEPOLIA=1718547517
CLF_DON_SECRETS_VERSION_OPTIMISM_SEPOLIA=1720388109
CLF_DON_SECRETS_VERSION_FUJI=1727423430
CLF_DON_SECRETS_VERSION_BASE_SEPOLIA=1728483393
CLF_DON_SECRETS_VERSION_POLYGON_AMOY=1726356903
CLF_DON_SECRETS_VERSION_FUJI=1715386158
CLF_DON_SECRETS_VERSION_BASE_SEPOLIA=1724077189
CLF_DON_SECRETS_VERSION_POLYGON_AMOY=1718960274

# mainnet
CLF_DON_SECRETS_VERSION_MAINNET=0
CLF_DON_SECRETS_VERSION_ARBITRUM=1724057608
CLF_DON_SECRETS_VERSION_POLYGON=1724057657
CLF_DON_SECRETS_VERSION_AVALANCHE=1724057632
CLF_DON_SECRETS_VERSION_BASE=1724057678
CLF_DON_SECRETS_VERSION_ARBITRUM=1725384925
CLF_DON_SECRETS_VERSION_POLYGON=1725385038
CLF_DON_SECRETS_VERSION_AVALANCHE=1725385012
CLF_DON_SECRETS_VERSION_BASE=1725385231

# DON-HOSTED SECRETS VERSIONS EXPIRATION TIMESTAMPS
# testnet
Expand Down
1 change: 1 addition & 0 deletions packages/foundry/test/ParentPool/BaseTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ contract BaseTest is Test {
vm.envAddress("CL_CCIP_ROUTER_BASE"),
vm.envAddress("USDC_BASE"),
address(lpToken),
vm.envAddress("CONCERO_AUTOMATION_BASE"),
vm.envAddress("CONCERO_ORCHESTRATOR_BASE"),
vm.envAddress("CLF_ROUTER_BASE"),
address(deployer),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

import {BaseTest} from "../BaseTest.t.sol";
import {Test, console, Vm} from "forge-std/Test.sol";
import {ParentPool_Wrapper} from "../wrappers/ParentPool_Wrapper.sol";
import {ConceroParentPool} from "contracts/ConceroParentPool.sol";

interface IERC20 {
function balanceOf(address account) external view returns (uint256);
}

contract CalculateLpTokensToMintTest is BaseTest {
uint256 internal constant USDC_DECIMALS = 10 ** 6;
uint256 internal constant LP_DECIMALS = 10 ** 18;

/*//////////////////////////////////////////////////////////////
SETUP
//////////////////////////////////////////////////////////////*/
function setUp() public virtual override {
vm.selectFork(forkId);
deployParentPoolProxy();
deployLpToken();

parentPoolImplementation = new ParentPool_Wrapper(
address(parentPoolProxy),
vm.envAddress("LINK_BASE"),
vm.envBytes32("CLF_DONID_BASE"),
uint64(vm.envUint("CLF_SUBID_BASE")),
address(vm.envAddress("CLF_ROUTER_BASE")),
address(vm.envAddress("CL_CCIP_ROUTER_BASE")),
address(vm.envAddress("USDC_BASE")),
address(lpToken),
vm.envAddress("CONCERO_AUTOMATION_BASE"),
address(vm.envAddress("CONCERO_ORCHESTRATOR_BASE")),
address(deployer),
[vm.envAddress("POOL_MESSENGER_0_ADDRESS"), address(0), address(0)]
);

setProxyImplementation(address(parentPoolImplementation));
setParentPoolVars();
addFunctionsConsumer();
}

/*/////////////////////////////////////////////////////////////
TESTS
/////////////////////////////////////////////////////////////*/

function test_CalculateLpTokensToMint_DepositInPurePool() public {
uint256 totalCrossChainBalanceUSDC = 0;
uint256 childPoolBalanceUSDC = 0;
uint256 amountToDepositUSDC = 200_000_000;
uint256 expectedLpAmountToMint = 200 ether;

uint256 lpAmountToMint = ConceroParentPool(payable(parentPoolProxy)).calculateLpAmount(
childPoolBalanceUSDC,
amountToDepositUSDC
);

require(lpAmountToMint == expectedLpAmountToMint, "Incorrect LP amount calculated");
}

function test_CalculateLpTokensToMint_DepositInPoolWithDepositsOnTheWay() public {
uint256 totalCrossChainBalanceBody = 3000;
uint256 totalCrossChainBalanceUSDC = totalCrossChainBalanceBody * USDC_DECIMALS;
uint256 amountToDepositUSDC = 100 * USDC_DECIMALS;
uint256 childPoolsCount = 3;
uint256 expectedLpAmountToMint = 100 ether;
uint256 prevDepositAmountUSDC = 100 * USDC_DECIMALS;
uint256 lpTokenAmount = totalCrossChainBalanceBody * LP_DECIMALS;
uint256 childPoolsBalanceUSDC = _setupPoolsAndLpToken(
totalCrossChainBalanceUSDC,
lpTokenAmount,
prevDepositAmountUSDC
);

uint256 lpAmountToMint = ConceroParentPool(payable(parentPoolProxy)).calculateLpAmount(
childPoolsBalanceUSDC,
amountToDepositUSDC
);

require(lpAmountToMint == expectedLpAmountToMint, "Incorrect LP amount calculated");
}

function test_CalculateLpTokensToMint_DepositInPoolWithFees() public {
uint256 totalCrossChainBalanceBody = 94_000;
uint256 feesEarnedBody = 400;
uint256 totalCrossChainBalanceUSDC = (totalCrossChainBalanceBody + feesEarnedBody) *
USDC_DECIMALS;
uint256 amountToDepositUSDC = 100 * USDC_DECIMALS;
uint256 childPoolsCount = 3;
uint256 expectedLpAmountToMint = 99576271186440677966;
uint256 lpTokenAmount = totalCrossChainBalanceBody * LP_DECIMALS;
uint256 childPoolsBalanceUSDC = _setupPoolsAndLpToken(
totalCrossChainBalanceUSDC,
lpTokenAmount,
0
);

uint256 lpAmountToMint = ConceroParentPool(payable(parentPoolProxy)).calculateLpAmount(
childPoolsBalanceUSDC,
amountToDepositUSDC
);

require(lpAmountToMint == expectedLpAmountToMint, "Incorrect LP amount calculated");
}

/*///////////////////////////////////////
HELPERS
///////////////////////////////////////*/

function _mintLpToken(uint256 amount, address receiver) private {
vm.prank(address(parentPoolProxy));
lpToken.mint(receiver, amount);
}

function _USDCToLpDecimals(uint256 amount) private returns (uint256) {
return (amount * LP_DECIMALS) / USDC_DECIMALS;
}

function _simulateParentPoolDepositOnTheWay(uint256 amount, uint256 childPoolsCount) internal {
for (uint256 i = 0; i < childPoolsCount; i++) {
ParentPool_Wrapper(payable(parentPoolProxy)).addDepositOnTheWay(
bytes32(uint256(1)),
uint64(i),
amount / (childPoolsCount + 1)
);
}
}

function _simulatePoolsBalanceUSDC(
uint256 totalCrossChainBalanceUSDC,
uint256 depositOnTheWayAmountUSDC
) internal returns (uint256) {
uint256 depositsOnTheWayAmount = ConceroParentPool(payable(parentPoolProxy))
.s_depositsOnTheWayAmount();
uint256 childPoolsBalanceUSDC = ((totalCrossChainBalanceUSDC - depositOnTheWayAmountUSDC) *
3) / 4;
uint256 parentPoolBalanceUSDC = totalCrossChainBalanceUSDC -
childPoolsBalanceUSDC -
depositsOnTheWayAmount;

deal(usdc, address(parentPoolProxy), parentPoolBalanceUSDC);

return childPoolsBalanceUSDC;
}

function _setupPoolsAndLpToken(
uint256 crossChainBalanceUSDC,
uint256 lpTokenAmount,
uint256 depositOnTheWatAmount
) internal returns (uint256) {
_mintLpToken((lpTokenAmount), makeAddr("1"));
return _simulatePoolsBalanceUSDC(crossChainBalanceUSDC, depositOnTheWatAmount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ contract IsMessengerTest is BaseTest {
address(vm.envAddress("CL_CCIP_ROUTER_BASE")),
address(vm.envAddress("USDC_BASE")),
address(lpToken),
vm.envAddress("CONCERO_AUTOMATION_BASE"),
address(vm.envAddress("CONCERO_ORCHESTRATOR_BASE")),
address(vm.envAddress("CLF_ROUTER_BASE")),
address(deployer),
Expand Down
27 changes: 19 additions & 8 deletions packages/hardhat/constants/CLFSecrets.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
import { getEnvVar } from "../utils/getEnvVar";
import { CLFSecrets } from "../types/CLFSecrets";
type envString = string | undefined;
export type CLFSecrets = {
MESSENGER_0_PRIVATE_KEY: envString;
MESSENGER_1_PRIVATE_KEY: envString;
MESSENGER_2_PRIVATE_KEY: envString;
POOL_MESSENGER_0_PRIVATE_KEY: envString;
INFURA_API_KEY: envString;
ALCHEMY_API_KEY: envString;
PARENT_POOL_INFURA_API_KEY: envString;
PARENT_POOL_ALCHEMY_API_KEY: envString;
};

const secrets: CLFSecrets = {
MESSENGER_0_PRIVATE_KEY: getEnvVar("MESSENGER_0_PRIVATE_KEY"),
MESSENGER_1_PRIVATE_KEY: getEnvVar("MESSENGER_1_PRIVATE_KEY"),
MESSENGER_2_PRIVATE_KEY: getEnvVar("MESSENGER_2_PRIVATE_KEY"),
POOL_MESSENGER_0_PRIVATE_KEY: getEnvVar("POOL_MESSENGER_0_PRIVATE_KEY"),
INFURA_API_KEY: getEnvVar("INFURA_API_KEY"),
ALCHEMY_API_KEY: getEnvVar("ALCHEMY_API_KEY"),
MESSENGER_0_PRIVATE_KEY: process.env.MESSENGER_0_PRIVATE_KEY,
MESSENGER_1_PRIVATE_KEY: process.env.MESSENGER_1_PRIVATE_KEY,
MESSENGER_2_PRIVATE_KEY: process.env.MESSENGER_2_PRIVATE_KEY,
POOL_MESSENGER_0_PRIVATE_KEY: process.env.POOL_MESSENGER_0_PRIVATE_KEY,
INFURA_API_KEY: process.env.INFURA_API_KEY,
ALCHEMY_API_KEY: process.env.ALCHEMY_API_KEY,
PARENT_POOL_INFURA_API_KEY: process.env.PARENT_POOL_INFURA_API_KEY,
PARENT_POOL_ALCHEMY_API_KEY: process.env.PARENT_POOL_ALCHEMY_API_KEY,
};

export default secrets;
1 change: 1 addition & 0 deletions packages/hardhat/constants/cNetworks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export const networkEnvKeys: Record<string, string> = {

export const functionsGatewayUrls = {
mainnet: ["https://01.functions-gateway.chain.link/", "https://02.functions-gateway.chain.link/"],
localhost: ["https://01.functions-gateway.chain.link/", "https://02.functions-gateway.chain.link/"],
testnet: ["https://01.functions-gateway.testnet.chain.link/", "https://02.functions-gateway.testnet.chain.link/"],
};

Expand Down
2 changes: 1 addition & 1 deletion packages/hardhat/contracts/Libraries/ChildPoolStorage.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ contract ChildPoolStorage {

mapping(bytes32 => bool) public s_distributeLiquidityRequestProcessed;

//@notice Prevents CLF from triggerring the same withdrawal request more than once
//@notice Prevents CLF from triggering the same withdrawal request more than once
mapping(bytes32 => bool) public s_withdrawRequests;
}
24 changes: 4 additions & 20 deletions packages/hardhat/tasks/CLFScripts/dist/infra/DST.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,38 +55,22 @@
chainId: '0x13882',
},
[`0x${BigInt('4051577828743386545').toString(16)}`]: {
urls: [
`https://polygon-mainnet.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://polygon.blockpi.network/v1/rpc/public',
'https://polygon-bor-rpc.publicnode.com',
],
urls: ['https://polygon-bor-rpc.publicnode.com', 'https://rpc.ankr.com/polygon'],
confirmations: 3n,
chainId: '0x89',
},
[`0x${BigInt('4949039107694359620').toString(16)}`]: {
urls: [
`https://arbitrum.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://arbitrum.blockpi.network/v1/rpc/public',
'https://arbitrum-rpc.publicnode.com',
],
urls: ['https://arbitrum-rpc.publicnode.com', 'https://rpc.ankr.com/arbitrum'],
confirmations: 3n,
chainId: '0xa4b1',
},
[`0x${BigInt('15971525489660198786').toString(16)}`]: {
urls: [
`https://base-mainnet.g.alchemy.com/v2/${secrets.ALCHEMY_API_KEY}`,
'https://base.blockpi.network/v1/rpc/public',
'https://base-rpc.publicnode.com',
],
urls: ['https://base-rpc.publicnode.com', 'https://rpc.ankr.com/base'],
confirmations: 3n,
chainId: '0x2105',
},
[`0x${BigInt('6433500567565415381').toString(16)}`]: {
urls: [
`https://avalanche-mainnet.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://avalanche.blockpi.network/v1/rpc/public',
'https://avalanche-c-chain-rpc.publicnode.com',
],
urls: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://rpc.ankr.com/avalanche'],
confirmations: 3n,
chainId: '0xa86a',
},
Expand Down
24 changes: 4 additions & 20 deletions packages/hardhat/tasks/CLFScripts/src/infra/DST.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,38 +58,22 @@
// mainnets

[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_POLYGON}').toString(16)}`]: {
urls: [
`https://polygon-mainnet.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://polygon.blockpi.network/v1/rpc/public',
'https://polygon-bor-rpc.publicnode.com',
],
urls: ['https://polygon-bor-rpc.publicnode.com', 'https://rpc.ankr.com/polygon'],
confirmations: 3n,
chainId: '0x89',
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_ARBITRUM}').toString(16)}`]: {
urls: [
`https://arbitrum.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://arbitrum.blockpi.network/v1/rpc/public',
'https://arbitrum-rpc.publicnode.com',
],
urls: ['https://arbitrum-rpc.publicnode.com', 'https://rpc.ankr.com/arbitrum'],
confirmations: 3n,
chainId: '0xa4b1',
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_BASE}').toString(16)}`]: {
urls: [
`https://base-mainnet.g.alchemy.com/v2/${secrets.ALCHEMY_API_KEY}`,
'https://base.blockpi.network/v1/rpc/public',
'https://base-rpc.publicnode.com',
],
urls: ['https://base-rpc.publicnode.com', 'https://rpc.ankr.com/base'],
confirmations: 3n,
chainId: '0x2105',
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_AVALANCHE}').toString(16)}`]: {
urls: [
`https://avalanche-mainnet.infura.io/v3/${secrets.INFURA_API_KEY}`,
'https://avalanche.blockpi.network/v1/rpc/public',
'https://avalanche-c-chain-rpc.publicnode.com',
],
urls: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://rpc.ankr.com/avalanche'],
confirmations: 3n,
chainId: '0xa86a',
},
Expand Down
20 changes: 4 additions & 16 deletions packages/hardhat/tasks/CLFScripts/src/infra/SRC.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ numAllowedQueries: 2 – a minimum to initialise Viem.
// mainnets

[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_BASE}').toString(16)}`]: {
urls: ['https://rpc.ankr.com/base', 'https://base.blockpi.network/v1/rpc/public', 'https://base-rpc.publicnode.com'],
urls: ['https://base-rpc.publicnode.com', 'https://rpc.ankr.com/base'],
chainId: '0x2105',
nativeCurrency: 'eth',
priceFeed: {
Expand All @@ -130,11 +130,7 @@ numAllowedQueries: 2 – a minimum to initialise Viem.
},
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_ARBITRUM}').toString(16)}`]: {
urls: [
'https://rpc.ankr.com/arbitrum',
'https://arbitrum.blockpi.network/v1/rpc/public',
'https://arbitrum-rpc.publicnode.com',
],
urls: ['https://arbitrum-rpc.publicnode.com', 'https://rpc.ankr.com/arbitrum'],
chainId: '0xa4b1',
nativeCurrency: 'eth',
priceFeed: {
Expand All @@ -145,11 +141,7 @@ numAllowedQueries: 2 – a minimum to initialise Viem.
},
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_POLYGON}').toString(16)}`]: {
urls: [
'https://rpc.ankr.com/polygon',
'https://polygon.blockpi.network/v1/rpc/public',
'https://polygon-bor-rpc.publicnode.com',
],
urls: ['https://polygon-bor-rpc.publicnode.com', 'https://rpc.ankr.com/polygon'],
chainId: '0x89',
nativeCurrency: 'matic',
priceFeed: {
Expand All @@ -162,11 +154,7 @@ numAllowedQueries: 2 – a minimum to initialise Viem.
},
},
[`0x${BigInt('${CL_CCIP_CHAIN_SELECTOR_AVALANCHE}').toString(16)}`]: {
urls: [
'https://rpc.ankr.com/avalanche-c',
'https://avalanche.blockpi.network/v1/rpc/public',
'https://avalanche-c-chain-rpc.publicnode.com',
],
urls: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://rpc.ankr.com/avalanche'],
chainId: '0xa86a',
nativeCurrency: 'avax',
priceFeed: {
Expand Down
Loading

0 comments on commit 56c51a7

Please sign in to comment.