Is there any way for an issuer to issue an asset that can be paid but not allowed to be traded?
Use cases for such an asset are as following:
A token that represents ident certification for the token owners (for example a certification for being a member of a group)
A token that is used for messaging (using the memo of the transaction)
These kinds of tokens are not representing any financial property, so trading these tokens is meaningless and a misuse.
The only existing solution to prevent an account from trading the token is that the issuer freezes all the token owners. To perform a payment by the token owner, a transaction that contains 5 operations would be signed by the issuer and the token owner:
“Allow Trust” from issuer to token sender and receiver with “Authorized” flag set (2 operations).
Token owner “Payment”(1 operation).
“Allow Trust” from issuer to token sender and receiver with “Unauthorized” flag set (2 operations).
How can the issuer prevent its tokens from being traded, without any freezing that causes more fees and complexity for a payment operation?
One solution would be following the CAP18 and add another flag to the TrustLineFlags that is named AUTHORIZED_FOR_PAYMENT. Every buy/sell offer would be rejected if this flag is set.