Putting the authenticated message sender as the first argument requires assembly level memory manipulation, bringing complexity and confusion for reviewers and potential bugs.
Solutions
Use a global state variable for authenticate messages (eg. bytes32 slot = keccack256("MessageSender"))
Require gateways to implement an interface like receiveMessage(address msgSender, bytes data) and the gateway will handle the data decoding
1) is simpler, but Clément advised against global state variables, though the design pattern is in the Arbitrum bridge and Gnosis AMB and others.
2) requires developers to use a peculiar interface for receiving messages
Putting the authenticated message sender as the first argument requires assembly level memory manipulation, bringing complexity and confusion for reviewers and potential bugs.
Solutions
1) is simpler, but Clément advised against global state variables, though the design pattern is in the Arbitrum bridge and Gnosis AMB and others.
2) requires developers to use a peculiar interface for receiving messages