Linera is a decentralized blockchain infrastructure designed for highly scalable, low-latency Web3 applications.
Visit our developer page and read our whitepaper to learn more about the Linera protocol.
The main crates and directories of this repository can be summarized as follows: (listed from low to high levels in the dependency graph)
-
linera-baseBase definitions, including cryptography. -
linera-versionA library to manage version infos in binaries and services. -
linera-viewsA library mapping complex data structures onto a key-value store. The corresponding procedural macros are implemented inlinera-views-derive. -
linera-executionPersistent data and the corresponding logics for runtime and execution of Linera applications. -
linera-chainPersistent data and the corresponding logics for chains of blocks, certificates, and cross-chain messaging. -
linera-storageDefines the storage abstractions for the protocol on top oflinera-chain. -
linera-coreThe core Linera protocol, including client and server logic, node synchronization, etc. -
linera-rpcDefines the data-type for RPC messages (currently all client ↔ proxy ↔ chain ↔ chain interactions), and track the corresponding data schemas. -
linera-clientLibrary for writing Linera clients. Used for the command-line client and the node service inlinera-service, as well as the Web client inlinera-web. -
linera-serviceExecutable for clients (aka CLI wallets), proxy (aka validator frontend) and servers. -
linera-sdkThe library to develop Linera applications written in Rust for the Wasm virtual machine. The corresponding procedural macros are implemented inlinera-sdk-derive. -
examplesExamples of Linera applications written in Rust.
The following commands set up a local test network and run some transfers between the microchains owned by a single wallet.
# Make sure to compile the Linera binaries and add them in the $PATH.
# cargo build -p linera-storage-service -p linera-service --bins --features storage-service
export PATH="$PWD/target/debug:$PATH"
# Import the optional helper function `linera_spawn_and_read_wallet_variables`.
source /dev/stdin <<<"$(linera net helper 2>/dev/null)"
# Run a local test network with the default parameters and a number of microchains
# owned by the default wallet. (The helper function `linera_spawn_and_read_wallet_variables`
# is used to set the two environment variables LINERA_{WALLET,STORAGE}.)
linera_spawn_and_read_wallet_variables \
linera net up
# Print the set of validators.
linera query-validators
# Query the chain balance of some of the chains.
CHAIN1="e476187f6ddfeb9d588c7b45d3df334d5501d6499b3f9ad5595cae86cce16a65"
CHAIN2="69705f85ac4c9fef6c02b4d83426aaaf05154c645ec1c61665f8e450f0468bc0"
linera query-balance "$CHAIN1"
linera query-balance "$CHAIN2"
# Transfer 10 units then 5 back
linera transfer 10 --from "$CHAIN1" --to "$CHAIN2"
linera transfer 5 --from "$CHAIN2" --to "$CHAIN1"
# Query balances again
linera query-balance "$CHAIN1"
linera query-balance "$CHAIN2"More complex examples may be found in our developer manual as well as the example applications in this repository.