I have for now managed to answer my questions regarding kappa/multifeed design pattern. What I was fascinated by is known as the "spaghetti-consensus" / "DAG-consensus" which I believe can be built on kappa/multifeed architecture by introducing logic to selectively replicate feeds.
Seeing other projects progressing down this road has made me realize that I hold no interest in working with a global-consensus algorithm.
I have since moved my focus to offline-first technology and will most likely transform decentstack into an entry level starter kit once I have positive results.
If you wish to say hi then send me a PM somehwere or find my dev-log in hyperspace. 👍
/telamohn
P.S. If you are working with hyper-tech and is reading this because you're haunted by the net-spooks, check out hyper-simulator it's a solid artifact that came out of this research.
Decentstack is a framework for building decentralized applications
(primarily those that utilize kappa-architecture )
If you're brave enough, there are some pre-release docs available:
Documentation (Still being written & revised)
The quickstart instructions are not available yet, but I would recommend you to start with the excellent kappa-workshop. It's a great introduction to building decentralized applications and a "must read" prequel to the issues which Decentstack attempts to address.
constRAM=require('random-access-memory')constmultifeed=require('multifeed')constkappa=require('kappa-core')const{ Decentstack }=require('decentstack')classMyApplication{mounted(stack){this.storage=multifeed(RAM,stack.key)// TODO: get rid of this workaroundthis.kappa=kappa(null,{multifeed: this.storage})stack.use(this.storage)}// Expose feed lengthsasyncdescribe({ resolve },next){try{constfeed=awaitresolve()next(null,{seq: feed.length})}catch(err){next(err)}}// prevent zero-length feeds from being sharedhold({ meta },next){next(null,!!meta.seq)}// prevent zero-length feeds from being acceptedreject({ meta },next){next(null,!!meta.seq)}}// Setup an exchange-keyconstexchangeKey=Buffer.alloc(32)exchangeKey.write('communication-encryption-key')// Create stack and register our applicationconststack=newDecentstack(exchangeKey,{live: true})stack.use(newMyApplication())// Replicate as usualconststream=stack.replicate(true)stream.pipe(remoteStream).pipe(stream)This project is licensed under GNU AGPLv3
If you have any concerns or conflicts with this license, then please open an issue and state your case.