From 6b081c522dccf5ad0c29eeae8139ee51b901d914 Mon Sep 17 00:00:00 2001 From: Uncle Fatso Date: Fri, 23 Oct 2026 18:37:18 +0300 Subject: [PATCH] make external governance function infallible and mark it as executed in any case Signed-off-by: Uncle Fatso --- src/Gatekeeper.sol | 6 ++++-- src/interfaces/IGatekeeper.sol | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Gatekeeper.sol b/src/Gatekeeper.sol index a69bad9..dcafb11 100644 --- a/src/Gatekeeper.sol +++ b/src/Gatekeeper.sol @@ -225,8 +225,10 @@ contract Gatekeeper is IGatekeeper, Weaver, ReentrancyGuard { StorageHistory(storageHistory).trySetTransactionExecuted(exodusSession); - (bool success,) = payload.target.call(call); - if (!success) revert ExecutionReverted(); + (bool success, bytes memory ret) = payload.target.call(call); + if (!success) { + emit GovernanceExecutionFailed(exodusSession, payload.target, ret); + } } function _extractPublicKey(bytes calldata call) internal view returns (uint256) { diff --git a/src/interfaces/IGatekeeper.sol b/src/interfaces/IGatekeeper.sol index 17615f3..20f5169 100644 --- a/src/interfaces/IGatekeeper.sol +++ b/src/interfaces/IGatekeeper.sol @@ -23,6 +23,7 @@ interface IGatekeeper { event Recalled(address indexed receiver, uint256 indexed amount); event Rotated(bytes32 indexed aggregatedPublicKey, uint256 indexed session); event VoluntaryVerification(address indexed sender, uint256 indexed gasSpent); + event GovernanceExecutionFailed(uint256 exodusSession, address target, bytes ret); function staking() external view returns (address); function deployer() external view returns (address);