December 21, 2021
Tari 2021 wrap up
2021 is largely in the rear-view mirror. While the degens were buying pixelated animal JPEGs with enough ETH to put small countries out of the red, the Tari devs were grinding away.
Stuff in Tari that wasn’t there 12 months ago:
- SHA-3 and RandomX Mining pools.
- Cross-chain atomic swaps.
- One-sided payments.
- Cursory DAN support.
- Hotstuff BFT consensus.
- NFT-like contracts proof of concept.
- Yuge performance improvements.
Stability and performance improvements
Here’s our take on Number Go Up (TM) technology: Performance metrics.
While there are many new features to discuss, a primary focus for Tari has been stability and performance improvements. We regularly perform significant stress tests on the network where we will flood the network with 36000 transactions in the space of a minute and see how the wallets and base nodes cope. In September 2020, we did a stress test of this scale, and after 12 hours, only 71% of the transactions made it onto the chain. Issues revealed by these stress tests included problems with our P2P networking protocols flooding the network with propagated messages. Our data storage layers thrashed the CPU and memory of the host machines. We also found many issues in our various high-level chain transaction monitoring, transaction and block broadcast and propagating strategies.
This year in July, we ran the same scale test and achieved a 100% success rate with all the transactions being mined within 500 blocks where the absolute minimum number of blocks they could have fitted in was 54 blocks. Finally, in December, the same stress test was again 100% successful, and all the transactions were mined within 300 blocks, with 97% of them mined within 100 blocks from the beginning of the test. There is still work to be done, but this considerable improvement in stability and performance has resulted from many hard-won lessons.
For example, this year, we moved most of our network communications to an RPC-style request-response framework. This replaces the fire-and-forget style messaging we initially built, which is now reserved only for the sending of asynchronous transaction negotiation messages. There have also been many improvements to our higher-level communication strategies. For example, the method by which wallets broadcast transactions into the mempool, the way base nodes sync headers and blocks between themselves, to name just a few.
Side note: The Weatherwax testnet launched in July. In 6 months, it has seen 400k transactions and contains 1.8 million UTXO’s. Apropos of nothing, over the same period, Grin had around 150k transactions in that time and has around 150k UTXOs. Don’t @me.
One of the most significant additions to the base layer has been the implementation of TariScript. This is one of Tari’s extensions to Mimblewimble protocol and is a scripting language that massively expands the capabilities of the Tari base layer.
This year we rolled out the first feature to make use of TariScript which was the implementation of one-sided payments. One-sided payments allow a wallet to make a payment to a recipient without the recipient’s wallet needing to be online, solving a long time criticism levelled at Mimblewimble based protocols. We also used TariScript to implement cross-chain atomic swaps with Bitcoin and wrote an RFC for our implementation of an atomic swap with Monero.
The common wallet backend library used by the desktop console wallet and Android and iOS Aurora app was the focus of many of the performance and stability improvements. In addition to the features added by the support of TariScript, the wallet can now recover its funds using the 24-word seed phrase by scanning the blockchain and rewinding range-proofs to find the outputs that belong to it. To make the recovery process less intensive on the wallet client applications, we implemented a cipher seed scheme to encrypt the seed phrase and encode the wallet’s birthday into the 24-word seed phrase. Knowing the wallet’s birthday greatly reduces the work a wallet needs to do to recover its funds as it only has to scan the blocks since the birthday rather than all the way from the genesis block.
This year we created the standalone desktop console wallet client and iterated on our iOS and Android Aurora apps to make use of all the new features afforded by the backend, such as wallet encryption and custom base node support. Furthermore, the Aurora apps have been integrated with Yat to allow you to send tXTR to Yat’s with associated addresses in addition to the existing Emoji ID addresses.
Digital Assets Network (DAN)
As the base layer stabilises, the development of the second layer DAN is going full steam ahead. We have implemented a proof of concept Validator Node application that includes a HotStuff BFT consensus algorithm and NFT-like contracts.
This year we rolled out mining node applications for RandomX merge-mining and SHA-3 mining. The
application enables merge mining of Tari along with Monero. And we forked
NodeJsPool to support Tari merge
mining for Monero pools and also added SHA-3 mining to our fork of the
Miningcore mining pool framework.