Skip to content

Commit

Permalink
refactor: remove source chain selectors getter and add additional todos
Browse files Browse the repository at this point in the history
  • Loading branch information
elatoskinas committed May 1, 2024
1 parent f24383a commit 2318faa
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 71 deletions.
46 changes: 23 additions & 23 deletions contracts/gas-snapshots/ccip.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -100,33 +100,33 @@ CommitStore_verify:test_TooManyLeaves_Revert() (gas: 36807)
DefensiveExampleTest:test_HappyPath_Success() (gas: 207503)
DefensiveExampleTest:test_Recovery() (gas: 431738)
E2E:test_E2E_3MessagesSuccess_gas() (gas: 1036239)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 132616)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 154975)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAContract_Reverts() (gas: 37960)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 40130)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_fuzz__releaseOrMintTokens_AnyRevertIsCaught_Success(uint256) (runs: 10024, μ: 30110, ~: 30806)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 184928)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_AddMultipleChains_Success() (gas: 313058)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_AddNewChain_Success() (gas: 143300)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16973)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_MismatchingUpdateLenghts_Revert() (gas: 15949)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ReplaceExistingChain_Success() (gas: 152561)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 15639)
EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 5561985)
EVM2EVMMultiOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 144678)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHashChangesOnOnRampAddress_Success() (gas: 11015)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHashChangesOnSourceChain_Success() (gas: 11074)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHash_Success() (gas: 9162)
EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 40366)
EVM2EVMMultiOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 38552)
EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 142101)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 132594)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 154953)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAContract_Reverts() (gas: 37938)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 40108)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_fuzz__releaseOrMintTokens_AnyRevertIsCaught_Success(uint256) (runs: 10025, μ: 30079, ~: 30784)
EVM2EVMMultiOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 184906)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_AddMultipleChains_Success() (gas: 261162)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_AddNewChain_Success() (gas: 94737)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12362)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ReplaceExistingChain_Success() (gas: 103269)
EVM2EVMMultiOffRamp_applySoureConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 14511)
EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 5413298)
EVM2EVMMultiOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 143480)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHashChangesOnOnRampAddress_Success() (gas: 10983)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHashChangesOnSourceChain_Success() (gas: 11036)
EVM2EVMMultiOffRamp_metadataHash:test_MetadataHash_Success() (gas: 9146)
EVM2EVMMultiOffRamp_metadataHash:test_fuzz__MetadataHash_NoCollisions(uint64,uint64,uint64,address,address) (runs: 10001, μ: 4860854, ~: 4860854)
EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 40344)
EVM2EVMMultiOffRamp_setDynamicConfig:test_RouterZeroAddress_Revert() (gas: 38530)
EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 142128)
EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 325154)
EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 125872)
EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 647365)
EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 148120)
EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAContract_Reverts() (gas: 27226)
EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 29377)
EVM2EVMOffRamp__releaseOrMintTokens:test_fuzz__releaseOrMintTokens_AnyRevertIsCaught_Success(uint256) (runs: 10024, μ: 23227, ~: 23925)
EVM2EVMOffRamp__releaseOrMintTokens:test_fuzz__releaseOrMintTokens_AnyRevertIsCaught_Success(uint256) (runs: 10025, μ: 23227, ~: 23925)
EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 177373)
EVM2EVMOffRamp__report:test_Report_Success() (gas: 127403)
EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 200330)
Expand Down Expand Up @@ -368,10 +368,10 @@ PingPong_plumbing:test_Pausing_Success() (gas: 17765)
PingPong_startPingPong:test_StartPingPong_Success() (gas: 170821)
Pool__decodePoolReturnDataV1:test__decodePoolReturnDataV1_InvalidTag_Revert() (gas: 5148)
Pool__generatePoolReturnDataV1:test__generatePoolReturnDataV1_Success() (gas: 8069)
Pool__generatePoolReturnDataV1:test_fuzz__generatePoolReturnDataV1_Success(bytes,bytes) (runs: 256, μ: 9309, ~: 9164)
Pool__generatePoolReturnDataV1:test_fuzz__generatePoolReturnDataV1_Success(bytes,bytes) (runs: 257, μ: 9307, ~: 9164)
Pool__removeFirstFourBytes:test__removeFirstFourBytes_EmptyData_Success() (gas: 4696)
Pool__removeFirstFourBytes:test__removeFirstFourBytes_MalformedPoolReturnData_Revert() (gas: 4387)
Pool__removeFirstFourBytes:test_fuzz__removeFirstFourBytes_Success(bytes) (runs: 256, μ: 4894, ~: 4752)
Pool__removeFirstFourBytes:test_fuzz__removeFirstFourBytes_Success(bytes) (runs: 257, μ: 4894, ~: 4752)
PriceRegistry_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 79341)
PriceRegistry_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12434)
PriceRegistry_applyPriceUpdatersUpdates:test_ApplyPriceUpdaterUpdates_Success() (gas: 82600)
Expand Down
17 changes: 10 additions & 7 deletions contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,9 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV
/// @dev Tokens that should be included in Aggregate Rate Limiting
/// An (address => address) map is used for backwards compatability of offchain code
EnumerableMapAddresses.AddressToAddressMap internal s_rateLimitedTokensDestToSource;
// TODO: evaluate whether this should be pulled in (since this can be inferred from SourceChainSelectorAdded events instead)
/// @notice all source chains available in s_sourceChainConfigs
uint64[] internal s_sourceChainSelectors;
// uint64[] internal s_sourceChainSelectors;
/// @notice SourceConfig per chain
/// (forms lane configurations from sourceChainSelector => StaticConfig.chainSelector)
mapping(uint64 sourceChainSelector => SourceChainConfig) internal s_sourceChainConfigs;
Expand All @@ -153,7 +154,7 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV
constructor(
StaticConfig memory staticConfig,
SourceChainConfigUpdateArgs[] memory sourceChainConfigs,
// TODO: convert to array (per-chain)
// TODO: convert to array to support per-chain config once multi-ARL is ready
RateLimiter.Config memory rateLimiterConfig
) OCR2BaseNoChecks() AggregateRateLimiter(rateLimiterConfig) {
if (staticConfig.commitStore == address(0)) revert ZeroAddressNotAllowed();
Expand Down Expand Up @@ -307,7 +308,8 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV
uint64 prevNonce = s_senderNonce[message.sender];
address prevOffRamp = s_sourceChainConfigs[message.sourceChainSelector].prevOffRamp;
if (prevNonce == 0 && prevOffRamp != address(0)) {
// NOTE: assuming prevOffRamp is always a lane-specific off ramp
// TODO: assuming prevOffRamp is always a lane-specific off ramp
// Update to additionally support IAny2EVMMultiOffRamp backwards compatibility
prevNonce = IAny2EVMOffRamp(prevOffRamp).getSenderNonce(message.sender);
if (prevNonce + 1 != message.nonce) {
// the starting v2 onramp nonce, i.e. the 1st message nonce v2 offramp is expected to receive,
Expand Down Expand Up @@ -495,9 +497,9 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV

/// @notice Returns all configured source chain selectors
/// @return sourceChainSelectors source chain selectors
function getSourceChainSelectors() external view returns (uint64[] memory) {
return s_sourceChainSelectors;
}
// function getSourceChainSelectors() external view returns (uint64[] memory) {
// return s_sourceChainSelectors;
// }

/// @notice Updates source configs
/// @param sourceChainConfigUpdates Source chain configs
Expand All @@ -518,7 +520,7 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV

// OnRamp can never be zero - if it is, then the source chain has been added for the first time
if (s_sourceChainConfigs[sourceChainSelector].onRamp == address(0)) {
s_sourceChainSelectors.push(sourceChainSelector);
// s_sourceChainSelectors.push(sourceChainSelector);
emit SourceChainSelectorAdded(sourceChainSelector);
}

Expand Down Expand Up @@ -613,6 +615,7 @@ contract EVM2EVMMultiOffRamp is IAny2EVMOffRamp, AggregateRateLimiter, ITypeAndV
/// we bubble it up. If we encounter a non-rate limiting error we wrap it in a TokenHandlingError.
function _releaseOrMintTokens(
Client.EVMTokenAmount[] memory sourceTokenAmounts,
// TODO: revisit stack-depth after pulling in pool interface changes
Any2EVMMessageRoute memory messageRoute,
bytes[] memory encodedSourceTokenData,
bytes[] memory offchainTokenData
Expand Down
28 changes: 14 additions & 14 deletions contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,10 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
// Source config
s_offRamp.applySourceConfigUpdates(sourceChainConfigs);

uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
assertEq(resultSourceChainSelectors.length, 2);
assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR);
assertEq(resultSourceChainSelectors[1], SOURCE_CHAIN_SELECTOR + 1);
// uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
// assertEq(resultSourceChainSelectors.length, 2);
// assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR);
// assertEq(resultSourceChainSelectors[1], SOURCE_CHAIN_SELECTOR + 1);
_assertSourceChainConfigEquality(s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR), expectedSourceChainConfig1);
_assertSourceChainConfigEquality(
s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR + 1), expectedSourceChainConfig2
Expand Down Expand Up @@ -532,7 +532,7 @@ contract EVM2EVMMultiOffRamp_applySoureConfigUpdates is EVM2EVMMultiOffRampSetup
Vm.Log[] memory logEntries = vm.getRecordedLogs();
assertEq(logEntries.length, 0);

assertEq(s_offRamp.getSourceChainSelectors().length, 0);
// assertEq(s_offRamp.getSourceChainSelectors().length, 0);
}

function test_AddNewChain_Success() public {
Expand Down Expand Up @@ -562,9 +562,9 @@ contract EVM2EVMMultiOffRamp_applySoureConfigUpdates is EVM2EVMMultiOffRampSetup

_assertSourceChainConfigEquality(s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1), expectedSourceChainConfig);

uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
assertEq(resultSourceChainSelectors.length, 1);
assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR_1);
// uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
// assertEq(resultSourceChainSelectors.length, 1);
// assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR_1);
}

