dag

package
v1.0.9 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: 38 Imported by: 0

README

+------------------------------------------------------------------------------------------+
|                                                                                          |
|                                           Dag                                            |
|                                                                                          |
+--+-------------+-------------------+------------------------+---------------------+------+
   |             |                   |                        |                     |
   |             |                   |                        |                     |
   |             |                   |                        |                     |
   |             |                   |                        |                     |
+--v---+     +---v--+     +----------v---------+   +----------v--------+   +--------v------+
|      |     |      |     |                    +--->  UtxoRepository   |   |   Validator   |
|      +----->      +----->   UnitRepository   |   +-------------------+   +--------------++
|      |     |      |     |                    +---------------------------+              |
|      |     |      |     +------+----------+--------------+   |           |              |
|      |     |      |            |          |              |   |           |              |
|      |     |      |            |          |              |   |           |              |
|      |     |      |       +----v-----+  +-v-------+  +---v---v--+  +-----v----+         |
|TxPool|     |MemDag|       |  dagdb   |  |  idxdb  |  |  utxodb  |  |  statedb <---------+
|      |     |      |       +------+---+  +----+----+  +----+-----+  +-----+----+
|      |     |      |              |           |            |              |
|      |     |      |              |           |            |              |
|      |     |      |              |           |            |              |
|      |     |      |              |     +-----v------------v------+       |
|      |     |      |              |     |                         |       |
|      |     |      |              +---> |     ptndb.Database      | <-----+
|      |     |      |                    |                         |
+------+     +------+                    +-------------------------+

TxPool交易池 与DAG的解耦

Dag中不引入任何TxPool的逻辑,DAG只专注于数据的存储和查询。DAG中发生了Unit的变化时,通过事件通知TxPool订阅者。 事件包括:

  • 增加一个Unit到最新Unit的后面
  • 回滚一个Unit到其父单元
  • 将某个单元设置为稳定单元

MemDag内存暂存单元

LevelDB存储

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Dag

type Dag struct {
	Cache palletcache.ICache
	Db    ptndb.Database

	ChainHeadFeed *event.Feed

	Mutex           sync.RWMutex
	Memdag          memunit.IMemDag                     // memory unit
	PartitionMemDag map[modules.AssetId]memunit.IMemDag //其他分区的MemDag
	// contains filtered or unexported fields
}

func NewDag

func NewDag(db ptndb.Database, localdb ptndb.Database, cache palletcache.ICache, light, enableGasFee bool) (*Dag, error)

newDag, with db , light to build a new dag firstly to check db migration, is updated ptn database.

func NewDagForTest

func NewDagForTest(db ptndb.Database) (*Dag, error)

to build a dag for test

func NewDagSimple added in v1.0.6

func NewDagSimple(db ptndb.Database) (*Dag, error)

to build a new dag when init genesis 构造一个简单Dag,主要用于创世,内存操作等

func (*Dag) ActiveMediatorsCount

func (d *Dag) ActiveMediatorsCount() int

author Albert·Gou

func (*Dag) AfterChainMaintenanceEvent

func (dag *Dag) AfterChainMaintenanceEvent(arg *modules.ChainMaintenanceEvent)

after chain maintenance to set stable threshold

func (*Dag) AfterSysContractStateChangeEvent

func (dag *Dag) AfterSysContractStateChangeEvent(arg *modules.SysContractStateChangeEvent)

to refresh partition memdag

func (*Dag) ChainThreshold

func (d *Dag) ChainThreshold() int

author Albert·Gou

func (*Dag) CheckHeaderCorrect added in v1.0.3

func (d *Dag) CheckHeaderCorrect(number int) error

func (*Dag) CheckReadSetValid added in v1.0.5

func (d *Dag) CheckReadSetValid(contractId []byte, readSet []modules.ContractReadSet) bool

func (*Dag) CheckUnitsCorrect added in v1.0.3

func (d *Dag) CheckUnitsCorrect(assetId string, number int) error

func (*Dag) ClearAddrUtxo added in v1.0.4

func (dag *Dag) ClearAddrUtxo(addr common.Address) error

func (*Dag) ClearUtxo

func (dag *Dag) ClearUtxo() error

clear all utxo by address

func (*Dag) Close

func (d *Dag) Close()

close a dag

func (*Dag) CreateGenericTransaction

func (dag *Dag) CreateGenericTransaction(from, to common.Address, daoAmount, daoFee uint64, certID *big.Int,
	msg *modules.Message, enableGasFee bool) (*modules.Transaction, uint64, error)

func (*Dag) CreateTokenTransaction

func (dag *Dag) CreateTokenTransaction(from, to common.Address, token *modules.Asset, daoAmountToken, daoFee uint64,
	msg *modules.Message) (*modules.Transaction, uint64, error)

to build a transfer transactions by the token, from to fee

func (*Dag) CurrentHeader

func (d *Dag) CurrentHeader(token modules.AssetId) *modules.Header

return latest header by assetId

func (*Dag) CurrentUnit

func (d *Dag) CurrentUnit(token modules.AssetId) *modules.Unit

return stable unit in dag

func (*Dag) FastSyncCommitHead

func (d *Dag) FastSyncCommitHead(hash common.Hash) error

FastSyncCommitHead sets the current head block to the one defined by the hash irrelevant what the chain contents were prior.

func (*Dag) GenTransferPtnTx

func (dag *Dag) GenTransferPtnTx(from, to common.Address, daoAmount uint64, text *string, enableGasFee bool) (*modules.Transaction, uint64, error)

构建一个转ptn的转账交易

func (*Dag) GenVoteMediatorTx

func (dag *Dag) GenVoteMediatorTx(voter common.Address, mediators map[string]bool, enableGasFee bool, ks *keystore.KeyStore) (*modules.Transaction, uint64, error)

to build a vote mediator transaction

func (*Dag) GenerateUnit

