Filecoin 比起之前的 BTC 和 ETH 提出了一个新概念,这个新概念就是 TipSet
。 我们要怎么理解这个概念呢?
简单的理解,你可以看成是多个 块(block)
的集合,也就是一个 TipSet
可以有多个唯一的 块(block)
。
打个比方,我们家里洗菜的时候,有时候爸妈会同时洗一个菜,洗完了然后再洗洗一个菜,如果把每种菜里的每棵菜堪称是一个事物 transaction
,那么每种菜就是一个块 block
。 这是 BTC 和 ETH 时代 block
和 transaction
之间的关系
但在 Filecoin 里,爸妈(也就是矿工)就不这么做了,它们可能是闹别扭了,洗菜之前先各自领了几种菜,然后各自洗菜。我们把每次领的动作看成是一个 TipSet
.
解释的有点牵强,以后有空回来改吧
TipSet
TipSet 在 lotus/chain/types/tipset.go
文件中定义
type TipSet struct { cids []cid.Cid // 每个块的 CID 的集合 blks []*BlockHeader // 多个块 height abi.ChainEpoch // 最低块的块高 }
看到这个结构体,你是不是很疑惑,为啥属性都是小写的,这样就没法赋值和序列化了。
哈哈,其实,这个结构体是对内使用的。
从 TipSet
的结构中可以看出,TipSet
就是把多个块,有序的块放到了一起而已。
cids
是blks
属性中每一个BlockHeader.Cid
的集合height
是blks
属性中BlockHeader.Height
的最小值
ExpTipSet
当然了,你如果翻看源码,可以发现还有一个一模一样的结构 ExpTipSet
type ExpTipSet struct { Cids []cid.Cid Blocks []*BlockHeader Height abi.ChainEpoch }
Exp
其实就是 Export
的简写,也就是这个结构是对外用的。
目前尚无回复