Failed to Create Transaction Proposal on Sepolia

I create a transaction proposal on a newly deployed contract that was deployed through a Safe chosen as the approval process.

:computer: Environment

Action module: Create a Transaction Proposal


I choose a function that takes no arguments to be executed. The function takes two parameters: a token id and a recipient address.

I choose the same approval process as the one during deployment.

I connect my wallet which is the same address as one of the owners of the Safe used for the approval process.

When I try to submit the transaction, I see this alert:

Upon seeing that error, I try to bypass it as such:

When I try to do that, I get this error:

As a sanity check, I tried to do the above with a contract function that takes no parameters with the same end result.

Okay, I went into manage and checked the Multisig settings, for some reason, the multisig address was empty and so was the owner address which is my address. This is odd because the Approval Process was used previously to deploy the contract successfully.

Nonetheless, after I did the above, I was able to run into a different issue altogether:

The address in the error prompt is the multisig that was used as part of the approval process for deployment. I assumed that that address would be the owner of the contract and thus can create Transaction Proposals.

But, when I checked the owner of the contract, it was this address instead:

It looks to be some OZ proxy contract that is used to perform deployments.

I checked my constructor code and I use _msgSender() instead of msg.sender, I thought this way would preserve the original msg.sender:

        uint256 quantity
    ) ERC721A("MyNFTs", "NFT") Ownable(_msgSender()) {
        _mint(_msgSender(), quantity);

Should I have used msg.sender instead of _msgSender()?

So, I changed the constructor code to that of below:

        uint256 quantity
    ) ERC721A("MyNFT", "NFT") Ownable(msg.sender) {
        _mint(msg.sender, quantity);

I ended up with the same exact result where the owner is the same as before, that OZ proxy contract. Even if it did work, I would've been worried about the lack of compatibility with meta-tx relayers anyway.

Is there something I'm missing?

So, I took the easy way out and just specified the owner directly:

        uint256 quantity,
        address multisig
    ) ERC721A("MyNFT", "NFT") Ownable(multisig) {
        _mint(multisig, quantity);

This let me create a transaction with the expected behavior.