memunit

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2019 License: GPL-3.0, GPL-3.0 Imports: 21 Imported by: 0

README

MemDag是专门用于存储非稳定单元的地方。 新产生的单元,没有群签名的情况下,都应先进入MemDag。MemDag负责存储所有分支,并确定最长链作为主链,但是不计算稳定单元。

#情形

  1. 加入了一个不稳定单元
    1. 该单元在当前最新单元的后面
    2. 该单元在当前最新单元的另一个分支上
    3. 该单元高度小于稳定单元:无效单元,舍弃
  2. 更新了一个稳定单元
    1. 该新稳定单元在MemDag中
    2. 该新稳定单元找不到
    3. 该新稳定单元没有现有稳定单元高

对外接口

增加一个单元

设置一个稳定单元

获得最新单元

获得主链上到稳定单元的所有单元

根据UnitHash或者Number获取一个单元

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ChainTempDb added in v1.0.1

type ChainTempDb struct {
	Tempdb         *Tempdb
	UnitRep        comm2.IUnitRepository
	UtxoRep        comm2.IUtxoRepository
	StateRep       comm2.IStateRepository
	PropRep        comm2.IPropRepository
	UnitProduceRep comm2.IUnitProduceRepository
	Validator      validator.Validator
	Unit           *modules.Unit
}

func NewChainTempDb added in v1.0.1

func NewChainTempDb(db ptndb.Database,
	cache palletcache.ICache, tokenEngine tokenengine.ITokenEngine) (*ChainTempDb, error)

func (*ChainTempDb) AddUnit added in v1.0.1

func (chain_temp *ChainTempDb) AddUnit(unit *modules.Unit, saveHeaderOnly bool) (*ChainTempDb, error)

type IMemDag

type IMemDag interface {
	AddUnit(unit *modules.Unit, txpool txspool.ITxPool, isProd bool) (common2.IUnitRepository, common2.IUtxoRepository,
		common2.IStateRepository, common2.IPropRepository, common2.IUnitProduceRepository, error)
	GetLastStableUnitInfo() (common.Hash, uint64)
	GetLastMainChainUnit() *modules.Unit
	GetChainUnits() map[common.Hash]*modules.Unit
	SetStableThreshold(threshold int)
	GetUnstableRepositories() (common2.IUnitRepository, common2.IUtxoRepository, common2.IStateRepository,
		common2.IPropRepository, common2.IUnitProduceRepository)
	SetUnitGroupSign(uHash common.Hash, groupSign []byte, txpool txspool.ITxPool) error
	GetHeaderByHash(hash common.Hash) (*modules.Header, error)
	GetHeaderByNumber(number *modules.ChainIndex) (*modules.Header, error)

	SubscribeToGroupSignEvent(ch chan<- modules.ToGroupSignEvent) event.Subscription
	Close()
}

type KeyValue

type KeyValue struct {
	Key, Value []byte
}

type MemDag

type MemDag struct {
	// contains filtered or unexported fields
}

func NewMemDag

func NewMemDag(token modules.AssetId, threshold int, saveHeaderOnly bool, db ptndb.Database,
	stableUnitRep common2.IUnitRepository, propRep common2.IPropRepository,
	stableStateRep common2.IStateRepository, cache palletcache.ICache,
	tokenEngine tokenengine.ITokenEngine) *MemDag

func (*MemDag) Close

func (pmg *MemDag) Close()

func (*MemDag) GetChainUnits

func (chain *MemDag) GetChainUnits() map[common.Hash]*modules.Unit

查询所有不稳定单元(不包括孤儿单元)

func (*MemDag) GetHeaderByHash

func (chain *MemDag) GetHeaderByHash(hash common.Hash) (*modules.Header, error)

func (*MemDag) GetHeaderByNumber

func (chain *MemDag) GetHeaderByNumber(number *modules.ChainIndex) (*modules.Header, error)

func (*MemDag) GetLastMainChainUnit

func (chain *MemDag) GetLastMainChainUnit() *modules.Unit

func (*MemDag) GetLastStableUnitInfo added in v1.0.1

func (chain *MemDag) GetLastStableUnitInfo() (common.Hash, uint64)

func (*MemDag) SetStableThreshold

func (pmg *MemDag) SetStableThreshold(count int)

func (*MemDag) SetUnitGroupSign

func (chain *MemDag) SetUnitGroupSign(uHash common.Hash, groupSign []byte,
	txpool txspool.ITxPool) error

func (*MemDag) SubscribeToGroupSignEvent

func (pmg *MemDag) SubscribeToGroupSignEvent(ch chan<- modules.ToGroupSignEvent) event.Subscription

type Tempdb

type Tempdb struct {
	// contains filtered or unexported fields
}

func NewTempdb

func NewTempdb(db ptndb.Database) (*Tempdb, error)

func (*Tempdb) Clear

func (db *Tempdb) Clear()

func (*Tempdb) Close

func (db *Tempdb) Close()

func (*Tempdb) Delete

func (db *Tempdb) Delete(key []byte) error

func (*Tempdb) Get

func (db *Tempdb) Get(key []byte) ([]byte, error)

func (*Tempdb) Has

func (db *Tempdb) Has(key []byte) (bool, error)

func (*Tempdb) Len

func (db *Tempdb) Len() int

func (*Tempdb) NewBatch

func (db *Tempdb) NewBatch() ptndb.Batch

func (*Tempdb) NewIterator

func (db *Tempdb) NewIterator() iterator.Iterator

func (*Tempdb) NewIteratorWithPrefix

func (db *Tempdb) NewIteratorWithPrefix(prefix []byte) iterator.Iterator

NewIteratorWithPrefix returns a iterator to iterate over subset of database content with a particular prefix. 这个最复杂,需要先去db数据库查询出map,然后把temp的列举出来,同样key的会被替换成新值,如果出现在del里面就删除,然后map转KeyValue数组

func (*Tempdb) Put

func (db *Tempdb) Put(key []byte, value []byte) error

type TempdbIterator

type TempdbIterator struct {
	// contains filtered or unexported fields
}

func (*TempdbIterator) Error

func (i *TempdbIterator) Error() error

func (*TempdbIterator) First

func (i *TempdbIterator) First() bool

implement iterator interface

func (*TempdbIterator) Key

func (i *TempdbIterator) Key() []byte

func (*TempdbIterator) Last

func (i *TempdbIterator) Last() bool

func (*TempdbIterator) Next

func (i *TempdbIterator) Next() bool

func (*TempdbIterator) Prev

func (i *TempdbIterator) Prev() bool

func (*TempdbIterator) Release

func (i *TempdbIterator) Release()

func (*TempdbIterator) Seek

func (i *TempdbIterator) Seek(key []byte) bool

func (*TempdbIterator) SetReleaser

func (i *TempdbIterator) SetReleaser(releaser util.Releaser)

func (*TempdbIterator) Valid

func (i *TempdbIterator) Valid() bool

func (*TempdbIterator) Value

func (i *TempdbIterator) Value() []byte

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL