There have been a few conversations in the past on slack about serialized tokens and how they could be accomplished. Unfortunately, all of that conversation history is lost. I think it is time to capture this idea in a forum post and get feedback from the community.
The general idea is to be able to assign each token a unique ID which is tracked through the tokens lifecycle.
Example Use
Joe the artist creates a new piece of artwork called “DigitalCurrency”.
Joe now wants to sell the ‘original’ artwork as well as 300 ‘prints’.
Joe also wants his buyers to be able to proove they legally own the artwork by giving them a digital token with the purchase.
Joe registers the JOESART asset
Joe registers the JOESART.DigitalCurrency subasset and indicates he wants serialized tokens
Joe issues 300 JOESART.DigitalCurrency tokens to represent his 300 prints.
When Joe sells the original artwork to a buyer, he also transfers ownership of the JOESART.DigitalCurrency to the buyer.
When Joe sells any of his 300 prints, he also sends the buyer a JOESART.DigitalCurrency token
The ‘original’ artwork owners can now proove they are the legal owner by checking that the owner owns the JOESART.DigitalCurrency asset on the blockchain
The ‘print’ artwork owners can now proove they are the legal owners by checking that the owner has the serialized token in their address.
I believe that the following sections of CP would need to be updated to accomplish this:
Balances
- add a ‘token_ids’ field to the balances table to track token id(s)
Issuances
- Adds unique_id TEXT field to ‘assets’ table (NULL=not serialized)
- Add ‘serialized tokens’ option to first issuance only
- If issuing supply, set unique_id to # of tokens issued
- Create/Update record in balances table to indicate serial range (ex: ASSET | ADDRESS | 1-100)
- If NOT issuing supply, set unique_id to 0 (indicates serialized, but none issued yet)
- If issuing supply, set unique_id to # of tokens issued
- When additional supply is issued
- Increase unique_id value by issuance amount
- Create/Update record in balances table to indicate serial range (ex: ASSET | ADDRESS | 101-200)
###Sends
send.compose
- Check if asset has serialized tokens… if YES:
- Require user to specify unique token id(s) (also support specifying a range of ids)
- Check balances table and verify user has control of the tokens with the specified id(s)… if YES
- Send token and embed unique token id(s) into transaction (possibly in memo field?)
send.parse
- Check balances table and verify that source has control of the tokens with the specified id(s)… if YES
- Update balances table to REMOVE specified id(s) from the SOURCE address (ASSET | SOURCE)
- Update balances table to ADD specified id(s) to the DESTINATION address (ASSET | DESTINATION)
###Orders
- Require users to specify token id(s) when listing an order for a serialized token
- ???
##Questions
- Should there be a limit on how many serialized tokens should be issued?
- Should there be an XCP fee per serialized token issued? (there is definitely a higher operational cost)
I look forward to hearing some feedback