Skip to content

Commit cd08dca

Browse files
committed
Merge remote-tracking branch 'origin/master' into feat/trails-intent-entrypoint-desc
2 parents 3184e8c + d52696f commit cd08dca

File tree

3 files changed

+160
-157
lines changed

3 files changed

+160
-157
lines changed

.gas-snapshot

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ TrailsIntentEntrypointTest:testNonceIncrementsOnDeposit() (gas: 91391)
4747
TrailsIntentEntrypointTest:testPermitAmountExcessiveWithFee() (gas: 37875)
4848
TrailsIntentEntrypointTest:testPermitAmountInsufficientWithFee() (gas: 36929)
4949
TrailsIntentEntrypointTest:testVersionConstant() (gas: 10409)
50-
TrailsRouterDeploymentTest:test_DeployTrailsRouter_SameAddress() (gas: 1722289)
51-
TrailsRouterDeploymentTest:test_DeployTrailsRouter_Success() (gas: 1712948)
52-
TrailsRouterDeploymentTest:test_DeployedRouter_HasCorrectConfiguration() (gas: 1712744)
53-
TrailsRouterShimDeploymentTest:test_DeployRouterShim_SameAddress() (gas: 7130985)
54-
TrailsRouterShimDeploymentTest:test_DeployRouterShim_Success() (gas: 4606895)
55-
TrailsRouterShimDeploymentTest:test_DeployedContract_HasCorrectConfiguration() (gas: 4606941)
50+
TrailsRouterDeploymentTest:test_DeployTrailsRouter_SameAddress() (gas: 1804547)
51+
TrailsRouterDeploymentTest:test_DeployTrailsRouter_Success() (gas: 1795047)
52+
TrailsRouterDeploymentTest:test_DeployedRouter_HasCorrectConfiguration() (gas: 1794843)
53+
TrailsRouterShimDeploymentTest:test_DeployRouterShim_SameAddress() (gas: 7376786)
54+
TrailsRouterShimDeploymentTest:test_DeployRouterShim_Success() (gas: 4770769)
55+
TrailsRouterShimDeploymentTest:test_DeployedContract_HasCorrectConfiguration() (gas: 4770815)
5656
TrailsRouterShimTest:testConstructorValidation() (gas: 69336)
5757
TrailsRouterShimTest:testForwardToRouterReturnValue() (gas: 713355)
5858
TrailsRouterShimTest:testRouterAddressImmutable() (gas: 1391679)
5959
TrailsRouterShimTest:test_constructor_revert_zeroRouter() (gas: 68984)
60-
TrailsRouterShimTest:test_delegatecall_forwards_and_sets_sentinel_sstore_inactive() (gas: 1715664)
60+
TrailsRouterShimTest:test_delegatecall_forwards_and_sets_sentinel_sstore_inactive() (gas: 1797432)
6161
TrailsRouterShimTest:test_delegatecall_forwards_and_sets_sentinel_tstore_active() (gas: 38392)
6262
TrailsRouterShimTest:test_delegatecall_router_revert_bubbles_as_RouterCallFailed() (gas: 82109)
63-
TrailsRouterShimTest:test_delegatecall_sets_sentinel_with_sstore_when_no_tstore() (gas: 1697892)
63+
TrailsRouterShimTest:test_delegatecall_sets_sentinel_with_sstore_when_no_tstore() (gas: 1779658)
6464
TrailsRouterShimTest:test_delegatecall_sets_sentinel_with_tstore_when_supported() (gas: 20706)
6565
TrailsRouterShimTest:test_direct_handleSequenceDelegateCall_reverts_not_delegatecall() (gas: 9840)
6666
TrailsRouterShimTest:test_forwardToRouter_return_data_handling() (gas: 729052)
@@ -73,11 +73,11 @@ TrailsRouterShimTest:test_handleSequenceDelegateCall_with_eth_value() (gas: 3210
7373
TrailsRouterShimTest:test_handleSequenceDelegateCall_zero_call_value() (gas: 26873)
7474
TrailsRouterShimTest:test_sentinel_setting_with_different_op_hashes() (gas: 36405)
7575
TrailsRouterTest:testDelegateCallWithETH() (gas: 326063)
76-
TrailsRouterTest:testExecute_WithFailingMulticall() (gas: 450208)
76+
TrailsRouterTest:testExecute_WithFailingMulticall() (gas: 450176)
7777
TrailsRouterTest:testHandleSequenceDelegateCall_InjectAndCall() (gas: 72545)
7878
TrailsRouterTest:testHandleSequenceDelegateCall_RefundAndSweep() (gas: 85300)
7979
TrailsRouterTest:testHandleSequenceDelegateCall_Sweep() (gas: 48605)
80-
TrailsRouterTest:testHandleSequenceDelegateCall_ValidateOpHashAndSweep() (gas: 59682)
80+
TrailsRouterTest:testHandleSequenceDelegateCall_ValidateOpHashAndSweep() (gas: 59890)
8181
TrailsRouterTest:testInjectAndCall_NoReplacementNeeded() (gas: 989297)
8282
TrailsRouterTest:testInjectAndCall_WithReplacement() (gas: 995954)
8383
TrailsRouterTest:testInjectAndCall_WithTokenZeroBalance() (gas: 647003)
@@ -87,7 +87,7 @@ TrailsRouterTest:testInjectSweepAndCall_WithETH_TargetCallFails() (gas: 57470)
8787
TrailsRouterTest:testInjectSweepAndCall_WithETH_ZeroBalance() (gas: 12588)
8888
TrailsRouterTest:testInjectSweepAndCall_WithToken_TargetCallFails() (gas: 995574)
8989
TrailsRouterTest:testInjectSweepAndCall_WithToken_ZeroBalance() (gas: 648071)
90-
TrailsRouterTest:testInsufficientEthValidation() (gas: 25250)
90+
TrailsRouterTest:testInsufficientEthValidation() (gas: 25178)
9191
TrailsRouterTest:testNativeTransferFailure() (gas: 86597)
9292
TrailsRouterTest:testRefundAndSweep_FullRefund() (gas: 56088)
9393
TrailsRouterTest:testRefundAndSweep_PartialRefundERC20() (gas: 88307)
@@ -98,43 +98,43 @@ TrailsRouterTest:testRevertWhen_injectSweepAndCall_InsufficientAllowance() (gas:
9898
TrailsRouterTest:testRevertWhen_injectSweepAndCall_NoEthSent() (gas: 15756)
9999
TrailsRouterTest:testSweepAndCallETH() (gas: 78594)
100100
TrailsRouterTest:testValidateOpHashAndSweep_WithoutSentinel() (gas: 16410)
101-
TrailsRouterTest:test_Execute_FromContract_ShouldPreserveContractAsSender() (gas: 24565)
102-
TrailsRouterTest:test_Execute_FromEOA_ShouldPreserveEOAAsSender() (gas: 29209)
103-
TrailsRouterTest:test_Execute_WithMultipleCalls() (gas: 30915)
101+
TrailsRouterTest:test_Execute_FromContract_ShouldPreserveContractAsSender() (gas: 24521)
102+
TrailsRouterTest:test_Execute_FromEOA_ShouldPreserveEOAAsSender() (gas: 29166)
103+
TrailsRouterTest:test_Execute_WithMultipleCalls() (gas: 30765)
104104
TrailsRouterTest:test_Multicall3Address_IsCorrect() (gas: 6570)
105105
TrailsRouterTest:test_ReceiveETH_ShouldAcceptETH() (gas: 18098)
106-
TrailsRouterTest:test_RevertWhen_allowFailure_true_allCalls() (gas: 102266)
107-
TrailsRouterTest:test_RevertWhen_allowFailure_true_firstOfMultipleCalls() (gas: 100768)
108-
TrailsRouterTest:test_RevertWhen_allowFailure_true_lastOfMultipleCalls() (gas: 101419)
109-
TrailsRouterTest:test_RevertWhen_allowFailure_true_middleOfMultipleCalls() (gas: 100984)
110-
TrailsRouterTest:test_RevertWhen_allowFailure_true_singleCall() (gas: 97574)
111-
TrailsRouterTest:test_RevertWhen_execute_withETH_allowFailure_true() (gas: 24234)
112-
TrailsRouterTest:test_RevertWhen_pullAmountAndExecute_InsufficientAllowance() (gas: 28634)
113-
TrailsRouterTest:test_RevertWhen_pullAndExecute_InsufficientAllowance() (gas: 31314)
114-
TrailsRouterTest:test_RevertWhen_pullAndExecute_allowFailure_true() (gas: 98753)
106+
TrailsRouterTest:test_RevertWhen_allowFailure_true_allCalls() (gas: 102005)
107+
TrailsRouterTest:test_RevertWhen_allowFailure_true_firstOfMultipleCalls() (gas: 100507)
108+
TrailsRouterTest:test_RevertWhen_allowFailure_true_lastOfMultipleCalls() (gas: 101158)
109+
TrailsRouterTest:test_RevertWhen_allowFailure_true_middleOfMultipleCalls() (gas: 100723)
110+
TrailsRouterTest:test_RevertWhen_allowFailure_true_singleCall() (gas: 97502)
111+
TrailsRouterTest:test_RevertWhen_execute_withETH_allowFailure_true() (gas: 24163)
112+
TrailsRouterTest:test_RevertWhen_pullAmountAndExecute_InsufficientAllowance() (gas: 28562)
113+
TrailsRouterTest:test_RevertWhen_pullAndExecute_InsufficientAllowance() (gas: 31242)
114+
TrailsRouterTest:test_RevertWhen_pullAndExecute_allowFailure_true() (gas: 98681)
115115
TrailsRouterTest:test_amount_offset_out_of_bounds() (gas: 278820)
116116
TrailsRouterTest:test_direct_sweep_reverts_not_delegatecall() (gas: 12139)
117117
TrailsRouterTest:test_handleSequenceDelegateCall_dispatches_to_sweep_native() (gas: 50425)
118118
TrailsRouterTest:test_handleSequenceDelegateCall_invalid_selector_reverts() (gas: 10290)
119119
TrailsRouterTest:test_native_transfer_failed() (gas: 89620)
120-
TrailsRouterTest:test_no_tokens_to_pull() (gas: 650574)
120+
TrailsRouterTest:test_no_tokens_to_pull() (gas: 650507)
121121
TrailsRouterTest:test_no_tokens_to_sweep() (gas: 909059)
122122
TrailsRouterTest:test_placeholder_mismatch() (gas: 279474)
123-
TrailsRouterTest:test_pullAmountAndExecute_WithETH_InsufficientEthSent() (gas: 26845)
124-
TrailsRouterTest:test_pullAmountAndExecute_WithETH_ShouldTransferAndExecute() (gas: 37385)
125-
TrailsRouterTest:test_pullAmountAndExecute_WithToken_ShouldTransferAndExecute() (gas: 74041)
126-
TrailsRouterTest:test_pullAmountAndExecute_WithValidToken_ShouldTransferAndExecute() (gas: 73689)
127-
TrailsRouterTest:test_pullAndExecute_WithETH_NoEthSent() (gas: 18411)
128-
TrailsRouterTest:test_pullAndExecute_WithETH_ShouldTransferAndExecute() (gas: 38399)
129-
TrailsRouterTest:test_pullAndExecute_WithFailingMulticall() (gas: 494387)
130-
TrailsRouterTest:test_pullAndExecute_WithValidToken_ShouldTransferFullBalanceAndExecute() (gas: 72465)
123+
TrailsRouterTest:test_pullAmountAndExecute_WithETH_InsufficientEthSent() (gas: 26773)
124+
TrailsRouterTest:test_pullAmountAndExecute_WithETH_ShouldTransferAndExecute() (gas: 37339)
125+
TrailsRouterTest:test_pullAmountAndExecute_WithToken_ShouldTransferAndExecute() (gas: 73999)
126+
TrailsRouterTest:test_pullAmountAndExecute_WithValidToken_ShouldTransferAndExecute() (gas: 73647)
127+
TrailsRouterTest:test_pullAndExecute_WithETH_NoEthSent() (gas: 18344)
128+
TrailsRouterTest:test_pullAndExecute_WithETH_ShouldTransferAndExecute() (gas: 38356)
129+
TrailsRouterTest:test_pullAndExecute_WithFailingMulticall() (gas: 494357)
130+
TrailsRouterTest:test_pullAndExecute_WithValidToken_ShouldTransferFullBalanceAndExecute() (gas: 72432)
131131
TrailsRouterTest:test_refundAndSweep_erc20_partialRefund() (gas: 110365)
132132
TrailsRouterTest:test_refundAndSweep_native_partialRefund() (gas: 92161)
133133
TrailsRouterTest:test_success_sentinel_not_set() (gas: 15750)
134134
TrailsRouterTest:test_sweep_erc20Token() (gas: 77703)
135135
TrailsRouterTest:test_sweep_nativeToken() (gas: 49961)
136-
TrailsRouterTest:test_validateOpHashAndSweep_native_success() (gas: 62092)
137-
TrailsRouterTest:test_validateOpHashAndSweep_native_success_tstore() (gas: 130257)
136+
TrailsRouterTest:test_validateOpHashAndSweep_native_success() (gas: 62300)
137+
TrailsRouterTest:test_validateOpHashAndSweep_native_success_tstore() (gas: 130651)
138138
TrailsSentinelLibTest:test_Constants_DoNotChange() (gas: 735)
139139
TrailsSentinelLibTest:test_SentinelNamespace_Computation() (gas: 328)
140140
TrailsSentinelLibTest:test_SentinelNamespace_Constant() (gas: 548)

src/TrailsRouter.sol

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -361,19 +361,29 @@ contract TrailsRouter is IDelegatedExtension, ITrailsRouter, DelegatecallGuard,
361361

362362
bytes4 selector = bytes4(callData[0:4]);
363363

364-
// Only allow `aggregate3Value` calls (0x174dea71)
365-
if (selector != 0x174dea71) {
366-
revert InvalidFunctionSelector(selector);
367-
}
368-
369-
// Decode and validate the Call3Value[] array to ensure allowFailure=false for all calls
370-
IMulticall3.Call3Value[] memory calls = abi.decode(callData[4:], (IMulticall3.Call3Value[]));
371-
372-
// Iterate through all calls and verify allowFailure is false
373-
for (uint256 i = 0; i < calls.length; i++) {
374-
if (calls[i].allowFailure) {
375-
revert AllowFailureMustBeFalse(i);
364+
// Only allow `aggregate3Value` or `aggregate3` (0x174dea71 or 0x82ad56cb)
365+
if (selector == 0x174dea71) {
366+
// Decode and validate the Call3Value[] array to ensure allowFailure=false for all calls
367+
IMulticall3.Call3Value[] memory calls = abi.decode(callData[4:], (IMulticall3.Call3Value[]));
368+
369+
// Iterate through all calls and verify allowFailure is false
370+
for (uint256 i = 0; i < calls.length; i++) {
371+
if (calls[i].allowFailure) {
372+
revert AllowFailureMustBeFalse(i);
373+
}
376374
}
375+
} else if (selector == 0x82ad56cb) {
376+
// Decode and validate the Call3[] array to ensure allowFailure=false for all calls
377+
IMulticall3.Call3[] memory calls = abi.decode(callData[4:], (IMulticall3.Call3[]));
378+
379+
// Iterate through all calls and verify allowFailure is false
380+
for (uint256 i = 0; i < calls.length; i++) {
381+
if (calls[i].allowFailure) {
382+
revert AllowFailureMustBeFalse(i);
383+
}
384+
}
385+
} else {
386+
revert InvalidFunctionSelector(selector);
377387
}
378388
}
379389
}

0 commit comments

Comments
 (0)