This is an updated re-post of my comment in the topic referenced below.
Introduction
It appears some assets (use cases) would benefit from the ability to be called back. Now we have subassets so on the one hand you can create disposable subassets, but in some cases it’d be better to have an asset (or subasset) that does what the name says it does, rather than have to look it up in a database or Web site.
Use Case 1: Reusable Tokens
Certain assets - if you want to reuse them - should be callable. Let’s say bus tickets (reservations).
Currently we can issue assets or subassets with random names that can be exchanged for bus tickets, but in cases where there’s only one of a kind, and the use case mandates that it changes hands, it’s be better if we could reuse it.
In this use case, these should be callable at 0 fee (but the issuer could optionally pay more; if acceptance of callback offers is no required, then the price should default to 0).
What happens if the issuer calls back and “steals” tokens? An even cheaper and easier way to steal money is to never deliver the service. Some degree of trust in the owner is required to buy them in the first place.
Use Case 2: Loans and Rentals
Loan
If the issuer issues 10 LOAN’s, sells each for 27 XCP while promising to buy back at 30 XCP before block 498’000.
Rental / Subscription
Another use case is where we want to hold 1 GYM token for a period of 5 days.
You could pay rent membership for a week (say for 10 XCP). I assume you’d have to leave a deposit of 40 XCP and the owner would buy back their GYM token for 10 XCP.
Maybe this is similar to the first case (reusable tokens), but the duration and buy-back price could both be variable.
Use Case 3: Restricted Access
We can sell a membership token, but we can’t cancel (revoke) it.
This makes it hard to use tokens as means of membership or access control.
While revocations could be arbitrary they could also be multi-sig driven, where elected or appointed representatives could decide to revoke someone’s token. We can’t revoke a token from designated address, so this would apply only to subassets where 1 is held at one Bitcoin address.
In case of asset-level memberships, say JEFFSPOOLBAR, all tokens could be revoked (called back) on Dec 31 2017 and those interested in extending their membership would have to re-purchase them for 2018.
Implementation Considerations
We’d have to make sure that callback-able tokens can’t be locked or otherwise encumbered.
Or else we’d have to create a backlog of sorts, to collect them when they become unencumbered, but then we’d need to hold buy-back funds in protocol’s escrow for a while, if we made it possible to buy back for a price higher than 0).
Another issue would be that such assets could be sold or protocol-locked in BTCpay order match or something like that. Maybe a way to address that would be to prevent DEx matching or settlement for called-back assets, or create a new type of order (callback order) which would take matching precedence over other DEx buy orders.
Reference
- There’s a CIP for a similar use case, asset “reset”: change a reg’d asset that hasn’t been distributred, from divisible into indivisible.
- There’s a feature request that could be applied to this CIP
https://github.com/CounterpartyXCP/counterparty-lib/issues/1020