Skip to content

Commit

Permalink
allow overrides if explicit
Browse files Browse the repository at this point in the history
  • Loading branch information
RensR committed Oct 18, 2024
1 parent f7abc3e commit 492e480
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 43 deletions.
23 changes: 12 additions & 11 deletions contracts/gas-snapshots/ccip.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -342,12 +342,13 @@ NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas
NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195655)
NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139121)
NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105181)
NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates() (gas: 123141)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43073)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64380)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 42915)
NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate() (gas: 66660)
NonceManager_applyPreviousRampsUpdates:test_ZeroInput() (gas: 12090)
NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates_success() (gas: 123165)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43349)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64677)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 43138)
NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed_success() (gas: 45942)
NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66682)
NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12115)
NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705)
OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5914022)
OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626106)
Expand All @@ -373,8 +374,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 61590)
OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151)
OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291)
OffRamp_commit:test_InvalidRootRevert() (gas: 63356)
OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6674770)
OffRamp_commit:test_NoConfig_Revert() (gas: 6258376)
OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6674635)
OffRamp_commit:test_NoConfig_Revert() (gas: 6258241)
OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113033)
OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121381)
OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113032)
Expand All @@ -399,12 +400,12 @@ OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639)
OffRamp_execute:test_LargeBatch_Success() (gas: 3426335)
OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372990)
OffRamp_execute:test_MultipleReports_Success() (gas: 300979)
OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7083599)
OffRamp_execute:test_NoConfig_Revert() (gas: 6308074)
OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7083464)
OffRamp_execute:test_NoConfig_Revert() (gas: 6307939)
OffRamp_execute:test_NonArray_Revert() (gas: 27562)
OffRamp_execute:test_SingleReport_Success() (gas: 176354)
OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148372)
OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086348)
OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7086213)
OffRamp_execute:test_ZeroReports_Revert() (gas: 17361)
OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18511)
OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244079)
Expand Down
6 changes: 5 additions & 1 deletion contracts/src/v0.8/ccip/NonceManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ contract NonceManager is INonceManager, AuthorizedCallers, ITypeAndVersion {
struct PreviousRampsArgs {
uint64 remoteChainSelector; // Chain selector
PreviousRamps prevRamps; // Previous on/off ramps
bool overrideExistingRamps; // Whether to override existing ramps
}

string public constant override typeAndVersion = "NonceManager 1.6.0-dev";
Expand Down Expand Up @@ -137,7 +138,10 @@ contract NonceManager is INonceManager, AuthorizedCallers, ITypeAndVersion {
// In versions prior to the introduction of the NonceManager contract, nonces were tracked in the on/off ramps.
// This config does a 1-time migration to move the nonce from on/off ramps into NonceManager
if (prevRamps.prevOnRamp != address(0) || prevRamps.prevOffRamp != address(0)) {
revert PreviousRampAlreadySet();
// We do allow explicit overrides as an escape hatch in the case of a misconfiguration.
if (!previousRampsArg.overrideExistingRamps) {
revert PreviousRampAlreadySet();
}
}

prevRamps.prevOnRamp = previousRampsArg.prevRamps.prevOnRamp;
Expand Down
104 changes: 78 additions & 26 deletions contracts/src/v0.8/ccip/test/NonceManager.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,15 @@ contract NonceManager_NonceIncrementation is BaseTest {
}

contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
function test_SingleRampUpdate() public {
function test_SingleRampUpdate_success() public {
address prevOnRamp = makeAddr("prevOnRamp");
address prevOffRamp = makeAddr("prevOffRamp");
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp, prevOffRamp));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp, prevOffRamp),
overrideExistingRamps: false
});

vm.expectEmit();
emit NonceManager.PreviousRampsUpdated(DEST_CHAIN_SELECTOR, previousRamps[0].prevRamps);
Expand All @@ -104,16 +107,22 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
_assertPreviousRampsEqual(s_outboundNonceManager.getPreviousRamps(DEST_CHAIN_SELECTOR), previousRamps[0].prevRamps);
}

