Connext v0.4 Developer Update
The Long Road to Mainnet Launch
The last time we gave you an update, we had just completed our first implementation of Perun’s Virtual State Channels. Afterwards, we dove 🏊 straight into our first customer integration with Spankchain. As you would expect, we found out a lot about what worked and what we had to change, and we’re excited to share all of that with you now!
Documentation is Here! 📚
Because we made huge sweeping changes to our Client and Hub code, it took us a little longer than expected to get our documentation together. However, I’m excited to announce that you can now check out our prettified, updated Docs here.
Problems with Perun in Practice 😬
We were very excited to bring the first hashlock-less multihop channels to market, but found that the original Perun specification created a lot of problems for user experience.
Perun’s Virtual Channels use a mutually enforced timer which acts as the basis for all dispute handling and channel longevity. When a new Virtual Channel is opened between two parties, current block time and a
channelTimeout are signed into the initial state. After the timeout is reached, the VC closes and the Hub closing process is initiated. If the parties disagree on whether the VC is closed for a given update, then the initial block time + timeout could be compared against the current block time to settle a dispute. A similar mechanism could be used if the Hub was unresponsive during the VC closing process.
This is seemingly not very problematic to implement because opening and closing VCs is a fully offchain practice and so would not cost any gas. However, in practice, we found that this mechanism adds a huge coordination burden on both counterparties. Performers on Spankchain’s system, for instance, would have to explicitly reopen VCs and be available for VC closing if they wanted to be paid out correctly.
Digging deeper into the rationale behind these timers, we found that the biggest reason for their existence was to ensure that it is impossible for any party to close a Ledger Channel (i.e. the channel between the Hub and counterparty) while a VC was open. Additionally, it would ensure that, if the counterparties refused to close the VC, the Hub couldn’t be taken “hostage”. However, it seemed to us like this was not an elegant way to handle these cases.
A New Framework and Mainnet Testing 🚀
Rather than try to force the spec to fit practical UX constraints, we worked with SpankChain and Finality Labs to design a new framework. In a nutshell, the new framework removes the need for timers from Perun’s implementation and adds merkelized metadata to each transaction packet. This allows Virtual Channels (which we’re now calling Threads, to simplify things in our new construction) to be much more flexible. Participants can now open/close threads with each other in milliseconds, allowing Spankchain viewers to dynamically switch between shows or “suddenly” close their laptops (you know, for reasons 😉) without any interruptions to their experience or loss of funds. Huzzah!
More on the new framework coming soon, too, from Finality. Big thanks to Nathan Ginnever for pioneering it.
We are now undergoing mainnet testing with the Spankchain Camsite, and will be used as a part of their production platform very soon.
Nontechnical Updates 💪
Some time back, we announced the Connext Pilot Program. We’ve received a wonderful response on it so far and are learning a lot about the scaling needs of projects in the community. We’ll share some of these insights with you guys soon, along with the first few hubs that we’ll plan to go live with. In the meantime, however, keep signing up through the form on our landing page.
We’re also excited to bring on Hunter Hillman as Head of Growth. In the short time that Hunter has been working with us, he’s already pioneered Blockchains for Babies (and the followup post, State Channels for Babies), a Medium series dedicated to making the industry more approachable to everyone. Be sure to check out the posts if you haven’t yet, we’re actively looking for feedback on how we can make them most useful as a learning tool.
It’s been a while since our last update so this one was a little longer. Now that we’re done with rebuilding the implementation, updates will be more frequent and digestible.