function test_ReplaceExistingChain_Success() public {
Expand Down Expand Up @@ -599,9 +599,9 @@ contract EVM2EVMMultiOffRamp_applySoureConfigUpdates is EVM2EVMMultiOffRampSetup

_assertSourceChainConfigEquality(s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR_1), expectedSourceChainConfig);

uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
assertEq(resultSourceChainSelectors.length, 1);
assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR_1);
// uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
// assertEq(resultSourceChainSelectors.length, 1);
// assertEq(resultSourceChainSelectors[0], SOURCE_CHAIN_SELECTOR_1);
}

function test_AddMultipleChains_Success() public {
Expand Down Expand Up @@ -645,15 +645,15 @@ contract EVM2EVMMultiOffRamp_applySoureConfigUpdates is EVM2EVMMultiOffRampSetup

s_offRamp.applySourceConfigUpdates(sourceChainConfigs);

uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
assertEq(resultSourceChainSelectors.length, 3);
// uint64[] memory resultSourceChainSelectors = s_offRamp.getSourceChainSelectors();
// assertEq(resultSourceChainSelectors.length, 3);

for (uint256 i = 0; i < 3; ++i) {
_assertSourceChainConfigEquality(
s_offRamp.getSourceChainConfig(sourceChainConfigs[i].sourceChainSelector), expectedSourceChainConfigs[i]
);

assertEq(resultSourceChainSelectors[i], sourceChainConfigs[i].sourceChainSelector);
// assertEq(resultSourceChainSelectors[i], sourceChainConfigs[i].sourceChainSelector);
}
}

Expand Down

0 comments on commit 2318faa

Please sign in to comment.