Saturn L1 nodes are CDN edge caches in the outermost layer of the Filecoin Saturn network. L1 nodes serve CAR files to retrieval clients as requested by their CIDs. Cache misses are served by the IPFS Network and Filecoin Storage Providers.
Saturn is live. Do you have a server that meets the minimum hardware requirements? If so, follow the setup instructions below to get started. You can run an L1 node, contribute bandwidth to the network, and earn Filecoin (FIL) today.
Beyond running a node, Saturn is a community run project and we'd love for you to get involved. Come say hi in #filecoin-saturn on Filecoin Slack! 👋
Only one node per physical host is allowed. If you want to run multiple nodes, you need to run them on dedicated hardware.
Multi-noding (Sharing CPU, RAM, Uplink or storage among nodes) is not allowed.
1 The more you can serve → greater FIL earnings
2 Bigger disk → bigger cache → greater FIL earnings
If you want to switch your node from test net to main net, or vice versa, see Switch networks below.
Install
Change directory to $SATURN_HOME
(default: $HOME
) to download the required files
cd ${SATURN_HOME:-$HOME}
Download the .env
file
Note: the .env
file does not take precedence over env variables set locally.
FIL_WALLET_ADDRESS
and NODE_OPERATOR_EMAIL
environment variables in the .env
file.SATURN_NETWORK
environment variable in the .env
file.
SATURN_NETWORK
to main
.SATURN_NETWORK
to test
. Note that this is the default value!$HOME
. It can be changed by setting the $SATURN_HOME
environment variable.curl -s https://raw.githubusercontent.com/filecoin-saturn/L1-node/main/.env -o .env
You can use the text editor of your choice (e.g. nano
or vim
on Linux)
Download the docker-compose.yml
file:
curl -s https://raw.githubusercontent.com/filecoin-saturn/L1-node/main/docker-compose.yml -o docker-compose.yml
Download the docker_compose_update.sh
script and make it executable:
curl -s https://raw.githubusercontent.com/filecoin-saturn/L1-node/main/docker_compose_update.sh -o docker_compose_update.sh
chmod +x docker_compose_update.sh
Set up the cron job to auto-update the docker-compose.yml
file:
(crontab -l 2>/dev/null; echo "*/5 * * * * cd $SATURN_HOME && sh docker_compose_update.sh >> docker_compose_update.log 2>&1") | crontab -
Launch it:
sudo docker compose up -d
Check logs with docker logs -f -n 100 saturn-node
Check for any errors. Registration will happen automatically and the node will restart once it receives its TLS certificate
In most instances speedtest does a good job of picking "close" servers but for small networks it may be incorrect.
If the speedtest value reported by speedtest seems low, you may want to configure SPEEDTEST_SERVER_CONFIG to point to a different public speedtest server. You will need to install speedtest CLI in the host and fetch close servers' IDs by doing speedtest --servers
, then setting SPEEDTEST_SERVER_CONFIG="--server-id=XXXXX"
We are using a Watchtower container to update the saturn-node container.
Your node will be updated automatically. You can see the update logs with docker logs -f saturn-watchtower
.
Make sure to setup the cron job to auto-update docker-compose.yml
as well (see above).
From here:
"Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates."
This playbook is meant as a bare-bones approach to set up an L1. It simply automates running the steps described above. A consequence of this is that when run it will restart a crashed L1 node docker container. It also presents a basic approach to server hardening which is by no means thorough.
Note: The security of your servers is your responsibility. You should do your own research to ensure your server follows security best practices.
If you're looking for a playbook which covers server hardening, monitoring and logging please check out https://github.com/hyphacoop/ansible-saturn-l1.
Currently, this playbook runs on the following Linux distros:
These instructions are to be run in a machine with Ansible >= 2.14 installed. This machine is known as your control node and it should not be the one to run your L1 node.
Most commands are run as root and your ssh user should have root access on the target machine.
ansible-galaxy collection install community.docker
Clone this repository and cd
into it.
For target host connectivity, ssh keys are recommended and this playbook can help you with that.
Note: Using the playbook for this is completely optional.
ansible_user
and ansible_ssh_pass
for your target host in your inventory file. See more here.authorized_keys
file with your public ssh keys in the cloned repository root.ansible-playbook -i <path_to_your_inventory> -l <host_label> --skip-tags=config,harden,run playbooks/l1.yaml
Ensure your control node has ssh access to your target machine(s).
ansible -vvv -i <path_to_your_inventory> <host_label> -m ping
SATURN_NETWORK
to main
SATURN_HOME
by setting a saturn_root
variable for that host on your inventory file. See more here.export FIL_WALLET_ADDRESS=<your_fil_wallet_address>; export NODE_OPERATOR_EMAIL=<your_email>; export SATURN_NETWORK=test
ansible-playbook -i <path_to_your_inventory> -l <host_label> --skip-tags=bootstrap playbooks/l1.yaml
ansible-playbook -i <path_to_your_inventory> -l <host_label> --skip-tags=bootstrap,harden playbooks/l1.yaml
To gracefully stop a node and not receive a penalty, run:
sudo docker stop --time 1800 saturn-node
or if you are in your $SATURN_HOME
folder with the Saturn docker-compose.yml
file:
sudo docker compose down
We are setting the stop_signal
and the stop_grace_period
in our Docker compose file to avoid issues.
If you have a custom setup, make sure to send a SIGTERM to your node and wait at least 30 minutes for it to drain.
If you want to switch your node from Saturn's test network (aka test
) to Saturn's main network (aka main
), or vice versa, follow these steps:
SATURN_NETWORK
to main
, or test
, in your $SATURN_HOME/.env
file (default: $HOME/.env
).$SATURN_HOME/shared/ssl
(default: $HOME/shared/ssl
).docker compose -f $SATURN_HOME/docker-compose.yml up -d
.docker logs -f saturn-node
For answers to common questions about operating a node, see the L1 node FAQ page.
To be eligible for the end of month earnings on the Saturn Network, nodes must satisfy a minimum uptime requirement each month. Having an uptime requirement has the following benefits:
The current uptime requirement is as follows:
Note: Beginning July 1st, 2023, Saturn’s monthly node uptime requirement increased from 7 days to 14 days. This means that for a node to qualify for earnings on August 1st, 2023, that node must have been online and operational for at least 14 contiguous days in July.
Read more about Saturn's node uptime requirement in the docs, here.
You need to own a Filecoin wallet to receive FIL payouts.
If you have an account on a Centralized Exchange (Coinbase, Binance, etc.) that supports Filecoin, go through the steps to deposit Filecoin and you'll be given a wallet address. This is recommended if you don't want to manage your wallet's seed phrase.
Web wallets
Desktop wallets
Mobile wallets
⚠️ Please follow crypto wallet best practices. Never share your seed phrase with anyone or enter it into websites. The Saturn team will never DM you or ask you to verify/validate/upgrade your wallet. If you need assistance, please ask in public channels such as the #filecoin-saturn Slack.
Each month, your node's earnings, in FIL, are calculated by the network based on various factors such as the amount of bandwidth it served, the number of requests it handled, its performance metrics like TTFB and upload speed, and its availaility and uptime. These earnings are then sent to a payout FVM smart contract by the 7th day of the following month. For example, earnings for December 2022 would be transferred to a payout smart contract by January 7th, 2023.
After your node's earnings are in the payout FVM smart contract, you can claim them on payouts.saturn.tech. Claiming your earnings moves the Filecoin your node(s) earned from the smart contract to your personal Filecoin wallet.
These Saturn tools are maintained by community members outside the Saturn core team.
Dual-licensed under MIT + Apache 2.0