1 unstable release
0.2.0 | Sep 16, 2022 |
---|
#2 in #yagna
12KB
261 lines
Golem
Official Rust implementation of Golem. Golem is a network of nodes that implement the Golem Network protocol. We provide the default implementation of such a node in the form of the Golem daemon, Yagna.
A flexible, open-source platform for democratised access to digital resources.
Golem Network has officially gone on Ethereum Mainnet with the Beta I release in March 2021.
Golem democratizes society’s access to computing power by creating a decentralized platform where anyone can build a variety of applications, request computational resources and/or offer their idle systems in exchange for cryptocurrency tokens (GLM). The actors in this decentralized network can assume one of the three non-exclusive roles:
-
Requestor Has a need to use IT resources such as computation hardware. Those resources are purchased in the decentralized market. The actual usage of the resources is backed by Golem's decentralized infrastructure.
-
Provider Has IT resources available that can be shared with other actors in the network. Those resources are sold in the decentralized market.
-
Developer Builds applications to run for requestors on the network. Golem's potential goes much beyond a singular application. See Awesome Golem for just a taste of the various types of applications that can be built and run on Golem!
Documentation
For a more in-depth look at how Golem works, head over to our documentation.
Project Layout
- agent/provider - provider agent implementation based on core services.
- core - core services for the open computation marketplace.
- exe-unit - ExeUnit Supervisor - a common part of all runtimes for yagna.
- test-utils - some helpers for testing purposes
- utils - trash bin for all other stuff ;)
- docs - project documentation including analysis and specifications.
Public API
The public API rust binding with data model is in the ya-client repo.
High Level APIs
The public high-level API for Python is in yapapi repo and the JS/TS port is contained in the @golem-sdk/golem-js repo.
Runtimes
We call our runtime ExeUnit. As for now we support
- Light VM - QEMU-based ExeUnit.
- and WASM in two flavours:
- wasmtime - Wasmtime-based ExeUnit.
- emscripten - SpiderMonkey-based ExeUnit.
Other ExeUnit types are to come (see below).
Golem Beta Release(s)
Important milestones for Golem development were Beta I and most recent Beta II. With those releases we have delivered:
- MVP (minimum viable product), though not feature rich yet, it is usable for early adopters
- Clean and easy experience for new and existing users.
- Support for GLM payments (both L1 & L2 on Ethereum Mainnet)
- Production-ready and easy to maintain code base.
- Modular architecture with all the building blocks being replaceable.
- Small binaries (under 30Mb).
- Documentation and SDK for Golem app developers.
List of implemented and planned functionality
- Distributed computations
- Batching
- Services (PoC stage)
- Computational environment (aka ExeUnit)
- Wasm computation
- Light vm-s
- Docker on Linux (optional)
- SGX on Graphene (PoC stage)
- Payment platform
- Payments with GLM
- ERC20 token
- Layer 1 & Layer 2 transactions
- Payment matching (optional) (Ability for the invoice issuer to match the payment with Debit Note(s)/Invoice(s)).
- Transaction system
- Pay as you go(lem) (see more)
- Pay per task
- Pay for dev (optional)
- Network
- P2P (Hybrid P2P; in progress)
- Ability to work behind NAT (Relays; in progress)
- Verification
- Verification by redundancy (see also)
- No verification
- Verification by humans (optional)
Road ahead
We are actively working on improving Yagna and extending its functionality, check upcoming releases and other news on our blog.
Dependencies
~5–14MB
~168K SLoC