Gluon Plasma is plasma for non-custodial exchanges.
- No need to be online at time of match/payment
- No bonds (to withdraw, etc)
- No challenges
- No exit games
- No limit on number of coins
- No main chain limit on trades in a plasma block
- No increased gas cost for increased volume
- No large waiting periods to withdraw (typical values: 10 mins or 60 mins)
- No unfungibility hassles (like change providers)
- No increase in size of proof with coin movement
- No priority queue and stampede to exit
- No need for everyone to verify the whole plasma chain periodically
etc. etc. most of the UX has been straightened out.
- Account based
- Small footprint
- Instant finality
- Fast withdrawals
- Compact fraud-proofs for every transition
- Non-Onerous safety
- Congestion tolerant
- Incentive balanced
- Chain halt on data unavailability
- Gluon plasma starts with a known zero state where all balances are zero.
- Deposits to the main chain of an asset by user increase the user’s asset balance on the plasma sidechain by a corresponding amount.
- Withdrawing funds from the plasma sidechain decrease the balance on the sidechain and enables withdrawal on the main chain.
- Transfer of assets (trading) between users on the plasma sidechain require matching signed orders of the users, countersigned by the operator.
- All state changes require accompanying witnesses. Any invalid witness can be used to halt the plasma sidechain and let users withdraw at leisure.
- In the event of data unavailability, participants can vote to halt the sidechain,enabling users to withdraw on the main chain at leisure.
- Account A transfers quantity N of asset Z to plasma contract C.
- C computes the designated G-block G in which this deposit would be committed on the plasma sidechain.
- C computes and stores hash H of(A, Z, N, G, nonce).
- Operator X creates a ledger entry D referencing H and crediting N amount of Z to A. A can trade once D is published.
- Operator X commits an ordered Merkle root depositRoot of all deposits for G-block G. Any ignored deposits need to be reclaimed by the user.
- A submits (A, Z, N, G, nonce) with exclusion proof (H /∈ depositRoot).
- C computes hash H of (A, Z, N, G, nonce) and verifies that H has not already been reclaimed and has been excluded from depositRoot of G. 3.C marks H as reclaimed and transfers quantity N of asset Z to account A.
- Account A submits a signed withdrawal request for quantity N of asset Z to operator X off-chain.
- Operator X creates a Withdraw ledger entry W that reflects the new reduced balance of(A, Z) and publishes it. A can withdraw once W is in a confirmed G-block. 3.A submits W with inclusion proof(W∈ledgerRoot) to plasma contract C.
- C verifies W is valid and has not been already processed. C stores hash of W to prevent duplicate withdrawals and sends N quantity of Z to A on main chain.
- If W is not published within a reasonable time (griefing attack by X), A should cancel all open orders for Z and proceed to Exit Asset Balance.
- Account A submits ledger entry E for Asset Z with inclusion proof (E∈balanceRoot) of the last confirmed G-block to plasma contract C.
- C registers the exit claim for E in G-block Gi.
- Operator X cancels all open orders and prevents further activity for(A, Z).
- After k G-blocks, A submits proof of unchanged balance in the unconfirmed G-block Gi+k. (e∈G.balanceRoot;e∈Gi+k.balanceRoot).
- C transfers balance of Z to A on main chain and marks(A, Z) as Exited by storing ExitBlock(A, Z) =Gi+k thus preventing all further activity for(A, Z).