Giter Site home page Giter Site logo

w3f-grants-archive / virto-node Goto Github PK

View Code? Open in Web Editor NEW

This project forked from virto-network/virto-node

0.0 0.0 0.0 2.12 MB

Virto Network blockchain node.

License: The Unlicense

Rust 94.90% Makefile 2.26% Dockerfile 0.77% Handlebars 2.07%

virto-node's Introduction

Virto Node Build Checks PRs Welcome

Virto Logo

Virto.Network, is the implementation of the Local Incentives Protocol, the decentralized marketplace infrastructure with local economic impact.

This repository contains the Virto node, a parachain for Polkadot that brings de-commerce and community management primitives to the ecosystem.
As part of our decentralized technology stack we tightly integrate with Matrix, the decentralized communications protocol and Valor our plugin runtime that allows the creation of high-level and convenient decentralizable APIs.

Running the parachain

virto is a parachain node, which means it needs to connect to a relay chain to finalize blocks. To ease the pain of setting up the different nodes required to test the network we provide a devnet.yml recipe for a multi-node local testnet that can be run with make run that also generates the required assets to on-board the network.

The devnet also spins up two Karura collators that can be onboarded to test cross-chain functionality.

๐Ÿ’ก Note that nodes are launched in the background. To debug their output you can use podman/docker to follow the logs of any node in the multichain set-up (e.g. podman logs -f devnet_virto_a). Once you are done make stop will take care of removing the nodes.

Local development

In case you make changes to the runtime and what to test them in the parachain setup you can make container to build and containerize the node with your latest changes. (โš ๏ธ at the moment the command will only work if your build environment is the same debian version as the Containerfile).

To test xcm asset transfer check vln-toolbox

Project Structure

A Substrate project such as this consists of a number of components that are spread across a few directories.

Node

A blockchain node is an application that allows users to participate in a blockchain network. Substrate-based blockchain nodes expose a number of capabilities:

  • Networking: Substrate nodes use the libp2p networking stack to allow the nodes in the network to communicate with one another.
  • Consensus: Blockchains must have a way to come to consensus on the state of the network. Substrate makes it possible to supply custom consensus engines and also ships with several consensus mechanisms that have been built on top of Web3 Foundation research.
  • RPC Server: A remote procedure call (RPC) server is used to interact with Substrate nodes.

There are several files in the node directory - take special note of the following:

  • chain_spec.rs: A chain specification is a source code file that defines a Substrate chain's initial (genesis) state. Chain specifications are useful for development and testing, and critical when architecting the launch of a production chain. Take note of the development_config and testnet_genesis functions, which are used to define the genesis state for the local development chain configuration. These functions identify some well-known accounts and use them to configure the blockchain's initial state.
  • service.rs: This file defines the node implementation. Take note of the libraries that this file imports and the names of the functions it invokes. In particular, there are references to consensus-related topics, such as the longest chain rule, the Aura block authoring mechanism and the GRANDPA finality gadget.

After the node has been built, refer to the embedded documentation to learn more about the capabilities and configuration parameters that it exposes:

./target/release/virto_node --help

Build

In the root directory run the following command to build the node without launching it:

make dev=yes

Then build the target release with the following command:

cargo build --release

Test

Use the following command to run tests:

cargo test

To run tests with benchmarks

cargo test --features runtime-benchmarks

Benchmark

Use the following command to run the benchmark, use the desired pallet name as required:

make benchmark pallet=<pallet_name>

To benchmark the payment pallet, run the command

make benchmark pallet=virto-payment

Runtime

In Substrate, the terms "runtime" and "state transition function" are analogous - they refer to the core logic of the blockchain that is responsible for validating blocks and executing the state changes they define. The Substrate project in this repository uses the FRAME framework to construct a blockchain runtime. FRAME allows runtime developers to declare domain-specific logic in modules called "pallets". At the heart of FRAME is a helpful macro language that makes it easy to create pallets and flexibly compose them to create blockchains that can address a variety of needs.

Review the FRAME runtime implementation included and note the following:

  • This file configures several pallets to include in the runtime. Each pallet configuration is defined by a code block that begins with impl $PALLET_NAME::Trait for Runtime.
  • The pallets are composed into a single runtime by way of the construct_runtime! macro, which is part of the core FRAME Support library.

Pallets

The runtime in this project is constructed using many FRAME pallets that ship with the core Substrate repository and custom ones defined in the pallets directory.

A FRAME pallet is compromised of a number of blockchain primitives:

  • Storage: FRAME defines a rich set of powerful storage abstractions that makes it easy to use Substrate's efficient key-value database to manage the evolving state of a blockchain.
  • Dispatchables: FRAME pallets define special types of functions that can be invoked (dispatched) from outside of the runtime in order to update its state.
  • Events: Substrate uses events to notify users of important changes in the runtime.
  • Errors: When a dispatchable fails, it returns an error.
  • Trait: The Trait configuration interface is used to define the types and parameters upon which a FRAME pallet depends.

virto-node's People

Contributors

c410-f3r avatar kenjipcx avatar mathewthecoder avatar olanod avatar stanly-johnson avatar stojanov-igor avatar takahser avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.