func (dag *Dag) GenerateUnit(when time.Time, producer common.Address, groupPubKey []byte, ks *keystore.KeyStore,
	txp txspool.ITxPool, cp *jury.Processor, allowedNoTxs bool) (*modules.Unit, error)

GenerateUnit, generate unit

func (*Dag) GetAccountVotedMediators

func (d *Dag) GetAccountVotedMediators(addr common.Address) map[string]bool

func (*Dag) GetActiveMediator

func (d *Dag) GetActiveMediator(add common.Address) *core.Mediator

author Albert·Gou

func (*Dag) GetActiveMediatorAddr

func (d *Dag) GetActiveMediatorAddr(index int) common.Address

author Albert·Gou

func (*Dag) GetActiveMediatorInitPubs

func (d *Dag) GetActiveMediatorInitPubs() []kyber.Point

author Albert·Gou

func (*Dag) GetActiveMediatorNodes

func (d *Dag) GetActiveMediatorNodes() map[string]*discover.Node

author Albert·Gou

func (*Dag) GetActiveMediators

func (d *Dag) GetActiveMediators() []common.Address

author Albert·Gou

func (*Dag) GetAddr1TokenUtxos

func (d *Dag) GetAddr1TokenUtxos(addr common.Address, asset *modules.Asset) (
	map[modules.OutPoint]*modules.Utxo, error)

get the token balance by address and asset

func (*Dag) GetAddrByOutPoint

func (d *Dag) GetAddrByOutPoint(outPoint *modules.OutPoint) (common.Address, error)

return address by outpoint

func (*Dag) GetAddrOutpoints

func (d *Dag) GetAddrOutpoints(addr common.Address) ([]modules.OutPoint, error)

return all outpoint by address

func (*Dag) GetAddrStableUtxos added in v1.0.3

func (d *Dag) GetAddrStableUtxos(addr common.Address) (map[modules.OutPoint]*modules.Utxo, error)

func (*Dag) GetAddrTransactions

func (d *Dag) GetAddrTransactions(addr common.Address) ([]*modules.TransactionWithUnitInfo, error)

return all transaction with unit info by address

func (*Dag) GetAddrUtxoAndReqMapping added in v1.0.6

func (d *Dag) GetAddrUtxoAndReqMapping(addr common.Address, asset *modules.Asset) (
	map[modules.OutPoint]*modules.Utxo, map[common.Hash]common.Hash, error)

func (*Dag) GetAddrUtxoTxs added in v1.0.6

func (d *Dag) GetAddrUtxoTxs(addr common.Address) ([]*modules.TransactionWithUnitInfo, error)

func (*Dag) GetAddrUtxos

func (d *Dag) GetAddrUtxos(addr common.Address) (map[modules.OutPoint]*modules.Utxo, error)

get all utxos in dag by address

func (*Dag) GetAddressCount added in v1.0.6

func (d *Dag) GetAddressCount() int

func (*Dag) GetAllContractTpl

func (d *Dag) GetAllContractTpl() ([]*modules.ContractTemplate, error)

return all contract templates

func (*Dag) GetAllContracts

func (d *Dag) GetAllContracts() ([]*modules.Contract, error)

return all contract from dag

func (*Dag) GetAllData added in v1.0.4

func (d *Dag) GetAllData() ([][]byte, [][]byte)

func (*Dag) GetAllLeafNodes

func (d *Dag) GetAllLeafNodes() ([]*modules.Header, error)

All leaf nodes for dag downloader. 根据资产Id返回所有链的header。

func (*Dag) GetAllUtxos

func (d *Dag) GetAllUtxos() (map[modules.OutPoint]*modules.Utxo, error)

return all utxo in dag

func (*Dag) GetAssetReference added in v1.0.1

func (d *Dag) GetAssetReference(asset []byte) ([]*modules.ProofOfExistence, error)

return proof of existence by asset

func (*Dag) GetAssetTxHistory

func (d *Dag) GetAssetTxHistory(asset *modules.Asset) ([]*modules.TransactionWithUnitInfo, error)

return all transaction with unit info by asset

func (*Dag) GetBlacklistAddress added in v1.0.3

func (d *Dag) GetBlacklistAddress() ([]common.Address, *modules.StateVersion, error)

func (*Dag) GetChainParameters

func (dag *Dag) GetChainParameters() *core.ChainParameters

func (*Dag) GetCommon

func (d *Dag) GetCommon(key []byte, stableDb bool) ([]byte, error)

dag's common geter, return the key's value

func (*Dag) GetCommonByPrefix

func (d *Dag) GetCommonByPrefix(prefix []byte, stableDb bool) map[string][]byte

return the prefix's all key && value.

func (*Dag) GetContract

func (d *Dag) GetContract(id []byte) (*modules.Contract, error)

get contract by contract id

func (*Dag) GetContractDeploy

func (d *Dag) GetContractDeploy(tempId, contractId []byte, name string) (*modules.ContractDeployPayload, error)

get contract deploy by tempId, contractId, and name

func (*Dag) GetContractDevelopers added in v1.0.1

func (d *Dag) GetContractDevelopers() ([]common.Address, error)

func (*Dag) GetContractJury

func (d *Dag) GetContractJury(contractId []byte) (*modules.ElectionNode, error)

return electionInfo by contractId

func (*Dag) GetContractState

func (d *Dag) GetContractState(id []byte, field string) ([]byte, *modules.StateVersion, error)

get contract state return codes, state version by contractId and field

func (*Dag) GetContractStateByVersion added in v1.0.4

func (d *Dag) GetContractStateByVersion(id []byte, field string, version *modules.StateVersion) ([]byte, error)

func (*Dag) GetContractStatesById

func (d *Dag) GetContractStatesById(id []byte) (map[string]*modules.ContractStateValue, error)

get contract all state

func (*Dag) GetContractStatesByPrefix

func (d *Dag) GetContractStatesByPrefix(id []byte, prefix string) (map[string]*modules.ContractStateValue, error)

return contract state value by contractId, prefix

func (*Dag) GetContractTpl

