Mimblewimble Progress Update Thread

Hi everyone!

I’m David Burkett, the developer of Grin++. I’ve been working with ecurrencyhodler, Charlie, and others for several months now to design a Mimblewimble extension block so that LTC users can have confidential transactions and more fungible money.

I spoke a bit about our progress at the LTC Conference last month, but for those who are unaware, we’ve published 2 new LTC improvement proposals (LIPs):

LIP-0002: https://github.com/litecoin-project/lips/blob/master/lip-0002.mediawiki
This describes extension blocks, and how they can be implemented and activated in LTC.

LIP-0003: https://github.com/litecoin-project/lips/blob/master/lip-0003.mediawiki
This is all about Mimblewimble on LTC.

After the conference, much has happened. The first big announcement is that the LTC Foundation has graciously decided to fund my efforts to implement the MW extension block, and to continue working on Grin++! More details about that will be announced shortly, but I want to thank you all for the opportunity.

Since that was announced, great progress has been made. On the Grin++ side, I’ve implemented payments via TOR. Mimblewimble requires interacting with the receiver to build a transaction collaboratively, so by using TOR for that interaction, we’re able to use familiar-looking addresses, a simpler set-up, and much better privacy.

Also, I’ve performed the first ever (AFAICT) pre-broadcast Mimblewimble CoinJoin. For those familiar with Mimblewimble, you may know that at the time transactions are included in a block, they are already joined with all other transactions in that block. The Achilles heel of mimblewimble privacy though, has always been that transactions are broadcast before they’ve had a chance to be joined with other transactions. That means nodes monitoring the network can see the original input-to-output links of most transactions. Sending a transaction directly to a CoinJoin server before broadcasting is one of many different techniques we can use to combat that.

On the LTC side, I started by familiarizing myself with the existing code by completing the LTC Dev Training Session. This meant starting with the latest bitcoin source, and making all modifications necessary to get it to sync.

After that, I got to work re-designing the Grin++ codebase in a way that will allow LTC to reuse Grin++ with minimal modifications. The design is beyond the scope of this update, but I’ll formally write-up the design sometime over the next few weeks and link it here.

Going forward, I will be providing monthly progress updates to keep everyone in the loop on what progress has been made. They’ll likely be much more succinct than this one, but I thought it would be good to take a few extra minutes with this first update to let everyone know who I am, where we’re at, and set some expectations for the future.

Thanks for reading, and thanks again for all of your support!

11 Likes

Thanks for the update David. We are excited to begin testing & using litecoin MW.

Plus the option to use coinjoin prior to a transaction would be a great benefit for those who need private transactions.

Do we have anyone working on a wallet that will support LTC MW? Loshan? Or Kerry?

3 Likes

David, it would be great if you could also post your updates on the large number of folks on www.bitcointalk.org in the Litecoin Thread.

Here is the link:

https://bitcointalk.org/index.php?topic=47417.new#new

It is silly that as large as that group is on www.bitcointalk.org NO dev seems to post anything of note

in any manner on there. It would also be nice to see monthly updates on there as well to expand the

info on litecoin on another platform.

later

Brad

2 Likes

Hey David! Awesome to get updates on this thread. Great to hear the progress :wink:

1 Like

As promised, here’s a brief write-up of the design. Mimblewimble Design (libmw)

1 Like

Hi David. Thanks for the update.

December Progress:

After months of planning, development of the mimblewimble extension block has officially started! My efforts this month focused mostly around restructuring the core logic that will be shared between Grin++ and LTC. This involves all of the logging, serialization, crypto, error handling, and common data structures (headers/blocks/txs).

Most of this was already written for Grin++, but since some parts were hurriedly coded on a tight time schedule, I’m using this opportunity to go over every line with a fine-tooth comb. As part of this, I’m standardizing patterns that were originally followed inconsistently, backfilling missing tests, and adding better documentation.

The LTC priorities for January will be:

  1. Determine build method - Since the code will now be spread across a few repos, a slightly more complex build process is necessary. I’m still figuring out the best way to handle this, but am currently leaning toward a simplified version of libbitcoin’s build system (https://github.com/libbitcoin/libbitcoin-build)
  2. Define all LTC models - Determine the exact fields and serialization format of the headers & kernels (including signatures)
  3. Move the database implementations over to libmw-core, cleanup to match new standards, and add full tests.

I also will be working on a faster sync mechanism for Grin next month, which LTC will directly benefit from.

For those technical-minded readers who want to follow along as changes are made, feel free to “watch” the following repos:


5 Likes

Thanks for the updates, David! :grin:

1 Like