Running the BVS
This guide will walk you through running your own BVS by utilizing our Hello World BVS example.
Prerequisites and dependencies
The Hello World BVS requires a few components from your system. This guide assumes you are using a common Linux distribution with systemd as the init system. If you're using a different setup, we assume you already possess the necessary knowledge to configure your environment appropriately.
Golang compiler
Working Redis server (By default, the BVS expects it on
localhost:6379
. However, please feel free to use other addresses and change the configuration accordingly).git
Installing dependencies on Linux
For Ubuntu and other Debian-based system run:
sudo apt-get install redis golang-go
For Arch based systems, run:
sudo pacman -S redis go
For Fedora and other RHEL based systems:
sudo dnf install golang redis
After installing Redis, you can start the service using the following command:
sudo systemctl start redis.service
It's advisable to check if Redis has started correctly. You can do this by running the following command:
sudo systemctl status redis
You should see the status as active (running)
, and it should indicate that it is listening on port 6379.
❯ sudo systemctl status redis
● redis.service - Advanced key-value store
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; preset: disabled)
Active: active (running) since Fri 2024-10-11 13:34:21 CST; 2s ago
Invocation: 7a3a9e4dc334453cb75cc98dd240f5ce
Main PID: 254535 (redis-server)
Status: "Ready to accept connections"
Tasks: 6 (limit: 71906)
Memory: 8.3M (peak: 9.4M)
CPU: 28ms
CGroup: /system.slice/redis.service
└─254535 "/usr/bin/redis-server 127.0.0.1:6379"
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.330 # Failed to write PID file: Permission denied
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.330 * Running mode=standalone, port=6379.
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * Server initialized
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * Loading RDB produced by version 7.2.5
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * RDB age 839578 seconds
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * RDB memory usage when created 1.11 Mb
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * Done loading RDB, keys loaded: 172, keys expired: 0.
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * DB loaded from disk: 0.000 seconds
Oct 11 13:34:21 martha redis-server[254535]: 254535:M 11 Oct 2024 13:34:21.331 * Ready to accept connections tcp
Oct 11 13:34:21 martha systemd[1]: Started Advanced key-value store.
Installing dependencies on MacOS
We recommend using Homebrew to install dependencies. Please follow Homebrew's installation instructions before proceeding. Afterwards, install redis.
brew install redis
After installing Redis, you can start the service using the following command:
brew services start redis
It's advisable to check if Redis has started correctly. You can do this by running the following command:
brew services info redis
You should see the status as both loaded and running
redis (homebrew.mxcl.redis)
Running: ✔
Loaded: ✔
User: martin
PID: 165415
Afterwards, please follow the instructions on the Golang install page to install the Go compiler.
Running the Hello World BVS
Step 1: Clone repository
Clone the repository and cd
into it.
git clone https://github.com/satlayer/devnet-hello-world-bvs
cd devnet-hello-world-bvs
Step 2: Prepare your environment
You should firstly edit go.mod
in devnet-hello-world-bvs
to your cloned satlayer-api
lib path:
# Modify go.mod to as satlayer-api is not public yet (will be!)
echo "\nreplace github.com/satlayer/satlayer-api v0.3.0 => /path/to/your/clone/of/devnet-satlayer-api" >> go.mod
Now, start each component in the following sequence.
Each program folder contains a env.toml
file, which stores configuration for the off-chain programs. To make the Hello World program run successfully, modify your env.toml
to point towards your account and use the os
keyring backend.
# xxx/env.toml
[owner]
keyringBackend = "os"
keyName = "<your-wallet-name>"
Step 3: Run or Start the Task Monitor
First, run the task monitor. In this example BVS, the monitor continuously tracks and updates the status for display. While this service is not technically required for a BVS, it is useful during development.
cd task
go run main.go monitor
This will initiate the monitor, allowing you to see real-time updates and statuses as tasks are processed in your Hello World BVS.
Step 4: Run off-chain process
Next, run the off-chain process. This program listens for tasks to perform the desired computation.
cd offchain
go run main.go
Step 5: Run Aggregator
Afterwards, you can run the Aggregator, which collects results from the above off-chain process and submits to the blockchain.
cd aggregator
go run main.go
Step 6: Run RewardUploader
Once you have ran the previous sequence, you can run RewardUploader
which listens for finished results, calculates how future rewards should be spread and uploads it to the blockchain.
cd uploader
go run main.go
Step 7: Run TaskCaller
At the last sequence, run TaskCaller. In the real world, this would be a BVS client.
cd task
go run main.go caller
Last updated
Was this helpful?