Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gr0vity-dev/nano-local

Spin up your own local nano network with a genesis account and multiple reps
https://github.com/gr0vity-dev/nano-local

Last synced: 2 months ago
JSON representation

Spin up your own local nano network with a genesis account and multiple reps

Awesome Lists containing this project

README

        

# nano-local

This project aims to easily spin up custom [nano-currency](https://nano.org) network on your local computer.
The default config spins up a network 4 node : 1 genesis and 3 voting nodes of which each holds 33.3% of the total vote weight.
Each node comes with their rpc and websocket endpoint enabled.

All configuration is done inside the config file : `nanolocal/nl_config.toml`
Many additional services can be enabled :
- nanolooker
- nanoNodeMonitor
- nano-vote-visualizer
- nanoticker
A test-suite with some basic network- and block propagation checks can be run after having initialised the network.

## prerequisites

* python3.7
* docker
* docker-compose (if you use docker-compose v1.xx try adding --compose_version=1 flag)

## Quickstart :

#### Create a virtual python environment with all dependencies :

$ ./setup_python_venv.sh

#### Spin up a network :

| Action | Code | Description |
| :---------- |:--------------------------------------------- | -----|
| create |$ ./nl_run.py create | Create folders and node config |
| start |$ ./nl_run.py start | Start all nodes and services (optional flag --build = true rebuilds docker containers)|
| init |$ ./nl_run.py init | Create Epochs Canary Burn and Vote weight distribution |
| test |$ ./nl_run.py test | runs tests from [testcase] section of nl_config.toml |
| pytest |$ ./nl_run.py pytest | runs tests from [testcase] section of nl_config.toml |
| stop |$ ./nl_run.py stop | Stop all nodes and services |
| stop_nodes |$ ./nl_run.py stop_nodes | Stop nodes only |
| restart |$ ./nl_run.py restart | Restart nodes only |
| restart_wait_sync |$ ./nl_run.py restart_wait_sync | Restart nodes until 100% of blocks are confirmed |
| reset |$ ./nl_run.py reset | Delete all blocks except genesis block by removing data.ldb from all nodes |
| destroy |$ ./nl_run.py destroy | Remove all nodes and delte virtaul environment |

#### Query nodes :

Each node can be queried via RPC (see the [official documentation](https://docs.nano.org/commands/rpc-protocol/) )

| Node | RPC | Websocket |
| :---------- |:-------------------------- | -----------------------|
| nl_genesis |http://127.0.0.1:45000 | ws://127.0.0.1:47000 |
| nl_pr1 |http://127.0.0.1:45001 | ws://127.0.0.1:47001 |
| nl_pr2 |http://127.0.0.1:45002 | ws://127.0.0.1:47002 |
| nl_pr3 |http://127.0.0.1:45003 | ws://127.0.0.1:47003 |

#### Optional : Configure the network :

nl_config.toml define all aspects of the network : genesis account, burn_amount, number of nodes, versions,...

You can enable various services :

| Service | Code | Description |
| :----------- |:----------| -----|
| remote_address | remote_address='127.0.0.1' | server address inside your LAN (localhost by default) |
| [nanolooker](https://github.com/running-coder/nanolooker) | nanolooker_enable = true | Available at http://{remote_address}:42000 |
| [nano-vote-visualizer](https://github.com/numsu/nano-vote-visualizer) | nanovotevisu_enable = true | Available at http://{remote_address}:42001 |
| [nanoticker](https://github.com/Joohansson/nanoticker) | nanoticker_enable = true | Available at http://{remote_address}:42002 |
| [nano-node-monitor](https://github.com/nanotools/nanoNodeMonitor)| nanomonitor_enable = true | Available at http://{remote_address}:46000, 46001, 46002, ... |

#### Optional : Run Tests :

All tests are configured in the [testcase] section of nl_config.toml
$ ./nl_run.py test runs the configured tests

| Module | Test | Code | Description |
| :--- | :------------------------- |:-----------------------------------------------| -------------|
|basic |>NetworkChecks |
|basic |rpc_online |test_rpc_online | all nodes online|
|basic |peer_count |test_peer_count | all nodes interconnected|
|basic |equal_block_count |test_equal_block_count | all nodes have same blocks|
|basic |equal_online_stake_total |test_equal_online_stake_total | all nodes see same online weight|
|basic |equal_confirmation_quorum |test_equal_confirmation_quorum |all nodes have equal network view |
|basic |equal_peers_stake_total |test_equal_peers_stake_total | all nodes have equal peer weight|
|basic |equal_representatives_online |test_equal_representatives_online | all nodes have same online representatives|
|basic |>BlockPropagation |
|basic |account_split_10 |test_1_account_split_10 | Create 10 accounts by splitting each account into 2 new accounts|
|basic |account_split_1000 |test_1_account_split_1000 | Create 1000 accounts by splitting each account into 2 new accounts|

#### Optional : Delete virtual python environment
To remove your virtual python environment
$ ./setup_venv.sh delete