您的位置: 首页 > 星驰资讯 > 挖矿课堂

Filecoin设计规范—【2.1】 Filecoin节点(上)

2020-03-30 15:41:39  阅读:人  来自:挖矿课堂

星际联盟提供对Filecoin Spec 的全文翻译,便于Filecoin项目广大中国参与者理解Filecoin的深层原理。文章将定期更新章节,请持续关注"IPFS星际联盟"&"星际联盟Filecoin"公众号。

2. Filecoin系统

2.1 Filecoin节点

2.1.1 节点类型

2.1.1.1 节点接口

import repo "github.com/filecoin-project/specs/systems/filecoin_nodes/repository"
import filestore "github.com/filecoin-project/specs/systems/filecoin_files/file"
import clock "github.com/filecoin-project/specs/systems/filecoin_nodes/clock"
import libp2p "github.com/filecoin-project/specs/libraries/libp2p"
import message_pool "github.com/filecoin-project/specs/systems/filecoin_blockchain/message_pool"

type FilecoinNode struct {
    Node         libp2p.Node

    Repository   repo.Repository
    FileStore    filestore.FileStore
    Clock        clock.UTCClock

    MessagePool  message_pool.MessagePoolSubsystem
}

2.1.1.2 示例

Filecoin节点有很多类型 ...

本节将包含:

  • 所有节点必须具有什么?以及为什么?
  • 不同系统的使用案例

2.1.1.3 链验证节点

type ChainVerifierNode interface {
  FilecoinNode
  systems.Blockchain
}

2.1.1.4 客户端节点

type ClientNode struct {
  FilecoinNode

  systems.Blockchain
  markets.StorageMarketClient
  markets.RetrievalMarketClient
  markets.MarketOrderBook
  markets.DataTransfers
}

2.1.1.5 存储矿工节点

type StorageMinerNode interface {
  FilecoinNode

  systems.Blockchain
  systems.Mining
  markets.StorageMarketProvider
  markets.MarketOrderBook
  markets.DataTransfers
}

2.1.1.6 检索矿工节点

type RetrievalMinerNode interface {
  FilecoinNode

  blockchain.Blockchain
  markets.RetrievalMarketProvider
  markets.MarketOrderBook
  markets.DataTransfers
}

2.1.1.7 中继节点

type RelayerNode interface {
  FilecoinNode

  blockchain.MessagePool
  markets.MarketOrderBook
}

2.1.2 存储库 - 链数据与系统的本地存储

Filecoin节点存储库只是一个抽象概念,它表示任何功能的Filecoin节点都需要在本地存储数据,以便正确运行。

该存储库可供节点的系统与子系统访问,并可以充当通过节点的FileStore(文件库)划分的本地存储(例如)。

它用来存储节点的密钥,IPLD数据结构的状态对象和节点配置。

import ipld "github.com/filecoin-project/specs/libraries/ipld"
import key_store "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/key_store"
import config "github.com/filecoin-project/specs/systems/filecoin_nodes/repository/config"

type Repository struct {
    Config      config.Config
    KeyStore    key_store.KeyStore
    ChainStore  ipld.GraphStore
    StateStore  ipld.GraphStore
}

2.1.2.1 配置 - 配置值的本地存储

Filecoin节点配置

type ConfigKey string
type ConfigVal Bytes

type Config struct {
    Get(k ConfigKey) union {c ConfigVal, e error}
    Put(k ConfigKey, v ConfigVal) error

    Subconfig(k ConfigKey) Config
}

2.1.2.2 密钥库

密钥库是在任何完整的Filecoin节点中的一个基本抽象,用于存储与给定矿工的地址和不同的workers相关联的密钥配对(矿工应该选择运行多个workers)。

节点安全性在很大程度上取决于保持这些密钥的安全性。 为此,我们建议将密钥与任何给定的子系统分开,并使用单独的密钥存储来按子系统的要求对请求进行签名,并将那些不用作挖矿的一部分的密钥保存在冷存储中。

