Make sure Docker is installed on the machine - so commands like `docker run` etc. are available.
Building the Docker image of latest `node` branch can be done by running:
```sh
./scripts/run-task.sh build-image
```
To check the built image, run:
```sh
docker image ls
```
The image should be tagged as `ghcr.io/luxfi/node:xxxxxxxx`, where `xxxxxxxx` is the shortened commit of the Lux source it was built from. To run the Lux node, run:
```sh
docker run -ti -p 9630:9630 -p 9631:9631 ghcr.io/luxfi/node:xxxxxxxx /node/build/node
```
## Running Lux
### Connecting to Mainnet
To connect to the Lux Mainnet, run:
```sh
./build/node
```
You should see some pretty ASCII art and log messages.
You can use `Ctrl+C` to kill the node.
### Connecting to Testnet
To connect to the Testnet, run:
```sh
./build/node --network-id=testnet
```
### Creating a Local Testnet
The [lux-cli](https://github.com/luxfi/lux-cli) is the easiest way to start a local network.
```sh
lux network start
lux network status
```
## Bootstrapping
A node needs to catch up to the latest network state before it can participate in consensus and serve API calls. This process (called bootstrapping) currently takes several days for a new node connected to Mainnet.
A node will not [report healthy](https://docs.lux.network/docs/api-reference/health-api) until it is done bootstrapping.
Improvements that reduce the amount of time it takes to bootstrap are under development.
The bottleneck during bootstrapping is typically database IO. Using a more powerful CPU or increasing the database IOPS on the computer running a node will decrease the amount of time bootstrapping takes.
## Generating Code
Lux Node uses multiple tools to generate efficient and boilerplate code.
### Running protobuf codegen
To regenerate the protobuf go code, run `scripts/run-task.sh generate-protobuf` from the root of the repo.
This should only be necessary when upgrading protobuf versions or modifying .proto definition files.
To use this script, you must have [buf](https://docs.buf.build/installation) (v1.31.0), protoc-gen-go (v1.33.0) and protoc-gen-go-grpc (v1.3.0) installed.
To install the buf dependencies:
```sh
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
```
If you have not already, you may need to add `$GOPATH/bin` to your `$PATH`:
```sh
exportPATH="$PATH:$(go env GOPATH)/bin"
```
If you extract buf to ~/software/buf/bin, the following should work:
```sh
exportPATH=$PATH:~/software/buf/bin/:~/go/bin
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/protobuf/cmd/protoc-gen-go-grpc
scripts/run_task.sh generate-protobuf
```
For more information, refer to the [GRPC Golang Quick Start Guide](https://grpc.io/docs/languages/go/quickstart/).
### Running mock codegen
See [the Contributing document autogenerated mocks section](CONTRIBUTING.md####Autogenerated-mocks).
## Versioning
### Version Semantics
Lux Node is first and foremost a client for the Lux network. The versioning of Lux Node follows that of the Lux network.
-`v0.x.x` indicates a development network version.
-`v1.x.x` indicates a production network version.
-`vx.[Upgrade].x` indicates the number of network upgrades that have occurred.
-`vx.x.[Patch]` indicates the number of client upgrades that have occurred since the last network upgrade.
### Library Compatibility Guarantees
Because Lux Node's version denotes the network version, it is expected that interfaces exported by Lux Node's packages may change in `Patch` version updates.
### API Compatibility Guarantees
APIs exposed when running Lux Node will maintain backwards compatibility, unless the functionality is explicitly deprecated and announced when removed.
## Supported Platforms
Lux Node can run on different platforms, with different support tiers:
- **Tier 1**: Fully supported by the maintainers, guaranteed to pass all tests including e2e and stress tests.
- **Tier 2**: Passes all unit and integration tests but not necessarily e2e tests.
- **Tier 3**: Builds but lightly tested (or not), considered _experimental_.
- **Not supported**: May not build and not tested, considered _unsafe_. To be supported in the future.
The following table lists currently supported platforms and their corresponding
Lux Node support tiers:
| Architecture | Operating system | Support tier |