OpenSea basic integration tutorial for Polygon recommends to override the isApprovedForAll() function of ERC-721 contracts to this:

   * Override isApprovedForAll to auto-approve OS's proxy contract
    function isApprovedForAll(
        address _owner,
        address _operator
    ) public override view returns (bool isOperator) {
      // if OpenSea's ERC721 Proxy Address is detected, auto-return true
        if (_operator == address(0x58807baD0B376efc12F5AD86aAc70E78ed67deaE)) {
            return true;
        // otherwise, use the default ERC721.isApprovedForAll()
        return ERC721.isApprovedForAll(_owner, _operator);

This basically allows contract 0x58807baD0B376efc12F5AD86aAc70E78ed67deaE to manage all tokens in the contract.

I went to see the transactions made by this contract on polygonscan and was very surprised to see that there were only 4 transactions since contract creation in November 2020.

Pretty much like a web server proxy does an HTTP request to the target server every time it receives an HTTP request from a client, I expected to see a transaction made by the proxy contract for every transaction made to Polygon contracts on the marketplace...

Why is there no transaction at all? What's exactly the role of this contract?

2 Answers 2


I can not comment, unfortunately, but I have exactly the same question!

But here is my research. Here you can find Polygon proxy addresses: Polygon Basic Integration and Meta-transactions

Polygon ERC721: 0x58807baD0B376efc12F5AD86aAc70E78ed67deaE
Polygon ERC1155: 0x207Fa8Df3a17D96Ca7EA4f2893fcdCb78a304101
Mumbai Polygon (Testnet): no address?? (the mainnet one is completely empty on the scanner)

Ethereum data: OpenSea meta transactions

Ethereum (unknown type): 0xa5409ec958c83c3f309868babaca7c86dcb077c1
Rinkeby Ethereum (Testnet, unknown type): 0xf57b2c51ded3a29e6891aba85459d600256cf317

But yes, it is still a question why the address from the docs for Polygon is empty on the scanner.

Speaking about my own wallet. These are the addresses I interacted with a RegisterProxy call:
Rinkeby Ethereum: 0x1E525EEAF261cA41b809884CBDE9DD9E1619573A
(different than github) + delegate proxy of that contract - 0x0888bd01165e21b75e455ca31e81c82ee22bc578 (still different)
Ethereum: (haven't tried)
Polygon (mainnet + testnet): no calls to RegisterProxy! (so it is not even using anything from the docs).

  • Actually, there are two things for the meta transactions: 1) override isApprovedForAll and whitelist OpenSea's proxy address (used for selling) 2) override _msgSender to use the ContextMixin (used for transferring) Instead of the ContextMixin it is also possible to inherit the new ERC2771Context contract (does the same). But nothing of that was working on the Polygon Mainnet. The only way to get it to work on Polygon was isApprovedForAll + ContextMixin + inherit NativeMetaTransaction. Couldn't get to work it on Rinkeby either.
    – robertono
    Feb 28, 2022 at 13:26

I managed to successfully deploy a factory contract (implementing isApprovedForAll + ContextMixin + inherit NativeMetaTransaction) that mints ERC721 token on Rinkeby test network. Everything works flawless on Ethereum test net.

But when i deploy to polygon's Mumbai Testnet i get the following error:

Gas estimation failed Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending? Internal JSON-RPC error. { "code": -32000, "message": "execution reverted" }"

  • OK - Factory works perfect on Rinkeby and gets displayed on OpenSea
  • OK - Minting from collection contract directly works on Mumbai
  • OK - Collection contract on Mumbai shows up on OpenSea with all items that got minted
  • FAIL - After transferring ownership to the factory, the factory contract can not mint (see above error)
  • FAIL - Factory contract does not show up on OpenSea

Code on Github: https://github.com/vzoo/ERC721-with-EIP2981-and-reusable-factory-for-OpenSea/blob/c68e2a389cac78ff6502a07f320989106fc652e3/contracts/VZOOFactory.sol#L154

Example factory contract on OS (rinkeby): https://testnets.opensea.io/collection/vzoo-public-sale-v2

Have you found any working examples for deploying a factory contract on Polygon Matic/Mumbai? Or do you have any idea what's wrong with the code - is it the proxy part?

Maybe that's the answer to why there are only 4 transactions for the OpenSea proxy contract on Polyscan.

Thankful for any hints


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.