How to Add a Node
Silvana Node
Silvana’s infrastructure relies on a network of nodes assigned to perform the following functions:
- Coordination of proving and execution for Silvana apps;
- Ensuring Silvana OS interface availability via gPRC locally for running agents;
- Monitoring proof jobs, app operation, logs and metrics via OpenTelemetry gRPC push to New Relic.
Hardware requirements
These are the recommended performance requirements for a Silvana node.
Minimal Hardware Requirements | Optimal Hardware Requirements |
---|---|
|
|
Installation Guide
There are two ways you can install a node: Quick Installation (recommended) and Manual Installation.
Quick Installation
Install the latest version of Silvana with a single command:
curl -sSL https://raw.githubusercontent.com/SilvanaOne/silvana/main/install.sh | bash
Or with wget:
wget -qO- https://raw.githubusercontent.com/SilvanaOne/silvana/main/install.sh | bash
This script will:
- Automatically detect your OS (Linux or macOS) and architecture (ARM64 or x86_64);
- Download the appropriate binary from the latest GitHub release;
- Install it to
/usr/local/bin/silvana;
- Verify the installation.
Supported Platforms:
- Linux ARM64 (aarch64);
- Linux x86_64 (amd64);
- macOS Apple Silicon (M1/M2/M3/M4).
Manual Installation
If you choose to install manually:
- Go to the releases page.
- Download the archive suitable for your platform:
silvana-arm64-linux.tar.gz
for Linux ARM64;silvana-x86_64-linux.tar.gz
for Linux x86_64;silvana-macos-silicon.tar.gz
for macOS Apple Silicon.
- Extract and install using these commands:
# Download (replace with your platform's file)
curl -LO https://github.com/SilvanaOne/silvana/releases/latest/download/silvana-arm64-linux.tar.gz
# Extract
tar -xzf silvana-arm64-linux.tar.gz
# Install
sudo mv silvana /usr/local/bin/
# Make executable
sudo chmod +x /usr/local/bin/silvana
# Verify
silvana --version
- To install a specific version instead of the latest one, run this command:
curl -sSL https://raw.githubusercontent.com/SilvanaOne/silvana/main/install.sh | VERSION=v0.1.0 bash
- After installation, verify the version works by doing this:
silvana --version
silvana --help
Uninstall
To remove Silvana, run this command:
sudo rm /usr/local/bin/silvana
Troubleshooting
Below are the most common issues you may encounter, along with the ways to address them.
Permission Denied
If you get a permission error, make sure the binary is executable:
sudo chmod +x /usr/local/bin/silvana
Command Not Found
If silvana
is not found after installation, add /usr/local/bin
to your PATH:
export PATH=$PATH:/usr/local/bin
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc # or ~/.zshrc
SSL/TLS Errors
If you encounter SSL errors during download, you can use the insecure flag (not recommended for production):
curl -sSLk https://raw.githubusercontent.com/SilvanaOne/silvana/main/install.sh | bash
Running Silvana Node
After installation, you’re ready to run the app. To start a Silvana coordinator node, run this:
silvana start
This command will:
- Fetch configuration from the Silvana RPC server for your network (devnet by default);
- Auto-generate Sui keypair if not present (saved to
.env
); - Request funds automatically from the devnet faucet (10 SUI);
- Initialize services including job searcher, Docker processor, and gRPC server;
- Launch monitoring for jobs on the blockchain.
First-Time Setup
If you’re running silvana start for the first time, follow these steps:
- Enter this command:
🔄 Fetching configuration for chain: devnet
✅ Successfully fetched 16 configuration items
🔑 SUI credentials not found, generating new keypair...
✅ Generated new Sui keypair:
Address: 0x3f176926a223d730fea3998da1791f4c7517e73bf3472e233a316d8672275683
📝 Saved credentials to .env file
💰 Requesting funds from devnet faucet...
✅ Faucet request successful!
Transaction: GGRwF1ybif9nRsjiJEneBguQppzKLkWVzxSZmToj1mLH
🔗 Explorer: https://suiscan.xyz/devnet/tx/GGRwF1ybif9nRsjiJEneBguQppzKLkWVzxSZmToj1mLH
- Specify the network you’re about to use:
# Devnet (default)
silvana start --chain devnet
# Testnet
silvana start --chain testnet
# Mainnet
silvana start --chain mainnet
- If you have existing Sui credentials, create a .env file:
# .env
SUI_ADDRESS=0x...your-address...
SUI_SECRET_KEY=suiprivkey1...your-private-key...
SUI_CHAIN=devnet
- To join a specific Silvana registry (e.g., shared devnet), run this command:
# Get the shared devnet registry
silvana config
# Add to your .env:
SILVANA_REGISTRY=0x916a3b24de8165fb6fb25d060ec82b50683dc9e9cebf0dfae559f943ee32adb2
SILVANA_REGISTRY_PACKAGE=0x32f8ad21df94c28401912c8ffebcc3bd186f5bf7da0995057a63755005937025
- Process all jobs from your registry:
silvana start
- Process jobs only from a specific app instance:
silvana start --instance 0xaacf350ac6ae669ebf9804b455b0bc75a71f28a34bdc48d87ca78f1f90ba0f3b
- Run as a dedicated settlement node:
silvana start --settle
During the startup, the coordinator performs these initialization steps:
- Configuration Loading: fetches and injects environment variables from RPC server.
- Sui Connection: connects to the Sui blockchain RPC endpoint.
- Balance Check: verifies sufficient SUI balance for operations.
- Gas Coin Pool: splits large coins into smaller ones for better transaction performance.
- Service Startup:
- Job Searcher: monitors blockchain for new jobs.
- Multicall Processor: batches operations for efficiency.
- Docker Buffer: manages container execution.
- Event Monitor: watches blockchain events.
- gRPC Server: provides API for agent communication.
- Periodic Tasks: ensures reconciliation, block creation, proof analysis.
Monitoring
Once running, you'll see logs indicating job processing:
📝 JobCreated: seq=4, dev=AddDeveloper, agent=AddAgent/prove, app_method=add
🐳 Starting Docker container for buffered job 1: AddDeveloper/AddAgent/prove
✅ Job 1 started and reserved for Docker session
Troubleshooting
The coordinator may fail to start for a number of reasons. This is what you can do in each of these situations:
- Missing credentials: will auto-generate on devnet, or check your
.env
file. - Insufficient balance: run
silvana faucet sui --address 0x...
. - Connection issues: verify network connectivity to RPC endpoints, gRPC TCP protocol is used for connection that requires streaming support and a continuous TCP connection.
- Docker errors: ensure Docker daemon is running.
- Registry not found: check
SILVANA_REGISTRY
andSILVANA_REGISTRY_PACKAGE
values.
Next Steps
After starting your Coordinator, do this:
- Create a new project:
silvana new myproject
. - Deploy an application: follow the Add Example.
- Monitor jobs: use
silvana jobs --instance <your-app-instance>
. - Check balances:
silvana balance sui
.
For detailed application development, see the examples documentation.
Features
This is what you have with Silvana:
- gRPC server and client: gRPC, gRPC-Web;
- TiDB Serverless database: store events, query, fulltext search;
- NATS JetStream on nats and wss;
- Internal buffering in memory for batch processing;
- Protobuf definitions and reflection on endpoint and in Rust code;
- Monitoring: logs to file/console, logs/metrics via OpenTelemetry gRPC push/REST pull, Grafana/Prometheus/BetterStack support for logs and dashboards.
The diagram below illustrates the Silvana Networking architecture.
Performance
The table below features how Silvana performs:
Indicator | Value |
---|---|
Responce time for any operation, including adding event, query event, fulltext search | 100–200 |
Events per second | 10,000 |
Low-load RAM consumption | 200 MB |
High-load RAM consumption (1 mln events) | 300 MB |
CPU load | <20–30% on thousands of events per second |
Deployment
To deploy an app, follow the instructions below.
- Cross-build Rust executable using Docker and upload it to S3
make build-rpc
- Run pulumi script to:
- Create AWS Stack, including EC2 instance;
- Install certificates, NATS, Silvana RPC;
- Configure and run services.
mpulumi up
Protobuf
Follow this workflow to use Protobuf:
- Create proto definitions.
- Compile with
make regen
for Rust andbuf lint && buf generate
for TypeScript - definitions will be compiled to SQL, SQL migrations, Rust interfaces with reflection and server/client, TypeScript interfaces and client, sea-orm interfaces for TiDB.