lotus/chain/store/fts.go

55 lines
1.0 KiB
Go
Raw Normal View History

2019-07-26 04:54:22 +00:00
package store
import (
"github.com/filecoin-project/lotus/chain/types"
2019-07-26 04:54:22 +00:00
"github.com/ipfs/go-cid"
)
// FullTipSet is an expanded version of the TipSet that contains all the blocks and messages
type FullTipSet struct {
Blocks []*types.FullBlock
tipset *types.TipSet
cids []cid.Cid
}
func NewFullTipSet(blks []*types.FullBlock) *FullTipSet {
return &FullTipSet{
Blocks: blks,
}
}
func (fts *FullTipSet) Cids() []cid.Cid {
if fts.cids != nil {
return fts.cids
}
var cids []cid.Cid
for _, b := range fts.Blocks {
cids = append(cids, b.Cid())
}
fts.cids = cids
return cids
}
2020-06-23 21:51:25 +00:00
// TipSet returns a narrower view of this FullTipSet elliding the block
// messages.
2019-07-26 04:54:22 +00:00
func (fts *FullTipSet) TipSet() *types.TipSet {
if fts.tipset != nil {
2020-06-23 21:51:25 +00:00
// FIXME: fts.tipset is actually never set. Should it memoize?
2019-07-26 04:54:22 +00:00
return fts.tipset
}
var headers []*types.BlockHeader
for _, b := range fts.Blocks {
headers = append(headers, b.Header)
}
ts, err := types.NewTipSet(headers)
if err != nil {
panic(err)
}
return ts
}