function test_MultipleRampsUpdates() public {
function test_MultipleRampsUpdates_success() public {
address prevOnRamp1 = makeAddr("prevOnRamp1");
address prevOnRamp2 = makeAddr("prevOnRamp2");
address prevOffRamp1 = makeAddr("prevOffRamp1");
address prevOffRamp2 = makeAddr("prevOffRamp2");
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](2);
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp1, prevOffRamp1));
previousRamps[1] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR + 1, NonceManager.PreviousRamps(prevOnRamp2, prevOffRamp2));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp1, prevOffRamp1),
overrideExistingRamps: false
});
previousRamps[1] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR + 1,
prevRamps: NonceManager.PreviousRamps(prevOnRamp2, prevOffRamp2),
overrideExistingRamps: false
});

vm.expectEmit();
emit NonceManager.PreviousRampsUpdated(DEST_CHAIN_SELECTOR, previousRamps[0].prevRamps);
Expand All @@ -128,7 +137,27 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
);
}

function test_ZeroInput() public {
function test_PreviousRampAlreadySet_overrideAllowed_success() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOffRamp = makeAddr("prevOffRamp");
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(address(0), prevOffRamp),
overrideExistingRamps: true
});

s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);

previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(address(0), prevOffRamp),
overrideExistingRamps: true
});

s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
}

function test_ZeroInput_success() public {
vm.recordLogs();
s_outboundNonceManager.applyPreviousRampsUpdates(new NonceManager.PreviousRampsArgs[](0));

Expand All @@ -138,13 +167,19 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
function test_PreviousRampAlreadySetOnRamp_Revert() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOnRamp = makeAddr("prevOnRamp");
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp, address(0)));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp, address(0)),
overrideExistingRamps: false
});

s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);

previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp, address(0)));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp, address(0)),
overrideExistingRamps: false
});

vm.expectRevert(NonceManager.PreviousRampAlreadySet.selector);
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
Expand All @@ -153,13 +188,19 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
function test_PreviousRampAlreadySetOffRamp_Revert() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOffRamp = makeAddr("prevOffRamp");
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(address(0), prevOffRamp));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(address(0), prevOffRamp),
overrideExistingRamps: false
});

s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);

previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(address(0), prevOffRamp));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(address(0), prevOffRamp),
overrideExistingRamps: false
});

vm.expectRevert(NonceManager.PreviousRampAlreadySet.selector);
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
Expand All @@ -169,13 +210,19 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOnRamp = makeAddr("prevOnRamp");
address prevOffRamp = makeAddr("prevOffRamp");
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp, prevOffRamp));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp, prevOffRamp),
overrideExistingRamps: false
});

s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);

previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(prevOnRamp, prevOffRamp));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(prevOnRamp, prevOffRamp),
overrideExistingRamps: false
});

vm.expectRevert(NonceManager.PreviousRampAlreadySet.selector);
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
Expand Down Expand Up @@ -205,8 +252,11 @@ contract NonceManager_OnRampUpgrade is OnRampSetup {
vm.mockCall(address(s_prevOnRamp), abi.encodeWithSelector(IEVM2AnyOnRamp.getSenderNonce.selector), abi.encode(0));

NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
previousRamps[0] =
NonceManager.PreviousRampsArgs(DEST_CHAIN_SELECTOR, NonceManager.PreviousRamps(address(s_prevOnRamp), address(0)));
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: DEST_CHAIN_SELECTOR,
prevRamps: NonceManager.PreviousRamps(address(s_prevOnRamp), address(0)),
overrideExistingRamps: false
});
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);

(s_onRamp, s_metadataHash) = _deployOnRamp(
Expand Down Expand Up @@ -289,9 +339,11 @@ contract NonceManager_OffRampUpgrade is OffRampSetup {
s_prevOffRamp = new EVM2EVMOffRampHelper();

NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
previousRamps[0] = NonceManager.PreviousRampsArgs(
SOURCE_CHAIN_SELECTOR_1, NonceManager.PreviousRamps(address(0), address(s_prevOffRamp))
);
previousRamps[0] = NonceManager.PreviousRampsArgs({
remoteChainSelector: SOURCE_CHAIN_SELECTOR_1,
prevRamps: NonceManager.PreviousRamps(address(0), address(s_prevOffRamp)),
overrideExistingRamps: false
});

s_inboundNonceManager.applyPreviousRampsUpdates(previousRamps);

Expand Down
Loading

0 comments on commit 492e480

Please sign in to comment.