# Pre-requisites

Before diving into deployment of your mining operation, please make sure you go through the following steps.

WARNING

It is recommended that you test your setup in calibration network before deploying on mainnet.

# Setup your permanent storage

Choose a network file system that you are familiar with (NFS for example) and deploy your storage cluster.

# Software dependencies

You will need to install these software dependencies (opens new window) (same as Lotus) before running venus.

# Install sophon-auth

Download and compile the source code of venus-auth.

$ git clone https://github.com/ipfs-force-community/sophon-auth.git
$ cd sophon-auth
$ git checkout <RELEASE_TAG>
$ make 
$ nohup ./sophon-auth run > auth.log 2>&1 &

TIP

Default config file for Venus-auth is located at ~/.sophon-auth/config.toml.

Logs

Log defaults printing to console. InfluxDB is supported through configuration.

port

The default port of sophon-auth is 8989.

# Using MySQL (Optional)

MySQL 5.7 or above is supported and can be used as a substitute for the dedault Badger key-value database. To use MySQL database, modify the db section of the config.

$ vim ~/.sophon-auth/config.toml

# Data source configuration item
[db]
# support: badger (default), mysql 
# the mysql DDL is in the script package 
type = "mysql" 
# The following parameters apply to MySQL
DSN = "<USER>:<PASSWORD>@(127.0.0.1:3306)/venus_auth?parseTime=true&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci&readTimeout=10s&writeTimeout=10s"
# conns 1500 concurrent
maxOpenConns = 64
maxIdleConns = 128
maxLifeTime = "120s"
maxIdleTime = "30s"

Restart sophon-auth for the configuration to take into effect.

$ ps -ef | grep auth
$ kill <VENUS_AUTH_PID>
$ nohup ./sophon-auth run > auth.log 2>&1 &

# Token gerneration

sophon-auth manages jwt (opens new window) tokens used by other venus modules for them to talk to each other securely on the network.

Generate tokens for shared modules.

# add user SHARED
$ ./sophon-auth user add <SHARED>

# --perm specifies admin, sign, write or read permission of the token generated
$ ./sophon-auth token gen --perm admin <SHARED>
<SHARED_ADMIN_AUTH_TOKEN>

Generate tokens for independent modules. Tokens can be logically grouped by <USER> as individual miner joining the mining pool.

$ ./sophon-auth user add <USER>

$ ./sophon-auth token gen --perm write <USER>
<USER_WRITE_AUTH_TOKEN>
$ ./sophon-auth token gen --perm read <USER>
<USER_READ_AUTH_TOKEN>

TIP

Use ./sophon-auth user add <USER> to logically group different tokens. Activate the user, which was just created, then bind miner to it:

$ ./sophon-auth user update --name <USER> --state 1
$ ./sophon-auth user miner add <USER> <MINER_ID>

# 查看user列表
$ ./sophon-auth user list

# Install sophon-gateway

Download and compile the source code of sophon-gateway.

$ git clone https://github.com/ipfs-force-community/sophon-gateway.git
$ cd sophon-gateway
$ git checkout <RELEASE_TAG>
$ make

Start sophon-gateway.

$ ./sophon-gateway --listen=/ip4/0.0.0.0/tcp/45132 run \
# Use either a http or https url
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--auth-token=<SHARED_ADMIN_AUTH_TOKEN> \
> sophon-gateway.log 2>&1 &

TIP

If you encounter the following compilation errors, execute firstgo get github.com/google/flatbuffers@v1.12.1

github.com/dgraph-io/badger/v3@v3.2011.1/fb/BlockOffset.go:6:2: missing go.sum entry for module providing package github.com/google/flatbuffers/go (imported by github.com/dgraph-io/badger/v3/table); to add:
        go get github.com/dgraph-io/badger/v3/table@v3.2011.1

# Install venus daemon

Download and compile the source code of venus.

$ git clone https://github.com/filecoin-project/venus.git
$ cd venus
$ git checkout <RELEASE_TAG>
$ make deps
$ make

