When setting up an OpenSea-compatible contract in Solidity for the Polygon network, what are the differences in purpose between overriding isApprovedForAll() and enabling meta-transactions?

From looking over the documentation, it appears that hard-coding OpenSea's proxy address in isApprovedForAll() saves both the contract owner and any eventual seller from having to later call setApprovalForAll().

And, if I'm understanding this correctly, once OpenSea has been approved, it can transfer tokens from the seller to the buyer. It appears that OpenSea would be paying the gas for the transfer. Is that correct?

If so, this sounds like it is accomplishing what OpenSea says is the purpose for meta-transactions: "Your smart contracts should support meta-transactions so that OpenSea can abstract away gas payments for users for methods such as transfers and sales."

Perhaps I've missed something here. Is there a difference in purpose between overriding isApprovedForAll() and enabling meta-transactions?

1 Answer 1


OpenSea gave me this answer to the question:

As a quick disclaimer, I am not a developer, but I can hopefully help to clarify a bit more on this.

Generally, the 'isApprovedForAll' refers to Token Approvals, but by overriding this, it allows for OpenSea's smart contract to operate on your smart contract (which will save you and your buyers gas when selling and transferring tokens for the first time), whereas enabling meta-transactions allows for gass-less transactions beyond that. With that said, you are correct, but there is a slight difference, as token approvals are for the first interaction, but enabling metatransactions will allow us to pay for the gas for your buyers when your NFTs are transferred/sold in the future.

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.