func (d *Dag) GetContractTpl(tplId []byte) (*modules.ContractTemplate, error)

return contract template by tlpId

func (*Dag) GetContractTplCode

func (d *Dag) GetContractTplCode(tplId []byte) ([]byte, error)

return the tplid's tlp code

func (*Dag) GetContractsByTpl

func (d *Dag) GetContractsByTpl(tplId []byte) ([]*modules.Contract, error)

return all contract by tplId from dag

func (*Dag) GetContractsWithJuryAddr added in v1.0.5

func (d *Dag) GetContractsWithJuryAddr(addr common.Hash) []*modules.Contract

func (*Dag) GetCurrentMemUnit

func (d *Dag) GetCurrentMemUnit(assetId modules.AssetId) *modules.Unit

return latest unit in the memdag of assetid func (d *Dag) GetCurrentMemUnit(assetId modules.AssetId, index uint64) *modules.Unit {

func (*Dag) GetCurrentUnit

func (d *Dag) GetCurrentUnit(assetId modules.AssetId) *modules.Unit

return higher unit in memdag

func (*Dag) GetCurrentUnitIndex

func (d *Dag) GetCurrentUnitIndex(token modules.AssetId) (*modules.ChainIndex, error)

return the chain index by assetId

func (*Dag) GetDataVersion

func (d *Dag) GetDataVersion() (*modules.DataVersion, error)

return a data version from dag

func (*Dag) GetDb added in v1.0.6

func (d *Dag) GetDb() ptndb.Database

func (*Dag) GetDynGlobalProp

func (d *Dag) GetDynGlobalProp() *modules.DynamicGlobalProperty

func (*Dag) GetFileInfo

func (d *Dag) GetFileInfo(filehash []byte) ([]*modules.ProofOfExistencesInfo, error)

return a file info by the filehash

func (*Dag) GetGenesisUnit

func (d *Dag) GetGenesisUnit() (*modules.Unit, error)

return genesis unit of ptn chain

func (*Dag) GetGlobalProp

func (d *Dag) GetGlobalProp() *modules.GlobalProperty

func (*Dag) GetHeaderByHash

func (d *Dag) GetHeaderByHash(hash common.Hash) (*modules.Header, error)

return the header by hash in dag

func (*Dag) GetHeaderByNumber

func (d *Dag) GetHeaderByNumber(number *modules.ChainIndex) (*modules.Header, error)

return the header by chain index in dag

func (*Dag) GetHeadersByAuthor added in v1.0.4

func (d *Dag) GetHeadersByAuthor(authorAddr common.Address, startHeight, count uint64) ([]*modules.Header, error)

func (*Dag) GetImmutableChainParameters

func (dag *Dag) GetImmutableChainParameters() *core.ImmutableChainParameters

func (*Dag) GetIrreversibleUnitNum

func (d *Dag) GetIrreversibleUnitNum(id modules.AssetId) uint64

func (*Dag) GetJurorByAddrHash added in v1.0.3

func (d *Dag) GetJurorByAddrHash(hash common.Hash) (*modules.JurorDeposit, error)

func (*Dag) GetJurorReward added in v1.0.4

func (d *Dag) GetJurorReward(jurorAdd common.Address) common.Address

func (*Dag) GetLightChainHeight

func (d *Dag) GetLightChainHeight(assetId modules.AssetId) uint64

return a light chain's height by the assetId

func (*Dag) GetLocalTx added in v1.0.6

func (dag *Dag) GetLocalTx(txId common.Hash) (*modules.Transaction, modules.TxStatus, error)

查询某交易的内容和状态

func (*Dag) GetMainChain

func (bc *Dag) GetMainChain() (*modules.MainChain, error)

return main chain from dag

func (*Dag) GetMainCurrentUnit

func (d *Dag) GetMainCurrentUnit() *modules.Unit

return last main chain unit in memdag

func (*Dag) GetMediator

func (d *Dag) GetMediator(add common.Address) *core.Mediator

func (*Dag) GetMediatorCount added in v1.0.2

func (dag *Dag) GetMediatorCount() int

func (*Dag) GetMediatorInfo

func (d *Dag) GetMediatorInfo(address common.Address) *modules.MediatorInfo

func (*Dag) GetMediatorSchl

func (d *Dag) GetMediatorSchl() *modules.MediatorSchedule

func (*Dag) GetMediators

func (dag *Dag) GetMediators() map[common.Address]bool

func (*Dag) GetNewestUnit added in v1.0.6

func (d *Dag) GetNewestUnit(token modules.AssetId) (common.Hash, *modules.ChainIndex, error)

func (*Dag) GetNewestUnitTimestamp

func (dag *Dag) GetNewestUnitTimestamp(token modules.AssetId) (int64, error)

func (*Dag) GetPartitionChains

func (bc *Dag) GetPartitionChains() ([]*modules.PartitionChain, error)

return all partition chain from dag

func (*Dag) GetPayload added in v1.0.8

func (dag *Dag) GetPayload(from, to common.Address, daoAmount, daoFee uint64,
	utxos map[modules.OutPoint]*modules.Utxo) (*modules.PaymentPayload, error)

func (*Dag) GetPrecedingMediatorNodes

func (d *Dag) GetPrecedingMediatorNodes() map[string]*discover.Node

func (*Dag) GetProofOfExistencesByMaindata added in v1.0.7

func (d *Dag) GetProofOfExistencesByMaindata(maindata []byte) ([]*modules.ProofOfExistencesInfo, error)

return ProofOfExistences by the maindata

func (*Dag) GetPtnBalance

func (d *Dag) GetPtnBalance(addr common.Address) uint64

func (*Dag) GetScheduledMediator

func (dag *Dag) GetScheduledMediator(slotNum uint32) common.Address

func (*Dag) GetSlotAtTime

func (dag *Dag) GetSlotAtTime(when time.Time) uint32

func (*Dag) GetSlotTime

func (dag *Dag) GetSlotTime(slotNum uint32) time.Time

func (*Dag) GetStableChainIndex added in v1.0.3

func (d *Dag) GetStableChainIndex(token modules.AssetId) *modules.ChainIndex

func (*Dag) GetStableTransactionOnly added in v1.0.5

func (d *Dag) GetStableTransactionOnly(hash common.Hash) (*modules.Transaction, error)

return the stable transaction by hash

func (*Dag) GetStableUnit added in v1.0.5

func (d *Dag) GetStableUnit(hash common.Hash) (*modules.Unit, error)

return the stable unit by hash or number

func (*Dag) GetStableUnitByNumber added in v1.0.5

func (d *Dag) GetStableUnitByNumber(number *modules.ChainIndex) (*modules.Unit, error)

return the stable unit by chain index

func (*Dag) GetStxoEntry added in v1.0.1

func (d *Dag) GetStxoEntry(outpoint *modules.OutPoint) (*modules.Stxo, error)

get the stxoEntry by outpoint

func (*Dag) GetTransaction

func (d *Dag) GetTransaction(hash common.Hash) (*modules.TransactionWithUnitInfo, error)

return the transaction with unit packed by hash

func (*Dag) GetTransactionOnly

func (d *Dag) GetTransactionOnly(hash common.Hash) (*modules.Transaction, error)

return the transaction by hash

func (*Dag) GetTrieSyncProgress

func (d *Dag) GetTrieSyncProgress() (uint64, error)

get trie sync progress

func (*Dag) GetTxByReqId

func (d *Dag) GetTxByReqId(reqid common.Hash) (*modules.TransactionWithUnitInfo, error)

return the transaction with unit info by reqid

func (*Dag) GetTxFee

func (d *Dag) GetTxFee(pay *modules.Transaction) (*modules.AmountAsset, error)

// get the tx's utxoView

func (d *Dag) GetUtxoView(tx *modules.Transaction) (*txpool2.UtxoViewpoint, error) {
	neededSet := make(map[modules.OutPoint]struct{})

	for _, msgcopy := range tx.TxMessages() {
		if msgcopy.App == modules.APP_PAYMENT {
			if msg, ok := msgcopy.Payload.(*modules.PaymentPayload); ok {
				if !msg.IsCoinbase() {
					for _, in := range msg.Inputs {
						neededSet[*in.PreviousOutPoint] = struct{}{}
					}
				}
			}
		}
	}

	view := txpool2.NewUtxoViewpoint()
	d.Mutex.RLock()
	defer d.Mutex.RUnlock()
	err := view.FetchUtxos(d.unstableUtxoRep, neededSet)
	return view, err
}

// get the tx's utxoViewpoint

func (d *Dag) GetUtxosOutViewbyTx(tx *modules.Transaction) *txpool2.UtxoViewpoint {
	view := txpool2.NewUtxoViewpoint()
	view.AddTxOuts(tx)
	return view
}

// get the unit's utxoViewPoint

func (d *Dag) GetUtxosOutViewbyUnit(unit *modules.Unit) *txpool2.UtxoViewpoint {
	txs := unit.Transactions()
	view := txpool2.NewUtxoViewpoint()
	for _, tx := range txs {
		vi := d.GetUtxosOutViewbyTx(tx)
		for key, utxo := range vi.Entries() {
			view.AddUtxo(key, utxo)
		}
	}
	return view
}

return the transaction's fee ,

func (*Dag) GetTxHashByReqId

func (d *Dag) GetTxHashByReqId(reqid common.Hash) (common.Hash, error)

return a transaction hash by the reqId

func (*Dag) GetTxOutput added in v1.0.1

func (d *Dag) GetTxOutput(outpoint *modules.OutPoint) (*modules.Utxo, error)

get the txoutput by outpoint include UTXO and STXO

func (*Dag) GetTxPackInfo added in v1.0.6

func (d *Dag) GetTxPackInfo(hash common.Hash) (*modules.TxPackInfo, error)

func (*Dag) GetTxSearchEntry

func (d *Dag) GetTxSearchEntry(hash common.Hash) (*modules.TxLookupEntry, error)

retunr the txLookEntry by transaction hash

func (*Dag) GetUnitByHash

func (dag *Dag) GetUnitByHash(hash common.Hash) (*modules.Unit, error)

func (*Dag) GetUnitByNumber

func (d *Dag) GetUnitByNumber(number *modules.ChainIndex) (*modules.Unit, error)

return the unit by chain index

func (*Dag) GetUnitHash added in v1.0.2

func (d *Dag) GetUnitHash(number *modules.ChainIndex) (common.Hash, error)

func (*Dag) GetUnitHashesFromHash

func (d *Dag) GetUnitHashesFromHash(hash common.Hash, max uint64) []common.Hash

GetBlockHashesFromHash retrieves a number of block hashes starting at a given hash, fetching towards the genesis block.

func (*Dag) GetUnitNumber

func (d *Dag) GetUnitNumber(hash common.Hash) (*modules.ChainIndex, error)

get unit chain index by hash

func (*Dag) GetUnitTransactions

func (d *Dag) GetUnitTransactions(hash common.Hash) (modules.Transactions, error)

return unit's body , all transactions of unit by hash

func (*Dag) GetUnitTxsHash

func (d *Dag) GetUnitTxsHash(hash common.Hash) ([]common.Hash, error)

GetUnitTxsHash is return the unit's txs hash list.

func (*Dag) GetUnstableUnits

func (d *Dag) GetUnstableUnits() []*modules.Unit

return all unstable units in memdag

func (*Dag) GetUtxoEntry

func (d *Dag) GetUtxoEntry(outpoint *modules.OutPoint) (*modules.Utxo, error)

get the utxoEntry by outpoint

func (*Dag) GetVotingForMediator added in v1.0.3

func (d *Dag) GetVotingForMediator(addStr string) (map[string]uint64, error)

func (*Dag) HasHeader

func (d *Dag) HasHeader(hash common.Hash, number uint64) bool

return has header exist in dag or not by hash

func (*Dag) HasUnit

func (d *Dag) HasUnit(hash common.Hash) bool

return the unit exist in dag is true or false

func (*Dag) HeadUnitHash

func (dag *Dag) HeadUnitHash() common.Hash

func (*Dag) HeadUnitNum

func (dag *Dag) HeadUnitNum() uint64

func (*Dag) HeadUnitTime

func (dag *Dag) HeadUnitTime() int64

func (*Dag) InitPropertyDB

func (dag *Dag) InitPropertyDB(genesis *core.Genesis, unit *modules.Unit) error

func (*Dag) InitStateDB

func (dag *Dag) InitStateDB(genesis *core.Genesis, head *modules.Header) error

func (*Dag) InsertDag

func (d *Dag) InsertDag(units modules.Units, is_stable bool) (int, error)

InsertDag attempts to insert the given batch of blocks in to the canonical chain or, otherwise, create a fork. If an error is returned it will return the index number of the failing block as well an error describing what went wrong. After insertion is done, all accumulated events will be fired. reference : Eth InsertChain

func (*Dag) InsertHeaderDag

func (d *Dag) InsertHeaderDag(headers []*modules.Header) (int, error)

InsertHeaderDag attempts to insert the given header chain in to the local chain, possibly creating a reorg. If an error is returned, it will return the index number of the failing header as well an error describing what went wrong.

The verify parameter can be used to fine tune whether nonce verification should be done or not. The reason behind the optional check is because some of the header retrieval mechanisms already need to verify nonces, as well as because nonces can be verified sparsely, not needing to check each.

func (*Dag) InsertLightHeader

func (d *Dag) InsertLightHeader(headers []*modules.Header) (int, error)

insert headers into a light

func (*Dag) InsertUnit added in v1.0.7

func (d *Dag) InsertUnit(unit *modules.Unit) error

insert unit, 直接存储某单元,不关心memdag状态

func (*Dag) IsActiveJury

func (d *Dag) IsActiveJury(addr common.Address) bool

func (*Dag) IsActiveMediator

func (d *Dag) IsActiveMediator(add common.Address) bool

func (*Dag) IsConsecutiveMediator

func (dag *Dag) IsConsecutiveMediator(nextMediator common.Address) bool

判断该mediator是下一个产块mediator

func (*Dag) IsContractDeveloper added in v1.0.1

func (d *Dag) IsContractDeveloper(addr common.Address) bool

func (*Dag) IsEmpty

func (d *Dag) IsEmpty() bool

func (*Dag) IsHeaderExist

func (d *Dag) IsHeaderExist(hash common.Hash) bool

return has header exist in dag or not by hash

func (*Dag) IsIrreversibleUnit

func (d *Dag) IsIrreversibleUnit(hash common.Hash) (bool, error)

func (*Dag) IsMediator

func (dag *Dag) IsMediator(address common.Address) bool

func (*Dag) IsPrecedingMediator

func (d *Dag) IsPrecedingMediator(add common.Address) bool

func (*Dag) IsSynced

func (dag *Dag) IsSynced(toStrictly bool) bool

func (*Dag) IsTransactionExist

func (d *Dag) IsTransactionExist(hash common.Hash) (bool, error)

return the transaction exist in dag is true or false

func (*Dag) IsUtxoSpent added in v1.0.1

func (d *Dag) IsUtxoSpent(outpoint *modules.OutPoint) (bool, error)

return the true or false , is utxo is spent.

func (*Dag) JuryCount

func (d *Dag) JuryCount() uint

func (*Dag) LastMaintenanceTime

func (dag *Dag) LastMaintenanceTime() int64

func (*Dag) LookupMediatorInfo

func (dag *Dag) LookupMediatorInfo() []*modules.MediatorInfo2

func (*Dag) MediatorParticipationRate

func (dag *Dag) MediatorParticipationRate() uint32

计算最近128个生产slots的mediator参与度,不包括当前unit Calculate the percent of unit production slots that were missed in the past 128 units, not including the current unit.

func (*Dag) MediatorVotedResults

func (d *Dag) MediatorVotedResults() (map[string]uint64, error)

return all mediators voted results

func (*Dag) MemdagInfos added in v1.0.4

func (d *Dag) MemdagInfos() (*modules.MemdagInfos, error)

func (*Dag) NewTemp added in v1.0.6

func (dag *Dag) NewTemp() (dboperation.IContractDag, error)

func (*Dag) ParentsIsConfirmByHash

func (d *Dag) ParentsIsConfirmByHash(hash common.Hash) bool

return the unit's parent confirmed is true or false

func (*Dag) PostChainEvents

func (bc *Dag) PostChainEvents(events []interface{})

PostChainEvents iterates over the events generated by a chain insertion and posts them into the event feed. TODO: Should not expose PostChainEvents. The chain events should be posted in WriteBlock.

func (*Dag) PrecedingMediatorsCount

func (d *Dag) PrecedingMediatorsCount() int

func (*Dag) PrecedingThreshold

func (d *Dag) PrecedingThreshold() int

func (*Dag) QueryDbByKey

func (d *Dag) QueryDbByKey(key []byte) ([]byte, error)

func (*Dag) QueryDbByPrefix

func (d *Dag) QueryDbByPrefix(prefix []byte) ([]*modules.DbRow, error)

func (*Dag) QueryProofOfExistenceByReference

func (d *Dag) QueryProofOfExistenceByReference(ref []byte) ([]*modules.ProofOfExistence, error)

return proof of existence

func (*Dag) RebuildAddrTxIndex added in v1.0.3

func (d *Dag) RebuildAddrTxIndex() error

func (*Dag) RefreshAddrTxIndex

func (d *Dag) RefreshAddrTxIndex() error

refresh all address transaction's index

func (*Dag) RefreshPartitionMemDag added in v1.0.4

func (d *Dag) RefreshPartitionMemDag()

refresh partition memdag when newdag or system contract state be changed.

func (*Dag) RefreshSysParameters

func (d *Dag) RefreshSysParameters()

refresh system parameters

func (*Dag) SaveCommon

func (d *Dag) SaveCommon(key, val []byte) error

save the key, value

func (*Dag) SaveContract added in v1.0.5

func (d *Dag) SaveContract(contract *modules.Contract) error

func (*Dag) SaveLocalTx added in v1.0.6

func (dag *Dag) SaveLocalTx(tx *modules.Transaction) error

通过本地RPC创建或广播的交易

func (*Dag) SaveLocalTxStatus added in v1.0.6

func (dag *Dag) SaveLocalTxStatus(txId common.Hash, status modules.TxStatus) error

保存某交易的状态

func (*Dag) SaveTransaction added in v1.0.6

func (d *Dag) SaveTransaction(tx *modules.Transaction, txIndex int) error

func (*Dag) SaveUnit

func (d *Dag) SaveUnit(unit *modules.Unit, isGenesis bool) error

save unit, 目前只用来存创世unit

func (*Dag) SaveUtxoView

func (dag *Dag) SaveUtxoView(view map[modules.OutPoint]*modules.Utxo) error

save all utxo of a view

func (*Dag) SetUnitGroupSign

func (d *Dag) SetUnitGroupSign(unitHash common.Hash, groupSign []byte) error

set the unit's group sign ,and set to be stable unit by hash

func (*Dag) StableHeadUnitProperty added in v1.0.5

func (d *Dag) StableHeadUnitProperty(asset modules.AssetId) (*modules.UnitProperty, error)

func (*Dag) StableUnitNum added in v1.0.7

func (dag *Dag) StableUnitNum() uint64

func (*Dag) StoreDataVersion

func (d *Dag) StoreDataVersion(dv *modules.DataVersion) error

store a data version in dag

func (*Dag) SubscribeActiveMediatorsUpdatedEvent

func (d *Dag) SubscribeActiveMediatorsUpdatedEvent(ch chan<- modules.ActiveMediatorsUpdatedEvent) event.Subscription

subscribe active mediators updated event

func (*Dag) SubscribeChainEvent

func (bc *Dag) SubscribeChainEvent(ch chan<- modules.ChainEvent) event.Subscription

SubscribeChainEvent registers a subscription of ChainEvent.

func (*Dag) SubscribeChainHeadEvent

func (bc *Dag) SubscribeChainHeadEvent(ch chan<- modules.ChainHeadEvent) event.Subscription

SubscribeChainHeadEvent registers a subscription of ChainHeadEvent.

func (*Dag) SubscribeLogsEvent

func (bc *Dag) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription

SubscribeLogsEvent registers a subscription of []*types.Log.

func (*Dag) SubscribeRemovedLogsEvent

func (bc *Dag) SubscribeRemovedLogsEvent(ch chan<- modules.RemovedLogsEvent) event.Subscription

SPV SubscribeRemovedLogsEvent registers a subscription of RemovedLogsEvent.

func (*Dag) SubscribeRollbackUnitEvent added in v1.0.7

func (bc *Dag) SubscribeRollbackUnitEvent(ch chan<- modules.RollbackUnitEvent) event.Subscription

func (*Dag) SubscribeSaveStableUnitEvent added in v1.0.6

func (bc *Dag) SubscribeSaveStableUnitEvent(ch chan<- modules.SaveUnitEvent) event.Subscription

func (*Dag) SubscribeSaveUnitEvent added in v1.0.6

func (bc *Dag) SubscribeSaveUnitEvent(ch chan<- modules.SaveUnitEvent) event.Subscription

func (*Dag) SubscribeToGroupSignEvent

func (d *Dag) SubscribeToGroupSignEvent(ch chan<- modules.ToGroupSignEvent) event.Subscription

func (*Dag) SubscribeUnstableRepositoryUpdatedEvent added in v1.0.4

func (d *Dag) SubscribeUnstableRepositoryUpdatedEvent(ch chan<- modules.UnstableRepositoryUpdatedEvent) event.Subscription

func (*Dag) SwitchMainChainEvent added in v1.0.4

func (dag *Dag) SwitchMainChainEvent(arg *memunit.SwitchMainChainEvent)

func (*Dag) UnstableHeadUnitProperty added in v1.0.5

func (d *Dag) UnstableHeadUnitProperty(asset modules.AssetId) (*modules.UnitProperty, error)

func (*Dag) VerifyUnitGroupSign

func (d *Dag) VerifyUnitGroupSign(unitHash common.Hash, groupSign []byte) error

type IDag

type IDag interface {
	Close()
	GetDb() ptndb.Database
	GetCommon(key []byte, stableDb bool) ([]byte, error)
	GetCommonByPrefix(prefix []byte, stableDb bool) map[string][]byte
	SaveCommon(key, val []byte) error
	GetAllData() ([][]byte, [][]byte)

	MemdagInfos() (*modules.MemdagInfos, error)
	IsEmpty() bool
	GetStableChainIndex(token modules.AssetId) *modules.ChainIndex
	CurrentUnit(token modules.AssetId) *modules.Unit
	GetCurrentUnit(assetId modules.AssetId) *modules.Unit
	GetMainCurrentUnit() *modules.Unit
	//GetCurrentMemUnit(assetId modules.AssetId, index uint64) *modules.Unit
	GetCurrentMemUnit(assetId modules.AssetId) *modules.Unit

	InsertDag(units modules.Units, is_stable bool) (int, error)
	GetUnitByHash(hash common.Hash) (*modules.Unit, error)
	HasHeader(common.Hash, uint64) bool
	GetHeaderByNumber(number *modules.ChainIndex) (*modules.Header, error)
	GetHeaderByHash(common.Hash) (*modules.Header, error)
	GetHeadersByAuthor(authorAddr common.Address, startHeight, count uint64) ([]*modules.Header, error)
	GetUnstableUnits() []*modules.Unit

	CurrentHeader(token modules.AssetId) *modules.Header
	GetUnitTransactions(hash common.Hash) (modules.Transactions, error)
	GetUnitTxsHash(hash common.Hash) ([]common.Hash, error)
	GetTransaction(hash common.Hash) (*modules.TransactionWithUnitInfo, error)
	GetTransactionOnly(hash common.Hash) (*modules.Transaction, error)
	GetStableTransactionOnly(hash common.Hash) (*modules.Transaction, error)
	GetStableUnit(hash common.Hash) (*modules.Unit, error)
	GetStableUnitByNumber(number *modules.ChainIndex) (*modules.Unit, error)
	IsTransactionExist(hash common.Hash) (bool, error)
	GetTxSearchEntry(hash common.Hash) (*modules.TxLookupEntry, error)
	//GetTxRequesterAddress(tx *modules.Transaction) (common.Address, error)
	GetNewestUnit(token modules.AssetId) (common.Hash, *modules.ChainIndex, error)
	// InsertHeaderDag inserts a batch of headers into the local chain.
	InsertHeaderDag([]*modules.Header) (int, error)
	HasUnit(hash common.Hash) bool
	//UnitIsConfirmedByHash(hash common.Hash) bool
	ParentsIsConfirmByHash(hash common.Hash) bool
	IsHeaderExist(hash common.Hash) bool
	SaveUnit(unit *modules.Unit, isGenesis bool) error
	SaveTransaction(tx *modules.Transaction, txIndex int) error
	InsertUnit(unit *modules.Unit) error

	FastSyncCommitHead(common.Hash) error
	GetGenesisUnit() (*modules.Unit, error)

	GetContractState(contractid []byte, field string) ([]byte, *modules.StateVersion, error)
	GetContractStateByVersion(id []byte, field string, version *modules.StateVersion) ([]byte, error)

	GetContractStatesById(id []byte) (map[string]*modules.ContractStateValue, error)
	GetContractStatesByPrefix(id []byte, prefix string) (map[string]*modules.ContractStateValue, error)
	GetContractJury(contractId []byte) (*modules.ElectionNode, error)
	GetUnitNumber(hash common.Hash) (*modules.ChainIndex, error)

	//GetUtxoView(tx *modules.Transaction) (*txpool2.UtxoViewpoint, error)
	IsUtxoSpent(outpoint *modules.OutPoint) (bool, error)
	PostChainEvents(events []interface{})

	GetTrieSyncProgress() (uint64, error)
	GetUtxoEntry(outpoint *modules.OutPoint) (*modules.Utxo, error)
	GetStxoEntry(outpoint *modules.OutPoint) (*modules.Stxo, error)
	//Include Utxo and Stxo
	GetTxOutput(outpoint *modules.OutPoint) (*modules.Utxo, error)
	GetAddrOutpoints(addr common.Address) ([]modules.OutPoint, error)
	GetAddrUtxos(addr common.Address) (map[modules.OutPoint]*modules.Utxo, error)
	GetAddrUtxoAndReqMapping(addr common.Address, asset *modules.Asset) (map[modules.OutPoint]*modules.Utxo, map[common.Hash]common.Hash, error)
	GetAddrStableUtxos(addr common.Address) (map[modules.OutPoint]*modules.Utxo, error)
	GetAddr1TokenUtxos(addr common.Address, asset *modules.Asset) (map[modules.OutPoint]*modules.Utxo, error)
	GetAllUtxos() (map[modules.OutPoint]*modules.Utxo, error)
	GetAddrTransactions(addr common.Address) ([]*modules.TransactionWithUnitInfo, error)
	GetAssetTxHistory(asset *modules.Asset) ([]*modules.TransactionWithUnitInfo, error)
	GetAddrUtxoTxs(addr common.Address) ([]*modules.TransactionWithUnitInfo, error)
	GetContractTpl(tplId []byte) (*modules.ContractTemplate, error)
	GetContractTplCode(tplId []byte) ([]byte, error)
	GetAllContractTpl() ([]*modules.ContractTemplate, error)

	SaveContract(contract *modules.Contract) error
	GetContract(id []byte) (*modules.Contract, error)
	GetAllContracts() ([]*modules.Contract, error)
	GetContractsByTpl(tplId []byte) ([]*modules.Contract, error)
	GetUnitByNumber(number *modules.ChainIndex) (*modules.Unit, error)
	GetUnitHashesFromHash(hash common.Hash, max uint64) []common.Hash
	GetUnitHash(number *modules.ChainIndex) (common.Hash, error)

	//Mediator
	GetActiveMediator(add common.Address) *core.Mediator
	GetActiveMediatorAddr(index int) common.Address
	GetActiveMediatorNodes() map[string]*discover.Node

	GetAddrByOutPoint(outPoint *modules.OutPoint) (common.Address, error)
	//GetTxFee(pay *modules.Transaction) (*modules.AmountAsset, error)
	SetUnitGroupSign(unitHash common.Hash, groupSign []byte) error

	IsSynced(toStrictly bool) bool
	GetPrecedingMediatorNodes() map[string]*discover.Node
	//UnitIrreversibleTime() time.Duration
	LastMaintenanceTime() int64
	IsIrreversibleUnit(hash common.Hash) (bool, error)

	QueryDbByKey(key []byte) ([]byte, error)
	QueryDbByPrefix(prefix []byte) ([]*modules.DbRow, error)

	// SaveReqIdByTx
	GetTxHashByReqId(reqid common.Hash) (common.Hash, error)
	GetTxByReqId(reqid common.Hash) (*modules.TransactionWithUnitInfo, error)
	GetTxPackInfo(txHash common.Hash) (*modules.TxPackInfo, error)

	GetFileInfo(maindata []byte) ([]*modules.ProofOfExistencesInfo, error)
	GetProofOfExistencesByMaindata(maindata []byte) ([]*modules.ProofOfExistencesInfo, error)

	GetLightChainHeight(assetId modules.AssetId) uint64
	InsertLightHeader(headers []*modules.Header) (int, error)
	GetAllLeafNodes() ([]*modules.Header, error)
	ClearUtxo() error
	ClearAddrUtxo(addr common.Address) error
	SaveUtxoView(view map[modules.OutPoint]*modules.Utxo) error

	HeadUnitTime() int64
	HeadUnitNum() uint64
	HeadUnitHash() common.Hash
	GetIrreversibleUnitNum(id modules.AssetId) uint64
	StableUnitNum() uint64
	StableHeadUnitProperty(asset modules.AssetId) (*modules.UnitProperty, error)
	UnstableHeadUnitProperty(asset modules.AssetId) (*modules.UnitProperty, error)

	GetPartitionChains() ([]*modules.PartitionChain, error)
	GetMainChain() (*modules.MainChain, error)

	RefreshAddrTxIndex() error

	GenVoteMediatorTx(voter common.Address, mediators map[string]bool, enableGasFee bool, ks *keystore.KeyStore) (*modules.Transaction, uint64, error)
	GetDynGlobalProp() *modules.DynamicGlobalProperty
	GetGlobalProp() *modules.GlobalProperty
	GetMediatorSchl() *modules.MediatorSchedule
	GetMediatorCount() int

	IsMediator(address common.Address) bool
	GetMediators() map[common.Address]bool
	GetActiveMediators() []common.Address
	GetAccountVotedMediators(addr common.Address) map[string]bool
	GetMediatorInfo(address common.Address) *modules.MediatorInfo

	GetVotingForMediator(addStr string) (map[string]uint64, error)
	MediatorVotedResults() (map[string]uint64, error)
	LookupMediatorInfo() []*modules.MediatorInfo2
	IsActiveMediator(add common.Address) bool
	GetMediator(add common.Address) *core.Mediator

	GetNewestUnitTimestamp(token modules.AssetId) (int64, error)
	GetScheduledMediator(slotNum uint32) common.Address
	GetSlotAtTime(when time.Time) uint32
	GetSlotTime(slotNum uint32) time.Time
	GetChainParameters() *core.ChainParameters
	GetImmutableChainParameters() *core.ImmutableChainParameters

	GetDataVersion() (*modules.DataVersion, error)
	StoreDataVersion(dv *modules.DataVersion) error
	QueryProofOfExistenceByReference(ref []byte) ([]*modules.ProofOfExistence, error)
	GetAssetReference(asset []byte) ([]*modules.ProofOfExistence, error)
	CheckReadSetValid(contractId []byte, readSet []modules.ContractReadSet) bool

	IsActiveJury(addr common.Address) bool
	JuryCount() uint
	GetContractDevelopers() ([]common.Address, error)
	IsContractDeveloper(addr common.Address) bool
	//GetActiveJuries() []common.Address
	CreateGenericTransaction(from, to common.Address, daoAmount, daoFee uint64, certID *big.Int,
		msg *modules.Message, enableGasFee bool) (*modules.Transaction, uint64, error)
	CreateTokenTransaction(from, to common.Address, token *modules.Asset, daoAmountToken, daoFee uint64,
		msg *modules.Message) (*modules.Transaction, uint64, error)
	ChainThreshold() int

	CheckHeaderCorrect(number int) error
	CheckUnitsCorrect(assetId string, number int) error
	GetBlacklistAddress() ([]common.Address, *modules.StateVersion, error)
	RebuildAddrTxIndex() error
	GetJurorByAddrHash(hash common.Hash) (*modules.JurorDeposit, error)
	GetJurorReward(jurorAdd common.Address) common.Address
	GetContractsWithJuryAddr(addr common.Hash) []*modules.Contract
	GetAddressCount() int
	NewTemp() (dboperation.IContractDag, error)

	//localdb
	SaveLocalTx(tx *modules.Transaction) error
	GetLocalTx(txId common.Hash) (*modules.Transaction, modules.TxStatus, error)
	SaveLocalTxStatus(txId common.Hash, status modules.TxStatus) error

	//event
	SubscribeChainHeadEvent(ch chan<- modules.ChainHeadEvent) event.Subscription
	SubscribeChainEvent(ch chan<- modules.ChainEvent) event.Subscription
	//订阅将Unit设置为稳定单元的事件
	SubscribeSaveStableUnitEvent(ch chan<- modules.SaveUnitEvent) event.Subscription
	SubscribeRollbackUnitEvent(ch chan<- modules.RollbackUnitEvent) event.Subscription
	SubscribeSaveUnitEvent(ch chan<- modules.SaveUnitEvent) event.Subscription
	SubscribeUnstableRepositoryUpdatedEvent(ch chan<- modules.UnstableRepositoryUpdatedEvent) event.Subscription
	SubscribeToGroupSignEvent(ch chan<- modules.ToGroupSignEvent) event.Subscription
	SubscribeActiveMediatorsUpdatedEvent(ch chan<- modules.ActiveMediatorsUpdatedEvent) event.Subscription
}

type Txo4Greedy

type Txo4Greedy struct {
	modules.OutPoint
	Amount uint64
}

func (*Txo4Greedy) GetAmount

func (txo *Txo4Greedy) GetAmount() uint64

Directories

Path Synopsis
* @author PalletOne core developers <dev@pallet.one> * @date 2018
* @author PalletOne core developers <dev@pallet.one> * @date 2018
* * This file is part of go-palletone.
* * This file is part of go-palletone.
* * This file is part of go-palletone.
* * This file is part of go-palletone.
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.
* @author PalletOne core developers <dev@pallet.one> * @date 2018 This file is part of go-palletone.
* @author PalletOne core developers <dev@pallet.one> * @date 2018 This file is part of go-palletone.
* @author PalletOne core developers <dev@pallet.one> * @date 2018-2020 Package rwset is a generated GoMock package.
* @author PalletOne core developers <dev@pallet.one> * @date 2018-2020 Package rwset is a generated GoMock package.

Jump to

Keyboard shortcuts

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