Ideas

Driving forces that could improve the situation of the Cardano node architecture.

Interface first

  • Conformance tests
  • CIPs?
  • Open standards / avoid not invented here / off-the-shelf especially close to the user
    • Node-to-client niche way to implement an API
    • Many components built by the community to work around the limitations
    • Would have happened anyways, but maybe some could have been avoided?
    • Example: ogmios, was started out of frustration about unusability of n2c, now de-facto standard sidecar to a cardano-node
      • many workarounds of arcane / hard-to use n2c quirks
      • transaction submission / backward compatibility of transactions
      • fee estimation
      • test vectors
    • Missing documentation requires many projects to fill in the gaps and even reverse-engineer the haskell code, e.g. https://arsmagna.xyz/docs/network-lsq/
    • mention utxo-grpc?

Is Haskell a deterrent?

  • Current teams / components are not a "bad cut" per se

  • Without external contributions, tight (process) coupling ensues

  • Feature teams concerning about one aspect across components?

  • Competing implementations was already tried in the past

    • Rust vs. Haskell -> Jormungandr vs. cardano-node
  • In-language re-use vs. language-agnostic re-use

    • foreign function interfaces
    • process boundaries
    • WebAssembly based frameworks (hermes)

Case study: mithril

  • Evolution from userspace to kernel space
  • How can experiments and new ideas transcend into "the node" eventually?
  • Mithril completely separate -> Mithril side-car / network re-use -> Signer part of node -> Use signed data in node (for consensus)
  • Modular decentralized message queue (DMQ) node architecture we built

Why substrate?

  • Why were partner chains and midnight have been resorting to use substrate?
  • How is substrate doing it (people seem to like to use their framework)? https://substrate.io/
  • In the past: Advertised as a framework where polkadot node is just one way of combining components (pellets)
  • However, just recently substrate moved even now more into a definite Polkadot SDK?
    • Making it less a re-usable framework and already less appealling now?