Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:smartcontractkit/chainlink into …
Browse files Browse the repository at this point in the history
…develop
  • Loading branch information
AnieeG committed Dec 10, 2024
2 parents 5f14bf0 + 4eca0ec commit 75c676f
Show file tree
Hide file tree
Showing 82 changed files with 1,623 additions and 640 deletions.
5 changes: 5 additions & 0 deletions .changeset/six-coins-mix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": patch
---

#bugfix fix: duplicate chain id in chain config dialog
2 changes: 2 additions & 0 deletions .github/workflows/ci-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@ jobs:
extraArgs: '{ "skipped_tests": "TestChainComponents", "run_with_race": "true", "print_failed_tests": "true", "test_repeat_count": "3", "min_pass_ratio": "0.01" }'
secrets:
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

trigger-flaky-test-detection-for-deployment-project:
name: Flakeguard Deployment Project
Expand All @@ -484,6 +485,7 @@ jobs:
extraArgs: '{ "skipped_tests": "TestAddLane", "run_with_race": "true", "print_failed_tests": "true", "test_repeat_count": "3", "min_pass_ratio": "0.01" }'
secrets:
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

clean:
name: Clean Go Tidy & Generate
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/flakeguard-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ jobs:
slackNotificationAfterTestsChannelId: 'C07TRF65CNS' #flaky-test-detector-notifications
secrets:
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1 change: 1 addition & 0 deletions .github/workflows/flakeguard-on-demand.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@ jobs:
extraArgs: ${{ inputs.extraArgs }}
secrets:
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