import filcrypto "github.com/filecoin-project/specs/algorithms/crypto"
import address "github.com/filecoin-project/go-address"

type KeyStore struct {
    MinerAddress  address.Address
    OwnerKey      filcrypto.VRFKeyPair
    WorkerKey     filcrypto.VRFKeyPair
}

Filecoin存储矿工依赖三个主要组成部分:

  • 矿工地址在存储算力共识子系统调用registerMiner()时,会被唯一分配给指定的存储矿工角色。它是给定存储矿工的唯一标识符,其算力和其他密钥将与之关联。
  • 所有者密钥对由矿工在注册之前提供,并且其公钥与矿工地址相关。 区块奖励与其他付款将被支付到所有者账户的地址。
  • worker密钥对可以由矿工自主选择和更改,该公钥与矿工地址相关联。 它可以用于签署交易,签名等。鉴于它用作Verifiable Random Function数的一部分,它必须是BLS密钥对。

虽然矿工地址是唯一的,但多个存储矿工角色可以共享一个所有者的公共密钥,或一个worker的公共密钥。在存储矿工角色Storage Miner Actor中指定了更改链上工作密钥对(即与存储矿工关联的workerKey)的过程。需要注意的是,这是一个两步的过程。首先,矿工通过向链发送消息来提出更改请求。收到密钥更改请求后,链会将其更改为以时期的随机性回溯参数数量的两倍,以防止自适应密钥选择攻击。每次查询工作密钥时,都会将挂起的变化进行延迟检查,并且可能会根据需要更新状态。

待完成:

  • 关于密钥安全失败后果的潜在建议或明确的免责声明

2.1.2.3 IpldStore - 哈希链表数据的本地存储

// imported as ipld.Object

import cid "github.com/ipfs/go-cid"

type Object interface {
    CID() cid.Cid

    // Populate(v interface{}) error
}

type GraphStore struct {
    // Retrieves a serialized value from the store by CID. Returns the value and whether it was found.
    Get(c cid.Cid) (util.Bytes, bool)

    // Puts a serialized value in the store, returning the CID.
    Put(value util.Bytes) (c cid.Cid)
}
 

Filecoin数据结构以IPLD格式存储,这是一种类似于json的数据格式,用于存储、检索和遍历哈希链表的数据DAGs。

Filecoin网络主要依赖于两个不同的IPLD GraphStores图集:

  • 一个ChainStore,用于存储区块链相关信息,包括区块头,相关消息等
  • 一个StateStore,用于存储来自给定区块链的有效载荷状态,或者由Filecoin VM将给定链中所有区块消息产生的stateTree应用于genesis state。

ChainStore在ChainSync( ChainSync - synchronizing the Blockchain)的引导阶段由节点从其对等节点下载,同步至区块链然后由节点存储。 每次接收到新的区块时,或者节点同步到一个新的最佳链时,都会对其进行更新。

StateStore是通过执行给定ChainStore中所有区块消息来计算的,然后由节点存储。它通过 VM Interpreter - Message Invocation (Outside VM)更新每个新传入块的处理,并相应地由在它上面的块在块头ParentState字段中生成的新块引用。

待完成:

  • 什么是IPLD
    • 哈希链接数据
    • 来自IPFS
  • 为什么与filecoin相关
    • 所有网络数据结构均是IPLD
    • 所有本地数据结构都可以是IPLD
  • 什么是一个IpldStore
    • dags的本地存储
  • 如何在FileCoin中使用IpldStores
    • 传递分发
  • 一个或多个ipldstore
    • 临时缓存
    • 中间计算状态
  • 垃圾收集

IPFS星际联盟

链接:https://www.ipfsunion.cn/news/class/92.html

来源:星际联盟Filecoin挖矿

声明:本站部分内容来源于网络转载,若有侵权,请及时与网站客服取得联系。

在线客服