http://www.7klian.com

Filecoin 类型解读 -- 系统节点

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

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

当向数据流写入 HelloMessage 时, 节点查抄当前最新区块以提供当前节点信息。当向数据流写入 LatencyMessage 时,节点配置吸收时间戳 TArrival 和发送时间戳 TSent。

Filecoin 网络存在各类范例的节点:

网络

在修改事情者密钥对时,会是两步进程。首先矿工向链上发送修窜改静,当链上收到后,密钥对的修改会缓存随机性回溯参数数量的两倍时间举办变动,以防备举办自适应密钥选择进攻。每次查询事情者密钥对时,城市对延迟的变动造行延迟查抄,而且大概会按照需要更新状态。

动静数据布局:

FilCloud 帮你迅速相识 IPFS 规模的热点技能和应用公家号:filcloud

存储矿工节点

type StorageMinerNode interface {  FilecoinNode

type UnixTime int64  // 时间戳

矿工注册时,公钥和矿工地点相关联的密钥对,矿工区块嘉奖等转账会转到这个公钥对应的地点。

  • StateStore 存储了颠末 Filecoin 虚拟机计较而来的区块链状态数据, 该状态数据由创世区块开始计较,当有新区块发生就会基于前一个区块状态计较出最新的状态。

       MessagePool  message_pool.MessagePoolSubsystem // 动静池子系统,存储未上链动静 }

    时钟需求

    Filecoin 协议中利用的时钟应该担保 1 秒以内的同步误差,以完成需要的验证。

    数据客栈是用来当地存储 Filecoin 节点正常运行时所需要的数据。数据客栈回收 FileStore 存储节点的密钥、有状态工具的 IPLD 数据布局和节点设置。

    type FilecoinNode struct {    Node         libp2p.Node // p2p节点

       Repository   repo.Repository // 资料库数据,存储区块链数据    FileStore    filestore.FileStore // 当地文件存储库,暂存存储在Filecoin中的文件    Clock        clock.UTCClock // 时钟

       // Populate(v interface{}) error }

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

       EpochAtTime(t UnixTime)  ChainEpoch }package clock

    用于存储数据的存储矿工利用。拥有区块链数据、挖矿、存储市场供给商、市场订单表、数据传输等子系统

    以下是 Filecoin 利用到的 libp2p 协议:

    1. 相对与其它节点有足够低的时钟误差(小于1秒),以担保不会挖出将来的区块。

       blockchain.MessagePool  markets.MarketOrderBook }

    2. 假如当前高度没有区块发生,依据协议生成下一高度的区块,以担保网络协议不变。

      Filecoin 网络主要依赖两种 IPLD 数据:

      节点设置可以按照 ConfigKey 获取和配置。

      后续

      时钟

      // ChainEpoch 暗示一个区块轮 type ChainEpoch int64

    3. 以下以Hello协议为例:

      矿工地点是独一的,而多个矿工可以共享一个所有者密钥对和事情者密钥对。

      密钥存储

      密钥存储用于存储与矿工地点对应的密钥对,节点安详基于这些密钥对的安详,,所以发起把密钥对存放在别的的系统里。

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

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

      节点根基数据布局界说如下:

      Filecoin 依靠此系统时钟来确保共鸣。详细来说,时间是支持验证法则所必须的,该验证法则可防备块出产者利用将来的时间戳来挖掘块,而且防备矿工的出块权的次数超出协议答允的范畴。

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

      • 客户端需要查询NTP处事来校准时间,好比 pool.ntp.orgtime.cloudflare.com:1234time.google.comntp-b.nist.gov。

        客户端节点

        type ClientNode struct {  FilecoinNode

        今朝焦点的是客户端节点和存储矿工节点。

    其他子系统将时钟子系统注册到 NewRound() 事件。

    用于索引数据所需的索引矿工利用。拥有区块链数据、索引市场供给商、市场订单表、数据传输等子系统。

  • KademliaDHT:用于发明节点的漫衍式哈希表,协议标识符为 /fil/<network-name>/kad/1.0.0。

    // EpochDuration 暗示一个区块时间 var EpochDuration = UnixTime(25)

    // LatencyMessage 和其他节点共享节点延迟 type LatencyMessage struct {    // Measured in unix nanoseconds     TArrival  Int    // Measured in unix nanoseconds    TSent     Int }

    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)

  • 矿工可以选择和修改的密钥对,公钥关联矿工地点,用于签名生意业务等,必需是 BLS 密钥对。

       Subconfig(k ConfigKey) Config }

    hello_connect: 成立毗连 -> 打开数据流 -> 向数据流中写入hello动静 -> 从数据流中读取延迟动静 -> 封锁数据流

    数据客栈

  • Hello: 处理惩罚新毗连的节点的寻找。协议标识符为 /fil/hello/1.0.0。

    节点范例

    // HelloMessage 和其它节点共享当前节点信息 type HelloMessage struct {    HeaviestTipSet       [cid.Cid]    HeaviestTipSetWeight  BigInt    HeaviestTipSetHeight  Int    GenesisHash           cid.Cid }

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

    链验证节点

    type ChainVerifierNode interface {  FilecoinNode

    中继节点

    type RelayerNode interface {  FilecoinNode

    End

    • ChainStore 存储了区块链数据,包罗区块头,相关动静等。这是从其它节点下载而来,当有新区块发生或有新的最佳链,随时会更新。

    • 预设高度值和系统时间戳的干系为epoch = Floor[(current_time - genesis_time) / epoch_time]。

    • Bootstrap List:用于新节点毗连入网络的初始化启动节点列表。

    • Peer Exchange:可以辅佐节点依据已毗连节点的现有节点发明更多节点。

      IPLD 数据布局

      type Object interface {    CID() cid.Cid

      Filecoin 数据布局是以 IPLD 名目存储,这是一种雷同于 json 的数据名目,用于存储,检索和遍历散列链接的数据 DAG。

    • 客户端可以在大型采矿功课中利用铯钟实现准确时间同步。

    • Gossipsub:用于区块头部和动静的广播,节点可以订阅相关主题以获取该主题的动静,同时转发给其它订阅同一主题的节点。协议标识符为/fil/blocks/<network-name> 和 /fil/msgs/<network-name>。

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

      // EpochAtTime 返回当前时间对应的区块高度 func (c *ChainEpochClock_I) EpochAtTime(t UnixTime) ChainEpoch { difference := t - c.GenesisTime() epochs := difference / EpochDuration return ChainEpoch(epochs) }

      hello协议包括两个进程:

      郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 说点什么吧
    • 全部评论(0
      还没有评论,快来抢沙发吧!

    相关文章阅读