CRUXPay Protocol

There are two major parts to CRUXPay -

  1. Securely storing the customer's public addresses
  2. Standardizing Crypto Payments

1 Secure Storage of Address Mapping

Problem2

Problem2

With CRUX IDs we have a secure way to bind the identity of a User. Now we need to store the user's chosen 'public addresses' securely.
It is not feasible to store arbitrary amounts of data in the Bitcoin blockchain because of monetary and time cost. Blockstack introduces a layer of indirection here with the help of the Blockstack Network and data storage entities called ‘Gaia Hubs’. Gaia works by hosting data in one or more existing storage systems of the user's choice called a ‘Gaia Hub’. These storage systems are typically cloud storage systems. User gets to choose where their data lives, and Gaia enables applications to access it via a uniform API. Blockstack applications use the Gaia storage system to store data on behalf of a user. The Gaia hub authenticates writes to a location by requiring a valid authentication token, generated by a private key authorized to write at that location.

We can securely validate the Authenticity and Integrity of any data with the help of the User's CRUX ID. The CRUX ID can provide the User's Public Key. Once we have the Public Key, we can easily check for data Integrity and Authenticity using HMAC.

So Three layers work together -

  1. Blockchain - The Bitcoin blockchain stores the hash of a ‘ZoneFile’
  2. BNS Nodes - Hash of ZoneFile is mapped to the owner Public Key and the Zonefile itself.
  3. Gaia Hub - ZoneFile contains URL to the User's Gaia Hub of choice.

An individual Gaia Hub may or may not be decentralized, and it does not need to be. CRUX provides all the necessary privacy and security guarantees by assuring the following -

  1. User owns keypair securely in the Wallet. No one else ever gets to see the private key.
  2. The Wallet or the User can choose to use their own Gaia Hubs. There is no dependency on CRUX or the creators of CRUX.
  3. Anyone trying to read data from a Gaia Hub can verify Authenticity and Integrity of a file's using a trusted PKI. The BNS Network acts as our PKI. This means any data being written must contain an HMAC.

2 Standardizing Crypto Payments

The cryptocurrency industry is at a nascent stage, with tens of thousands of blockchain projects that use diverse platforms with multiple coding languages, protocols, consensus mechanisms, and privacy measures. Enhancing standards and interoperability is key to unlocking the next phase of growth that lies ahead of us.

We consider payment and currency interoperability to be a big part of the User experience of cryptocurrencies which requires standardization efforts.

We need to make the Payment process fool-proof. The vision is that no User should be confused about currency symbols, hard forks, soft forks, address formats, decimal precision, etc when making payments.

Problem2

Global Asset List & Client Asset Mapping

We establish a reference 'Global Asset List' with each currency represented as an 'Asset' each with its own unique 'Asset Identifier'. The Global Asset List is expressed in as unopinionated and unambiguous terms as possible.

Clients may refer to each asset in their own way. Some might call it bitcoin, some btc, some BTC. At the time of onboarding, Wallets need to explicitly map CRUX Assets to identifiers of their choice. ≠

An Asset is represented by a UUID - known as an AssetID. Each Asset contains several fields which aim to express information about the Asset in as unambigious terms as possible.

An Asset never changes. The Global Asset is an append only log. For example:

  • When a blockchain has a hard fork, there will be two new Assets created. The older one does not change. Wallets aware of the hard fork can explicitly map the newly created assets to the corresponding so that Users are never exposed to unintended side effects of the hard fork.
  • When a cryptocurrency migrates from a Blockchain to another, again, lead to a new Asset in the Global Asset List. Whenever Wallets decide to support the migrated cryptocurrency, they can update their Client Asset Mapping.

Example:

{
    "assetId":"73b1618a-d61f-4dd4-87c3-853a967d4490",
    "symbol":"XYZ",
    "name":"XYZ Token",
    "assetType":"ERC20",
    "decimals":18,
    "assetIdentifierName":"Contract Address",
    "assetIdentifierValue":"0xB97048628DB6B6........833e95Dbe1A905B280",
    "parentAssetId":"4e4d9982-3469-421b-ab60-2c0c2f05386a"
}

3 Risk Analysis

Section 2.4 of the Risk Analysis document walks through the new risks introduced with the CRUXPay Protocol, and how those risks are mitigated.