ipfs协议实验室根据功能把项目拆成一个一个小的项目,很多项目只有一个源码文件。lotus项目引用了以下的项目,这里做一个简单的功能说明,对各项目的功能有个大致的了解,这个是我们分析源码的基础。
依赖参考github go.mod
项目 | 功能 |
---|---|
filecoin-project/chain-validation | 根据规范验证Filecoin实现的正确性 |
filecoin-project/filecoin-ffi | FFI 全名 Foreign Function Interface, C and CGO bindings for Filecoin’s Rust libraries |
filecoin-project/go-address | filecoin地址类型,用于在filecoin网络标识actor的身份 |
filecoin-project/go-amt-ipld | 使用go-ipld实现的Array Mapped Trie (Persistent Vector) |
filecoin-project/go-cbor-util | CBOR工具库,输入和输出流到CBOR的转换 |
filecoin-project/go-crypto | filecoin的加密工具库,生成key、签名、验签 |
filecoin-project/go-data-transfer | 通过ipfs/go-graphsync执行数据传输的一个模块 |
filecoin-project/go-fil-markets | 该库包含Filecoin 的存储和检索市场子系统的模块化实现 |
filecoin-project/go-paramfetch | filecoin网络用于下载Groth参数和验证keys的程序 |
filecoin-project/go-sectorbuilder | 管理存储矿工扇区的抽象 |
filecoin-project/go-statestore | CBOR可编码数据的通用键值存储 |
ipfs/go-bitswap | golang版本的bitswap协议实现 |
pfs/go-block-format | cid寻址数据块的接口, 提供了一个默认实现BasicBlock |
ipfs/go-blockservice | golang版本的BlockService接口实现,为本地和远程存储后端提供无缝接口 ,后面会与Blockstore接口合并 |
ipfs/go-car | 内容可寻址归档,是将merkledag打包到单个文件中的一种简单方法 |
ipfs/go-cid | golang版本的Content ID v1实现 |
ipfs/go-datastore | key/value数据存储接口 |
ipfs/go-ds-badger2 | 使用 badger 作为后端的datastore 实现,badger是go实现的fast key/value数据库 |
ipfs/go-filestore | Blockstore接口(go-ipfs-blockstore)的实现 |
ipfs/go-fs-lock | 文件系统的锁定 |
ipfs/go-graphsync | golang版本的ipld graphsync协议实现 |
ipfs/go-hamt-ipld | ipld的HAMT(Hash Array Mapped Trie )的实现 |
ipfs/go-ipfs-blockstore | blockstore在datastore上实现了一个精简包装,为获取和存储Block对象提供接口Blockstore |
ipfs/go-ipfs-chunker | 提供Splitter接口,sizeSplitterv2从Reader流读取数据,然后创建“Block”,这些Block用于构建ipfs DAG(默克尔树) |
ipfs/go-ipfs-ds-help | 解析和创建datastore keys的工具包 |
ipfs/go-ipfs-exchange-interface | IPFS Exchange接口:IsOnline、HasBlock、GetBlock、GetBlocks 、NewSession |
ipfs/go-ipfs-exchange-offline | 离线 IPFS exchange接口实现 |
ipfs/go-ipfs-files | IPFS file接口及工具包 |
ipfs/go-ipfs-routing | go-libp2p-routing的实现 |
ipfs/go-ipld-cbor | go-ipld-format的cbor实现 |
ipfs/go-ipld-format | ipld的Node、Resolver 接口 ,需要实现一组接口,才能成为ipld merkle-forest 的一部分 |
ipfs/go-log | 包装了zap的日志工具库 |
ipfs/go-merkledag | 现实了DAGService接口 |
ipfs/go-path | 处理 ipfs paths 工具库 |
ipfs/go-unixfs | 在ipld merkledag上实现类unix的文件系统 |
libp2p/go-libp2p | golang版的libp2p实现,入口 |
libp2p/go-libp2p-circuit | 电路交换 |
libp2p/go-libp2p-connmgr | 连接管理器 ,帮助管理连接 |
libp2p/go-libp2p-core | 组成go-libp2p的接口和抽象 |
libp2p/go-libp2p-discovery | 活跃peer节点发现服务 |
libp2p/go-libp2p-kad-dht | Kademlia DHT实现 |
libp2p/go-libp2p-mplex | MPLEX流多路复用器 |
libp2p/go-libp2p-yamux | YAMUX流多路复用器 |
libp2p/go-libp2p-peer | 用于go-libp2p的基于PKI的身份,已废弃,使用go-libp2p-core代替 |
libp2p/go-libp2p-peerstore | peer元数据存储组件的参考实现 |
libp2p/go-libp2p-pubsub | 基于libp2p构建的发布订阅系统 |
libp2p/go-libp2p-quic-transport | 使用quic的libp2p传输实现 |
libp2p/go-libp2p-record | 用于路由系统的签名记录 |
libp2p/go-libp2p-routing-helpers | 组成不同类型路由器的帮助程序类型的集合 |
libp2p/go-libp2p-secio | 用于go-libp2p的安全(加密)传输模块 ,实现SecureTransport接口,保护peer之间交换的所有数据 |
libp2p/go-libp2p-swarm | 用于给定libp2p网络的“低级”接口。它使您可以更精细地控制系统的各个方面。大多数应用程序不需要这种访问级别,因此Swarm通常将其包装在Host提供更友好接口的抽象中 |
libp2p/go-libp2p-tls | go-libp2p的TLS加密传输 |
libp2p/go-maddr-filter | 用于过滤多重地址(multiaddrs)的库 |
multiformats/go-base32 | 带有NoPadding选项的base32编码工具类 |
multiformats/go-multiaddr | Go中的multiaddr实现,可组合且面向未来的网络地址,Multiaddr是一种用于编码来自各种公认的网络协议的地址的格式。编写应用程序以确保将来的地址使用是可行的,并允许多个传输协议和地址共存 |
multiformats/go-multiaddr-dns | 用于/ dns4、/ dns6、/ dnsaddr 多地址解析的Go库和CLI工具 |
multiformats/go-multiaddr-net | multiaddr网络工具 ,标准网络符号的包装,以及往返的转换。netnet.Dial、net.Listen、net.Addr |
multiformats/go-multihash | golang版的multihash实现,multihash是一种自描述hash,根据hash前缀可区分各种公认的加密哈希函数的输出,地址大小和编码注意事项 |
multiformats/go-varint | 帮助库,强制执行最少的编码 |