IPC is a framework to build customizable and scalable blockchains, deployed in the form of hierarchical subnets arranged in a multi-level tree that inherit security and services from their parent.
Currently, developers need to fork the IPC codebase to introduce their customizations, such as syscalls, actors, gas pricing, and more. Such forks are cumbersome to maintain. And adding insult to injury, we don't have designated extension points for one to add custom logic. So more often than not, forks end up taking a life of their own, making them even harder to maintain as time passes, customizations accumulate, and the upstream evolves.
Goal
Our goal is to modularize the IPC codebase, breaking it down into finer-grained, scoped crates where each exposes a clean, public, documented API. These module APIs compose around a standardised set of concepts and abstractions, snapping into place into an abstract skeleton that represents the blockchain node. We can draw conceptual inspiration from frameworks like go-libp2p, Spring Framework, and others.
Idea parking lot
This is draft breakdown of ideas and tasks:
Introduce a consensus abstraction to decouple from CometBFT/Ignite consensus and enable other consensus engines like Shoal, Narwhal, etc.
Evokes Mir as a component of IPC. These ideas were put on the backburner when the Fendermint path was adopted, causing us to become coupled with a concrete consensus engine via ABCI.
Eliminating the top-level delineation between ipc and fendermint. All pieces are part of the IPC framework at large, and they're packaged as small units that implement common abstractions.
We focus on providing the best-possible, production-grade reference implementation for an IPC node, but alternative implementations can emerge that can leverage existing IPC modules and re-implement low-level plumbing differently, as long as they adhere to the abstract intefaces.
We adopt semver versioning for modules, and adopt tools like cargo-semver-checks to remove the guesswork out of versioning decisions.
Context
IPC is a framework to build customizable and scalable blockchains, deployed in the form of hierarchical subnets arranged in a multi-level tree that inherit security and services from their parent.
Currently, developers need to fork the IPC codebase to introduce their customizations, such as syscalls, actors, gas pricing, and more. Such forks are cumbersome to maintain. And adding insult to injury, we don't have designated extension points for one to add custom logic. So more often than not, forks end up taking a life of their own, making them even harder to maintain as time passes, customizations accumulate, and the upstream evolves.
Goal
Our goal is to modularize the IPC codebase, breaking it down into finer-grained, scoped crates where each exposes a clean, public, documented API. These module APIs compose around a standardised set of concepts and abstractions, snapping into place into an abstract skeleton that represents the blockchain node. We can draw conceptual inspiration from frameworks like go-libp2p, Spring Framework, and others.
Idea parking lot
This is draft breakdown of ideas and tasks:
ipc
andfendermint
. All pieces are part of the IPC framework at large, and they're packaged as small units that implement common abstractions.