fluencelabs/fluence
Fluence is an open-source, decentralized cloud computing platform
repo name | fluencelabs/fluence |
repo link | https://github.com/fluencelabs/fluence |
homepage | https://fluence.dev |
language | Scala |
size (curr.) | 21075 kB |
stars (curr.) | 327 |
created | 2017-12-19 |
license | Apache License 2.0 |
What is Fluence?
Fluence is a decentralized database network that allows to deploy many existing first-class SQL/NoSQL/GraphQL databases such as SQLite or Redis into the decentralized environment. It will support many complex database operations, such as aggregate functions, joins, or stored procedures.
Fluence is built on top of Fluence Core – an efficient trustless computation platform that allows to achieve few seconds request processing latency and cost efficiency similar to traditional cloud computing. To run computations, Fluence uses a WebAssembly virtual machine, which allows to deploy into the decentralized environment applications written in multiple programming languages.
What is Fluence Core?
Fluence Core is essentially a general purpose backend engine for decentralized applications. Because of its cost efficiency, developers generally do not have to worry much about low-level code optimization. Existing software packages can be ported to Fluence as is, once they are compiled into WebAssembly.
As a showcase, we have prepared few example applications that can be launched on the Fluence network:
- Hello world is a basic demo application demonstrating Fluence SDK usage
- Llamadb is a port of an existing in-memory SQL database
- Tic-tac-toe is a basic perfect information multi-player game
- Dice game demonstrates how an RNG can be used to implement a simple gambling application
- Guess the Number is an invalid implementation of an imperfect information game (which cannot be launched on Fluence at the current moment)
- Streamr analytics is a simple analytics built on top of a blockchain-based data marketplace
How does Fluence Core work?
In order to reach low latency and high throughput, Fluence splits network nodes into two layers: the real-time processing layer and the batch validation layer.
The real-time processing layer is responsible for direct interaction with clients; the batch validation layer – for computation verification. In other words, real-time processing is the speed layer and batch validation is the security layer.
The real-time processing layer is able to promptly serve client requests, but provides only moderate security guarantees that returned responses are correct. Later, the batch validation layer additionally verifies returned responses, and if it is found that some of the responses were incorrect, offending real-time nodes lose their deposits.
The network also relies on Ethereum (as a secure metadata storage and dispute resolution layer) and Swarm/Filecoin/Arweave (as a data availability layer).
Check out the Fluence docs to learn more about the general Fluence Core architecture.
Project status
The project is undergoing a heavy development at the moment.
Check out the issue tracker to learn more about the current progress.
Features that were already rolled out:
+ Real-time processing layer: real-time clusters with built-in BFT consensus (Tendermint)
+ Secure metadata storage: real-time clusters state (Ethereum)
+ Arbitrary code execution: WebAssembly VM (Asmble)
+ SDK: frontend (JavaScript) and backend (Rust)
Features that have not been released yet:
– Batch validation layer: tx history verification
– Secure metadata storage: batch validation state, security deposits
– Dispute resolution layer: verification game
– Data availability layer: decentralized storage for tx history
While we are working hard to make Fluence bulletproof secure, you can already build and deploy applications to the Fluence devnet! Take a look at the quickstart to learn how to build and decentralize a simple Hello World app, and at the dice game tutorial to learn how to build more involved apps.
Resources
Contributing
You are welcome to contribute. At the current moment we don’t have detailed instructions on how to join development or which code guidelines to follow. However, you can expect more info to appear soon enough. In the meanwhile, check out the basic contributing rules.