memunit

package
v0.0.0-...-84a2c7a Latest Latest
Warning

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

Go to latest
Published: Sep 7, 2020 License: GPL-3.0, GPL-3.0 Imports: 24 Imported by: 0

README

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

#情形

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

对外接口

增加一个单元

设置一个稳定单元

获得最新单元

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

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

Documentation

Overview

* * This file is part of go-palletone. * go-palletone is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * go-palletone is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with go-palletone. If not, see <http://www.gnu.org/licenses/>. * / * * * @author PalletOne core developers <dev@pallet.one> * * @date 2018-2019 *

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ChainTempDb

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

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

func (*ChainTempDb) AddUnit

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

type IMemDag

type IMemDag interface {
	//增加一个稳定单元
	AddStableUnit(unit *modules.Unit) error
	////设置MemDag的稳定单元
	//SetStableUnit(unit *modules.Unit, isGenesis bool)
	//增加一个单元到MemDag
	AddUnit(unit *modules.Unit, txpool txspool.ITxPool, isProd bool) (common2.IUnitRepository, common2.IUtxoRepository,
		common2.IStateRepository, common2.IPropRepository, common2.IUnitProduceRepository, error)
	//保存Header
	SaveHeader(header *modules.Header) error
	//获取最新稳定单元的信息
	GetLastStableUnitInfo() (common.Hash, uint64)
	//获取主链的最新单元
	GetLastMainChainUnit() *modules.Unit
	//获取所有的不稳定单元
	GetChainUnits() map[common.Hash]*modules.Unit
	//设置要形成稳定单元的阈值,一般是2/3*Count(Mediator)
	SetStableThreshold(threshold int)
	//获得不稳定的Repository
	GetUnstableRepositories() (common2.IUnitRepository, common2.IUtxoRepository, common2.IStateRepository,
		common2.IPropRepository, common2.IUnitProduceRepository)
	//设置一个单元的群签名,使得该单元稳定
	SetUnitGroupSign(uHash common.Hash, groupSign []byte, txpool txspool.ITxPool) error
	//通过Hash获得Header
	GetHeaderByHash(hash common.Hash) (*modules.Header, error)
	//通过高度获得Header
	GetHeaderByNumber(number *modules.ChainIndex) (*modules.Header, error)
	//获得MemDag的信息,包括分叉情况,孤儿块等
	Info() (*modules.MemdagStatus, error)
	//订阅切换主链事件
	SubscribeSwitchMainChainEvent(ob SwitchMainChainEventFunc)
	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) AddStableUnit

func (chain *MemDag) AddStableUnit(unit *modules.Unit) error

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) GetLastStableUnitHash

func (chain *MemDag) GetLastStableUnitHash() common.Hash

func (*MemDag) GetLastStableUnitHeight

func (chain *MemDag) GetLastStableUnitHeight() uint64

func (*MemDag) GetLastStableUnitInfo

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

func (*MemDag) Info

func (chain *MemDag) Info() (*modules.MemdagStatus, error)

func (*MemDag) SaveHeader

func (chain *MemDag) SaveHeader(header *modules.Header) error

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) SubscribeSwitchMainChainEvent

func (pmg *MemDag) SubscribeSwitchMainChainEvent(ob SwitchMainChainEventFunc)

func (*MemDag) SubscribeToGroupSignEvent

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

type SwitchMainChainEvent

type SwitchMainChainEvent struct {
	OldLastUnit *modules.Unit
	NewLastUnit *modules.Unit
}

type SwitchMainChainEventFunc

type SwitchMainChainEventFunc func(event *SwitchMainChainEvent)

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