Can CPK.Call enable _msgSender()?

Hi!

I’m working through the contract proxy kit as a method to execute meta-transactions. I understand that the kit relies on CPK.Call or CPK.DelegateCall to execute the transaction as either a normal call or a delegatecall, and that CPK.Call is the default. Generally, I’m trying to find a way to do meta-transactions that supports both the proxy contract method and _msgSender() method. Specifically, I’m trying to understand how Gnosis Safe and the contract proxy kit is different or compatible with EIP-2771, including:

  • are they compatible with the Trusted Forwarder contract design pattern, and
  • how they handle, if at all _msgSender and msg.sender, eg does/can CPK.Call enable this?

The reason this is important for me is that I’d like to be able to service both new and old smart contracts that are and are not meta-tx ready, eg have and have not implemented the _msgSender() method.

Many thanks for your guidance!
TS