There's a lot of development going on in the field of permissionless tokens. While this is awesome, we noticed a demand for permissioned tokens on the Bitcoin Cash blockchain. This can be incredibly useful in areas where regulatory compliance is important (e.g. security tokens, privately issued currencies, stocks,...) but also for use cases like loyalty tokens. Token issuers can benefit from the ease of use of Bitcoin Cash transactions while maintaining complete transparency.
Our main inspiration for the implementation is SLP (Simple Ledger Protocol).
What it does
A user can issue a permissioned token by the simple swipe of a MoneyButton. When the token is created, the token issuer can validate and confirm token transactions. Users can send and receive tokens.
Permissioned Token Prototype is comparable to SLP, but instead of requiring users to validate the entire transaction history, the token issuer validates and confirms all token transactions. Users can simply check if the token issuer confirmed an incoming transaction to be sure it's valid.
How we built it
We used MoneyButton to generate a genesis and initial supply transaction by using multiple outputs and OP_RETURN metadata. Subsequently, BitSocket is used to monitor the blockchain for transactions involving the generated token. We used BitBox to create keypairs and to generate and broadcast transactions. We tied everything together inside a simple react app that showcases the genesis creation, transaction validation and the spending and receiving of tokens. Everything runs in a single webpage, without any infrastructure requirements. All transactions are streamed live to the user interface through BitSocket's server-sent events (SSE).
Challenges we ran into
- Finishing a complete set of validation rules for the wallet within time.
- Debugging transaction creation and signing errors
Accomplishments that we're proud of
We built a token protocol, implementation and user interface in a single weekend.
What we learned
- Using BitSocket
- Using advanced features of MoneyButton
- Creating advanced Bitcoin Cash transactions involving OP_RETURN
What's next for Permissioned Token Prototype
- Providing a feature to add satoshis for transaction fees
- Implementing more advanced wallet features / validation
- Building a flexible transaction validation engine for token issuers
- Creating a standardized protocol spec based on the principles of this prototype
- Trying to be compliant with SLP, so users can use the SLP protocol to audit a token issuer