Skip to content

Commit

Permalink
CCIP-4174 Add token address to TokenHandlingError (#15458)
Browse files Browse the repository at this point in the history
* fix tokenpool comment

* add token address to TokenHandlingError

* fix comment

* [Bot] Update changeset file with jira issues

* fix comments

---------

Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com>
  • Loading branch information
1 parent 26734ba commit 5a3a99b
Show file tree
Hide file tree
Showing 13 changed files with 131 additions and 118 deletions.
10 changes: 10 additions & 0 deletions contracts/.changeset/fluffy-eels-tan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@chainlink/contracts': patch
---

Add token address to TokenHandlingError


PR issue: CCIP-4174

Solidity Review issue: CCIP-3966
75 changes: 33 additions & 42 deletions contracts/gas-snapshots/ccip.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllow
NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889)
NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12213)
NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705)
OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5880050)
OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5887669)
OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626160)
OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166527)
OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16719)
Expand All @@ -394,8 +394,8 @@ OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63432)
OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 69993)
OffRamp_commit:test_InvalidInterval_Revert() (gas: 66119)
OffRamp_commit:test_InvalidRootRevert() (gas: 65214)
OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6641148)
OffRamp_commit:test_NoConfig_Revert() (gas: 6224566)
OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6648767)
OffRamp_commit:test_NoConfig_Revert() (gas: 6232185)
OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112985)
OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121175)
OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112917)
Expand All @@ -410,45 +410,40 @@ OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125230)
OffRamp_commit:test_Unhealthy_Revert() (gas: 60482)
OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206800)
OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53621)
OffRamp_constructor:test_Constructor_Success() (gas: 6186663)
OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136575)
OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103612)
OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101461)
OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162055)
OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101378)
OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101382)
OffRamp_constructor:test_Constructor_Success() (gas: 6194282)
OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136585)
OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103622)
OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101471)
OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162065)
OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101388)
OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101392)
OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639)
OffRamp_execute:test_LargeBatch_Success() (gas: 3376243)
OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371146)
OffRamp_execute:test_MultipleReports_Success() (gas: 298685)
OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7049316)
OffRamp_execute:test_NoConfig_Revert() (gas: 6273786)
OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7056935)
OffRamp_execute:test_NoConfig_Revert() (gas: 6281405)
OffRamp_execute:test_NonArray_Revert() (gas: 27680)
OffRamp_execute:test_SingleReport_Success() (gas: 175664)
OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147820)
OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6940958)
OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6948577)
OffRamp_execute:test_ZeroReports_Revert() (gas: 17361)
OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18533)
OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 237874)
OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20363)
OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 198792)
OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48880)
OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 56102)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 212824)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85495)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 267982)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91918)
OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens() (gas: 56135)
OffRamp_executeSingleMessage:test_executeSingleMessage_NonContract() (gas: 20463)
OffRamp_executeSingleMessage:test_executeSingleMessage_NonContractWithTokens() (gas: 237997)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithMessageInterceptor() (gas: 91972)
OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens() (gas: 268069)
OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28703)
OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 15574)
OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 471529)
OffRamp_executeSingleReport:test_InvalidSourcePoolAddress() (gas: 474583)
OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48340)
OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 34145)
OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28868)
OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187644)
OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197820)
OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40731)
OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 404990)
OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248696)
OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248718)
OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192362)
OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212388)
OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243698)
Expand All @@ -463,7 +458,7 @@ OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 540743
OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 540690)
OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 451736)
OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135241)
OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164880)
OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 164902)
OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3888846)
OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 121048)
OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89561)
Expand All @@ -483,28 +478,24 @@ OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 225918)
OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226458)
OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 773856)
OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344327)
OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37654)
OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101465)
OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 79909)
OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37676)
OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 101487)
OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36812)
OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91428)
OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 37323)
OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 91452)
OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 83540)
OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 156078)
OffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 23836)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 62866)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 78407)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 168730)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 170642)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 181870)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens() (gas: 168762)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenInvalidDataLengthReturnData() (gas: 62844)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_RevertWhenPoolDoesNotSupportDest() (gas: 78448)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride() (gas: 170632)
OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals() (gas: 181871)
OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11509)
OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14019)
OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47579)
OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25552)
OffRamp_trialExecute:test_RateLimitError_Success() (gas: 213073)
OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 221750)
OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 289305)
OffRamp_trialExecute:test_trialExecute_Success() (gas: 271779)
OffRamp_trialExecute:test_trialExecute() (gas: 271705)
OffRamp_trialExecute:test_trialExecute_RateLimitError() (gas: 127412)
OffRamp_trialExecute:test_trialExecute_TokenHandlingErrorIsCaught() (gas: 138722)
OffRamp_trialExecute:test_trialExecute_TokenPoolIsNotAContract() (gas: 289256)
OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251706)
OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17227)
OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67101)
Expand Down
2 changes: 1 addition & 1 deletion contracts/src/v0.8/ccip/libraries/Internal.sol
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ library Internal {
// be relied upon by the destination pool to validate the source pool.
bytes sourcePoolAddress;
address destTokenAddress; // ─╮ Address of destination token
uint32 destGasAmount; //─────╯ The amount of gas available for the releaseOrMint and transfer calls on the offRamp.
uint32 destGasAmount; // ─────╯ The amount of gas available for the releaseOrMint and transfer calls on the offRamp.
// Optional pool data to be transferred to the destination chain. Be default this is capped at
// CCIP_LOCK_OR_BURN_V1_RET_BYTES bytes. If more data is required, the TokenTransferFeeConfig.destBytesOverhead
// has to be set for the specific token.
Expand Down
6 changes: 3 additions & 3 deletions contracts/src/v0.8/ccip/offRamp/OffRamp.sol
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
error InvalidRoot();
error CanOnlySelfCall();
error ReceiverError(bytes err);
error TokenHandlingError(bytes err);
error TokenHandlingError(address target, bytes err);
error ReleaseOrMintBalanceMismatch(uint256 amountReleased, uint256 balancePre, uint256 balancePost);
error EmptyReport(uint64 sourceChainSelector);
error EmptyBatch();
Expand Down Expand Up @@ -670,7 +670,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
);

