Skip to content

NeoFS is a decentralized distributed object storage integrated with the Neo blockchain

License

Notifications You must be signed in to change notification settings

nspcc-dev/neofs-node

Repository files navigation

NeoFS logo

NeoFS is a decentralized distributed object storage integrated with the NEO Blockchain.


Report GitHub release (latest SemVer) License

Overview

NeoFS nodes are organized in a peer-to-peer network that takes care of storing and distributing user's data. Any Neo user may participate in the network and get paid for providing storage resources to other users or store their data in NeoFS and pay a competitive price for it.

Users can reliably store object data in the NeoFS network and have a transparent data placement process due to a decentralized architecture and flexible storage policies. Each node is responsible for executing the storage policies that the users select for geographical location, reliability level, number of nodes, type of disks, capacity, etc. Thus, NeoFS gives full control over data to users.

Deep Neo Blockchain integration allows NeoFS to be used by dApps directly from NeoVM on the Smart Contract code level. This way dApps are not limited to on-chain storage and can manipulate large amounts of data without paying a prohibitive price.

NeoFS has a native gRPC API and has protocol gateways for popular protocols such as AWS S3, HTTP, FUSE and sFTP allowing developers to integrate applications without rewriting their code.

Supported platforms

Now, we only support GNU/Linux on amd64 CPUs with AVX/AVX2 instructions. More platforms will be officially supported after release 1.0.

The latest version of neofs-node works with neofs-contract v0.19.1.

Building

To make all binaries you need Go 1.22+ and make:

make all

The resulting binaries will appear in bin/ folder.

To make a specific binary use:

make bin/neofs-<name>

See the list of all available commands in the cmd folder.

Building with Docker

Building can also be performed in a container:

make docker/all                     # build all binaries
make docker/bin/neofs-<name> # build a specific binary

Docker images

To make docker images suitable for use in neofs-dev-env use:

make images

Running

CLI

neofs-cli allows to perform a lot of actions like container/object management connecting to any node of the target network. It has an extensive description for all of its commands and options internally, but some specific concepts have additional documents describing them:

See docs/cli-commands for information about all cli commands.

neofs-adm is a network setup and management utility usually used by the network administrators. Refer to docs/cli-adm.md for mode information about it.

Both neofs-cli and neofs-adm can take configuration file as a parameter to simplify working with the same network/wallet. See cli.yaml for an example of what this config may look like. Control service-specific configuration examples are ir-control.yaml and node-control.yaml for IR and SN nodes respectively.

Node

There are two kinds of nodes -- inner ring nodes and storage nodes. Most of the time you're interested in running a storage node, because inner ring ones are special and are somewhat similar to Neo consensus nodes in their role for the network. Both accept parameters from YAML or JSON configuration files and environment variables.

See docs/sighup.md on how nodes can be reconfigured without restart.

See docs/storage-node-configuration.md on how to configure a storage node.

Example configurations

These examples contain all possible configurations of NeoFS nodes. All parameters are correct there, however, their particular values are provided for informational purposes only (and not recommended for direct use), real networks and real configuration are likely to differ a lot for them.

See node.yaml for configuration notes.

Private network

If you're planning on NeoFS development take a look at neofs-dev-env. To develop applications using NeoFS we recommend more light-weight neofs-aio container. If you really want to get your hands dirty refer to docs/deploy.md for instructions on how to do things manually from scratch.

Contributing

Feel free to contribute to this project after reading the contributing guidelines.

Before starting to work on a certain topic, create a new issue first, describing the feature/topic you are going to implement.

Credits

NeoFS is maintained by NeoSPCC with the help and contributions from community members.

Please see CREDITS for details.

License