|
| 1 | +# BTF Engine |
| 2 | + |
| 3 | +BTFE is a BFT consensus solution. |
| 4 | + |
| 5 | +A group of peers maintains a ledger. |
| 6 | + |
| 7 | +### BFTE vs Fedimint |
| 8 | + |
| 9 | +This project aims at the very similar very-long term goals as [fedimint][fedimint], |
| 10 | +but having benefit of years of extra experience, and allowing focus |
| 11 | +on parts and goals that the author (dpc) finds most promising and interesting. |
| 12 | + |
| 13 | +[fedimint]: http://github.com/fedimint/fedimint |
| 14 | + |
| 15 | + |
| 16 | +Fedimint started as a Bitcoin Ecash Mint solution, with a side-goal/need |
| 17 | +of building a general purpose consensus engine. BFTE stars with |
| 18 | +a goal of being a good general purpose consensus engine most, with ability |
| 19 | +to support Bitcoin/cryptography applications like Ecash Mints "maybe one |
| 20 | +day". |
| 21 | + |
| 22 | +Things like Bitcoin and Lightning Network support are a huge time sinks, |
| 23 | +largely still in development applications and ecosystems, with a huge |
| 24 | +expectations on stability and robustness, and other barriers to becoming |
| 25 | +widely deployed. |
| 26 | + |
| 27 | +So, no dealing with 3 versions of LN nodes, each with it's own stupid |
| 28 | +problems. |
| 29 | + |
| 30 | +BFTE can just let Fedimint chart these difficult waters, while only |
| 31 | +ensuring the general architecture can be eventually supported, while |
| 32 | +building less mission-critical things, like: |
| 33 | + |
| 34 | +* CI system coordination, |
| 35 | +* review systems, |
| 36 | +* etc. |
| 37 | + |
| 38 | +Similarly, Fedimint's ambition was reaching broad Bitcoin end user appeal. |
| 39 | +This requires a lot of effort: building end user clients including web and |
| 40 | +mobile apps. While years of working in Bitcoin space thought me: There is |
| 41 | +no market for self-custodial Bitcoin solutions. The UX is clunky, userbase |
| 42 | +interested in it small, and amount of money they are willing to pay small. |
| 43 | + |
| 44 | +By ignoring all these ambitions, BFTE can focus first on honing the primary |
| 45 | +goal: becoming good general purpose modular consensus engine. |
| 46 | + |
| 47 | +So (at least in near to medium term future): |
| 48 | + |
| 49 | +No support for anything that isn't Linux. If you can't install Linux |
| 50 | +you don't deserve good stuff, and you probably don't value your freedom |
| 51 | +much anyway, so you have no use for censorship resistant software. |
| 52 | +Go pay someone for dealing with your stupid Windows or MacOS, Android, MacOS, |
| 53 | +and especially your stupid fucking XCode development ecosystem. |
| 54 | + |
| 55 | +No WASM support. Fuck WASM, that shit is just yet another, even more difficult |
| 56 | +to run platform that is ultimately hostile to distribted, censorship |
| 57 | +resistant applications. |
| 58 | + |
| 59 | +You'll get a Linux daemon that you can run on a server, or a desktop, |
| 60 | +with a built-in web interface, and you'll be happy. |
| 61 | + |
| 62 | +Other than this "focus", BFTE tries to steal and borrow as much as it can |
| 63 | +from Fedimint. |
| 64 | + |
| 65 | +### Design (Ideas): |
| 66 | + |
| 67 | +In BFTE *everything* is part of the consensus. |
| 68 | + |
| 69 | +A BFTE node stars either by becoming non-voting follower of existing |
| 70 | +consensus, or starts a fresh consensus with itself a single-peer consensus. |
| 71 | + |
| 72 | +Adding and removing peers, changes to configuration like adding new modules, |
| 73 | +software upgrades, etc. are all implemented by consensus items agreed on |
| 74 | +and published on a shared ledger. |
| 75 | + |
| 76 | +A simple consensus algorithm (Simplex) is used to perfectly match |
| 77 | +the needs of BFTE. |
| 78 | + |
| 79 | + |
| 80 | +Simplicity is achieved through interactions between very few well |
| 81 | +thought general purpose pritmivites: |
| 82 | + |
| 83 | +* consensus |
| 84 | +* module |
| 85 | + |
| 86 | + |
| 87 | + |
| 88 | + |
| 89 | +No client APIs, all nodes follow consensus, even if they don't participate in it. |
| 90 | +Maintaining APIs, and client side state machines is just duplicating effort. |
| 91 | +The mutable part of the consensus state is typically small anyway and |
| 92 | +"clients" might maybe throw away the bulk data that they don't need anyway, |
| 93 | +as they not validate anything |
| 94 | + |
| 95 | +DKGs can just happen as a part of consensus. Mint module should support |
| 96 | +multiple keysets , and generating new ones on demand. |
| 97 | + |
| 98 | +Consensus items should be just module specific inputs/outputs, signed by the |
| 99 | +node itself. This allows creating transactions |
| 100 | + |
| 101 | +Effect system as the only means of inter-module interactions. Modules can process |
| 102 | +effects published by other modules. Process input/output. |
| 103 | + |
| 104 | + |
| 105 | + |
| 106 | +### License |
| 107 | + |
| 108 | +MPLE is licensed under MIT. |
0 commit comments