Hashgreen successfully released a decentralized exchange on Jan 12, 2022, in a joint live event with Chia Network. If you were not at the event with us, here is a clip of the presentation on the Hashgreen Decentralized Exchange (DEX).
Chia Blockchain introduced its first on-chain atomic token swap standard, powered by the underlying smart coin language Chialisp. Using this standard, users can start exchanging tokens on the chain, including the Chia (XCH) token and other Chia Asset Tokens (CATs). This functionality opens a lot of possibilities on the blockchain, including the first batch of dApps, with Hashgreen DEX being one of them.
We at Hashgreen have been working hard for months to develop the project and integrate our interface into the official Chia wallet. After the successful launch, we received many questions on how and why we decided to build Hashgreen DEX this way.
In today's post, we want to take you through a journey - a journey on Chia's most basic technical building blocks, how and why we crafted the first DEX on the Chia Blockchain, and finally, how we envision DeFi will look like on Chia.
Let's not pretend this has never happened. You opened up your Chia wallet, trying to exchange some Chia (XCH) for some Stably USD (USDS) on the Hashgreen DEX. This popped out, saying you have a lot less spendable balance than you have total balance...
...what happened! If I have all the XCH, why am I unable to send them all, or make an offer out of it? Well, UTXO is the main culprit here.
Short for unspent transaction outputs, this is nothing new and was introduced by Bitcoin. Instead of having a balance sheet for every user on the blockchain, Chia tracks your funds using UTXOs (or, rather, coin set to be more accurate), which is a technically fancy way of referring to coins. Coins have predefined ways to be spent, and are capable of producing coin outputs when they are spent. Moreover, any given coin is only ever created once and spent once -- and that's it! This philosophy focuses on tracking the change of state on the blockchain as opposed to recording the whole state.
You can easily track how many coins are created in the blockchain using explorers.
The choice of using UTXOs on Chia leads to many interesting and advantageous properties:
The verification of coin spending is highly parallelizable since each coin can only have one interaction. In contrast, account-model-based blockchains need to handle transactions sequentially.
The balance is a first-class citizen on the Chia Blockchain! Instead of being a state stored in a mapping table, every coin on Chia has an explicit amount, the total of which has to stay constant. (Well except when you farmed a block, you receive 2 XCH in total out of thin air.)
Since the transactions in a single block are order-less (i.e. their order does not matter as long as they are included in the block), the attack surface of smart contracts reduces drastically. In other blockchains, we often hear the term Miner Extractable Value (MEV), which refers to the profit that a miner could secure by manipulating the ordering of the transactions.
It is estimated that over $576M MEV, as of the time of writing, has been extracted from Ethereum.
With these seemingly wonderful advantages, it sounds like a no-brainer that every chain should adopt this model as opposed to the account model. Apparently there are some trade-offs; trade-offs that takes additional effort to mitigate but are definitely worth it.
Implications to Users
Let's hop back onto our spendable balance problem.
When we make transactions, we are in fact spending a coin or coins that might sum up to more than what we try to send. For example, imagine you are a lucky farmer who farmed a 1.75 XCH coin and wish to send 0.1 XCH to your friend to let them HODL. When you send the XCH, you are actually destroying the initial 1.75 XCH coin, creating a 0.1 XCH for your friend, and sending the rest 1.65 XCH back to yourself. During the wait for the change coin to come back, your funds are effectively reduced, and that is why the Chia wallet shows a lower spendable balance as you cannot double-spend a coin.
Offers are more or less the same: as you create offers to exchange your tokens, you do not want to accidentally spend your coins and invalidate the offer. The Chia wallet was kind enough to soft-lock the coin so that it cannot be used, until you either cancel the offer or when the offer has been fulfilled.
Implications to Developers
The UTXO model, while having a significantly smaller attack surface than that of the account model, is trickier for protocol design. If you still remember, transactions in the same block are spent simultaneously and every coin is only spent exactly once. This implies that if we want to build a more advanced application, we have to design while keeping the ability to perform multiple interactions in mind. Take a very basic application for example - an automated market maker (AMM).
The most renowned instance of an AMM is Uniswap where swappers would exchange their assets with a liquidity pool at a market price determined by the amount of assets held in the pool. When Uniswap contracts are executed, they run sequentially, creating an interaction between the swapper and the pool each time. Yet on the Chia Blockchain, we cannot naively queue up user exchange requests sequentially, since there is only one pool with one coin present. This produces several challenges: For example, exchange operations would need to be aggregated somehow to interact with the pool together. Furthermore, we need to ensure price fairness, resist against denial of service attacks, and overcome many other problems!
There are many proposed solutions on other UTXO-based blockchains, and for the sake of brevity, we will include the discussion in future posts.
In short, clever design choices have to be made for dApps, but when smart contracts are carefully crafted, UTXO-based blockchains have better security guarantees and efficiency.
Bitcoin was successful, but as a store of value, not as a successful technological demonstration. Bram Cohen himself wrote about how Chia's technical motivation stemmed from Bitcoin, and as a last-mover, Chia was able to get things right the first try.
On day one, Chia shipped with the full capability to process smart contracts (or, smart coins, to be more accurate). The on-chain language, chialisp, powers many existing features such as singleton, Chia Asset Token (CAT), and even offers. The programs for smart coins themselves were not actually stored on-chain, but rather, its Merkle root hash is. One does not have to reveal the program until the coins are spent, thus greatly reducing the attack surface. These smart coin primitives are also extremely composable, giving developers building blocks for their decentralized applications.
To date, there is a prosperous community around CATs -- project developers issuing their own tokens and project followers HODLing and trading. We at Hashgreen believe there are more exciting things to come in the Chia ecosystem, but first, let us take a look at how we built the Hashgreen DEX and why it is designed in this way.
Chia wrote an in-depth analysis about how offers work technologically and how they can be used in dApps. In case you have not read it, here's a quick summary:
Offers are serialized off-chain commitments to swap coins for coins. Anyone can take that file and complete the other side of the swap, sending it to the blockchain to settle. Without the other half of the trade, no one would be able to spend your coins or steal your funds.
It is intuitive that, you can send your offer files around in channels like Keybase and Discord, yet you will soon realize -- the prices you get are nowhere close to optimal. Liquidity is plain disastrous with vanilla peer-to-peer trading, and this is the main push for more advanced dApps. Some examples are OfferBin and OfferPool which provide offer upload, sorting, and download services. They operate just like Craigslist: users are responsible for submitting the offers, and pushing aggregated offers to full nodes on their own.
Problems We Solve
Interestingly, Hashgreen did consider this solution, and we observed several potential problems with this Craigslist approach and ultimately went with our current DEX approach.
These Craigslist-like offer pastebins will ultimately face an unsolvable challenge with offer contention. Concretely, contention happens when an offer was downloaded by different parties and spent in the same block. In a fee market, the spends with lower fees will be discarded while the one with the highest fee will go through. While the fee rule itself is totally fair, users with an honest intention to trade in the market but using lower fees will unwillingly have to give up and look for other trades.
Most users do not experience contention now since the market velocity is relatively slow at this point, yet in some cases when there are sudden spikes in trades, contention will become obvious. The SM1 token backed by Chris from The Chia Plot went on a sale on OfferBin, and one unfortunate conclusion Chris drew was that too many people participating in the auction can cause problems on OfferBin, in line with what we discussed above.
That is exactly why we opted for a download-free solution: instead of users bringing the offers home and making their counter-offers, we aggregate offers on two sides, immediately bringing both down from the order book, and pushing them to the chain on your behalf. Not only are we unable to mess with your fund, but we also are unable to cheat you since the swaps are guaranteed by chialisp.
We want there to be market makers in the game. We want there to be arbitrageurs in the game. We want there to be hobby day traders in the game. None of these would be possible without an API interface that is easy to play with and use. Hashgreen is drafting up documentation on trading API, which would be finalized soon. After its release, we expect people to take advantage of other existing markets to form a closed loop to both stabilize the price and increase liquidity. One interesting thing we have observed, at the time of writing, the XCH/USDS pair is typically higher in price than other XCH/USD pairs in different markets. We hypothesize that many interested buyers are gradually entering the market, obtaining XCH with their freshly withdrawn Stably USD, and obviously someone else can obtain XCH at a slightly lower price in overseas markets.
There are many plans from Hashgreen to upgrade our DEX. To be a fully functioning DEX, one would typically expect there to be features like partial order fills, limit orders, and even market orders. We've identified some upgrade paths to the existing offers in order to support these features, and it wouldn't require a huge UX remake to integrate them. On the contrary, it might be somewhat confusing to implement these features into Craigslist-like services.
News about automatic market maker (AMM) development is on the street. Once an AMM is out on the market, we can easily hook you up to trade against AMMs with zero wait time for matching. Plus, we are always working closely with the Chia team to create a smoother trading UX experience from Hashgreen DEX to your Chia wallet!
Admittedly, several aspects need to be discussed in-depth about the DEX working principles, and we will briefly mention them here.
Operator Extractable Values (OEV)
OEV not only covers the previously mentioned miner extractable values (MEV), but also covers the values extractable by aggregators like Hashgreen DEX. In principle, if there are enough orders on the market, they can create an overlap in prices. Aggregators, having observed this phenomenon, can pocket the spread by buying up the cheaper sell offer and selling off the more expensive buy offer simultaneously, pocketing the spread. While we are honest and only match exact offers from two sides, it is not guaranteed that every aggregator will be a good actor. In our preliminary exploration with AMMs, we have found some countermeasures to ensure aggregator honesty in a trustless manner with chialisp. The detail of the mechanisms will certainly be revealed and explained in-depth after we release the product, but for the time being we would love to work behind the curtains for some more.
OfferPool sets out to be another offer pastebin site to combat the centralization of offer files. The arguments of anti-centralization do make sense up to a certain point, since those were the driving force behind the existence of blockchain technology. However, when already operating on a decentralized infrastructure, how much more decentralization is required is debatable, as having scattered decentralized services might lead to inefficiency in the application. Take an AMM for example, having more total values locked (TVL) in the protocol means that service users would enjoy a better price. Despite being centralized in terms of capital concentration, not a single party is able to single-handedly control the capital since the rules behind the capital movement are crystal clear. Hence we believe the better argument is that, the protocols need to be fully transparent to allow the blockchain to do its job at ensuring decentralized and trustless execution.
Working on the Chia Blockchain certainly brings many unique challenges to the Hashgreen team, and we want to tell you that this MIT-based team is not afraid of challenges!
Along the way, we have heard of perspectives on Chia's development purely based on its price, but this is simply an unhealthy view on a tech-heavy project. Being one of the first developers on Chia, we are journeying through its infancy as well as you are, and enabling more and more applications on our way. At any given point in time, we might find ourselves having to make trade-offs in either protocol design or system deployment, but rest assured that we take a first principled approach with the user's best interest at top priority. In order for us to communicate these complex ideas with you, we are starting this blog to periodically fill you in with more development progress and technological insights for the Chia Blockchain.