Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Modules are called using the bundler's new
callModule(address module, bytes data)
function. No onchain whitelist of module addresses is needed, and users should only approve modules they use.When called, a bundler module receives the current
initiator
and thedata
argument. A module contract should inheritBaseMorphoBundlerModule
and implement the internal function_morphoBundlerModuleCall
. It is wrapped in an external functionmorphoBundlerModuleCall
that checks the caller. So modules can trust that theinitiator
is correct.Some alternatives:
BaseMorphoBundlerModule
. Keep only theIMorphoBundlerModule
interface and document that all implementations should check the caller. But it's more error-prone vs. the inheritance ofBaseMorphoBundlerModule
which is not heavy.bundler.initiator()
if they want to know the initiator. But it costs more gas.Note: The signature of
morphoBundlerModuleCall(address initiator, bytes calldata data)
is0xd26db89e
and does not appear in 4byte.directory.