Liquity releases its Developer UI

Robert Lauko
Liquity
Published in
6 min readJun 18, 2020

Community update

First off, thank you so much for the support! We have had an overwhelmingly positive response from the community since we publicly announced Liquity on May 4 on Medium.

It is amazing how many people joined our community channel on Discord and followed us on Twitter. We want to express our gratitude towards all of you who have contributed with questions, feedback, or criticism or just by becoming a member of our community.

Our announcement was featured in The Block Crypto’s article by Mike Orcutt and has been well received in other media like Blockonomi, DeFi Rate, CryptoActu (French), and ChainNews (Chinese).

Robert presented Liquity and did a public AMA on June 4, 1pm-2pm EST, in Lou Kerner’s show “Stablecoins Are Killing It”, alongside Gregory DiPrisco from Maker and Will Price from Flipside Crypto. You can watch the recording here.

Announcements

Developer UI: Our Developer UI is running on the major test nets and can be checked out here: devui.liquity.org. See below “Release of our Developer UI” for more information.

Virtual office hours: On Tuesday, June 23, 7–8 PM CEST, we will be at your disposal if you have any questions about our project. Feel free to join in using this link https://us02web.zoom.us/j/9102442499. Save the date here!

Development Update

Gas compensation mechanism

Work hasn’t stopped in the last few weeks. We have been busy refining a mechanism for compensating the liquidator of a Trove for the transaction fees / gas costs. As you may already know, Liquity will allow anybody to liquidate up to 40 undercollateralized positions in a single transaction! Nevertheless, during periods with extremely high gas prices (think of 200 gwei or more), liquidations could be fairly costly for the transaction sender, especially if the liquidated Trove and the expected collateral gain are relatively small.

The problem turned out to be more challenging than initially anticipated. There is no safe way to determine the right compensation since the sender of a transaction can set any gas price, and the EVM does not expose the average block gas price to the smart contract. In short, it’s hard for the dApp to “know” how congested the network truly is. We want Liquity to compensate liquidation gas costs without overpaying, so we’ve been looking into a few different solutions here — a fixed compensation, use of a gas price oracle, or an implicit auction mechanism based on the age of the price feed. All of them come with their own issues.

We now think a compensation formula that has a fixed part and a variable part based on the size of the Trove and the total collateral ratio of the system is the way to go. The larger a Trove and the lower the total collateralization of the system, the more important it is to liquidate it in a speedy manner. To that end, we are also investigating different methods of batch liquidating larger Troves. This would allow swift liquidation of large positions in bulk, and leave the liquidation of smaller Troves for later when the gas price goes back to normal.

System modeling

Rick was busy modeling our system with regard to price stability and coded up a macroeconomic model based on an earlier toy model created by Robert. It’s a first attempt at analyzing how Liquity behaves under different Ether price dynamics. The model uses a few simplifying assumptions that we aim to lift one by one in order to get closer to reality.

Here is a glimpse of the first results:

Aside from our own modelling, we are in discussions with several economic modelling and systems design firms that would help us further analyze our cryptoeconomics, fine tune the fees, and tweak the system for maximum stability.

Ether price data analysis

Our minimum collateral ratio is set to 110%. To make sure that this is a reasonably safe choice, we have analyzed the entire historic price data from Chainlink’s ETH:USD price oracle, which is used in our current test version.

We see that almost all price changes are < 2%, except in extreme market conditions. The large right-most patch of volatility corresponds to Black Thursday, and the largest price movement took place then at 2020–03–12 23:41:34 UTC, when it dropped by 9.21%.

Continuous Integration (CI) pipeline

Dani has done some amazing progress on the CI pipeline, so that our integration process is mostly automated, allowing us to move faster without worrying about breaking things. Now if a team member pushes a code change, it will automatically trigger a run of all the contract unit tests as well as integration tests between the contracts and our middleware library, totaling over 350 test cases! Next, the interface (ABI) of the newly tested contracts is compared with the live deployments to make sure we don’t automatically deploy a new Developer UI that would be incompatible with them.

We do this because our contract deployment — even though it’s an automated process — remains manually triggered for now, since we don’t want to deploy new contracts every time the code changes. Not only would that lengthen the CI process, but it would be very annoying for users of the Developer UI, as it effectively gets rid of their existing Troves and stability deposits. If the ABIs match, we proceed to build a new Docker image of the Developer UI, which we push to the Docker Hub. Within 5 minutes, our server finds the new version on Docker Hub, pulls it then restarts the container with the latest version.
If any of the previous steps fail, the team member who made the code change is notified via e-mail, so that they can rectify the situation.

Smart contract security: fuzzing

In addition to unit testing, we’ve begun using Trail of Bits’ awesome security tool Echidna to set up some initial fuzzing campaigns. This will let us stress-test Liquity by subjecting it to a firehose of random inputs, and making sure the smart contracts alway do what we expect them to do.

Release of our Developer UI

Our Developer UI has been up and running on the major test nets (Ropsten, Kovan, Rinkeby and Goerli) for more than 3 months. Today, we are proud to release it to the public: devui.liquity.org

You’ll need a browser with MetaMask installed and some Ether on one of the testnets (the price feed currently only works on Ropsten). To obtain some testnet ETH, switch to Ropsten in MetaMask and visit https://faucet.metamask.io/ to request testnet tokens.

Please note that the final UI that we are aiming to release as a launch kit will be more polished, and look very different from this beta version. Nevertheless, feel free to provide us feedback on the Developer UI.

To facilitate testing liquidations, we made it possible to manually override the price feed. Please use it responsibly and be aware that other people might manipulate the price and liquidate your Trove and steal your testnet Ether. :)

The front end does not access the back end smart contracts directly, but uses a middleware library that makes it easier to communicate with them. We plan to release this library as part of an SDK down the line, which will facilitate integration of the Liquity protocol in 3rd party applications.

Even though the Developer UI we’re releasing today only supports MetaMask, the awesome libraries we use (ethers.js and web3-react) will allow our launch kit to support more wallet types with ease.

The front end code is already public. You can find it here: https://github.com/liquity/liquity

Stay liquid and sign up for our newsletter at liquity.org!

--

--