Glossary
General terms
Fluence Network
Fluence network is an open, permissionless network of Fluence protocol-compliant Peers. You can use it to make Deployments, execute and choreograph Cloudless Functions to perform your computations.
kras
is the main Fluence Networkdar
is the non-incentivized test network that is expected to follow exactly the same protocol askras
Fluence Protocol
Fluence Protocol is an open, off-chain protocol that matches resource providers and consumers to enable secure, verifiable decentralized serverless compute. The protocol is defined by a set of behaviors of Peers, on top of Libp2p and Aquamarine, that enables emergent abilities of the Fluence network: to resolve, serve, execute and verify Cloudless Functions.
Fluence Blockchain
Fluence Blockchain is a L2/L3 application-specific EVM-compatible blockchain dedicated to the Compute Marketplace, which includes both Deployments and Capacity Commitments. As of now, Fluence Blockchain is bridged with Filecoin and Ethereum Mainnets.
Fluence CLI
Fluence CLI is the main entry point into a Fluence App lifecycle:
- Develop or reuse Compute Functions
- Develop or reuse distributed Cloudless Functions to run in the Fluence Network
- Configure Cloudless Scheduler to run Cloudless Functions
- Prepare Cloudless Distributive
- Use Compute Marketplace, make a Cloudless Deployment
- Run, use and upgrade your Fluence App
Fluence App
Fluence App is the actual end-user application that includes Cloudless Deployment but may be paired with a Gateway to call Cloudless Functions from HTTP endpoints and enable HTTP event listeners, browser application and other integration.
Fluence JS Client
A JS library that enables full-fledged, bi-directional interactions between JS applications (both node.js and browser-based, Electron.js is also an option) and Fluence Network.
Fluence JS Client is embedded into Fluence CLI.
Cloudless Function
Cloudless Function is a piece of useful compute work defined by developer. It contains one or more Compute Functions and an Aqua script to orchestrate them by connecting outputs and inputs, denoting parallelism and defining success and failure.
With the help of Aqua, a developer can implement redundancy and fault-tolerance policies for their Cloudless Functions, facilitate parallelism across different machines, pass data from peer to peer, and much more.
Cloudless Deployment
Cloudless Deployment is a Compute Function and/or Cloudless Scheduler configured, deployed and ready for use. It is an instantiated Cloudless Distributive, managed by a Deal, and running on Workers.
Cloudless Distributive
Prototype for a Cloudless Deployment. Includes:
- Worker Definition, that consists of:
- Compute Functions binary sources (in form of WASM modules for Marine Services, and respective resources and module linking configuration)
- Cloudless Scheduler for Cloudless Functions (in form of compiled AIR files), with trigger configuration
- Cloudless Deployment configuration and required resources, such as effectors or replication factor, i.e., the desired size and provider diversity of a Subnet.
Cloudless Distributive is structured with IPLD resulting in a unique CID and uploaded to network storage for future content-addressable retrieval.
Cloudless Scheduler
Cloudless Scheduler triggers a Cloudless Function without client interaction, based on events. Implemented as a part of Cloudless Deployment. See Spells for low level details.
Trigger types a Scheduler is capable to handle:
- time-based, such as cronjobs
- event-based, such as chain events
Proofs
Fluence Protocol enables a set of Proofs that drives its cryptonomic model.
Proof of Capacity
Proof that a compute peer (Host) has certain capacity allocated and available for Cloudless Deployments. Every Host must provide Proofs of Capacity in order to participate in Deployments.
Proofs generation is managed by the Capacity Commitment Prover (CCP).
Proof of Processing
Proof that a Cloudless Function was executed as described – in a distributed manner.
Conducted and checked by AquaVM during execution on every step.
See Golden Particles to learn more about the use of Proof of Processing to facilitate verifiable deal settlement, i.e. payment for Cloudless Function executions.
Proof of Execution
Proof of Compute Function: an attestation that a computation of a single function, running on a Peer, was done correctly.
PoE is pluggable, so that different workloads can benefit from the decentralization of compute. The options might include:
- zero knowledge proofs (ZKP)
- Trusted Execution Environments (TEE)
- Verification of cryptographic function execution for MPC
- Repeated execution of pure code
- Consensus for external effects, Managed Effects
- and more
Distributed
AIR
Aqua Intermediate Representation (AIR) results from compiling your Aqua scripts. AIR is used by the AquaVMs deployed on Fluence Peers to execute the workflows and Compute Function compositions specified in your Aqua scripts.
AIR contains a very limited set of instructions, like (seq A B)
or (par A B)
for control flow, and (call peerId (serviceId functionName) [...args] exportVariable)
to execute compute operations using Marine services or Peer API.
Aqua
Aqua is Fluence’s language, designed especially to program choreography of distributed Cloudless Functions and orchestration of local functions. Aqua describes distributed control flow in developer-friendly terms, and delegates computations to Compute Functions on particular Peers. Aqua follows the structural typing paradigm to simplify composition and reuse of different libraries and Cloudless Functions. Read more in the Aqua Book.
AquaVM
Interprets Aqua IR to orchestrate local function calls or choreograph Cloudless Functions. Checks and provides all the Cloudless Function proofs.
AquaVM is a State Machine that takes a Particle received by a particular Peer, interprets an AIR script of this Particle along with the Particle Data, and gives the Peer a set of commands: what Compute Functions to call locally (if any), to what Peers to send this Particle to (if any), and how the Particle Data should be updated (if should).
AquaVM enables Proof of Processing by also running on-chain to verify Particles, identify the Deals involved, and distribute the rewards.
Aquamarine
Aquamarine is a technology stack that enables the off-chain Fluence Protocol: Aqua with AIR and AquaVM, and Marine. In other words, Aquamarine is Fluence without incentives and system services.
Particle
A Particle is a network package that forms a single-use software-defined network (SDN) for a single request of a single AIR script.
Every Particle contains an immutable header and a mutable body. The immutable header includes an AIR script and some metadata including the initiator's signature; the mutable body contains the results of compute function calls triggered by the script execution along with the signatures of involved Peers.
Particle Data
Particle data is an audit log of the distributed execution flow of a Particle; the mutable part of the Particle that contains Compute Function responses and Peer signatures.
Particle data has a CRDT-like format capable to handle fork-join behavior resulting in response data converging in a (eventually) deterministic way. Fork-join behavior in Aqua arises when the same Particle is executed in parallel on one or more peers.
Pi-calculus
Pi-calculus, aka π-calculus, is a process calculus that is an extension of lambda calculus that describes the parallel execution of processes for dynamic network configurations.
The AIR and AquaVM execution model is built on fundamental principles of pi-calculus.
Spell
A Spell is a single-peer representation of Cloudless Deployment used by the Cloudless Scheduler. It consists of a special Marine Service and an AIR script.
A Spell script is executed periodically or based on an event to run a predefined Cloudless Functions.
TODO: See Spell docs here.
Topology
Here: exact way the execution of Cloudless Function flows from Peer to Peer, including sequential transitions, fork/join convergent executions, and more.
Topology is expressed and handled with the help of Aqua.
Compute
Nox
Nox is the reference implementation of a fully Fluence Protocol-compliant Peer capable to serve Cloudless Deployments. Nox serves as a Host for many Workers, where each Worker is devoted to a distinct Deployment.
System Services
Marine Services that are required for a Fluence Peer to operate according to the Fluence Protocol, e.g. resolve Subnets, make Deployments, maintain Workers.
Part of Nox.
Builtin Services
Low-level Compute Functions implemented in a peer’s native language, ie. Rust for Nox. Builtins allow the protocol-compliant execution of Aqua, such a math and string operators. See more in aqua-lib repo.
Marine
Marine is a general purpose Wasm runtime, intended to execute Compute Functionss in form of linked Wasm Modules (aka Services) on a Peer.
It is the main way to express computations in the Fluence Protocol.
Developers have three ways to define computations:
- Write and use Marine modules to build a Service
- Write and use Marine effector modules to access an external effect, e.g. binary or API
- Implement computations in Fluence Peer's native language, which cannot be a part of a Cloudless Deployment
With Marine, computations are portable and safe for the Provider.
Marine Service
Service is a virtual construct combining one or more linked Marine modules, one of them being a Facade Module, and exposing one or more Compute Functions via Webassembly IT.
Service:
- Can be called from Aqua as a part of Cloudless Function
- May be a Marine service, in this case it's a set of linked Modules
- May be implemented as a Peer native functionality, see Builtins as an example. This includes JavaScript callbacks provided to Fluence JS Client
Service is identified by a Service ID that's bound to the Peer ID that provides this service.
Service exposes one or more Compute Functions and a developer needs to provide peer id, service id, and function name to invoke the function.
AIR instructions is the only legitimate way in the Fluence protocol to call a service function. For a developer, it entails using Aqua language and Fluence CLI.
Marine SDK
Marine SDK is a set of tools that help developers write and compile Rust code as Marine modules and Services.
Marine JS
Implementation of Marine running on JS. This includes support for Marine SDK and Module Linking. Only Pure module can run in JS Marine.
Marine Module
Marine Module is a single .wasm file compiled with Wasm IT support, e.g., using Rust language with the Marine SDK.
Module Linking
Modules can use each other using the shared nothing linking scheme.
Pure Module
Module with no external effects (including WASI) that takes only inputs and maybe an internal sandboxed state, and produces new state and outputs. May have (foreign function) interface declarations for other modules via Module Linking.
Wasi Module
A Marine Module that uses basic WASI effects such as access to time and file system.
Facade Module
A Module, that is the only module accessible from the outside – it constitutes the API of a Service exposing a set of Compute Function declarations.
For modules that are intended to be shared as an API, developers often need to write a Facade module to protect internal APIs from unauthorized access, enforce business-invariants, etc.
Webassembly (Wasm)
Webassembly is a binary instruction format for a stack-based virtual machine. Wasm is intended to provide a memory-safe, sandboxed execution environment with a flexible set of settings, such as memory size and allowed imports. Multiple languages, such as Rust, C/C++ or tinyGo, support the Wasm compile target.
Fluence provides a Rust SDK but supports any compiled Wasm module following the Module ABI conventions.
Webassembly IT
Webassembly Interface Types (Wasm IT, WIT) is a part of the Component model proposal that allows using complex types, like strings, structs, enums and arrays, in a Wasm module's API.
WASI
WASI stands for WebAssembly System Interface. It's an API that provides access to several OS-like features defining a standardized set of POSIX-like imports to access the OS. It has integrated capability-based security, extending WebAssembly's characteristic sandboxing to include I/O.
Managed Effects
Managed Effects is an architectural approach that addresses the following contradiction:
- Compute without effects is useless
- Compute with effects might be dangerous
With Managed Effects, every effect is accessed only with an Effector Module. Effector Module is audited by the community to check that its API is useful for developers, and its effects are safe for Compute Providers.
Compute Providers whitelist only the known Effector Modules and forbid effects in any other module. If some Effector Module requires Provider to have certain capabilities, like locally deployed service or installed binary, it is the Provider's responsibility to ensure the capabilities are available.
Developer can access this effect safely using Module Linking.
Effector Module
A Marine Module that implements Managed Effects providing access to an Effect in a safe and useful way. An Effector is what a developer can use via Module Linking.
Effector modules have a special section in their config that describes binary imports, socket imports, or similar things.
Effect
What an Effector Module actually executes on the host system and is external to Marine, such as curl, IPFS, Ceramic or websocket.
Mounted Binary
A Mounted Binary is a special interface that provides an effector module the capability to call any binary, hosted by a peer, with the provided set of arguments to obtain a result. It makes it possible to integrate almost any other software (such as IPFS, Ceramic, and databases) in the Fluence ecosystem.
Particle File Vault
Particle File Vault is a temporary folder that is created on the Peer for every incoming Particle and removed when the Particle expires. All the services within this Peer have access to this folder.
Particle File Vault is expected to be used to pass data between Compute Functions (distributed in the form of Marine Services) within a single AIR script, making them more composable and avoiding revealing this data to other Peers involved into this Particle's execution, which could happen if the data is returned as a plain text.
Compute Function
An individual computational action, executed on a single peer. Marine Services is the default and preferred way to run Compute Functions. Other options are builtins, and native code, e.g. Javascript callbacks for JS client.
Compute Unit
Smallest divisible compute capacity providers allocate and stake to the Marketplace and available to allocate to a Worker. Proved by Proof of Capacity as a part of Capacity Commitment. Every Worker has exactly this amount of resources.
Tetraplet
Tetraplet is a data structure describing the origin of an argument to a function call. It contains four fields:
peer_id
service_id
function_name
functor
Tetraplets are the means to check and enforce distributed security invariants of a function by putting restrictions on its arguments, e.g.: the argument “is_authorized” must be provided by a function “check_auth” from “security” Compute Function run on the same Peer. Both Marine SDK and Fluence JS Client provides access to tetraplets.
Network
Peer
A Fluence Peer is a node in the Fluence Network, which behaves according to the Fluence protocol, therefore hosts and executes general purpose Compute Functions, thus providing users cloudless experience.
Fluence reference peers are comprised of the following components:
- Libp2p to manage connection pool
- A pool of AquaVM processes to handle Particles
- A pool of Marine Services ready to be called from these Particles
- A scheduler for Spells
- A pool of Workers to logically isolate Marine Services and Spells for security and locked resource availability
Fluence peers are identified by an unique Peer ID derived from the Peer's Public Key.
PeerId
Logical address of a segregated Compute Functions execution environment. It is derived from a Public key and used to verify a Peer’s signatures, which itself is a part of Proof of Processing verified by AquaVM for every step of a Cloudless Function.
Host
A Fluence Peer that participates in Fluence’s Kademlia network. Nox is the reference peer implementation.
Hosts are capable to act as Relays for Workers and Clients.
Host Peer ID can always be accessed from Aqua.
Deployment
Worker
A single instance of a Cloudless Deployment: Compute Unit allocated for Compute Functions in form of Marine Services and Cloudless Scheduler in form of Spells.
So Cloudless Deployment forms or many Workers, each having the same code installed, the same behavior expected.
A Worker is a part of a Peer's resources that, together with other Workers, constitutes a Subnet, handles the Deal, and isolates some resources. It has its own keypair and Peer ID.
Worker Definition
A Worker Definition is a transportable deployment configuration of a Worker. It is built with the help of Fluence CLI, and used by Nox to deploy and update a Worker. It is part of Cloudless Distributive and registered in Deals.
Consists of:
- Compute Functions binary sources (in form of WASM modules for Marine Services, and respective resources and module linking configuration)
- Scheduled Cloudless Functions (in form of compiled AIR files) with trigger configurations
Subnet
A set of all Workers, instantiated from an individual Cloudless Deployment and interconnected by runtime communication, which serves to provide redundancy, durability, fault tolerance, load balancing and better security of Cloudless Function' distributed execution.
Gateway
A HTTP-facing Fluence Client Peer that is capable of running Cloudless Functions based on incoming requests.
TODO See this repo for more.
Init Peer
The Peer that initiates a Cloudless Function by creating a Particle and sending it over Fluence Protocol.
Init Peer ID can always be accessed from Aqua or via the Marine SDK.
Client (peer)
A Fluence Peer connected to a Relay but is not participating in the Fluence Kademlia network, i.e., not a Host. Most likely a running Fluence JS Client (browser, CLI).
Client peers, as well as Workers, cannot be discovered using their respective PeerIds. Developer needs to discover what Host or Relay is advertized to Kademlia network, and use Aqua to ensure the right path is used.
Relay
A Host, that participates in serving Cloudless Functions by providing its advanced connectivity capabilities, which includes:
- Ability of a Host to send messages internally to hosted Workers
- Ability of a Host to send messages to connected Client Peers
To execute code on a Peer that's behind a Relay, e.g., if using a web browser or behind a NAT, use the on peer via relay:
construct available in Aqua.
Compute Marketplace
The Fluence's Compute Marketplace is an on-chain institution comprised of a set of smart contracts that maintains provider offers to sell compute capacity, accepts developer offers to purchase compute capacity and attempts to match developer offers with suitable provider offers in a trustless manner. A successful match results in a Deal.
Deal
A Deal governs capacity supply and demand among providers and developers over a set of attributes including capacity pricing and deal duration. Deals are the result of the Compute Marketplace matching provider and developer offers. Moreover, Deals contain a content-addressable reference (CID) of Cloudless Distributive that specify off-chain subnets in terms of topology, Scheduled Cloudless Functions, Compute Functions, and initial data.
Hence, a Deal is the necessary condition for the trustless provisioning, execution and billing of Fluence Cloudless Compute.
Provider
An organization that participates in the Fluence Protocol by providing hardware resources for use.
Matching
The process of mapping a Developer Offer with its requirements and Provider Offers with its capabilities, resulting in assigning Worker allocations on particular Hosts, as described inside a Deal.
Offer
Provider Offer
Provider Offer is a description of capabilities. In order to participate in the Matching process, Offer must present a Capacity Commitment and send Proofs of Capacity, so only PoC providers are eligible to provide capacity to the network, staking is not enough.
A provider offer includes the CU capacity, provider metadata, such as data center attributes, desired revenue, etc.
Developer Offer
A Cloudless Distributive, combined with the capacity selection criteria, such as payment offer, data center type, duration, payment offer, etc., and an escrow payment.
Capacity Commitment
A provider’s capacity commitment to the network backed by Proofs Of Capacity and eligible for capacity rewards.
A provider can seamlessly switch their resource allocation between Proof of Capacity and fulfilling Deals.
Capacity Commitment Prover
A piece of software, augmenting each Nox peer, tasked with generating Proofs of Capacity for that Nox’s hardware zone.
Golden Particle
Golden Particle is a Particle at a certain step of its life time, when its Particle Data contains a solution of a cryptographic puzzle, so it can act as a winning lottery ticket to distribute the rewards among all the participants contributing to the execution of this Particle.
A Golden Particle represents sampled Cloudless Function executions used by the Proof of Processing for reward distribution.