FileCoin 挖矿教程 Lotus 源码大致的结构目录
Posted weixin_46596227
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FileCoin 挖矿教程 Lotus 源码大致的结构目录相关的知识,希望对你有一定的参考价值。
Lotus 源码结构目录
项目仓库
https://github.com/filecoin-project/lotus
api
为Lotus命令提供后台服务,多数命令都需要与后台服务进行通信,这些命令通常会涉及到链上数据。本目录抽象了节点定义,定义了若干go interface,如 Common(定义节点通用功能)、FullNode (定义一个全节点的行为,继承自Common)、StorageMiner(存储矿工,也从Common继承)和相关的函数。
对应于上面几种主要接口,也提供了几个struct,分别为CommonStruct,FullNodeStruct,StorageMinerStruct作为实现,这些实现使用了代理模式,只是简单地将请求转发给各自的Internal成员,具体的功能函数需要使用者提供。
build
定义用于构建节点的函数,其中包括了: 从受信节点获取启动相关参数(位于paramfetch.go),生成内置的创世区块(位于genesis.go)等。
genesis
内置的创世区块数据
chain
实现与链的交互功能
actors
Filecoin网络内建的各种actor定义
types
定义Filecoin中的各种数据结构
store
公链存储相关,处理所有的本地链状态,包括链头、消息和状态等
state
处理Filecoin的状态树
vm
Filecoin虚拟机
cli
Lotus命令行工具的实现
cmd
内含各种不同的命令行项目,Lotus将系统分为不同的进程模块,为每个模块定义一个项目:
目录 | 项目 | 说明 |
---|---|---|
lotus | 守护进程 | 负责公链上数据的同步,与公链进行交互等,是lotus的主要进程之一 |
lotus-bench | 基准测试工具 | |
lotus-storage-miner | 挖矿进程 | 打包信息到区块,存储矿工 |
lotus-seal-worker | 密封数据进程 | 密封数据是挖矿过程中必不可少的一环,本进程即实现此功能 |
lib
实现lotus项目各模块公用的函数:
名称 | 功能描述 |
---|---|
crypto | 实现数据加密,公钥生成,签名与签名验证等 |
jsonrpc | 实现了一个基于json传输数据的rpc包,包括服务端和客户端,可为其它项目提供完整的rpc功能支持 |
statestore | 包装github.com/ipfs/go-datastore,实现状态追踪 |
sectorbuilder | 实现扇区管理 |
bufstore | 集成了Blockstore的读写功能 |
cborutil | 提供操作cbor数据的简便方法 |
auth | 实现权限认证服务HTTP接口 |
lotuspond
Pond项目目录,Pond是一个用于管理Lotus的UI工具,可用于建立一个独立的本地网络以方便调试。Pond会启动节点,使用指定的拓扑进行连接,启动挖矿,并持续监控节点运行状况。
miner
定义产出区块逻辑,与全节点通过API进行交互
node
定义了lotus节点相关的struct和interface等,各主要子目录如下:
- hello:实现hello协议
- modules:定义实现节点功能的各种函数
scripts
各种运行脚本,用于布暑节点和矿工等,也包括一些用于启动的配置文件
storage
定义存储矿工逻辑,用于实现"lotus-storage-miner"
blockstore
Blockstore 是 Lotus 使用的块存储接口。 它是基本的 go-ipfs 块存储与 Lotus 所需的其他功能的结合,例如 查看或同步。
system
操作系统的资源占用情况
resources.go
package system
import (
"os"
"github.com/dustin/go-humanize"
"github.com/elastic/gosigar"
logging "github.com/ipfs/go-log/v2"
)
var (
logSystem = logging.Logger("system")
)
// EnvMaximumHeap is name of the environment variable with which the user can
// specify a maximum heap size to abide by. The value of the env variable should
// be in bytes, or in SI bytes (e.g. 32GiB).
const EnvMaximumHeap = "LOTUS_MAX_HEAP"
// MemoryConstraints represents resource constraints that Lotus and the go
// runtime should abide by. It is a singleton object that's populated on
// initialization, and can be used by components for size calculations
// (e.g. caches).
type MemoryConstraints struct {
// MaxHeapMem is the maximum heap memory that has been set by the user
// through the LOTUS_MAX_HEAP env variable. If zero, there is no max heap
// limit set.
MaxHeapMem uint64
// TotalSystemMem is the total system memory as reported by go-sigar. If
// zero, it was impossible to determine the total system memory.
TotalSystemMem uint64
// EffectiveMemLimit is the memory limit in effect, in bytes.
//
// In order of precedence:
// 1. MaxHeapMem if non-zero.
// 2. TotalSystemMem if non-zero.
// 3. Zero (no known limit).
EffectiveMemLimit uint64
}
// GetMemoryConstraints returns the memory constraints for this process.
func GetMemoryConstraints() (ret MemoryConstraints) {
var mem gosigar.Mem
if err := mem.Get(); err != nil {
logSystem.Warnf("failed to acquire total system memory: %s", err)
} else {
ret.TotalSystemMem = mem.Total
ret.EffectiveMemLimit = mem.Total
}
if v := os.Getenv(EnvMaximumHeap); v != "" {
bytes, err := humanize.ParseBytes(v)
if err != nil {
logSystem.Warnf("failed to parse %s env variable with value %s: %s; ignoring max heap limit", EnvMaximumHeap, v, err)
} else {
ret.MaxHeapMem = bytes
ret.EffectiveMemLimit = bytes
}
}
return ret
}
testplans
一些测试相关的内容
tools
一些相关工具库
以上是关于FileCoin 挖矿教程 Lotus 源码大致的结构目录的主要内容,如果未能解决你的问题,请参考以下文章