After receiving my physical coins from Cryptonic we've been discussing a standard format for physical coins that represent funds on the Monero network. The first batch of coins from Cryptonic had an alphanumeric serial on the side, but that isn't great on its own, and would rely on Cryptonic staying in operation forever. The suggestion I made is to use the base58 charset instead of alphanumeric, and to print 7 characters on each side (so 14 characters in total), which in base58 gives us ~81 bits of entropy.
Cryptonic then suggested that, in order to maintain the order of the two 7 character pairs, one of the pairs starts with a base58 letter (a - Z excluding uppercase o / uppercase i / lowercase L), and one starts with a base58 number (1 - 9, no 0). That then gives us (12*log2(58)) + log2(49) + log2(9) = ~79 bits of entropy, which is good enough.
Basic Derivation Process:
A manufacturer makes coins with the two sets of 7 random base58 characters (123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz, no 0 (zero) or O (capital letter o), no I (capital i) or l (lower L)), one set starts with a number from 1-9, the other starts with a letter from a to Z.
Users receive their coins along with (online) instructions on "activating" the coins on MyMonero / simplewallet / whatever GUI supports it.
During activation they are asked if they want to either (a) have an address directly linked to the coin, so if they lose the coin or someone gets the serial numbers they get access to that account, or (b) have an address linked to the coin, but encrypted with a password/PIN of their choice.
If the coins are not pre-funded by the manufacturer then that is the end of that. If the coins are pre-funded by the manufacturer, then they have to login to the manufacturer's site and confirm receipt of their coins by entering the serial numbers and the address derived from it. The manufacturer's system would then transfer the pre-funded amount to that address. This transfer would include a payment ID that is a hash of some standard metadata (we need to decide on the exact metadata and format, but at the very least it would be the manufacturer, the coin type/description, the owner's email address or some other contact info, date/time of purchase, coin serial numbers).
Advantages:
buyers of pre-funded coins don't need to trust the manufacturer (unless they use a direct derivation)
buyers of pre-funded coins can sell the coins to someone, and the new owner can create an encrypted address of their own; the new owner doesn't need to trust any of the previous owners (unless they all use a direct derivation)
the process of transferring funds to the new owner's derived account will also include a payment ID that is a hash of metadata; this metadata will indicate who the new owner is, the transaction ID of the previous metadata, as well as all previous metadata, thus an indelible chain-of-ownership will exist on the blockchain (this is something that literally no physical coin has done). In the (far) future this data can be represented instead in a MoneroAssets sidechain.
actual Monero on the network doesn't have to move when the coins is sold, the buyer/seller can choose to hand over the password for the derived account instead, or use a straight derivation, and can still send a transaction with hashed metadata indicating the change of ownership.
buyers of unfunded coins can still link an address and fund it themselves, although there's obviously something to be said about the collectability of prefunded coins
Disadvantages:
unless the owner uses a straight derivation this is a very different approach to traditional Bitcoin coins, and may take some getting used to
the tooling for handling the metadata and metadata chain does not exist, we'd have to add it to MyMonero + Cryptonic and possibly build out a command-line tool for it
this is further complicated by the fact that the metadata doesn't actually exist anywhere except as a hash; we'll probably want to have some sort of distributed dataset between MyMonero, Cryptonic, etc. Maybe Tahoe-LAFS or something.
Example Metadata:
{
"manufacturer":"Cryptonic.net",
"description":"Silver-plated brass, original run",
"prefunded_balance":100,
"manufacture_date":"2014-11-19",
"serial_pre":"3Sifa5R",
"serial_post":"fQ92kM2",
"history":[
{
"owner":"Alice Bobson",
"contact":"alice on the Monero Forum",
"purchase_price":"180 XMR",
"condition":"as new",
"balance_at_purchase":100,
"purchase_date":"2016-01-07",
"receipt_date":"2016-01-14",
"notes":"actual balance just below 100 XMR due to transaction fee, I will top it up to 100 XMR exactly"
},
{
"owner":"Riccardo Spagni",
"contact":"[email protected]",
"purchase_price":"100 XMR",
"condition":"Brand new",
"balance_at_purchase":100,
"purchase_date":"2014-12-03",
"receipt_date":"2015-03-01",
"notes":"Shipping delayed due to postal strike"
}
]
}