Start venus daemon for chain synchronization. Use --network to specify the network venus is connecting to.

$ nohup ./venus daemon --network=calibrationnet --auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> --auth-token=<SHARED_ADMIN_AUTH_TOKEN> > venus.log 2>&1 &

TIP

Use tail -f venus.log or ./venus sync status to check if there is any errors during synchronization.

# Grant access to venus daemon

By default, venus daemon only respond to local access. Change the following configuration to allow access from other addresses.

vim ~/.venus/config.json

Change apiAddress from /ip4/127.0.0.1/tcp/3453 to /ip4/0.0.0.0/tcp/3453. Save and close the config file.

{
	"api": {"apiAddress": "/ip4/0.0.0.0/tcp/3453"}
}

Restart venus daemon for the config to take into effects.

$ ps -ef | grep venus
$ kill <VENUS_PID>
$ nohup ./venus daemon --network=calibrationnet --auth-url <http://VENUS_AUTH_IP_ADDRESS:PORT> --auth-token <SHARED_ADMIN_AUTH_TOKEN> > venus.log 2>&1 &

TIP

In order for the chain service to interact with the chain, daemon needs to be synced with the network by importing a snapshot of the filecoin chain. Please refer to this guide for more details.

# Install sophon-messager

Download and compile the source code of sophon-messager.

$ git clone https://github.com/ipfs-force-community/sophon-messager.git
$ cd sophon-messager
$ git checkout <RELEASE_TAG>
$ make 

Start sophon-messager. Note that --auth-url, --node-url and --auth-token are for sophon-messager to be aware of other venus modules and be properly authenticated.

$ nohup ./sophon-messager run \
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--node-url /ip4/<VENUS_DAEMON_IP_ADDRESS>/tcp/3453 \
--gateway-url=/ip4/<IP_ADDRESS_OF_VENUS_GATEWAY>/tcp/45132 \
--auth-token <SHARED_ADMIN_AUTH_TOKEN> \
--db-type mysql \
--mysql-dsn "<USER>:<PASSWORD>@(127.0.0.1:3306)/venus_messager?parseTime=true&loc=Local&readTimeout=10s&writeTimeout=10s" \
> msg.log 2>&1 &

TIP

If no database related params are specified, sophon-messager will default to use sqlite.

# Install sophon-miner

Download and compile the source code of sophon-miner.

$ git clone https://github.com/ipfs-force-community/sophon-miner.git
$ cd sophon-miner
$ git checkout <RELEASE_TAG>
$ make

Initialize sophon-miner.

$ ./sophon-miner init
--auth-api <http://VENUS_AUTH_IP_ADDRESS:PORT> \
--token <SHARED_ADMIN_AUTH_TOKEN> \
--gateway-api /ip4/<VENUS_GATEWAY_IP_ADDRESS>/tcp/45132 \
--api /ip4/<VENUS_DAEMON_IP_ADDRESS>/tcp/3453 \
--slash-filter local

Run sophon-miner.

$ nohup ./sophon-miner run >> miner.log 2>& 1 &

# Miner management

Once a user, damocles (opens new window) with proper miner id, connected to your Sophon service. You can query the status of said miner id by the following.

$ ./sophon-miner address state 
[
	{
		"Addr": "<MINER_ID>",
		"IsMining": true,
		"Err": null
	}
]

If IsMining of your miner is false, you can run the following command to start the miner id.

$ ./sophon-miner address start <MINER_ID>

List all miner ids that have connected to sophon-miner.

$ ./sophon-miner address list

# Configure unified endpoint for chain service

Given the complexity that a Sophon chain service consists of multiple chain service components (endpoints), it can be cumbersome for downstream consumers to configure multiple endpoints to chain service components before they can use the Sophon chain service.

To simplify this process and provide a unified endpoint for chain services, you can use sophon-gateway as a proxy for requests to chain services. Details can be found at configuring unified entry (opens new window).

# Next steps

Next, please follow this guide to connect to the Sophon service you just deployed!

# Questions?

Find us on Slack (opens new window)!