Thanks a lot @tinom9 for your comments ! Those are extremely valuable.
I think out of the two options weāre converging on the idea of an Universal RWA token standard that includes key token-level functionalities but that is also maximally compatible and easy to integrate. Here are my responses to your suggestions and a few clarifying questions to continue the conversation:
Mint and Burn
Your proposal to include mint
and burn
functions makes sense in most cases to me, especially in asset classes like equity or tokenized commodities. However, some RWA implementations, such as fixed-supply debt instrument, require immutable supply characteristics. In these cases, mint
and burn
may not be applicable at all, or maybe only one of the two.
Would you consider making mint
and burn
a SHOULD
requirement in the EIP? This would maintain flexibility for fixed-supply cases while still encouraging standardization for the majority of use cases. Also, specifying that isUserAllowed(to)
applies to mint
and isUserAllowed(from)
is exempt for burn
makes sense, will integrate this into the description.
Error Prefixes (ERCX)
I really liked your suggestion. Iāll go ahead and include it.
recall/forceTransfer Naming
I completely agree with renaming recall
to forceTransfer
. Other terms like confiscation, revocation, or recovery describe reasons, not the underlying action, which is indeed a forced movement of assets. But letās consider also the next topic for the naming part.
Freeze Functionality
Iām on board with supporting freezing functionality, especially since regulatory requirements often mandate it. However, Iād like to clarify the functional distinction between freezeTokens
and forceTransfer
.
Would you say the difference is that:
freezeTokens
keeps tokens in the wallet but locks them;
forceTransfer
moves the tokens elsewhere?
If so, would it be reasonable to combine both functionalities into a single forceTransfer
-like method using a flag (e.g., to
address being same as from meaning a freeze or an extra parameter to differentiate between a freeze and a forcedTransfer) ?
(at this point Iād call this function more something like āenforceā with no distinction whether is a forced transfer or a freeze).
Alternatively, do you think both freezing and forced movement are fundamentally distinct actions that regulators would want both to be present ? Is it one of the two more primitive than the other ?
Would love your thoughts on whether combining them makes sense or if we should define them separately.
Thanks again for the constructive discussion!