Mimblewimble Design (libmw)

你好朋友!

As previously mentioned, I’ve been working to add a mimblewimble extension block to the LTC protocol. The plan has been to use the Grin++ codebase as the starting point, which we could build on to support LTC in a way that allows us to easily merge in future Grin++ changes. To support this, a partial redesign of Grin++ was necessary, which will henceforth be named libmw.

This forum post will briefly describe the design of libmw, and how it will support both Grin and LTC. I will be focusing exclusively on the node logic, and will stay very high-level since everything is subject (and likely) to change. The wallet design will be described separately at a later time.

DESIGN

libwm-core

Both LTC and Grin will rely heavily on libmw-core, which will remain protocol-agnostic and serve as the foundation on which the rest of libmw will be built.

libmw-core will contain:

  • Block and transaction models & interfaces
  • PMMR (Pruneable Merkle Mountain Range) models and logic
  • Cryptography (secp256k1-zkp, ED25519, aes, blake2b, etc.)
  • Networking libraries (Sockets, RPC clients/servers, tor, etc.)
  • Common utilities (logging, formatting, json, serialization, etc.)
  • Databases (will eventually be split out to libmw-database)
  • Chain State (confirmed & candidate chains)
  • Transaction Pool

libmw-ltc

This repo will reference all dependencies necessary for the Litecoin implementation of libmw, including libmw-core.

libmw-ltc will contain:

  • Block, header, and kernel implementations
  • Consensus rules
  • Block & transaction validation logic
  • JSON-RPC APIs

libmw-grin

This repo will reference all dependencies necessary for the Grin implementation of libmw, including libmw-core.

libmw-grin will contain:

  • Block, header, and kernel implementations
  • Consensus rules
  • Block, transaction, and PoW validation logic
  • P2P protocol
  • JSON-RPC APIs
2 Likes