setApprovalForAll(...) with OpenSea

Hi!
I'm still bothering with OpenSea...
I'm creating some tokens in OpenSea in Rinkeby, and I'm transferring them via web3 (ethers) through some scripts that I built myself.
Question, I have had to investigate some issues, since the contract associated to the token that OpenSea creates is not verified (erc1155) and I have had to use the ABI of what I understand is the same contract (verified) in Polygon.
Question, I need a third party to be able to transfer any token, and for this I call the function setApprovalForAll(...), which runs fine (I have given approve to another wallet of mine). But when I try to transfer the token through the approved account, I get this message:
AssetContractShared#_requireMintable: ONLY_CREATOR_ALLOWED

Which is an internal function, that at least from the code that is available from Polygon, is not called from anywhere.
But it is the require(..) where I got the error, which asks for the owner itself to transfer or a contract, let's say proxy.

function _requireMintable(address _address, uint256 _id) internal view {
require(
_isCreatorOrProxy(_id, _address),
"AssetContractShared#_requireMintable: ONLY_CREATOR_ALLOWED"
);
}

Question, I was thinking about developing me a contract, that does just that, the transfer.
And I had some doubts about how to deal with this problem.
Should I import an IERC1155 interface and work it that way, or just create a contract that receives a token (erc1155), and give it the address of the opensea address, and call setApprovalForAll() from the onwer with the address of my contract deployed in Rinkeby?

Regards!

1 Like

Hi @damianlluch
I am also stumbling across this issue. Not too sure how to proceed, but I believe the closest people have gotten to finding a solution is to implement something like this

More than happy to share learnings as I am also trying to figure out how to transfer OpenZeppelin created NFTs via my own smartcontract acting as a proxy (but receive the same errors you are facing even after setting ApprovalForAll, because of the pesky OpenZeppelin overwrite of their safeTransferFrom function)