EIP-5559: Cross Chain Write Deferral Protocol

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.