Background
Currently, solver selection authorizes a solver address — the session key signs SelectSolver(bytes32 commitment, address solver), and fillOrder checks msg.sender == stored solver. This means the session key's authorization is bound to a solver identity, but not to the specific UserOperation being executed.
Proposed Change
Replace address solver with bytes32 userOpHash in the SelectSolver EIP-712 struct. The session key would sign over the specific UserOperation hash, creating a tighter binding — a solver couldn't reuse a session signature with different calldata or gas parameters.
Blockers
-
fillOrder needs to verify the currently executing userOpHash against the stored value. IEntryPoint.getCurrentUserOpHash() is only available in EntryPoint v0.9.
-
Circle paymaster support is still limited to v0.7 & v0.8
Action
Revisit when upgrading to EntryPoint v0.9.
Affected Files
evm/src/apps/intentsv2/IntentsBase.sol — SELECT_SOLVER_TYPEHASH, _select
evm/src/apps/IntentGatewayV2.sol — fillOrder solver check
evm/src/utils/SolverAccount.sol — validateUserOp
sdk/packages/core/contracts/apps/IntentGatewayV2.sol — SelectOptions struct
sdk/packages/sdk/src/protocols/intents/CryptoUtils.ts — signSolverSelection
sdk/packages/sdk/src/protocols/intents/BidManager.ts — selectBid
Background
Currently, solver selection authorizes a solver address — the session key signs
SelectSolver(bytes32 commitment, address solver), andfillOrderchecksmsg.sender == stored solver. This means the session key's authorization is bound to a solver identity, but not to the specific UserOperation being executed.Proposed Change
Replace
address solverwithbytes32 userOpHashin theSelectSolverEIP-712 struct. The session key would sign over the specific UserOperation hash, creating a tighter binding — a solver couldn't reuse a session signature with different calldata or gas parameters.Blockers
fillOrderneeds to verify the currently executing userOpHash against the stored value.IEntryPoint.getCurrentUserOpHash()is only available in EntryPoint v0.9.Circle paymaster support is still limited to v0.7 & v0.8
Action
Revisit when upgrading to EntryPoint v0.9.
Affected Files
evm/src/apps/intentsv2/IntentsBase.sol—SELECT_SOLVER_TYPEHASH,_selectevm/src/apps/IntentGatewayV2.sol—fillOrdersolver checkevm/src/utils/SolverAccount.sol—validateUserOpsdk/packages/core/contracts/apps/IntentGatewayV2.sol—SelectOptionsstructsdk/packages/sdk/src/protocols/intents/CryptoUtils.ts—signSolverSelectionsdk/packages/sdk/src/protocols/intents/BidManager.ts—selectBid