Thanks @frangio
Define “compatible”
There is no way to retroactively add a “MUST” requirement to EIP-721, so it could never be anything more than a recommendation. The Backwards Compatibility section is inaccurately saying that this is fully backwards compatible… it clearly isn’t.
I have a feeling when we use the term EIP Foo is compatible with EIP Bar we mean different things.
Let me clarify what I mean when using this term with you to ensure we are talking the same language in this discussion so then we can determine if we have different views or not.
In the context of EIP-6047there could be other case when we used the term differently, When I say EIP-6047 (Mandate ERC721 Transfer) is Compatible with EIP-721, what I really mean is that any compliant contract confirming to EIP-6047 will also be a compliant contract with EIP-721. Or more mathematically described as:
The whole set of EIP-6047 compliant contracts is a (strict) subset of the whole set of EIP-721
Let me use other examples to demonstrate this relationship
- EIP-712 (Typed Data Signing) is compatible with EIP-191 (General Signing) because the whole set of EIP-712 compliant contracts is a (strict) subset of EIP-191. Contract compliant with EIP-712 is always compliant with EIP-191 but not all contract compliant with EIP-191 is a EIP-712 compliant contract
- EIP-2612 is compatible with EIP-20 because the whole set of EIP-2612 compliant contract is a (strict) subset of EIP-20 but not all EIP-20 compliant contract is compliant with EIP-2612.
With that clarification let me address your second comment about EIP-2309
That’s good suggestion. Some considerations here.
Supporting EIP-2309-alike interface is a good idea. But it seems EIP-2309 cannot be supported as of its current version. Since it’s final, a new (competing) EIP probably need to be proposed due to EIP-2309’s incompatibility with EIP-721, let me explain why I say EIP-2309 is not compatible with EIP-721
Specification of EIP-2309
…
Contracts that implement theConsecutiveTransfer
event MAY still use the originalTransfer
event, however when emitting theConsecutiveTransfer
event theTransfer
event MUST NOT be emitted.
If EIP-721 is intended to mandate*see note a Transfer
event
Specification of EIP-721
(Transfer event): This emits when ownership of any NFT changes by any mechanism. Exception…
The mandate to emit ConsecutiveTransfer
instead of Transfer
in some cases from EIP-2309 actually breaks the mandate of EIP-721. EIP-721 mandates a Transfer
event MUST be emitted. EIP-2309 mandates a Transfer
event MUST NOT be emitted in some cases but instead use ConsecutiveTransfer
in these cases.
Any compliant contract of EIP-2309 when not always emitting Transfer
event but emitting ConsecutiveTransfer
, is not conforming to EIP-721. Therefore the whole set of conforming contracts of EIP-2309 is not subset of the whole set of conforming contracts of EIP-721.
If you could agree with the assertion that EIP-2309 is not EIP-721 compatible, while EIP-2309 could not be supported, we shall probably support something like EIP-1155’s TransferBatch
event.
Note for @fulldecent
Hey @fulldecent could you clarify whether it’s mandated by EIP-721 to emit a Transfer event always except for creation? . It seems EIP-721’s current snapshot is not strictly following RFC 2119
such as “Every ERC-721 compliant contract must (lower case must
) implement the ERC721
and ERC165
interfaces”