foundry
foundry copied to clipboard
Project organization plan
Current Foundry's project structure is somewhat tangled. I suggest following new structure.
-
We have a separate repo for types/traits/utilities widely used in the host and modules. (Let's say
foundry-suite
) Some types might have theirasync-graphql
implementations. The module author will import bothmodule-rt
andfoundry-suite
. Also, the coordinator - module interfaces are included here as well. -
App descriptor is separated into two independent parts: Foundry configuration (genesis config, transaction services) and general linking instructions (export, import, init config). Let's say the latter as a 'link descriptor'.
-
We keep the module system (Mold) pure, not involved in any blockchain context. It will be only about sandbox, links, communication and bootstrapping. Here are the components included
- RTO
-
module-rt
- sandbox implementations
- link-desc (see section 2)
- weaver
-
codechain-module
(linkable, linker, Port, ...)
-
Coordinator will be just one use case of Mold, with some predefined services to import and export (coordinator - module interfaces).
-
We publish Mold as a general framework, which can be used widely out of blockchain context.
Doing this, we can have three clearly separated groups.
-
The consensus engine: Anything below the engine interface. DB, Tendermint, P2P, GraphQL server and so on. Current
foundry
repo will be about them. -
The general module system: As described above.
-
The bridge between 1. and 2. : Coordinator, types, predefined services, utilities, ...
Any comments are welcome.
This is not a short-term goal. I'll complete v0.1.0 without much consideration of this, anyway.