Blockless Functions is our first step to creating a decentralized serverless platform for fully trustless executions. With Blockless Functions, teams can focus on building the core business logic instead of getting distracted by maintaining and operating a community-based infrastructure.
The vision for Blockless is to create a future where anyone can create trustless yet performant applications with ease. The scope of these applications is not limited to the on-chain realm as of today. Here at Blockless, we ask ourselves: what does it take for web3 to grow into something that can fully replace web2?
To offer the services we enjoy today in a trustless way, using blockchains is not enough. Though blockchains are fantastic consensus engines, they are not optimized for supporting every service we need in the real world. For instance, for machine learning, web hosting, VPN, content streaming, messaging, etc., blockchains are not the most suitable infrastructure.
Instead, we need specialized solutions for trustless storage, communication, and execution. An existing example would be IPFS, which occupies the trustless storage segment.
Blockless, on the other hand, is addressing the trustless execution segment. Blockless Functions is our first step towards a trustless future, and in the following sections we will talk about:
A. Design logic and key features
B. How to navigate through Private Alpha
C. What to expect going forward
A. Design logic and key features
Before we go into the actual design of Blockless Functions, here is some context:
The initial and most basic motivation for creating Blockless was to lower the entry barrier for developers and entrepreneurs to create complex P2P and trustless applications. The crypto industry often refers to these as “decentralized off-chain applications.” We believe the functionalities and services these off-chain applications offer are the keys to creating a trustless yet user-friendly future.
The wish was to have a global pool of nodes for off-chain applications to directly pick and use (finding the most suitable devices/nodes and deploying functions/services on top of them for trustless execution). This way, teams can focus on building the core business logic instead of getting distracted by maintaining and operating a community-based infrastructure.
Blockless Functions is our first step in productizing this idea. To make this a reality, we created a framework that allows uber-like automated match-making between developers and suitable node resources, as well as for nodes to safely execute any arbitrary program.
Blockless Functions has a few key and fundamental characteristics:
1. Serverless user experience
As a platform built for developers, we aim to make the development experience as easy as possible. When a developer comes to Blockless Functions, he/she will only do the following:
- Upload the code he wishes to deploy
- Upload a manifest file that defines the minimum node count, hardware resource requirements, geolocation, node interaction scheme, etc.
- Make a deposit in the Blockless token (BLS) for payments
The match-making is done automatically by our orchestration layer — a Cosmos chain that keeps all Service Level Agreements (SLAs) and serves as a consensus engine for trustless task scheduling and load balancing.
For the developer, he/she will never have to manually interact with individual devices.
2. Multi-language support
To allow devices under the Blockless platform to execute any code safely, we’ve engineered a WASM runtime environment based on Tokio and Wasmtime.
The runtime environment can run WASI bytecode bundles compiled from Rust, AssemblyScript, TinyGo, and C/C++. This means the developer can build in his/her favorite languages and won’t need to learn anything new.
3. Pay as you go
This implies multiple features. One is hands-free horizontal scaling. If a function you deploy is getting more requests (from user growth), the platform automatically finds more nodes for you.
The other implication is that nodes under the Blockless platform are being used very efficiently. The timeout for any function is set to 10 minutes, and the runtime will be shut down once the request is completed. This means a device in the Blockless network will likely contribute to tens if not hundreds of applications per day, instead of getting locked up on one application even if there is no incoming request.
The WASM-based runtime environment is a secure sandbox that isolates the deployed program from the host machine environment. The software being executed within the sandbox won’t be able to interact with the wider host machine, and the node runner also has no knowledge of what happens in this sandbox.
5. Convenient SDK
For each supported programming language, we provide an SDK to enhance the development experience. Currently, APIs in the Blockless SDK include:
- Blockless Functions (allowing developers to invoke other Functions without having to send HTTP requests with authentication credentials over the internet)
- AWS S3
B. How to navigate through Private Alpha
Deploying Function with Blockless Console
If you are not yet whitelisted, please reach out via our Telegram and Discord channel. If you already have Private Alpha access, go to the Blockless Console and log in using your registered Web3 address. We currently support Keplr Wallet (Cosmos), MetaMask, and Martian Wallet (Aptos).
Blockless Console Wallet Connect Page
Select the Functions Tab on the left and click the + Create function button on the top right corner. This will take you to the Function Creation page, where you can connect your GitHub account and deploy the function by choosing a repository or selecting one of the starter templates and deploying directly.
Blockless Functions Overview
For the quick start guide, we will use the Hello World template button on the bottom and deploy a function that will return a JSON file with a “Hello World” message.
Function Creation Page
After clicking, when the loading is complete, your first function is deployed to the Blockless network and is running on the decentralized node network. Congratulations on deploying your first decentralized function! You should see your deployed function on the Functions Overview page.
Functions Overview Page with the newly deployed function
By clicking the function, you will jump to the Function Details page where you can view the function status and change the function settings.
Function Details Page
You can invoke your function with the invocation URL. Here, the function returns a “Hello World” message in JSON format.
Returned Hello World Message
Going back to the Functions Detail page, you can go to the function’s settings and change the function name. Alternatively, you can choose to either stop or delete the function. Here, we changed the automatically generated function name from electric_cyan_cuckoo_1cc1 to my-first-function.
Changing the Function Name
You can see the reflected name change on the Functions Detail page.
Finally, let’s go back to the function’s settings and delete this function. You can also choose to stop the deployment, where the function will still show up in your console but will be removed from the Blockless Workers.
Going back to the Functions Overview page, we indeed confirm that our my-first-function is deleted.
In the above, we illustrate a guideline for testing Blockless Functions with our developer Console. Alternatively, you can also use our CLI to play with it.
C. What to expect going forward
The end goal for Blockless is to create a general purpose and trustless execution platform. Below are some of the features and products we will push out in the coming months.
One upcoming feature for Blockless Functions is verifiable execution. In a trustless environment, typically we can’t really know what the nodes are doing. Instead, we only see the execution results. This is why in many cases we need nodes to aggregate the results and conduct consensus. In Blockless, this changes with zkWASM.
The implementation of zkWASM is a collaborative effort between the Blockless team and a (yet-to-be-announced) strategic partner. zkWASM allows nodes in the Blockless network to generate a zk-SNARK proof of them executing a “.wasm” file. This proof can be uploaded to any data availability layer for public verification.
More details will be announced soon.
This is a web development framework that we are creating based on Blockless Functions. With Blockless Site, developers can achieve trustless dynamic web hosting with ease. At Blockless we feel obligated to make this feature available to everyone as soon as possible, as censorship-resistant web hosting is such an invaluable piece toward a free web.
See here for a Demo.
As of now, nodes in the Blockless network can only contribute CPU and RAM resources. However, the team is working hard to launch GPU support before mainnet release.
Blockless App Engine
As we keep perfecting Blockless Functions to lower the entry barrier for teams to create a trustless future, we also realize not all applications are suitable for serverless functions.
For instance, it would be rather difficult for one to migrate an existing full-scale application onto Blockless via Blockless Functions, as she will have to reorganize everything into a number of functions. Also, as mentioned, all functions have a timeout limit of 10 mins, which would create problems for long-running processes. For a holistic analysis, Cloudflare does a great job of describing who should and who shouldn’t adapt serverless functions.
Blockless App Engine is engineered to address the need of this group of developers. It is an x86 machine emulation with Alpine Linux OS within our WASM runtime environment, allowing developers to throw in any program that they can normally run on a server and have that executed in a trustless way.
Blockless will launch the Public Beta early next year. Before that, we will introduce useful features and continue to improve our core products.
Thanks for staying with us and investing your time in reading this long article. We are so glad to have you here on this road toward a trustless future. See you on the other side.
Blockless is a WASM-based, customizable execution layer that powers decentralized serverless applications.
As a permissionless network, Blockless allows network participants to contribute with a variety of hardware resources, ranging from Android devices to high-performance servers. Developers can build on Blockless with unparalleled scale, reliability, and security.