ERC-6900 is a new Ethereum standard that enables Modular Smart Contract Accounts (MSCA), which can divide account logic into separate plugins and add new functionalities without changing the core code.
MSCA can handle two types of function calls - user operation that calls EntryPoint and runtime that directly calls the account's smart contract. Plugins can have three types of callback functions - validation, execution, and hooks.
The distinction between calls from the EntryPoint and EOAs is made at the validation level, while shared callback functions are used at the execution level.
To convert a classic Account Abstraction (AA) wallet into an MSCA, four mandatory interfaces are needed - IAccount.sol, IPluginManager.sol, IStandardExecutor.sol, and IPluginExecutor.sol.
A plugin is a singleton smart contract deployed as a single instance that stores settings for each account and should not be upgradable. It should inherit from IPlugin.sol and implement at least the functions for installing and removing the plugin.
To install a plugin, address, keccak256 hash of the plugin manifest, data to pass to the onInstall function, and dependencies are necessary.
The main difficulty of MSCA lies not in writing the validation functions and hooks but in ensuring that the plugin integrates well with the MSCA, doesn’t conflict with other plugins, and has the ability to interact and work in tandem with them.
The order of execution for multiple plugins installed on the same selectors works in reverse order of their installation on the MSCA.
One of the downsides is that the standard is being created with the needs of a specific protocol in mind, rather than the entire Ethereum community.
The ERC-6900 standard provides solid opportunities for expanding the capabilities of an abstract account and is a step towards user-friendly abstract accounts.