搭建filecoin私链 - okblockchainlab/lotus GitHub Wiki
filecoin有四种实现:
- go-filecoin(Go)
- lotus(Go)
- fuhon(C++)
- forest(Rust)
filecoin节点类型及功能
使用lotus搭建filecoin私链(MAC)
1. 安装依赖
brew install go bzr jq pkg-config rustup
2. 下载代码
git clone https://github.com/filecoin-project/lotus.git
cd lotus/
3. 编译
make clean && make all
sudo make install
至此,本地源码编译成功
4. 启动本地私链
本地私链中存储矿工采用2个sector、每个sector 2KB的模式
- 为2KB sector编译对应的可执行程序
make 2k
- 下载复制证明所需的对应(2KB)参数,用于零知识证明算法Groth
./lotus fetch-params 2048
- pre-seal sector
./lotus-seed pre-seal --sector-size 2KiB --num-sectors 2
- 创建genesis block并启动client node
./lotus-seed genesis new localnet.json
./lotus-seed genesis add-miner localnet.json ~/.genesis-sectors/pre-seal-t01000.json
./lotus daemon --lotus-make-genesis=dev.gen --genesis-template=localnet.json --bootstrap=false
- 在另一个终端执行,导入miner key
./lotus wallet import ~/.genesis-sectors/pre-seal-t01000.key
- 初始化存储矿工
./lotus-storage-miner init --genesis-miner --actor=t01000 --sector-size=2KiB --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json --nosync
- 启动存储矿工
./lotus-storage-miner run --nosync
5. 存取文件
- 创建一个文件(比如example.txt),不要超过2KB
- 将文件导入本地client node,生成文件CID
./lotus client import example.txt
查看client node导入的文件
./lotus client local
- 查找合适的存储矿工及报价(该私链上只有一个存储矿工) 查看存储矿工列表
./lotus state list-miners
查看某个存储矿工deal
./lotus client query-ask t01000
- 创建一个新账户并给其转账
# 新建账户
./lotus wallet new
# 查看钱包账户列表
./lotus wallet list
# 转账
./lotus send --source=t3weytekfbhjwq2txzrj5ervupjfdmwm6hg6mhzlcvh64qwey4oqwosznwibspp54ukqvq5opycy62rromhkoq t1gywhrmvyjaaodroyjycx37umoqaw5oie3mpcnza 10000000
其中,--source
为from地址,t1gywhrmvyjaaodroyjycx37umoqaw5oie3mpcnza
为新建账户地址
- 完成deal,将文件给存储矿工
./lotus client deal --from=t1gywhrmvyjaaodroyjycx37umoqaw5oie3mpcnza bafkreiayciipr6ohphbg3iozwidvxxqbe4yc5yhd7sryzgud6wy53ds5hm t01000 0.0000000005 100
--from
为新增账户地址bafkreiayciipr6ohphbg3iozwidvxxqbe4yc5yhd7sryzgud6wy53ds5hm
为import后返回的CIDt01000
为选择存储文件的矿工0.0000000005
为存储价格100
为存储时长(block?epoch?)
查看deal状态
./lotus client list-deals
- 获取文件
./lotus client retrieve --from=t3vcezgebcviucat5uwnpxp5d4dlc2ggvoxlssk3twktgf3sfvl54g2pen5o3rnckhmafzeims3znfaei6b2zq --miner=t01000 bafkreiayciipr6ohphbg3iozwidvxxqbe4yc5yhd7sryzgud6wy53ds5hm output.txt
参数说明同上
- 查询账户余额
./lotus wallet balance t3vcezgebcviucat5uwnpxp5d4dlc2ggvoxlssk3twktgf3sfvl54g2pen5o3rnckhmafzeims3znfaei6b2zq
6. 加入新节点(client node)
1. 获取已有网络的创世文件,在另一台机器启动本地节点
rm -r ~/.lotus
./lotus daemon --genesis=dev.gen --bootstrap=false
其中dev.gen
为创世文件,在上面步骤4.4
中由--lotus-make-genesis=dev.gen
参数指定生成,需要复制到本地
2. 将节点连接已有网络
本地节点启动后,并没有跟原私链没有网络联系,需要手动设置连接 首先,获取原私链节点监听地址。在原私链节点机器执行
./lotus net listen
# 返回
/ip4/127.0.0.1/tcp/34313/p2p/12D3KooWSKqoCW56rMN25gZvEaaH4SEq4sgYC39P8ocQSLvEURkW
/ip4/192.168.13.130/tcp/34313/p2p/12D3KooWSKqoCW56rMN25gZvEaaH4SEq4sgYC39P8ocQSLvEURkW
/ip6/::1/tcp/44953/p2p/12D3KooWSKqoCW56rMN25gZvEaaH4SEq4sgYC39P8ocQSLvEURkW
选择其中一个本地节点可连通的地址,如/ip4/192.168.13.130/tcp/34313/p2p/12D3KooWSKqoCW56rMN25gZvEaaH4SEq4sgYC39P8ocQSLvEURkW
然后,本地节点执行
./lotus net connect /ip4/192.168.13.130/tcp/34313/p2p/12D3KooWSKqoCW56rMN25gZvEaaH4SEq4sgYC39P8ocQSLvEURkW
连接成功后,lotus daemon开始同步区块.
可以执行./lotus net peers
查看连接节点
也可以./lotus sync status
查看同步状态
7. 加入新节点(storage miner node)
1. 启动一个client node
2. 创建矿工账户
# 创建矿工账户
./lotus wallet new bls
# 给矿工账户转账
./lotus send --source=t3qzsmjiz2wfsxdifo6se4coee2onwd4dgeh463nu45cgc5inxhdets2tw5r4lzuej5f3wiromkgufbxdyrrna t3xauazd7rdxbhdihn4vbqck5f3ojqkytpkvzyb2mvvvkgzvi4dqkgyrkkrqmd5ne2ytdjeh2nopvlo6wpk7ha 10000
- 注意
--source
为转账from地址,t3xauazd7rdxbhdihn4vbqck5f3ojqkytpkvzyb2mvvvkgzvi4dqkgyrkkrqmd5ne2ytdjeh2nopvlo6wpk7ha
为新建矿工账户地址
3. 初始化矿工
rm -r ~/.lotusstorage
./lotus-storage-miner init --owner=t3xauazd7rdxbhdihn4vbqck5f3ojqkytpkvzyb2mvvvkgzvi4dqkgyrkkrqmd5ne2ytdjeh2nopvlo6wpk7ha --sector-size=2KiB --nosync
- 注意
--owner
为新创建的矿工账户地址
4. 启动矿工节点
./lotus-storage-miner run --nosync
5. 检查状态和给该矿工存储文件(否则没有算力不能出块)
./lotus state list-miner
./lotus-storage-miner info
./lotus client deal ...
8. 加入新节点(seal worker node)
注意:storage miner启动时会默认启动localworker处理task,所以应避免新增worker与storage miner在同一机器运行,否则可能会导致处理过程冲突。
如果新增worker有必要与miner在同一机器运行,或者需要关闭localworker的某些task,可以修改miner配置文件将task设为false:
[Storage]
# AllowPreCommit1 = true
# AllowPreCommit2 = true
# AllowCommit = true
# AllowUnseal = true
1. 修改storage miner ListenAddress并启动
修改矿工~/.lotusstorage/config.toml
配置文件中的ListenAddress
的IP为新增worker可连接的地址
[API]
ListenAddress = "/ip4/127.0.0.1/tcp/2345/http"
# RemoteListenAddress = "127.0.0.1:2345"
# Timeout = "30s"
#
比如内网地址/ip4/192.168.13.130/tcp/2345/http
,或者直接用0.0.0.0
2. 生成auth token并设置worker环境变量
- 在矿工节点,生成api token
./lotus-storage-miner auth create-token --perm admin
如eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.Qo29Qq6qBjrxMmcCvWYcq9SNZ-DVE9H6DbkMIoUrAZc
- 查看矿工API path
cat ~/.lotusstorage/api
如/ip4/192.168.13.130/tcp/2345/http
- 在新增worker环境,设置环境变量
STORAGE_API_INFO
# 格式为 TOKEN:STORAGE_NODE_MULTIADDR
export STORAGE_API_INFO=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.Qo29Qq6qBjrxMmcCvWYcq9SNZ-DVE9H6DbkMIoUrAZc:/ip4/192.168.13.130/tcp/2345/http
3. 启动worker
./lotus-seal-worker run --address 10.0.66.14:2347
其中--address
必须是矿工可连接到的地址
9. cli远程连接节点(remote API)
lotus
cli连接远程client node
9.1 使用- 修改client node
ListenAddress
修改~/.lotus/config.toml
配置文件中的ListenAddress
的IP为cli端可连接的地址
[API]
ListenAddress = "/ip4/127.0.0.1/tcp/2345/http"
# RemoteListenAddress = "127.0.0.1:2345"
# Timeout = "30s"
#
比如内网地址/ip4/192.168.13.130/tcp/2345/http
,或者直接用0.0.0.0
- 生成 auth token
./lotus auth api-info --perm admin
FULLNODE_API_INFO=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.RXfzsWGl2QjQfQ73y2mO8aXUU0opUjzt1UVuzD1UdjI:/ip4/192.168.13.130/tcp/1234/http
- 设置cli端环境变量
FULLNODE_API_INFO
export FULLNODE_API_INFO=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.RXfzsWGl2QjQfQ73y2mO8aXUU0opUjzt1UVuzD1UdjI:/ip4/192.168.13.130/tcp/1234/http
然后使用lotus先关命令即可操作远程client node,如./lotus daemon stop
lotus-storage-miner
cli连接远程storage miner node
9.2 使用- 修改miner node
ListenAddress
修改~/.lotusstorage/config.toml
配置文件中的ListenAddress
的IP为cli端可连接的地址
[API]
ListenAddress = "/ip4/127.0.0.1/tcp/2345/http"
# RemoteListenAddress = "127.0.0.1:2345"
# Timeout = "30s"
#
比如内网地址/ip4/192.168.13.130/tcp/2345/http
,或者直接用0.0.0.0
- 生成 auth token
./lotus-storage-miner auth create-token --perm admin
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.2mkieMGKBDkH6vZtanxKQ5W4B_b_Uz0Lz7IGxGBJ-Ts
cat ~/.lotusstorage/api
/ip4/192.168.13.130/tcp/2345/http
- 设置cli端环境变量
STORAGE_API_INFO
export STORAGE_API_INFO=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.2mkieMGKBDkH6vZtanxKQ5W4B_b_Uz0Lz7IGxGBJ-Ts:/ip4/192.168.13.130/tcp/2345/http
然后使用lotus-storage-miner先关命令即可操作远程miner node,如./lotus-storage-miner stop