Recent events have shown that the auto-approval for user proxies is way too dangerous.
Security of users' NFTs should come before the convenience of auto approving collection for trading.
This is why I decided to remove the files in this gist.
Since a few weeks, people are loosing NFTs because of approvals on OpenSea.
It's in no way OpenSea's fault, it's because some bad people are phishing signatures of sale orders.
The only way to protect against this, is for users to revoke the approval they gave to OpenSea, using tools like etherscan approval checker or other revoke apps.
However this is not possible if there is no event emitted. Those website can not know that an approval has been given. Users are not even aware that their NFTs are approved on OpenSea, but still if they get phished, might see them disappear anyway.
This pattern seemed convenient a few months back, but experience have just shown that it's too dangerous to have it used, especially without any way to revoke it.
Users wanting to sell on Marketplaces are expecting to make a profit. Therefore my opinion is that they should take the cost of approval into account when they calculate their possible profit, and include that in their sale price.
It's a small price compared to the security of their tokens if they don't try to sell it.
Any idea why the opensea-creature implementation has more logic than portrayed here? for example,
Also, any idea why the logic is different in here, https://github.com/ProjectOpenSea/opensea-creatures/blob/74e24b99471380d148057d5c93115dfaf9a1fa9e/contracts/CreatureFactory.sol#L148
compared to this one here (which is similar to what you have implemented), https://github.com/ProjectOpenSea/opensea-creatures/blob/74e24b99471380d148057d5c93115dfaf9a1fa9e/contracts/ERC721Tradable.sol#L77
Also, any idea on the use of ContextMixin here?
https://github.com/ProjectOpenSea/opensea-creatures/blob/74e24b99471380d148057d5c93115dfaf9a1fa9e/contracts/ERC721Tradable.sol#L101
I too feel stupid, could you pls explain how opensea interacts with our contract when minting/transfering? I know they use operator-proxy contract, but which methods they are calling, It seems they dont call 'mint' at all, but does transfer always, which seems to be the case with opensea-creature template atleast.