The Safe Network is a fully autonomous data and communications network. For a general introduction and more information about its features and the problems it intends to solve, please see The Safe Network Primer.
The network is implemented in Rust. This repository is a workspace consisting of 5 crates:
- sn_node: implements the Safe Network Node binary.
- sn_client: provides the low-level interface to connect to a network.
- sn_api: an interface to expose network features for client applications.
- sn_cli: a command line interface for using the network.
- sn_cmd_test_utilities: internal, unpublished crate that provides tools for integration testing.
Currently, the network can be used via the 4 published crates. To see how, a good place to start is the README for the CLI. You can run your own local network or perhaps participate in a remote network.
Some of the tests require a live network to test against.
You should first ensure that your local machine does not have any artefacts from prior runs. Eg on unix: killall sn_node ||true && rm -r ~/.safe/node/local-test-network || true
will remove any running sn_node
instances and remove any prior run's data stored.
You can then run a local testnet using the testnet
bin:
NODE_COUNT=15 RUST_LOG=sn_node=trace cargo run --release --bin testnet
NODE_COUNT
defaults to 33 nodes and will give you a split section. 15 nodes as above will give only one section. How many nodes you want to run will depend on your hardware. 15 nodes can be considered the minimum for a viable section.
Once you have your network running you can simply run cargo test --release
. This will run all tests in sn
.
Note: if you're running in the root directory, either
cd sn_node
before running tests or include-p sn_node
in the cargo command to target onlysn_node
. Otherwise you'll be running tests from all crates, including sn_api and sn_cli. Eg:cargo test --release -p sn_node
In general it can be useful to scope your test running, eg cargo test --release client
will run only the client tests. Or perhaps you want to ignore proptests
as they can be quite long: cargo test --release client --skip proptest
Note: Statemaps are automatically generated for CI integration tests
Statemaps can be useful to get a wider view of what's going on in a network.
Steps to generate:
- Install
statemap
cargo install --git https://github.com/TritonDataCenter/statemap.git
-
Start a testnet, make sure to have the
statemap
feature enabled. -
Run
./resources/scripts/statemap-preprocess.sh
to extract statemap states from the node logs. -
After the script completes, it will output a
statemap
command, execute the command to generate the statemap SVG. -
Open the SVG in a browser
Safe is being developed iteratively and has frequent releases. You can use these to experiment with new features when they become available. It's also possible to participate in community 'testnets' hosted by members of The Safe Network Forum.
This Safe Network repository is licensed under the General Public License (GPL), version 3 (LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html).
safe_network is licensed under GPLv3 with linking exception. This means you can link to and use the library from any program, proprietary or open source; paid or gratis. However, if you modify safe_network, you must distribute the source to your modified version under the terms of the GPLv3.
See the LICENSE file for more details.
Want to contribute? Great! 🎉
There are many ways to give back to the project, whether it be writing new code, fixing bugs, or just reporting errors. All forms of contributions are encouraged!
For instructions on how to contribute, see our guide to contributing.