erc6900 / resources

19 stars 4 forks source link

[Improvement] Surface encoding of arguments to `onInstall` and `onUninstall` #21

Open jaypaik opened 9 months ago

jaypaik commented 9 months ago

IPlugin defines onInstall and onUninstall as such:

/// @notice Initialize plugin data for the modular account.
/// @dev Called by the modular account during `installPlugin`.
/// @param data Optional bytes array to be decoded and used by the plugin to setup initial plugin data for the modular account.
function onInstall(bytes calldata data) external;

/// @notice Clear plugin data for the modular account.
/// @dev Called by the modular account during `uninstallPlugin`.
/// @param data Optional bytes array to be decoded and used by the plugin to clear plugin data for the modular account.
function onUninstall(bytes calldata data) external;

bytes calldata is used because we expect different plugins to receive different shapes of data when initializing and cleaning up. However, there is no canonical way of determining how to encode this data from the client, without prior knowledge of how to encode it (e.g., access to the source code or documentation).

Perhaps this can be surfaced in pluginMetadata(), but more exploration needs to be done on the best format the encoding scheme should be returned. Ideally, the format should be easily parsable by client SDKs today.

fangting-alchemy commented 9 months ago

See huge value to ask plugins to provide data structures for installation/uninstallation for off-chain clients/services.

With an ongoing discussion in the TG channel about what data lives where (pluginMetadata or pluginManifest), it's worth some careful thoughts on where to surface those data.

Considering the separation of the two concepts:

It might make more sense to include them in the pluginManifest.