// Wrap and rethrow the error so we can catch it lower in the stack.
if (!success) revert TokenHandlingError(returnData);
if (!success) revert TokenHandlingError(localPoolAddress, returnData);

// If the call was successful, the returnData should be the amount released or minted denominated in the local
// token's decimals.
Expand Down Expand Up @@ -711,7 +711,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base {
Internal.GAS_FOR_CALL_EXACT_CHECK,
Internal.MAX_RET_BYTES
);
if (!success) revert TokenHandlingError(returnData);
if (!success) revert TokenHandlingError(token, returnData);

// If the call was successful, the returnData should contain only the balance.
if (returnData.length != Internal.MAX_BALANCE_OF_RET_BYTES) {
Expand Down
15 changes: 8 additions & 7 deletions contracts/src/v0.8/ccip/pools/TokenPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,19 @@ import {EnumerableSet} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts
/// A token pool serves as isolated place for holding tokens and token specific logic
/// that may execute as tokens move across the bridge.
/// @dev This pool supports different decimals on different chains but using this feature could impact the total number
/// of tokens in circulation. Since all of the tokens are burned on the source, and a rounded amount is minted on the
/// destination, the number of tokens minted could be less than the number of tokens burned. This is because the source
/// chain does not know about the destination token decimals. This is not a problem if the decimals are the same on both
/// chains.
/// of tokens in circulation. Since all of the tokens are locked/burned on the source, and a rounded amount is
/// minted/released on the destination, the number of tokens minted/released could be less than the number of tokens
/// burned/locked. This is because the source chain does not know about the destination token decimals. This is not a
/// problem if the decimals are the same on both chains.
///
/// Example:
/// Assume there is a token with 6 decimals on chain A and 3 decimals on chain B.
/// - 1.123456 tokens are burned on chain A.
/// - 1.234567 tokens are burned on chain A.
/// - 1.234 tokens are minted on chain B.
/// When sending the 1.234 tokens back to chain A, you will receive 1.234000 tokens on chain A, effectively losing
/// 0.000456 tokens. In the case of a burnMint pool, these funds are burned. In the case of a lockRelease pool, these
/// funds accumulate in the pool on chain A.
/// 0.000567 tokens.
/// In the case of a burnMint pool on chain A, these funds are burned in the pool on chain A.
/// In the case of a lockRelease pool on chain A, these funds accumulate in the pool on chain A.
abstract contract TokenPool is IPoolV1, Ownable2StepMsgSender {
using EnumerableSet for EnumerableSet.Bytes32Set;
using EnumerableSet for EnumerableSet.AddressSet;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
vm.startPrank(address(s_offRamp));
}

function test_executeSingleMessage_NoTokens_Success() public {
function test_executeSingleMessage_NoTokens() public {
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);

Expand All @@ -44,7 +44,7 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_executeSingleMessage_WithTokens_Success() public {
function test_executeSingleMessage_WithTokens() public {
Internal.Any2EVMRampMessage memory message =
_generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1)[0];
bytes[] memory offchainTokenData = new bytes[](message.tokenAmounts.length);
Expand All @@ -69,7 +69,7 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
s_offRamp.executeSingleMessage(message, offchainTokenData, new uint32[](0));
}

function test_executeSingleMessage_WithVInterception_Success() public {
function test_executeSingleMessage_WithMessageInterceptor() public {
vm.stopPrank();
vm.startPrank(OWNER);
_enableInboundMessageInterceptor();
Expand All @@ -79,46 +79,47 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_NonContract_Success() public {
function test_executeSingleMessage_NonContract() public {
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);
message.receiver = STRANGER;
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_NonContractWithTokens_Success() public {
function test_executeSingleMessage_NonContractWithTokens() public {
uint256[] memory amounts = new uint256[](2);
amounts[0] = 1000;
amounts[1] = 50;

Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1, amounts);

message.receiver = STRANGER;

vm.expectEmit();
emit TokenPool.Released(address(s_offRamp), STRANGER, amounts[0]);
vm.expectEmit();
emit TokenPool.Minted(address(s_offRamp), STRANGER, amounts[1]);
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1, amounts);
message.receiver = STRANGER;

s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

// Reverts

function test_TokenHandlingError_Revert() public {
uint256[] memory amounts = new uint256[](2);
amounts[0] = 1000;
amounts[1] = 50;
function test_executeSingleMessage_RevertWhen_TokenHandlingError() public {
Internal.Any2EVMRampMessage memory message = _generateAny2EVMMessageWithMaybeRevertingSingleToken(1, 50);
address destPool = s_destPoolByToken[message.tokenAmounts[0].destTokenAddress];

bytes memory errorMessage = "Random token pool issue";

Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1, amounts);
s_maybeRevertingPool.setShouldRevert(errorMessage);

vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, errorMessage));
vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, destPool, errorMessage));

s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_ZeroGasDONExecution_Revert() public {
function test_executeSingleMessage_RevertWhen_ZeroGasDONExecution() public {
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);
message.gasLimit = 0;
Expand All @@ -128,15 +129,15 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_MessageSender_Revert() public {
function test_executeSingleMessage_RevertWhen_MessageSender() public {
vm.stopPrank();
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);
vm.expectRevert(OffRamp.CanOnlySelfCall.selector);
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_executeSingleMessage_WithFailingValidation_Revert() public {
function test_executeSingleMessage_RevertWhen_MessageValidationError() public {
vm.stopPrank();
vm.startPrank(OWNER);
_enableInboundMessageInterceptor();
Expand All @@ -153,7 +154,7 @@ contract OffRamp_executeSingleMessage is OffRampSetup {
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length), new uint32[](0));
}

function test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() public {
function test_executeSingleMessage_RevertWhen_WithFailingValidationNoRouterCall() public {
vm.stopPrank();
vm.startPrank(OWNER);
_enableInboundMessageInterceptor();
Expand Down
Loading

0 comments on commit 5a3a99b

Please sign in to comment.