Overall, this is a great proposal! However, I have a suggestion for improvement.
During the implementation of a Resolver that follows this EIP, I encountered the following scenario:
I needed to implement a multicall
function with the following signature: function multicall(bytes[] calldata datas) external returns (bytes[] memory)
I faced challenges with encoding the Parameter
struct from the bytes[]
type. Eventually, I encoded the entire msg.data
into a string to fit the Parameter.value
specification (string). This approach worked as expected, but it left me questioning why we need a key-value (string:string) mapping for the given parameters when we could simply return its bytes
format along with the function signature.
Therefore, I propose the following change:
Current structure:
struct messageData {
bytes4 functionSelector;
address sender;
parameter[] parameters;
uint256 expirationTimestamp;
}
struct parameter {
string name;
string value;
}
Proposed structure:
struct messageData {
bytes callData;
address sender;
uint256 expirationTimestamp;
}
With this new structure, the function being called and its arguments are ABI encoded, which avoids the need for type casting to string.