Ravencoin — Proof of Promises
What do Initial Coin Offerings (ICOs), Security Token Offerings (STOs), Tokenized Assets, and Utility Tokens have in common? They can all be represented with a counterfeit-proof, transferrable token on an immutable blockchain like Ravencoin. The tokens can be transferred from crypto-address to crypto-address the way Bitcoin moves.
So how are they different?
An STO is a token that’s wrapped with legal requirements that were put in place by the SEC in 1933 and 1934. The tldr; is that people were getting scammed and buying stock certificates backed by nothing but broken promises. The government stepped in with some laws that made it illegal to sell unregistered securities.
An ICO is generally a fundraising token with promises (whitepaper) that may or may not be kept. STOs are a response to both the sheer number of ICOs that didn’t keep their promises, and the recognition that there are laws still on the books in the US that require licenses to trade these tokenized promises.
Tokenized assets are hard physical assets that are represented by tokens. Could be gold, silver, land, etc. It turns out that these are also promises because someone has to bridge the gap between the token, and the actual asset. If you have shady operators, you’re back to the bogus railroad stock certificates of the early 1900s. If you can’t redeem the token for the physical asset, then the token loses its value because of a broken promise.
Utility tokens are also a promise. The best case scenario is the utility of the token is guaranteed by a distributed software network that is already operating. An example might be STORJ to store files, or GAS to operate the Ethereum network. Other utility tokens might give discounts, or credits on a website, where the promise is only as good as the longevity of the website, or the company behind the token.
So what does this have to do with Ravencoin?
Ravencoin doesn’t have magical powers that can enforce the honesty and integrity of the token issuers. But, it does have the next best thing. Ravencoin provides a way for projects to include their tamper-proof promises (whitepaper), sign the document with their issuer key, and provide immutable contact information that can be vetted by potential token holders.
Here’s the nuts and bolts on how to create a token linked to a signed document. You can skip over this section if you want because there’s a nice shortcut below.
- Create a json file in a text editor that conforms this this specification. https://github.com/RavenProject/Ravencoin/blob/master/assets/asset_metadata_spec.md
- For the contract_url, link to your whitepaper or promise — typically in PDF format.
- Take the SHA256 hash of the PDF, and add it as “contract_hash”. It will look something like this “371b74cb89bc3c3b504b4473f60a2f0cd0a9056882f3d0d2e7865725ca9d70cf”
- Get an address from Ravencoin, and add it to contract_address. It will look like this “mjYxpJaqDC4VgFTe1G4FmGxX9rff1Vgno2” (on testnet).
- Take the contract_hash without the quotes and the contract_address, and in Ravencoin QT, go to File->Sign Message and enter the contract hash. Enter your Ravencoin address from which you’re issuing the token.
- Hit [Sign Message], and take the Signature, and enter it into your json file as “contract_signature”. It will look something like this “H+1ofkL9OmZFFjx3LPzayaWBHufu7ZQ+Gi+V5IcwUt4jSwTnfGR6HWTU9DD6ExfYTDMRJA9GY6UwQbwpHnaKKlg=”
- Now you should have “contract_url”, “contract_hash”, “contract_address”, and “contract_signature” set.
- Set the contact information if you want to build additional trust and let others evaluate your past performance.
- Add a description of your project, optional image, icon, etc.
- Add this .json file to the Interplanetary File System (IPFS)
- Install IPFS from https://ipfs.io
- -> ipfs init
- -> ipfs add <your json file>
- -> Get the returned IPFS hash (starts with Qm….)
- -> Enter the IPFS hash when issuing your token with the qt or with the raven-cli issue command.
- For now, keep your IPFS node running so the file stays around. This will be solved in a future Ravencoin release.
So if you followed the steps above, what have you done? You’ve linked an immutable document to an issued token and provably signed the document with the same address that issued the token. Now, if everyone kept their promises, or if the Ravencoin protocol could reach out into the real world and beat you silly if you violate your promise, we’d have the perfect solution. Until then, buyer beware. Do your due diligence before investing your hard earned RVN into any projects.
If you skipped the tldr; section, the next section is for you.
I’ve written a program that will do most of it for you, and we will continue to make it easier and easier with the Raven wallet UI. Until it is built into the core client, you’ll need to have python, which is available on Mac, Windows, or Linux.
To issue assets in bulk:
- Add your assets to a google spreadsheet. File->Download as a .csv file.
- Run python issuebulk.py
If you run into errors, open up issuebulk.py, follow the instructions and set the paths to match your environment.
If you include a link to your document url in the spreadsheet, the python program will download the document, get a Ravencoin address, generate the hash of the document, sign the document, and add it all to the .json file.
So how would you know which projects have taken the extra steps to sign their documents and therefore are probably the better projects?
Well, the Ravencoin blockchain is public and it’s pretty easy for us to scan through all of the assets looking for IPFS metadata, and then look at the metadata and filter out any assets that don’t have signed documents.
will do just that for you. It will find tokens with properly signed documents, by checking each asset for ipfs metadata, and filtering out those without a contract_url, and then filtering out ones that aren’t properly signed. Fair warning, this doesn’t necessarily mean the individuals behind the token are honest and operate with integrity, but it does give you a starting point for identifying and vetting projects that have made their intentions immutable on the Raven blockchain.
Get the python script and spreadsheet here: