From 97b308e73e39f98362b50e501dd9d7ba21f3fcb7 Mon Sep 17 00:00:00 2001 From: Abhishek Krishna Date: Wed, 15 Apr 2026 07:27:44 +0530 Subject: [PATCH] fix: encode success flag in EXECTYPE_TRY return data When execType == EXECTYPE_TRY, the bytes[] returned by executeFromExecutor now encodes each element as abi.encode(bool success, bytes returnData), allowing the calling executor module to distinguish successful return data from revert data. Fixes erc7579/erc7579-implementation#51 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/MSAAdvanced.sol | 6 ++++-- src/core/ExecutionHelper.sol | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/MSAAdvanced.sol b/src/MSAAdvanced.sol index c9db2cb..610288b 100644 --- a/src/MSAAdvanced.sol +++ b/src/MSAAdvanced.sol @@ -129,8 +129,10 @@ contract MSAAdvanced is } // TODO: implement event emission for tryExecute singleCall else if (execType == EXECTYPE_TRY) { - (success, returnData[0]) = _tryExecute(target, value, callData); - if (!success) emit TryExecuteUnsuccessful(0, returnData[0]); + bytes memory innerResult; + (success, innerResult) = _tryExecute(target, value, callData); + if (!success) emit TryExecuteUnsuccessful(0, innerResult); + returnData[0] = abi.encode(success, innerResult); } else { revert UnsupportedExecType(execType); } diff --git a/src/core/ExecutionHelper.sol b/src/core/ExecutionHelper.sol index 00aa5f0..8b25041 100644 --- a/src/core/ExecutionHelper.sol +++ b/src/core/ExecutionHelper.sol @@ -35,8 +35,10 @@ contract ExecutionHelper { for (uint256 i; i < length; i++) { Execution calldata _exec = executions[i]; bool success; - (success, result[i]) = _tryExecute(_exec.target, _exec.value, _exec.callData); - if (!success) emit TryExecuteUnsuccessful(i, result[i]); + bytes memory returnData; + (success, returnData) = _tryExecute(_exec.target, _exec.value, _exec.callData); + if (!success) emit TryExecuteUnsuccessful(i, returnData); + result[i] = abi.encode(success, returnData); } }