242 changes: 117 additions & 125 deletions .github/workflows/flakeguard.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .github/workflows/solidity-foundry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
{ "name": "functions", "setup": { "run-coverage": false, "min-coverage": 98.5, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "keystone", "setup": { "run-coverage": true, "min-coverage": 72.8, "run-gas-snapshot": false, "run-forge-fmt": false }},
{ "name": "l2ep", "setup": { "run-coverage": true, "min-coverage": 65.0, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "liquiditymanager", "setup": { "run-coverage": true, "min-coverage": 44, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "liquiditymanager", "setup": { "run-coverage": true, "min-coverage": 40, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "llo-feeds", "setup": { "run-coverage": true, "min-coverage": 49.3, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "operatorforwarder", "setup": { "run-coverage": true, "min-coverage": 55.7, "run-gas-snapshot": true, "run-forge-fmt": false }},
{ "name": "shared", "setup": { "run-coverage": true, "extra-coverage-params": "--no-match-path='*CallWithExactGas*' --ir-minimum", "min-coverage": 32.6, "run-gas-snapshot": true, "run-forge-fmt": false }},
Expand Down
5 changes: 5 additions & 0 deletions contracts/.changeset/small-countries-flow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@chainlink/contracts': patch
---

Modify TokenPool.sol function setChainRateLimiterConfig to now accept an array of configs and set sequentially. Requested by front-end. PR issue CCIP-4329 #bugfix
9 changes: 9 additions & 0 deletions contracts/.changeset/yellow-mugs-explode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@chainlink/contracts': minor
---

#internal make gas for call exact check immutable

PR issue: CCIP-4477

Solidity Review issue: CCIP-3966
10 changes: 10 additions & 0 deletions contracts/.changeset/young-bats-rhyme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@chainlink/contracts': patch
---

add getChainConfig to ccipHome


PR issue: CCIP-4517

Solidity Review issue: CCIP-3966
2 changes: 1 addition & 1 deletion contracts/GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ mockery: $(mockery) ## Install mockery.

.PHONY: foundry
foundry: ## Install foundry.
foundryup --version nightly-fb5f0e1c4d9b9b0861be3e3bd07963524c5ac08e
foundryup --version nightly-aa69ed1e46dd61fbf9d73399396a4db4dd527431

.PHONY: foundry-refresh
foundry-refresh: foundry
Expand Down
195 changes: 99 additions & 96 deletions contracts/gas-snapshots/ccip.gas-snapshot

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions contracts/gas-snapshots/liquiditymanager.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ LiquidityManager_addLiquidity:test_addLiquiditySuccess() (gas: 279198)
LiquidityManager_rebalanceLiquidity:test_InsufficientLiquidityReverts() (gas: 206764)
LiquidityManager_rebalanceLiquidity:test_InvalidRemoteChainReverts() (gas: 192374)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess() (gas: 9141798)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess_AlreadyFinalized() (gas: 9306766)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_MultiStageFinalization() (gas: 9301906)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_NativeRewrap() (gas: 9231739)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPoolsSuccess_AlreadyFinalized() (gas: 9435757)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_MultiStageFinalization() (gas: 9430897)
LiquidityManager_rebalanceLiquidity:test_rebalanceBetweenPools_NativeRewrap() (gas: 9360730)
LiquidityManager_rebalanceLiquidity:test_rebalanceLiquiditySuccess() (gas: 382928)
LiquidityManager_receive:test_receive_success() (gas: 21182)
LiquidityManager_removeLiquidity:test_InsufficientLiquidityReverts() (gas: 184959)
Expand All @@ -19,7 +19,7 @@ LiquidityManager_setFinanceRole:test_OnlyOwnerReverts() (gas: 10987)
LiquidityManager_setFinanceRole:test_setFinanceRoleSuccess() (gas: 21836)
LiquidityManager_setLocalLiquidityContainer:test_OnlyOwnerReverts() (gas: 11030)
LiquidityManager_setLocalLiquidityContainer:test_ReverstWhen_CalledWithTheZeroAddress() (gas: 10621)
LiquidityManager_setLocalLiquidityContainer:test_setLocalLiquidityContainerSuccess() (gas: 3847203)
LiquidityManager_setLocalLiquidityContainer:test_setLocalLiquidityContainerSuccess() (gas: 3976150)
LiquidityManager_setMinimumLiquidity:test_OnlyOwnerReverts() (gas: 10925)
LiquidityManager_setMinimumLiquidity:test_setMinimumLiquiditySuccess() (gas: 36389)
LiquidityManager_withdrawERC20:test_withdrawERC20Reverts() (gas: 180396)
Expand Down
2 changes: 1 addition & 1 deletion contracts/gas-snapshots/workflow.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,4 @@ WorkflowRegistry_updateAllowedDONs:test_WhenTheBoolInputIsFalse() (gas: 29739)
WorkflowRegistry_updateAllowedDONs:test_WhenTheBoolInputIsTrue() (gas: 170296)
WorkflowRegistry_updateAuthorizedAddresses:test_WhenTheBoolInputIsFalse() (gas: 30278)
WorkflowRegistry_updateAuthorizedAddresses:test_WhenTheBoolInputIsTrue() (gas: 175515)
WorkflowRegistry_updateWorkflow:test_WhenTheWorkflowInputsAreAllValid() (gas: 479601)
WorkflowRegistry_updateWorkflow:test_WhenTheWorkflowInputsAreAllValid() (gas: 479601)
9 changes: 9 additions & 0 deletions contracts/src/v0.8/ccip/capability/CCIPHome.sol
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,15 @@ contract CCIPHome is Ownable2StepMsgSender, ITypeAndVersion, ICapabilityConfigur
return s_remoteChainSelectors.length();
}

/// @notice Returns the chain configuration for a given chain selector.
/// @param chainSelector The chain selector.
/// @return chainConfig The chain configuration.
function getChainConfig(
uint64 chainSelector
) external view returns (ChainConfig memory) {
return s_chainConfigurations[chainSelector];
}

/// @notice Returns all the chain configurations.
/// @param pageIndex The page index.
/// @param pageSize The page size.
Expand Down
4 changes: 0 additions & 4 deletions contracts/src/v0.8/ccip/libraries/Internal.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ import {MerkleMultiProof} from "../libraries/MerkleMultiProof.sol";
library Internal {
error InvalidEVMAddress(bytes encodedAddress);

/// @dev The minimum amount of gas to perform the call with exact gas.
/// We include this in the offramp so that we can redeploy to adjust it should a hardfork change the gas costs of
/// relevant opcodes in callWithExactGas.
uint16 internal constant GAS_FOR_CALL_EXACT_CHECK = 5_000;
/// @dev We limit return data to a selector plus 4 words. This is to avoid malicious contracts from returning
/// large amounts of data and causing repeated out-of-gas scenarios.
uint16 internal constant MAX_RET_BYTES = 4 + 4 * 32;
Expand Down
21 changes: 12 additions & 9 deletions contracts/src/v0.8/ccip/offRamp/OffRamp.sol
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
/// @dev RMN depends on this struct, if changing, please notify the RMN maintainers.
// solhint-disable-next-line gas-struct-packing
struct StaticConfig {
uint64 chainSelector; // ────╮ Destination chainSelector
IRMNRemote rmnRemote; // ────╯ RMN Verification Contract
uint64 chainSelector; // ───────╮ Destination chainSelector
uint16 gasForCallExactCheck; // | Gas for call exact check
IRMNRemote rmnRemote; // ───────╯ RMN Verification Contract
address tokenAdminRegistry; // Token admin registry address
address nonceManager; // Nonce manager address
}
Expand Down Expand Up @@ -151,6 +152,10 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
address internal immutable i_tokenAdminRegistry;
/// @dev The address of the nonce manager.
address internal immutable i_nonceManager;
/// @dev The minimum amount of gas to perform the call with exact gas.
/// We include this in the offramp so that we can redeploy to adjust it should a hardfork change the gas costs of
/// relevant opcodes in callWithExactGas.
uint16 internal immutable i_gasForCallExactCheck;

// DYNAMIC CONFIG
DynamicConfig internal s_dynamicConfig;
Expand Down Expand Up @@ -193,6 +198,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
i_rmnRemote = staticConfig.rmnRemote;
i_tokenAdminRegistry = staticConfig.tokenAdminRegistry;
i_nonceManager = staticConfig.nonceManager;
i_gasForCallExactCheck = staticConfig.gasForCallExactCheck;
emit StaticConfigSet(staticConfig);

_setDynamicConfig(dynamicConfig);
Expand Down Expand Up @@ -601,7 +607,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {

(bool success, bytes memory returnData,) = s_sourceChainConfigs[message.header.sourceChainSelector]
.router
.routeMessage(any2EvmMessage, Internal.GAS_FOR_CALL_EXACT_CHECK, message.gasLimit, message.receiver);
.routeMessage(any2EvmMessage, i_gasForCallExactCheck, message.gasLimit, message.receiver);
// If CCIP receiver execution is not successful, revert the call including token transfers.
if (!success) revert ReceiverError(returnData);
}
Expand Down Expand Up @@ -665,7 +671,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
),
localPoolAddress,
gasLeft,
Internal.GAS_FOR_CALL_EXACT_CHECK,
i_gasForCallExactCheck,
Internal.MAX_RET_BYTES
);

Expand Down Expand Up @@ -705,11 +711,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
uint256 gasLimit
) internal returns (uint256 balance, uint256 gasLeft) {
(bool success, bytes memory returnData, uint256 gasUsed) = CallWithExactGas._callWithExactGasSafeReturnData(
abi.encodeCall(IERC20.balanceOf, (receiver)),
token,
gasLimit,
Internal.GAS_FOR_CALL_EXACT_CHECK,
Internal.MAX_RET_BYTES
abi.encodeCall(IERC20.balanceOf, (receiver)), token, gasLimit, i_gasForCallExactCheck, Internal.MAX_RET_BYTES
);
if (!success) revert TokenHandlingError(token, returnData);

Expand Down Expand Up @@ -906,6 +908,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
function getStaticConfig() external view returns (StaticConfig memory) {
return StaticConfig({
chainSelector: i_chainSelector,
gasForCallExactCheck: i_gasForCallExactCheck,
rmnRemote: i_rmnRemote,
tokenAdminRegistry: i_tokenAdminRegistry,
nonceManager: i_nonceManager
Expand Down
20 changes: 20 additions & 0 deletions contracts/src/v0.8/ccip/pools/TokenPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ abstract contract TokenPool is IPoolV1, Ownable2StepMsgSender {
error PoolAlreadyAdded(uint64 remoteChainSelector, bytes remotePoolAddress);
error InvalidRemotePoolForChain(uint64 remoteChainSelector, bytes remotePoolAddress);
error InvalidRemoteChainDecimals(bytes sourcePoolData);
error MismatchedArrayLengths();
error OverflowDetected(uint8 remoteDecimals, uint8 localDecimals, uint256 remoteAmount);
error InvalidDecimalArgs(uint8 expected, uint8 actual);

Expand Down Expand Up @@ -536,6 +537,25 @@ abstract contract TokenPool is IPoolV1, Ownable2StepMsgSender {
return s_remoteChainConfigs[remoteChainSelector].inboundRateLimiterConfig._currentTokenBucketState();
}

/// @notice Sets multiple chain rate limiter configs.
/// @param remoteChainSelectors The remote chain selector for which the rate limits apply.
/// @param outboundConfigs The new outbound rate limiter config, meaning the onRamp rate limits for the given chain.
/// @param inboundConfigs The new inbound rate limiter config, meaning the offRamp rate limits for the given chain.
function setChainRateLimiterConfigs(
uint64[] calldata remoteChainSelectors,
RateLimiter.Config[] calldata outboundConfigs,
RateLimiter.Config[] calldata inboundConfigs
) external {
if (msg.sender != s_rateLimitAdmin && msg.sender != owner()) revert Unauthorized(msg.sender);
if (remoteChainSelectors.length != outboundConfigs.length || remoteChainSelectors.length != inboundConfigs.length) {
revert MismatchedArrayLengths();
}

for (uint256 i = 0; i < remoteChainSelectors.length; ++i) {
_setRateLimitConfig(remoteChainSelectors[i], outboundConfigs[i], inboundConfigs[i]);
}
}

/// @notice Sets the chain rate limiter config.
/// @param remoteChainSelector The remote chain selector for which the rate limits apply.
/// @param outboundConfig The new outbound rate limiter config, meaning the onRamp rate limits for the given chain.
Expand Down
2 changes: 1 addition & 1 deletion contracts/src/v0.8/ccip/test/BaseTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ contract BaseTest is Test {
// OffRamp
uint32 internal constant MAX_DATA_SIZE = 30_000;
uint16 internal constant MAX_TOKENS_LENGTH = 5;
uint16 internal constant GAS_FOR_CALL_EXACT_CHECK = 5000;
uint16 internal constant GAS_FOR_CALL_EXACT_CHECK = 5_000;
uint32 internal constant MAX_GAS_LIMIT = 4_000_000;

MockRMN internal s_mockRMN;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
function test_applyChainConfigUpdates_removeChainConfigs_Success() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));

CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](2);
adds[0] = CCIPHome.ChainConfigArgs({
chainSelector: 1,
Expand All @@ -130,6 +131,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
workflowDONId: uint32(1),
capabilitiesDONIds: new uint256[](0)
});

vm.mockCall(
CAPABILITIES_REGISTRY,
abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders),
Expand All @@ -140,10 +142,14 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
emit CCIPHome.ChainConfigSet(1, adds[0].chainConfig);
vm.expectEmit();
emit CCIPHome.ChainConfigSet(2, adds[1].chainConfig);

s_ccipHome.applyChainConfigUpdates(new uint64[](0), adds);

assertEq(s_ccipHome.getNumChainConfigurations(), 2, "total chain configs must be 2");

assertEq(s_ccipHome.getChainConfig(adds[0].chainSelector).config, adds[0].chainConfig.config);
assertEq(s_ccipHome.getChainConfig(adds[1].chainSelector).config, adds[1].chainConfig.config);

uint64[] memory removes = new uint64[](1);
removes[0] = uint64(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ contract OffRamp_afterOC3ConfigSet is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ contract OffRamp_constructor is OffRampSetup {
function test_Constructor_Success() public {
OffRamp.StaticConfig memory staticConfig = OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand Down Expand Up @@ -142,6 +143,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand All @@ -168,6 +170,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand All @@ -188,6 +191,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: IRMNRemote(address(0)),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand All @@ -208,6 +212,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: 0,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand All @@ -228,6 +233,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(0),
nonceManager: address(s_inboundNonceManager)
Expand All @@ -248,6 +254,7 @@ contract OffRamp_constructor is OffRampSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
abi.encodeWithSelector(
IRouter.routeMessage.selector,
expectedAny2EvmMessage,
Internal.GAS_FOR_CALL_EXACT_CHECK,
GAS_FOR_CALL_EXACT_CHECK,
message.gasLimit,
message.receiver
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup {
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnRemote: rmnRemote,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(nonceManager)
}),
Expand Down Expand Up @@ -348,6 +349,7 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup {
s_offRamp = new OffRampHelper(
OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
gasForCallExactCheck: GAS_FOR_CALL_EXACT_CHECK,
rmnRemote: s_mockRMNRemote,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
Expand Down
Loading

0 comments on commit 75c676f

Please sign in to comment.