Documentation
¶
Index ¶
- Constants
- Variables
- func DecodeSignature(sig []byte) (r, s, v *big.Int)
- func DeleteReceipts(db dataBase.Database, hash common.Hash, number uint64)
- func ETHChainID(tkmChainID common.ChainID, txVersion uint16) uint64
- func ETHChainIDBig(tkmChainID common.ChainID, txVersion uint16) *big.Int
- func FindObjectTypeByEventType(eventType EventType) (t reflect.Type, ok bool)
- func FromETHChainID(ethChainId *big.Int) (common.ChainID, error)
- func GetHistoryRoot(holder DataHolder, height common.Height) ([]byte, error)
- func HashSliceValueDecoder(r io.Reader) (o interface{}, err error)
- func HashSliceValueEncoder(o interface{}, w io.Writer) error
- func HashSliceValueExpander(hashBytes []byte, adpater db.DataAdapter) (valueBytes []byte, err error)
- func HashSliceValueHasher(value interface{}, valueBytes []byte) (hashBytes []byte, err error)
- func IsControlEvent(eventType EventType) bool
- func ListOperatorFuncs(eventType EventType, opTypes ...OperatorType) []reflect.Value
- func NewIdentifier(priv []byte) (common.Identifier, error)
- func NewIdentifierByHex(privHexString string) (common.Identifier, error)
- func NewNodeIdentifier(priv []byte) (common.NodeIdentifier, error)
- func NewNodeIdentifierByHex(privHexString string) (common.NodeIdentifier, error)
- func NewNodeIdentifierByHexWithoutError(privHexString string) common.NodeIdentifier
- func NewUnknownEventTypeError(typ reflect.Type) error
- func ParseToAddress(bitLength uint, shardPos uint16, nodePos uint16, index uint64) (addr common.Address)
- func PreelectSeed(seed common.Seed, blockHash common.Hash) common.Seed
- func RRDepositRequestHash(nodeId common.NodeID, nodeType common.NodeType, bindAddr common.Address, ...) []byte
- func ReachCommit(commSize, committed int) bool
- func ReachConfirm(commSize, confirmed int) bool
- func ReachPrepare(commSize, prepared int) bool
- func RegisterControlEvent(eventType EventType)
- func RegisterEvents(eventMap map[EventType]reflect.Type, nameMap map[EventType]string)
- func RegisterOperator(operator Operator)
- func RegisterQueueInfo(name string, workerSize int, queueLength int, higherTypes []EventType, ...)
- func ReleaseQueueObj(obj *QueueObj)
- func ReleaseRawData(rawData *RawDataObj)
- func SCLongStorageKey(addr common.Address, name []byte) common.Hash
- func SCLongStorageKey2(addr common.Address, name string) common.Hash
- func TransactionStringForHash(chainid common.ChainID, from *common.Address, to *common.Address, nonce uint64, ...) string
- func UnmarshalEvent(eventType EventType, body []byte) (interface{}, error)
- func VerifyVrfResult(event VrfResulter, seed common.Seed) error
- func WriteReceipts(db dataBase.Database, receipts Receipts) ([]byte, error)
- type AccessList
- type AccessListTx
- type AccessTuple
- type Account
- type AccountDelta
- type AccountDeltaFromTrie
- func (d *AccountDeltaFromTrie) FromDeltaFroms(deltaFroms DeltaFroms) error
- func (d *AccountDeltaFromTrie) HashValue() (hashValue []byte, err error)
- func (d *AccountDeltaFromTrie) Put(shardId common.ChainID, height common.Height, t *trie.Trie) bool
- func (d *AccountDeltaFromTrie) ToDeltaFroms() (DeltaFroms, error)
- type AccountDeltaTrie
- func (t *AccountDeltaTrie) Delete(key []byte) (changed bool, oldValue interface{})
- func (t *AccountDeltaTrie) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (t *AccountDeltaTrie) Get(key []byte) (value interface{}, ok bool)
- func (t *AccountDeltaTrie) GetExistenceProof(key []byte) (exist bool, proofs trie.ProofChain, err error)
- func (t *AccountDeltaTrie) GetProof(addrKey []byte) (interface{}, trie.ProofChain, bool)
- func (t *AccountDeltaTrie) GetSub(id common.ChainID) (trie.ITrie, bool)
- func (t *AccountDeltaTrie) GetSubProof(id common.ChainID) (value trie.ITrie, proof trie.ProofChain, ok bool)
- func (t *AccountDeltaTrie) HashValue() (HashValue []byte, err error)
- func (t *AccountDeltaTrie) Put(key []byte, value interface{}) bool
- func (t *AccountDeltaTrie) PutValue(value trie.TrieValue) bool
- func (t *AccountDeltaTrie) Reset()
- func (t *AccountDeltaTrie) Serialization(w io.Writer) error
- func (t *AccountDeltaTrie) ValueIterator() trie.ValueIterator
- type AccountState
- type Accounts
- type AttendanceRecord
- func (a *AttendanceRecord) AddDataNodeStat(nodeId common.NodeID)
- func (a *AttendanceRecord) Formalize()
- func (a *AttendanceRecord) Hash() (*common.Hash, error)
- func (a *AttendanceRecord) IsLegalFirst(datanodes common.NodeIDs) error
- func (a *AttendanceRecord) IsLegalNext(next *AttendanceRecord) error
- func (a *AttendanceRecord) SetAbsentness(epoch common.EpochNum, block common.BlockNum)
- func (a *AttendanceRecord) SetAttendance(epoch common.EpochNum, block common.BlockNum)
- func (a *AttendanceRecord) String() string
- type BlockAppendSuccess
- type BlockBody
- func (bb *BlockBody) AttendanceRoot() (*common.Hash, error)
- func (bb *BlockBody) ElectResultRoot() (*common.Hash, error)
- func (bb *BlockBody) Formalize()
- func (bb *BlockBody) HdsRoot() (*common.Hash, error)
- func (bb *BlockBody) NextCommitteeRoot() (*common.Hash, error)
- func (bb *BlockBody) PreElectRoot() (*common.Hash, error)
- func (bb *BlockBody) SeedFactorRoot() (*common.Hash, error)
- func (bb *BlockBody) TransactionsRoot() (*common.Hash, error)
- type BlockChain
- type BlockCursor
- type BlockEMessage
- func (b *BlockEMessage) BlockNum() common.BlockNum
- func (b *BlockEMessage) CheckHashs() error
- func (b *BlockEMessage) EpochNum() common.EpochNum
- func (b *BlockEMessage) EraString() string
- func (b *BlockEMessage) Formalize()
- func (b *BlockEMessage) GetChainID() common.ChainID
- func (b *BlockEMessage) GetHeight() common.Height
- func (b *BlockEMessage) GetHistoryRoot() []byte
- func (b *BlockEMessage) Hash() common.Hash
- func (b *BlockEMessage) InfoString() string
- func (b *BlockEMessage) String() string
- type BlockHeader
- func (h *BlockHeader) Era() common.EraNum
- func (h BlockHeader) GetHeight() common.Height
- func (h *BlockHeader) GetHistoryRoot() []byte
- func (h *BlockHeader) Hash() common.Hash
- func (h *BlockHeader) HashValue() ([]byte, error)
- func (h *BlockHeader) InfoString() string
- func (h *BlockHeader) MakeProof(typ trie.ProofType, proofChain *trie.ProofChain) (hashOfHeader []byte, err error)
- func (h *BlockHeader) Proof(typ trie.ProofType) (hashOfHeader []byte, indexHash *common.Hash, proof *common.MerkleProofs, ...)
- func (h *BlockHeader) String() string
- func (h *BlockHeader) Summary() string
- type BlockHeight
- type BlockHeighter
- type BlockReport
- type BlockRequest
- type BlockSummary
- type CachedHeighter
- type CancelCashCheckRequest
- type CashCheck
- type CashRequest
- type ChainContext
- type ChainCurrencier
- type ChainCurrencierAdapter
- type ChainElectResult
- type ChainElectResults
- func (cs ChainElectResults) HashValue() ([]byte, error)
- func (cs ChainElectResults) HavePreelects() bool
- func (cs ChainElectResults) Len() int
- func (cs ChainElectResults) Less(i, j int) bool
- func (cs ChainElectResults) Swap(i, j int)
- func (cs ChainElectResults) ToMap() map[common.ChainID]*ChainElectResult
- type ChainEpochCommittee
- type ChainEvent
- type ChainInfoChange
- type ChainSetting
- type ChainSnapshot
- type ChainStats
- type ChainTrie
- func (c *ChainTrie) CheckPoint() (checkpoint int, root []byte, err error)
- func (c *ChainTrie) Commit() error
- func (c *ChainTrie) Copy() *ChainTrie
- func (c *ChainTrie) DeleteInfo(id common.ChainID) (changed bool, oldInfo *common.ChainInfos, err error)
- func (c *ChainTrie) GenesisNodes() map[common.NodeID]common.NodeType
- func (c *ChainTrie) GetAllChainInfos() []*common.ChainInfos
- func (c *ChainTrie) GetChainChildren(id common.ChainID) common.ChainIDs
- func (c *ChainTrie) GetChainInfos(id common.ChainID) (*common.ChainInfos, bool)
- func (c *ChainTrie) GetChainList() common.ChainIDs
- func (c *ChainTrie) GetDataNodeList(id common.ChainID) common.NodeIDs
- func (c *ChainTrie) GetDataNodeMap() map[common.ChainID]map[common.NodeID]struct{}
- func (c *ChainTrie) GetDataNodes(id common.ChainID) (datas map[common.NodeID]struct{})
- func (c *ChainTrie) GetGenesisDataNodeList(id common.ChainID) common.NodeIDs
- func (c *ChainTrie) GetLiveChainInfos(id common.ChainID) (*common.ChainInfos, bool)
- func (c *ChainTrie) GetReportChildren(id common.ChainID) common.ChainIDs
- func (c *ChainTrie) GetShardInfo(id common.ChainID) (shardInfo common.ShardInfo)
- func (c *ChainTrie) GetVrfChainList() common.ChainIDs
- func (c *ChainTrie) HashValue() ([]byte, error)
- func (c *ChainTrie) IsInUsing(nid common.NodeID) (common.ChainID, bool)
- func (c *ChainTrie) IsNoGas(chainId common.ChainID) (bool, common.ChainID)
- func (c *ChainTrie) PreCommit() ([]byte, error)
- func (c *ChainTrie) PutInfo(info *common.ChainInfos) error
- func (c *ChainTrie) RangeAllInfos(oneInfosCallback func(oneInfos *common.ChainInfos))
- func (c *ChainTrie) RevertTo(checkpoint int, root []byte) error
- func (c *ChainTrie) Rollback()
- func (c *ChainTrie) SetTo(newTrie *trie.Trie) error
- func (c *ChainTrie) String() string
- type ChangeChainInfoRequest
- func (s *ChangeChainInfoRequest) DataDeserialize(vr rtl.ValueReader) error
- func (s *ChangeChainInfoRequest) DataSerialize(w io.Writer) error
- func (s *ChangeChainInfoRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (s *ChangeChainInfoRequest) GetData() (o interface{}, exist bool)
- func (s *ChangeChainInfoRequest) GetPubs() [][]byte
- func (s *ChangeChainInfoRequest) GetSigs() [][]byte
- func (s *ChangeChainInfoRequest) Serialization(w io.Writer) error
- func (s *ChangeChainInfoRequest) SetPubs(pubs [][]byte)
- func (s *ChangeChainInfoRequest) SetSigs(sigs [][]byte)
- func (s *ChangeChainInfoRequest) String() string
- type CodeEntry
- type CommEntry
- type CommReport
- type CommitCallback
- type Committee
- func (c *Committee) Add(id common.NodeID)
- func (c *Committee) Clone() *Committee
- func (c *Committee) CopyMembers(committee *Committee)
- func (c *Committee) Equals(o *Committee) bool
- func (c *Committee) FullString() string
- func (c *Committee) Hash() common.Hash
- func (c *Committee) Index(id common.NodeID) common.CommID
- func (c *Committee) IsAvailable() bool
- func (c *Committee) IsIn(id common.NodeID) bool
- func (c *Committee) IsProposor(id common.NodeID, num common.BlockNum) bool
- func (c *Committee) ReachRequires(ok int) bool
- func (c *Committee) Reset()
- func (c *Committee) SetMembers(ids common.NodeIDs) *Committee
- func (c *Committee) Size() int
- func (c *Committee) String() string
- type CompatibleAccount
- type CompatibleDelta
- type ConnectedCallBackFunc
- type Context
- type DataHolder
- type DataManager
- type DataRequester
- type DeltaFrom
- type DeltaFromKey
- type DeltaFroms
- type DeltaRequestMessage
- type DeltasGroup
- type DeltasPack
- type DirectiveMsg
- type DummyCurrencier
- func (d *DummyCurrencier) GetAdminPrivs() ([][]byte, bool)
- func (d *DummyCurrencier) GetAdmins() ([][]byte, bool)
- func (d *DummyCurrencier) GetChainAdminPrivs(id common.ChainID) ([][]byte, bool)
- func (d *DummyCurrencier) GetChainAdmins(id common.ChainID) ([][]byte, bool)
- func (d *DummyCurrencier) GetChainLocalCurrencyInfo(id common.ChainID) (common.CoinID, string)
- func (d *DummyCurrencier) GetCurrencyAdmins() (privs, pubs [][]byte)
- func (d *DummyCurrencier) GetLocalCurrency() (common.CoinID, string)
- func (d *DummyCurrencier) HasLocalCurrency() bool
- func (d *DummyCurrencier) IsPoc() bool
- func (d *DummyCurrencier) IsPocChain(chainid common.ChainID) bool
- type DynamicFeeTx
- type EIP155Signer
- func (s EIP155Signer) Equal(s2 Signer) bool
- func (s EIP155Signer) Hash(tx *ETHTransaction) common.Hash
- func (s EIP155Signer) HashGtkm(tx *Transaction) common.Hash
- func (s EIP155Signer) HashGtkmWithSig(tx *Transaction) common.Hash
- func (s EIP155Signer) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
- func (s EIP155Signer) Sender(tx *ETHTransaction) (common.Address, error)
- func (s EIP155Signer) SignatureValues(tx *ETHTransaction, sig []byte) (R, S, V *big.Int, err error)
- type ETHTransaction
- func (tx *ETHTransaction) AccessList() AccessList
- func (tx *ETHTransaction) ChainId() *big.Int
- func (tx *ETHTransaction) Data() []byte
- func (tx *ETHTransaction) From() *common.Address
- func (tx *ETHTransaction) Gas() uint64
- func (tx *ETHTransaction) GasFeeCap() *big.Int
- func (tx *ETHTransaction) GasPrice() *big.Int
- func (tx *ETHTransaction) GasTipCap() *big.Int
- func (tx *ETHTransaction) GetSigner() Signer
- func (tx *ETHTransaction) Hash() common.Hash
- func (tx *ETHTransaction) HashValue() ([]byte, error)
- func (tx *ETHTransaction) MarshalBinary() ([]byte, error)
- func (tx *ETHTransaction) Nonce() uint64
- func (tx *ETHTransaction) Protected() bool
- func (tx *ETHTransaction) RawSignatureValues() (v, r, s *big.Int)
- func (tx *ETHTransaction) SigAndPub()
- func (tx *ETHTransaction) To() *common.Address
- func (tx *ETHTransaction) ToTransaction() (*Transaction, error)
- func (tx *ETHTransaction) Type() uint8
- func (tx *ETHTransaction) UnmarshalBinary(b []byte) error
- func (tx *ETHTransaction) Value() *big.Int
- type ElectCallback
- type ElectMessage
- type ElectResult
- func (r *ElectResult) FromResulter(resulter ElectResulter) *ElectResult
- func (r *ElectResult) GetChainID() common.ChainID
- func (r *ElectResult) GetElectingChainID() common.ChainID
- func (r *ElectResult) GetEpochNum() common.EpochNum
- func (r *ElectResult) GetNodeID() common.NodeID
- func (r *ElectResult) GetVrfResult() (*common.Hash, []byte, *common.Hash)
- func (r *ElectResult) IsPreElecting() bool
- func (r *ElectResult) String() string
- func (r *ElectResult) VrfVerify(seed common.Seed) error
- type ElectResulter
- type ElectResults
- type Elector
- type Engine
- type EntryHashHash
- type EpochCommittee
- type Equaler
- type EventType
- type Eventer
- type ExchangerAdminData
- type ExchangerAdminRequest
- func (c *ExchangerAdminRequest) DataDeserialize(vr rtl.ValueReader) error
- func (c *ExchangerAdminRequest) DataSerialize(w io.Writer) error
- func (c *ExchangerAdminRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (c *ExchangerAdminRequest) GetData() (o interface{}, exist bool)
- func (c *ExchangerAdminRequest) Serialization(w io.Writer) error
- func (c *ExchangerAdminRequest) String() string
- type ExchangerWithdrawData
- type ExchangerWithdrawRequest
- func (c *ExchangerWithdrawRequest) DataDeserialize(vr rtl.ValueReader) error
- func (c *ExchangerWithdrawRequest) DataSerialize(w io.Writer) error
- func (c *ExchangerWithdrawRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (c *ExchangerWithdrawRequest) GetData() (o interface{}, exist bool)
- func (c *ExchangerWithdrawRequest) Serialization(w io.Writer) error
- func (c *ExchangerWithdrawRequest) String() string
- type Extra
- type FrontierSigner
- func (f FrontierSigner) ChainID() *big.Int
- func (f FrontierSigner) Equal(s2 Signer) bool
- func (f FrontierSigner) Hash(tx *ETHTransaction) common.Hash
- func (f FrontierSigner) HashGtkm(tx *Transaction) common.Hash
- func (f FrontierSigner) HashGtkmWithSig(tx *Transaction) common.Hash
- func (f FrontierSigner) RecoverSig(tx *ETHTransaction) (sig []byte)
- func (f FrontierSigner) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
- func (f FrontierSigner) Sender(tx *ETHTransaction) (common.Address, error)
- func (f FrontierSigner) SignatureValues(tx *ETHTransaction, sig []byte) (r, s, v *big.Int, err error)
- type GenerateCallback
- type GlobalCurrencier
- type GlobalCurrencierAdapter
- type HeaderSummary
- func (s *HeaderSummary) Find(chainId common.ChainID, height common.Height) (index int, summary *BlockSummary)
- func (s *HeaderSummary) GetChainID() common.ChainID
- func (s *HeaderSummary) Hash() common.Hash
- func (s *HeaderSummary) HeaderProof(hashOfHeader []byte, proofChain *trie.ProofChain) ([]byte, error)
- func (s *HeaderSummary) String() string
- type HeighterHashMap
- func (m *HeighterHashMap) ClearHeight(height common.Height) bool
- func (m *HeighterHashMap) Delete(hob common.Hash) bool
- func (m *HeighterHashMap) Get(height common.Height) ([]BlockHeighter, bool)
- func (m *HeighterHashMap) MinHeight() (common.Height, bool)
- func (m *HeighterHashMap) Peek() (height common.Height, hob common.Hash, o BlockHeighter, exist bool)
- func (m *HeighterHashMap) PopIfEarlier(target common.Height) (height common.Height, hob common.Hash, o BlockHeighter, exist bool)
- func (m *HeighterHashMap) Put(heighter BlockHeighter) bool
- func (m *HeighterHashMap) Range(callback RangeBufferCallback) error
- func (m *HeighterHashMap) Size() int
- func (m *HeighterHashMap) String() string
- type HeighterSet
- type HistoryBlock
- type HomesteadSigner
- func (h HomesteadSigner) ChainID() *big.Int
- func (h HomesteadSigner) Equal(s2 Signer) bool
- func (h HomesteadSigner) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
- func (h HomesteadSigner) Sender(tx *ETHTransaction) (common.Address, error)
- func (h HomesteadSigner) SignatureValues(tx *ETHTransaction, sig []byte) (r, s, v *big.Int, err error)
- type IsInCommitteeFunc
- type JustHashEMessage
- type LastBlockMessage
- type LastCommEMessage
- type LastHeightMessage
- type LastReportMessage
- func (m *LastReportMessage) DestChainID() common.ChainID
- func (m *LastReportMessage) GetBlockNum() common.BlockNum
- func (m *LastReportMessage) GetChainID() common.ChainID
- func (m *LastReportMessage) GetEpochNum() common.EpochNum
- func (m *LastReportMessage) GetHeight() common.Height
- func (m *LastReportMessage) String() string
- type LegacyTx
- type Location
- func (l Location) ChainID() common.ChainID
- func (l Location) NetType() common.NetType
- func (l Location) NoWhere() bool
- func (l Location) NodeID() *common.NodeID
- func (l *Location) SetChainID(chainID common.ChainID)
- func (l *Location) SetNetType(netType common.NetType)
- func (l *Location) SetNodeID(nid *common.NodeID)
- func (l Location) String() string
- type Log
- type LongEntry
- type LongValue
- type Message
- func (m Message) AllValidSigns(callback func(pas *PubAndSig)) map[string]struct{}
- func (m Message) CheckNonce() bool
- func (m Message) Data() []byte
- func (m Message) From() common.Address
- func (m Message) Gas() uint64
- func (m Message) GasPrice() *big.Int
- func (m Message) MultiSigs() PubAndSigs
- func (m Message) Nonce() uint64
- func (m Message) Sig() *PubAndSig
- func (m Message) SignedAddresses() map[common.Address]struct{}
- func (m Message) SignedPubs() map[string]struct{}
- func (m Message) To() *common.Address
- func (m Message) TxHash() common.Hash
- func (m Message) UseLocal() bool
- func (m Message) Value() *big.Int
- func (m Message) Version() uint16
- type MinterMintData
- type MinterMintReqeust
- func (c *MinterMintReqeust) DataDeserialize(vr rtl.ValueReader) error
- func (c *MinterMintReqeust) DataSerialize(w io.Writer) error
- func (c *MinterMintReqeust) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (c *MinterMintReqeust) GetData() (o interface{}, exist bool)
- func (c *MinterMintReqeust) Serialization(w io.Writer) error
- func (c *MinterMintReqeust) String() string
- type MissingChainEventMsg
- type MissingHeights
- func (m MissingHeights) Get(id common.ChainID) (start common.Height, length int, exist bool)
- func (m MissingHeights) IDs() common.ChainIDs
- func (m MissingHeights) MostUrgent() (id common.ChainID, start common.Height, length int, exist bool)
- func (m MissingHeights) Put(id common.ChainID, start common.Height, length int)
- type NetworkManager
- type Networker
- type NodeResult
- func (n *NodeResult) FromVrfResulter(resulter VrfResulter) *NodeResult
- func (n *NodeResult) GetNodeID() common.NodeID
- func (n *NodeResult) GetVrfResult() (sorthash *common.Hash, proof []byte, factorHash *common.Hash)
- func (n *NodeResult) String() string
- func (n *NodeResult) VrfVerify(seed common.Seed) error
- type NodeResults
- func (ns NodeResults) Len() int
- func (ns NodeResults) Less(i, j int) bool
- func (ns NodeResults) ManagedCommVerifyAll(nidHashes []common.Hash) error
- func (ns NodeResults) Remove(os NodeResults) NodeResults
- func (ns NodeResults) Swap(i, j int)
- func (ns NodeResults) ToMap() map[common.NodeID]*NodeResult
- func (ns NodeResults) VrfVerifyAll(seed common.Seed) error
- type NodeState
- type Noticer
- type OneDeltas
- type OpSet
- type Operator
- type OperatorType
- type P2PServer
- type PostState
- type PreElectPhase
- type PreElecting
- func (pe *PreElecting) Clone() *PreElecting
- func (pe *PreElecting) Equals(o *PreElecting) bool
- func (pe *PreElecting) IsManagedComm() bool
- func (pe *PreElecting) IsValidManagedComm() bool
- func (pe *PreElecting) IsVrf() bool
- func (pe *PreElecting) PreSeed() (*common.Seed, error)
- func (pe *PreElecting) String() string
- func (pe *PreElecting) ToPack() *PreElecting
- type PreElectings
- type PreelectionConnect
- type PreelectionExamine
- type PreelectionExit
- type PreelectionStart
- type PreelectionSync
- type ProposeResult
- type PubAndSig
- type PubAndSigs
- type QueueInfo
- type QueueInfos
- type QueueObj
- type RRAType
- type RRAct
- type RRC
- func (rr *RRC) ApplyTo(info *RRInfo, stateDB StateDB) (changed bool, shouldRemove bool, newinfo *RRInfo, err error)
- func (rr *RRC) CheckWithdraw(depositing *big.Int, amount *big.Int) error
- func (rr *RRC) Compatible(nodeIdHash common.Hash, typ common.NodeType, addr common.Address, ...) bool
- func (rr *RRC) Key() []byte
- func (rr *RRC) MergeActs()
- func (rr *RRC) String() string
- type RRInfo
- func (r *RRInfo) Available() bool
- func (r *RRInfo) AvailableAmount(nodeType common.NodeType) *big.Int
- func (r *RRInfo) Clone() *RRInfo
- func (r *RRInfo) Compatible(nodeIdHash common.Hash, typ common.NodeType, addr common.Address) bool
- func (r *RRInfo) Depositing() *big.Int
- func (r *RRInfo) Expired(eraNum common.EraNum) bool
- func (r *RRInfo) HashValue() ([]byte, error)
- func (r *RRInfo) InfoEquals(v *RRInfo) bool
- func (r *RRInfo) Key() []byte
- func (r *RRInfo) Shares() uint64
- func (r *RRInfo) String() string
- func (r *RRInfo) ValidAmount() *big.Int
- type RRProofs
- type RRProofsMessage
- type RRProofsRequest
- type RRStatus
- type RRStatusAct
- type RRTries
- type RangeBufferCallback
- type RawData
- type RawDataObj
- func (r *RawDataObj) GetData() []byte
- func (r *RawDataObj) GetEventType() EventType
- func (r *RawDataObj) GetFrom() Location
- func (r *RawDataObj) GetFromChainID() common.ChainID
- func (r *RawDataObj) GetFromNetType() common.NetType
- func (r *RawDataObj) GetFromNodeID() *common.NodeID
- func (r *RawDataObj) GetHash() *common.Hash
- func (r *RawDataObj) GetObject() interface{}
- func (r *RawDataObj) GetPublicKey() []byte
- func (r *RawDataObj) GetSignature() []byte
- func (r *RawDataObj) String() string
- type Receipt
- type Receipts
- type RelayEventMsg
- type RelayType
- type ReportNodeInfoEMessage
- type RewardRequest
- type RewardRequests
- type SeedFactor
- type SetChainSettingRequest
- func (s *SetChainSettingRequest) DataDeserialize(vr rtl.ValueReader) error
- func (s *SetChainSettingRequest) DataSerialize(w io.Writer) error
- func (s *SetChainSettingRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
- func (s *SetChainSettingRequest) GetData() (o interface{}, exist bool)
- func (s *SetChainSettingRequest) GetPubs() [][]byte
- func (s *SetChainSettingRequest) GetSigs() [][]byte
- func (s *SetChainSettingRequest) Serialization(w io.Writer) error
- func (s *SetChainSettingRequest) SetPubs(pubs [][]byte)
- func (s *SetChainSettingRequest) SetSigs(sigs [][]byte)
- func (s *SetChainSettingRequest) String() string
- type SevereErrorEventMsg
- type ShardDeltaMessage
- type ShardTransaction
- type ShardWaterline
- type Signer
- type SigsAndPubs
- type Sourcer
- type StartCommEMessage
- type StartConsEMessage
- type StartEMessage
- type StateDB
- type StopEMessage
- type StorageEntries
- type StorageEntry
- type StorageSize
- type SyncFinish
- type SyncRequest
- type TXIndex
- type TextEMessage
- type ThresholdEvent
- type ToOneEMessage
- type Transaction
- func (tx *Transaction) AccessList() AccessList
- func (tx *Transaction) Clone() *Transaction
- func (tx Transaction) DeprecatedHash() ([]byte, error)
- func (tx *Transaction) ETHChainID() *big.Int
- func (tx *Transaction) ExtraKeys() (extra *Extra)
- func (tx Transaction) FullString() string
- func (tx *Transaction) Gas() uint64
- func (tx *Transaction) GasFeeCap() *big.Int
- func (tx *Transaction) GasPrice() *big.Int
- func (tx *Transaction) GasTipCap() *big.Int
- func (tx Transaction) GetChainID() common.ChainID
- func (tx *Transaction) GetTkmExtra() []byte
- func (tx *Transaction) Hash() common.Hash
- func (tx Transaction) HashValue() ([]byte, error)
- func (tx *Transaction) RawSignatureValues() (v, r, s *big.Int)
- func (tx *Transaction) SetExtraKeys(extras *Extra) error
- func (tx *Transaction) SetTkmExtra(extra []byte) error
- func (tx Transaction) String() string
- func (tx *Transaction) Type() byte
- type TxData
- type VerifyCallback
- type VrfResulter
- type WantDetailEMessage
- type Waterlines
- type WholeWorld
- type Withdrawing
- type Withdrawings
- func (ws Withdrawings) All() (withdrawing *big.Int, withdrawingAll bool)
- func (ws Withdrawings) Clone() Withdrawings
- func (ws Withdrawings) Equals(os Withdrawings) bool
- func (ws Withdrawings) GetWithdrawing(expireEra common.EraNum) *Withdrawing
- func (ws Withdrawings) Len() int
- func (ws Withdrawings) Less(i, j int) bool
- func (ws Withdrawings) String() string
- func (ws Withdrawings) Swap(i, j int)
Constants ¶
const ( // Number of bytes occupied by event type EventTypeLength = 2 // delta pool related MaxPopOfOneShardDelta = 10 // Delta number threshold per chain MaxTxCountPerBlock = 2000 // The maximum number of transactions packed in a block // The maximum number of deltas that can be merged in each block is twice the maximum number of TX MaxDeltasPerBlock = int(MaxTxCountPerBlock) << 1 // compatible with Ethereum's transaction hash, pay attention to the tx.Hash() and tx.HashValue() // methods when upgrading the version ETHHashTxVersion = 2 NewBaseChainTxVersion = 3 // There is a bug in V0, which leads to insufficient amount when creating or invoking the // contract, and the transaction will be packaged, but the nonce value does not increase TxVersion = NewBaseChainTxVersion // V0's BlockSummary.Hash Only a through transmission of BlockHash, can't reflect the location // information of the block, and can't complete the proof of cross chain. V1 adds chainid and // height to hash SummaryVersion = 1 )
const ( MinDataNodes = 1 MinBootNodes = 1 MinAdmins = 3 )
const ( StartMsg = "start" StopMsg = "stop" )
const ( LegacyTxType = iota AccessListTxType DynamicFeeTxType )
const ( // ReceiptStatusFailed is the status code of a transaction if execution failed. ReceiptStatusFailed = uint64(0) // ReceiptStatusSuccessful is the status code of a transaction if execution succeeded. ReceiptStatusSuccessful = uint64(1) )
const ( MaxPenalizedTime = 3 // After the penalty exceeds this number of times, the pledge percentage is cleared to 0 WithdrawDelayEras = 2 // Withdraw lags 2 eras MinConsensusRR = 10000 // Lower limit of consensus node pledges, (202012: from 50000->10000) MaxConsensusRR = 10000 // The consensus node pledges is calculated at most according to this,(202012: from 50000->10000) ConsensusRRUnit = 1000 // each rr unit a consensus node pledge has, get a unit reward. Consensus.(Node.RR/RRUnit*UnitReward) MinDataRR = 50000 // Lower limit of data node pledges, (202012: from 200000->50000) MaxDataRR = 500000 // The data node pledges is calculated at most according to this, (202012: from 200000->50000, 202101: from 50000->500000) DataRRUnit = 50000 // each rr unit a data node pledge has, get a unit reward. DataNode.(Node.RR/RRUnit*UnitReward) MinRewardBalance = 100000 // A balance limit of reward account to stop process reward request )
const ( PocDeadlineAddrName = "pocdeadline" PocTryNewBlockContractAddrName = "poctrynewblockcontract" PocTryNewBlockMethodName = "poctrynewblockmethod" PocDeadlinePrefixName = "pocdeadlineprefix" PocDeadlineAbiJson = "pocdeadlineabijson" PocBindAddrName = "pocbind" PocBindPrefixName = "pocbindprefix" PocBindAbiJson = "pocbindabijson" // // PosCommNodeRewardName = "poscommnodereward" // PosCommNodeRewardName = "poscommnodereward1w.202012" PosCommNodeRewardName = "poscommnodereward1k.202107" PosDataNodeRewardName = "posdatanodereward5w.202012" GasLimitName = "gaslimit" GasPriceName = "gasprice" RRStatusAuth = "rrstatusauth" ManagedCommNodeIdsName = "managedcommnodeids" )
const RRInfoVersion = 2
RRInfoVersion:1: NodeCount, 2: statue
Variables ¶
var ( TypeOfAccountPtr = reflect.TypeOf((*Account)(nil)) TypeOfAccountDeltaPtr = reflect.TypeOf((*AccountDelta)(nil)) )
var ( // build-in accounts // MainAccountAddr private key: 684b01785f1deae43c5cac91d75305bff4665a1b9ae7efea020aeb4ae50c77cc MainAccountAddr = common.HexToAddress("3461c3beb33b646d1174551209377960cbce5259") AddressOfChainInfoManage = common.BytesToAddress([]byte{1, 0, 0}) AddressOfManageChains = common.BytesToAddress([]byte{1, 1, 0}) AddressOfChainSettings = common.BytesToAddress([]byte{1, 0, 1}) AddressOfNewChainSettings = common.BytesToAddress([]byte{1, 1, 1}) AddressOfRequiredReserve = common.BytesToAddress([]byte{1, 0, 2}) AddressOfPenalty = common.BytesToAddress([]byte{1, 0, 3}) AddressOfManageCommittee = common.BytesToAddress([]byte{1, 0, 4}) AddressOfWriteCashCheck = common.BytesToAddress([]byte{2, 0, 0}) AddressOfCashCashCheck = common.BytesToAddress([]byte{3, 0, 0}) AddressOfCancelCashCheck = common.BytesToAddress([]byte{4, 0, 0}) AddressOfCurrencyExchanger = common.BytesToAddress([]byte{5, 0, 0}) AddressOfLocalCurrencyMinter = common.BytesToAddress([]byte{5, 0, 1}) AddressOfTryPocFrom = common.BytesToAddress([]byte{6, 0, 0}) AddressOfRewardFrom = common.HexToAddress("1111111111111111111111111111111111111111") // reward account AddressOfBlackHole = common.HexToAddress("2222222222222222222222222222222222222222") // melt down currency // AddressOfRewardForGenesis private key: 01972b6aaa9f577ea0d6e32b63c3d138ff53db953e223ecd03d84cdc9c26e877 AddressOfRewardForGenesis = common.HexToAddress("0xbb72feb361a0a383777fac3d6ac230d7d7586694") // binding account of genesis nodes // AddressOfGasReward private key: ab66fab847b6d15356d2257281fefb1920ca6f56a7bc44d699b5e82e9c133a94 AddressOfGasReward = common.HexToAddress("0xd82a6555eaaaa022e89be40cffe4b7506112c04e") // gas fee account )
var ( ErrIllegalChainID = errors.New("illegal chain id") ErrDelayEpochNum = errors.New("delay epoch num") ErrDelayBlockNum = errors.New("delay block num") ErrWrongState = errors.New("wrong state") ErrShouldIgnore = errors.New("should ignore this error") ErrWrongEvent = errors.New("wrong event") ErrNeedBuffer = errors.New("need to buf") ErrBufferByState = errors.New("bufferred by state") ErrNoMatching = errors.New("no matching event") ErrConsensusFailed = errors.New("consensus failed") ErrHeightExceeded = errors.New("height exceeded") )
var ( BigShannon = big.NewInt(1000000000) BigTKM = big.NewInt(0).Mul(BigShannon, BigShannon) BigBillion = big.NewInt(0).Mul(BigShannon, BigTKM) SystemNoticer Noticer )
var ( RawDataPool = sync.Pool{ New: func() interface{} { return new(RawDataObj) }, } QueueObjPool = sync.Pool{ New: func() interface{} { return new(QueueObj) }, } TypeOfContextPtr = reflect.TypeOf((*Context)(nil)) )
var ( MinConsensusRRBig = new(big.Int).Mul(big.NewInt(MinConsensusRR), BigTKM) // Pledge threshold for consensus nodes MaxConsensusRRBig = new(big.Int).Mul(big.NewInt(MaxConsensusRR), BigTKM) ConsensusRRUnitBig = new(big.Int).Mul(big.NewInt(ConsensusRRUnit), BigTKM) MinDataRRBig = new(big.Int).Mul(big.NewInt(MinDataRR), BigTKM) // Pledge threshold for data node MaxDataRRBig = new(big.Int).Mul(big.NewInt(MaxDataRR), BigTKM) DataRRUnitBig = new(big.Int).Mul(big.NewInt(DataRRUnit), BigTKM) MinRewardBalanceBig = new(big.Int).Mul(big.NewInt(MinRewardBalance), BigTKM) ErrLittleEra = errors.New("era lesser than trie era") ErrMuchBigEra = errors.New("era much bigger than trie era") ErrNeedSwitchEra = errors.New("need to switch era") )
var ( ErrInvalidSig = errors.New("invalid transaction v, r, s values") ErrTxTypeNotSupported = errors.New("transaction type not supported") )
var AllRRATypes = []RRAType{RRADeposit, RRAPenalty, RRAWithdraw, RRAStatus}
var (
ErrDuplicatedDeltaFrom = errors.New("duplicated deltas")
)
var (
ErrDuplicatedEvent = errors.New("duplicated event found")
)
var (
ErrMainChainOnly = errors.New("supported by main chain only")
)
var (
ErrUnrecognized = errors.New("unrecognized")
)
var (
EventProcs = newEventOperations()
)
var TypeOfLongStoragePtr = reflect.TypeOf((*LongValue)(nil))
var TypeOfTransactionPtr = reflect.TypeOf((*Transaction)(nil))
var VMPlugin *plugin.Plugin
Functions ¶
func DecodeSignature ¶
func DeleteReceipts ¶
DeleteReceipts removes all receipt data associated with a block hash.
func GetHistoryRoot ¶
func GetHistoryRoot(holder DataHolder, height common.Height) ([]byte, error)
func HashSliceValueDecoder ¶
func HashSliceValueEncoder ¶
func HashSliceValueExpander ¶
func HashSliceValueExpander(hashBytes []byte, adpater db.DataAdapter) (valueBytes []byte, err error)
It's just a hash value, and the hash value is key, so you don't need to save it
func HashSliceValueHasher ¶
Only hash is reserved. The data of CashCheck is provided by the client, so the value itself is the hash value
func IsControlEvent ¶
func ListOperatorFuncs ¶
func ListOperatorFuncs(eventType EventType, opTypes ...OperatorType) []reflect.Value
func NewIdentifier ¶
func NewIdentifier(priv []byte) (common.Identifier, error)
func NewIdentifierByHex ¶
func NewIdentifierByHex(privHexString string) (common.Identifier, error)
func NewNodeIdentifier ¶
func NewNodeIdentifier(priv []byte) (common.NodeIdentifier, error)
func NewNodeIdentifierByHex ¶
func NewNodeIdentifierByHex(privHexString string) (common.NodeIdentifier, error)
func NewNodeIdentifierByHexWithoutError ¶
func NewNodeIdentifierByHexWithoutError(privHexString string) common.NodeIdentifier
func ParseToAddress ¶
func ParseToAddress(bitLength uint, shardPos uint16, nodePos uint16, index uint64) (addr common.Address)
Deprecated
func RRDepositRequestHash ¶
func ReachCommit ¶
func ReachConfirm ¶
func ReachPrepare ¶
func RegisterControlEvent ¶
func RegisterControlEvent(eventType EventType)
func RegisterEvents ¶
func RegisterOperator ¶
func RegisterOperator(operator Operator)
func RegisterQueueInfo ¶
func ReleaseQueueObj ¶
func ReleaseQueueObj(obj *QueueObj)
func ReleaseRawData ¶
func ReleaseRawData(rawData *RawDataObj)
func SCLongStorageKey ¶
The Key in LongStorage is composed of account address and additional value (generally attribute name), used for system contracts usually
func UnmarshalEvent ¶
func VerifyVrfResult ¶
func VerifyVrfResult(event VrfResulter, seed common.Seed) error
Types ¶
type AccessList ¶
type AccessList []AccessTuple
AccessList is an EIP-2930 access list.
func (AccessList) StorageKeys ¶
func (al AccessList) StorageKeys() int
StorageKeys returns the total number of storage keys in the access list.
type AccessListTx ¶
type AccessListTx struct {
ChainID *big.Int // destination chain ID
Nonce uint64 // nonce of sender account
GasPrice *big.Int // wei per gas
Gas uint64 // gas limit
To *common.Address `rlp:"nil"` // nil means contract creation
Value *big.Int // wei amount
Data []byte // contract invocation input data
AccessList AccessList // EIP-2930 access list
V, R, S *big.Int // signature values
}
AccessListTx is the data of EIP-2930 access list transactions.
type AccessTuple ¶
type AccessTuple struct {
Address common.Address `json:"address" gencodec:"required"`
StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"`
}
AccessTuple is the element type of an access list.
type Account ¶
type Account struct {
Addr common.Address `json:"address"` // account address
Nonce uint64 `json:"nonce"` // next transaction nonce
Balance *big.Int `json:"balance"` // basic currency, never be nil
LocalCurrency *big.Int `json:"localCurrency"` // local currency (if exist), could be nil
StorageRoot []byte `json:"storageRoot"` // storage for contract,Trie(key: Hash, value: Hash)
CodeHash []byte `json:"codeHash"` // hash of contract code
LongStorageRoot []byte `json:"longStorageRoot"` // more complex storage for contract, Trie(key: Hash, value: []byte)
}
1. currency type can be determinded in a normal transfer, default is basic currency 2. in contract calling, value type can be determinded. solidity contract can only use local currency if it has a local currency in the chain.
func (*Account) HashValue ¶
for compatible with old version, if there's no local currency and LongStorage, hash should same with the hash of old version account. TODO delete compatible when restart the chain with new version
func (*Account) IsUserContract ¶
type AccountDelta ¶
type AccountDelta struct {
Addr common.Address
Delta *big.Int // Balance modification
CurrencyDelta *big.Int // LocalCurrency modification (if has)
}
func NewAccountDelta ¶
func (*AccountDelta) Add ¶
func (d *AccountDelta) Add(delta *big.Int)
func (*AccountDelta) AddCurrency ¶
func (d *AccountDelta) AddCurrency(delta *big.Int)
func (*AccountDelta) Address ¶
func (d *AccountDelta) Address() common.Address
func (*AccountDelta) HashValue ¶
func (d *AccountDelta) HashValue() ([]byte, error)
TODO delete compatible when restart the chain with new version
func (*AccountDelta) String ¶
func (d *AccountDelta) String() string
type AccountDeltaFromTrie ¶
type AccountDeltaFromTrie struct {
// contains filtered or unexported fields
}
func NewAccountDeltaFromTrie ¶
func NewAccountDeltaFromTrie(dbase db.Database) *AccountDeltaFromTrie
func (*AccountDeltaFromTrie) FromDeltaFroms ¶
func (d *AccountDeltaFromTrie) FromDeltaFroms(deltaFroms DeltaFroms) error
func (*AccountDeltaFromTrie) HashValue ¶
func (d *AccountDeltaFromTrie) HashValue() (hashValue []byte, err error)
func (*AccountDeltaFromTrie) ToDeltaFroms ¶
func (d *AccountDeltaFromTrie) ToDeltaFroms() (DeltaFroms, error)
type AccountDeltaTrie ¶
type AccountDeltaTrie struct {
trie.SmallCombinedTrie
// contains filtered or unexported fields
}
func NewAccountDeltaTrie ¶
func NewAccountDeltaTrie(shardInfo common.ShardInfo, dbase db.Database) *AccountDeltaTrie
func (*AccountDeltaTrie) Delete ¶
func (t *AccountDeltaTrie) Delete(key []byte) (changed bool, oldValue interface{})
func (*AccountDeltaTrie) Deserialization ¶
func (t *AccountDeltaTrie) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*AccountDeltaTrie) Get ¶
func (t *AccountDeltaTrie) Get(key []byte) (value interface{}, ok bool)
func (*AccountDeltaTrie) GetExistenceProof ¶
func (t *AccountDeltaTrie) GetExistenceProof(key []byte) (exist bool, proofs trie.ProofChain, err error)
func (*AccountDeltaTrie) GetProof ¶
func (t *AccountDeltaTrie) GetProof(addrKey []byte) (interface{}, trie.ProofChain, bool)
func (t *AccountDeltaTrie) GetProof(addrKey []byte) (interface{}, common.ProofHash, bool) {
func (*AccountDeltaTrie) GetSubProof ¶
func (t *AccountDeltaTrie) GetSubProof(id common.ChainID) (value trie.ITrie, proof trie.ProofChain, ok bool)
func (*AccountDeltaTrie) HashValue ¶
func (t *AccountDeltaTrie) HashValue() (HashValue []byte, err error)
func (*AccountDeltaTrie) Put ¶
func (t *AccountDeltaTrie) Put(key []byte, value interface{}) bool
Put key is Address
func (*AccountDeltaTrie) Reset ¶
func (t *AccountDeltaTrie) Reset()
func (*AccountDeltaTrie) Serialization ¶
func (t *AccountDeltaTrie) Serialization(w io.Writer) error
func (*AccountDeltaTrie) ValueIterator ¶
func (t *AccountDeltaTrie) ValueIterator() trie.ValueIterator
type AccountState ¶
type AttendanceRecord ¶
type AttendanceRecord struct {
Epoch common.EpochNum // current epoch
Attendance *big.Int // Indicates by bit whether the corresponding data block is empty, Attendance.Bit(BlockNum)==1 is normal block and ==0 is empty block
DataNodes common.NodeIDs // List of datanode nodeid in ascending order
Stats []int // Stats of alive data nodes
// contains filtered or unexported fields
}
Even if it is an empty block, the attendance table must be filled in. Otherwise, when the last block of epoch is an empty block, the data node will not be able to report the attendance table (the previous block cannot prove the attendance of the following block). Therefore, the empty block should not only fill in the attendance table, but also fill in the attendance hash in the header. In this way, the attendance table of each block is locked in the header, so there is no need to record blocknum separately
func NewAttendanceRecord ¶
func NewAttendanceRecord(epoch common.EpochNum, dataNodes ...common.NodeID) *AttendanceRecord
func (*AttendanceRecord) AddDataNodeStat ¶
func (a *AttendanceRecord) AddDataNodeStat(nodeId common.NodeID)
func (*AttendanceRecord) Formalize ¶
func (a *AttendanceRecord) Formalize()
func (*AttendanceRecord) IsLegalFirst ¶
func (a *AttendanceRecord) IsLegalFirst(datanodes common.NodeIDs) error
func (*AttendanceRecord) IsLegalNext ¶
func (a *AttendanceRecord) IsLegalNext(next *AttendanceRecord) error
func (*AttendanceRecord) SetAbsentness ¶
func (a *AttendanceRecord) SetAbsentness(epoch common.EpochNum, block common.BlockNum)
func (*AttendanceRecord) SetAttendance ¶
func (a *AttendanceRecord) SetAttendance(epoch common.EpochNum, block common.BlockNum)
func (*AttendanceRecord) String ¶
func (a *AttendanceRecord) String() string
type BlockAppendSuccess ¶
type BlockAppendSuccess func(block *BlockEMessage, hashOfHeader []byte) error
type BlockBody ¶
type BlockBody struct {
NextCommittee *Committee // election results of the next committee
NCMsg []*ElectMessage // election requests for chains (in main chain)
DeltaFroms DeltaFroms // deltas merged to current shard
Txs []*Transaction // transactions
TxsPas []*PubAndSig // signatures corresponding to packaged transactions
Deltas []*AccountDelta // the delta generated by packaged transactions on current shard needs to be sent to other shards
Hds []*BlockSummary // block summary reported by children chains
Attendance *AttendanceRecord // attendance table of the current epoch
RewardReqs RewardRequests // self-proving reward request of each chain received on the main chain
ElectingResults ChainElectResults // Since v1.5.0, a list of election results, it's a preelection when Epoch.IsNil()==true, others are local election (not provided at present)
PreElectings PreElectings // Since v1.5.0, the list of preselections in progress, sorted by (expire, chainid)
NextRealCommittee *Committee // Since v1.5.0, when election finished, the result will be put into NextCommittee. If the election is failed, the current committee will continue to be used in the next epoch. At this time, the current committee needs to be written into this field, which can be brought with it when reporting.
SeedFactor SeedFactor // Since v2.0.0, random factor of seed
}
func (*BlockBody) NextCommitteeRoot ¶
type BlockChain ¶
type BlockChain interface {
CurrentBlock() *BlockEMessage
Append(block *BlockEMessage, validator func(*BlockEMessage) error) (int, []byte, error)
GetCurrentHeight() common.Height
GetBlockHash(height common.Height) (*common.Hash, bool)
GetBlock(height common.Height) (*BlockEMessage, error)
GetHeader(height common.Height) (*BlockHeader, error)
GetBlockByHash(hashOfHeader []byte) (*BlockEMessage, error)
GetBlockTxIndexs(txHash []byte) (*TXIndex, error)
}
type BlockCursor ¶
BlockCursor Cursor information used to record blocks, including block height and block hash
type BlockEMessage ¶
type BlockEMessage struct {
BlockHeader *BlockHeader
BlockBody *BlockBody
BlockPass PubAndSigs
}
func GenesisBlock ¶
func GenesisBlock(id common.ChainID, holder DataHolder) *BlockEMessage
func NewEmptyBlock ¶
func NewEmptyBlock(holder DataHolder, lastBlock *BlockEMessage, committeeHash *common.Hash) (*BlockEMessage, error)
func (*BlockEMessage) BlockNum ¶
func (b *BlockEMessage) BlockNum() common.BlockNum
func (*BlockEMessage) CheckHashs ¶
func (b *BlockEMessage) CheckHashs() error
CheckHashs Recalculate and verify the data in the header according to the body data, and return the corresponding error if it fails
func (*BlockEMessage) EpochNum ¶
func (b *BlockEMessage) EpochNum() common.EpochNum
func (*BlockEMessage) EraString ¶
func (b *BlockEMessage) EraString() string
func (*BlockEMessage) Formalize ¶
func (b *BlockEMessage) Formalize()
func (*BlockEMessage) GetChainID ¶
func (b *BlockEMessage) GetChainID() common.ChainID
func (*BlockEMessage) GetHeight ¶
func (b *BlockEMessage) GetHeight() common.Height
func (*BlockEMessage) GetHistoryRoot ¶
func (b *BlockEMessage) GetHistoryRoot() []byte
func (*BlockEMessage) Hash ¶
func (b *BlockEMessage) Hash() common.Hash
func (*BlockEMessage) InfoString ¶
func (b *BlockEMessage) InfoString() string
func (*BlockEMessage) String ¶
func (b *BlockEMessage) String() string
type BlockHeader ¶
type BlockHeader struct {
PreviousHash common.Hash `json:"previoushash"` // the hash of the previous block header on current chain
HashHistory common.Hash `json:"history"` // hash of the history tree of hash for each block recorded in height order
ChainID common.ChainID `json:"chainid"` // current chain id
Height common.Height `json:"height"` // height of current block
Empty bool `json:"empty"` // empty block
ParentHeight common.Height `json:"-"` // height of parent height, is 0 if current is main chain
ParentHash *common.Hash `json:"-"` // block hash of main chain block at ParentHeight, nil if current is main chain
RewardAddress common.Address `json:"-"` // reward to
AttendanceHash *common.Hash `json:"-"` // The current epoch attendance record hash
RewardedCursor *common.Height `json:"-"` // If the current chain is the reward chain, record start height of main chain when next reward issues
CommitteeHash *common.Hash `json:"-"` // current epoch Committee member trie root hash
ElectedNextRoot *common.Hash `json:"-"` // root hash of the election result of next epoch committee members
NewCommitteeSeed *common.Seed `json:"seed"` // Current election seeds, only in the main chain
RREra *common.EraNum `json:"-"` // the era corresponding to the root of the current Required Reserve tree. When this value is inconsistent with the height of main chain, it indicates that a new RR tree needs to be calculated
RRRoot *common.Hash `json:"-"` // root hash of the Required Reserve tree in current era. Only in the reward chain and the main chain
RRNextRoot *common.Hash `json:"-"` // root hash of the Required Reserve tree in next era. Only in the reward chain and the main chain
RRChangingRoot *common.Hash `json:"-"` // changes waiting to be processed in current era
MergedDeltaRoot *common.Hash `json:"mergeroot"` // Root hash of the merged delta sent from other shards
BalanceDeltaRoot *common.Hash `json:"deltaroot"` // Root hash of the generated deltas by this block which needs to be sent to the other shards
StateRoot common.Hash `json:"stateroot"` // account on current chain state trie root hash
ChainInfoRoot *common.Hash `json:"-"` // for main chain only: all chain info trie root hash
WaterlinesRoot *common.Hash `json:"-"` // since v2.3.0, the waterlines of other shards to current chain after the execution of this block. nil represent all zeros. Because the value of the previous block needs to be inherited when the block is empty, values after block execution recorded.
VCCRoot *common.Hash `json:"-"` // Root hash of transfer out check tree in business chain
CashedRoot *common.Hash `json:"-"` // Root hash of transfer in check tree in business chain
TransactionRoot *common.Hash `json:"-"` // transactions in current block trie root hash
ReceiptRoot *common.Hash `json:"-"` // receipts for transactions in current block trie root hash
HdsRoot *common.Hash `json:"-"` // if there's any child chain of current chain, this is the Merkle trie root hash generated by the reported block header information of the child chain in order
TimeStamp uint64 `json:"timestamp"`
ElectResultRoot *common.Hash `json:"-"` // Since v1.5.0, Election result hash root (including pre election and ordinary election, ordinary one has not been provided yet)
PreElectRoot *common.Hash `json:"-"` // Since v1.5.0, the root hash of current preelecting list sorted by (Expire, ChainID), only in the main chain
FactorRoot *common.Hash `json:"-"` // since v2.0.0, seed random factor hash
}
func GenesisHeader ¶
func GenesisHeader(id common.ChainID, holder DataHolder) *BlockHeader
func NewEmptyHeader ¶
func NewEmptyHeader(holder DataHolder, lastHeader *BlockHeader, committeeHash *common.Hash) (*BlockHeader, error)
func (*BlockHeader) Era ¶
func (h *BlockHeader) Era() common.EraNum
func (BlockHeader) GetHeight ¶
func (h BlockHeader) GetHeight() common.Height
func (*BlockHeader) GetHistoryRoot ¶
func (h *BlockHeader) GetHistoryRoot() []byte
func (*BlockHeader) Hash ¶
func (h *BlockHeader) Hash() common.Hash
func (*BlockHeader) HashValue ¶
func (h *BlockHeader) HashValue() ([]byte, error)
func (*BlockHeader) InfoString ¶
func (h *BlockHeader) InfoString() string
func (*BlockHeader) MakeProof ¶
func (h *BlockHeader) MakeProof(typ trie.ProofType, proofChain *trie.ProofChain) (hashOfHeader []byte, err error)
func (*BlockHeader) Proof ¶
func (h *BlockHeader) Proof(typ trie.ProofType) (hashOfHeader []byte, indexHash *common.Hash, proof *common.MerkleProofs, err error)
Proof generate proof from a specified field to block hash
func (*BlockHeader) String ¶
func (h *BlockHeader) String() string
func (*BlockHeader) Summary ¶
func (h *BlockHeader) Summary() string
type BlockHeight ¶
To broadcast last height of the chain the current node recorded. Used to select the data node with the lowest height in the same chain ast the leader of synchronous data. The leader broadcasts the synchronization data. If everyone is highly consistent, everyone will send the same synchronization data FIXME: should use the data node with the highest height of data to be the leader. missing data
should be resync by sync procedure
func (*BlockHeight) GetBlockNum ¶
func (bh *BlockHeight) GetBlockNum() common.BlockNum
func (*BlockHeight) GetChainID ¶
func (bh *BlockHeight) GetChainID() common.ChainID
func (*BlockHeight) GetEpochNum ¶
func (bh *BlockHeight) GetEpochNum() common.EpochNum
func (*BlockHeight) GetHeight ¶
func (bh *BlockHeight) GetHeight() common.Height
func (BlockHeight) String ¶
func (bh BlockHeight) String() string
type BlockReport ¶
type BlockReport struct {
ToChainId common.ChainID
BlockHeader *BlockHeader // the header of the reporting block
NextComm *EpochCommittee // next committee when election finished
BlockPass []*PubAndSig // signatures of committee members who comfirmed reporting block. can be changed to aggregate signature in the future
}
BlockReport report of Block
func (*BlockReport) DestChainID ¶
func (r *BlockReport) DestChainID() common.ChainID
func (*BlockReport) GetChainID ¶
func (r *BlockReport) GetChainID() common.ChainID
func (*BlockReport) Hash ¶
func (r *BlockReport) Hash() common.Hash
func (*BlockReport) String ¶
func (r *BlockReport) String() string
func (*BlockReport) Verify ¶
func (r *BlockReport) Verify() error
type BlockRequest ¶
func (*BlockRequest) GetChainID ¶
func (b *BlockRequest) GetChainID() common.ChainID
func (*BlockRequest) GetHeight ¶
func (b *BlockRequest) GetHeight() common.Height
func (*BlockRequest) String ¶
func (b *BlockRequest) String() string
type BlockSummary ¶
type BlockSummary struct {
ChainId common.ChainID
Height common.Height
BlockHash common.Hash
// since v1.5.0, the election result of the next committee whill be packaged together.
// Because only the data and comm node will receive the report and record the next committee
// of the sub chain. Since the new elected node has already been synchronizing the main chain,
// it will not synchronize the data again, then it will not be able to synchronize all the sub
// chain committee information, resulting in the nodes missing the corresponding information
// when the new epoch begins.
NextComm *EpochCommittee
// V0's BlockSummary.Hash is same with blockhash, which can't reflect the location information
// of the block, and can't complete the proof of cross chain. V1 adds chainid and height to hash
Version uint16
}
func (*BlockSummary) GetChainID ¶
func (s *BlockSummary) GetChainID() common.ChainID
func (*BlockSummary) Hash ¶
func (s *BlockSummary) Hash() common.Hash
func (*BlockSummary) HashValue ¶
func (s *BlockSummary) HashValue() ([]byte, error)
func (*BlockSummary) String ¶
func (s *BlockSummary) String() string
func (*BlockSummary) SummaryHash ¶
func (s *BlockSummary) SummaryHash() ([]byte, error)
type CachedHeighter ¶
type CachedHeighter struct {
// contains filtered or unexported fields
}
func NewCacheHeighter ¶
func NewCacheHeighter(event BlockHeighter, pub, sig []byte) *CachedHeighter
func (*CachedHeighter) GetHeight ¶
func (h *CachedHeighter) GetHeight() common.Height
func (*CachedHeighter) GetObject ¶
func (h *CachedHeighter) GetObject() BlockHeighter
func (*CachedHeighter) Hash ¶
func (h *CachedHeighter) Hash() common.Hash
func (*CachedHeighter) PubAndSig ¶
func (h *CachedHeighter) PubAndSig() (pub, sig []byte)
type CancelCashCheckRequest ¶
type CancelCashCheckRequest struct {
Check *CashCheck `json:"check"` // cheque to be voided
AbsenceChainID common.ChainID `json:"chain"` // the target chain of the proof
AbsenceHeight common.Height `json:"height"` // block height of target chain which proof prove to
AbsenceHeaderHash common.Hash `json:"header"` // the proof target hash of Proofs
CCCProofs trie.ProofChain `json:"absence"` // CashedTrie's proof of non-existence of check
Proofs trie.ProofChain `json:"proofs"` // from CashedTrie.Root Proof chain to the target of proof
ConfirmedHeight common.Height `json:"confirmedHeight"` // the main chain block height which confirmed target block header
}
a valid cancel request must:
- CCCProofs.IsExist(Hash(Check))==false, means the check not cashed
- Proofs[0].PType==trie.ProofHeaderCCCRoot, to proof it's a CashedTrie proof
- Proofs[0].IsHeaderOf(Check.ToChain, AbsenceHeight)==true, to proof that the current proof is actually generated by the block of target height of the target chain
- AbsenceHeaderHash==Hash(Block(ChainID:MainChainID, Height:ConfirmedHeight)), the proof target is the main chain block hash at ConfirmedHeight
- Proofs.Proof(CCCProofs.ExistenceHash())==AbsenceHeaderHash, that is the proof required.
func (*CancelCashCheckRequest) String ¶
func (c *CancelCashCheckRequest) String() string
type CashCheck ¶
type CashCheck struct {
ParentChain common.ChainID `json:"ParentChain"` // parent of source chain
IsShard bool `json:"IsShard"` // whether the source chain is a sharding chain
FromChain common.ChainID `json:"FromChain"` // id of source chain
FromAddress common.Address `json:"FromAddr"` // address of source account
Nonce uint64 `json:"Nonce"` // nonce of the tx to write the CashCheck
ToChain common.ChainID `json:"ToChain"` // target chain id
ToAddress common.Address `json:"ToAddr"` // address of the target account
ExpireHeight common.Height `json:"ExpireHeight"` // The expired height refers to that when the height of the target chain exceeds (excluding) this value, the check cannot be withdrawn and can only be returned
UserLocal bool `json:"UseLocal"` // true: local currency, false: basic currency, default is false
Amount *big.Int `json:"Amount"` // amount of the check
CurrencyID common.CoinID `json:"CoinID"` // Currency ID, new field, 0 when uselocal==false, currency ID when =true, and 0 for old version data
}
Verifiable Cash Check, for cross chain transfer In order to avoid synchronous recovery of ChainInfos in main chain when recovering data, the chain information is input by the user, and it is enough to check whether the local data is legal when executing (because even if the main chain data is not synchronized, the local chain information can still be known). If the input error can be retrieved through cancel
func (*CashCheck) Deserialization ¶
func (*CashCheck) Serialization ¶
4 bytes FromChain + 20 bytes FromAddress + 8 bytes Nonce + 4 bytes ToChain + 20 bytes ToAddress + 8 bytes ExpireHeight + 1 byte len(Amount.Bytes()) + Amount.Bytes() all BigEndian
type CashRequest ¶
type CashRequest struct {
Check *CashCheck `json:"check"` // check information to be cashed
ProofedChainID common.ChainID `json:"chain"` // the target chain of the proof (main chain)
ProofHeight common.Height `json:"height"` // proof from check hash to block.hash of source chain, and then to main chain block.hash. this is the corresponding main chain block height
ProofHeaderHash common.Hash `json:"header"` // block hash which height is specified by ProofHeight
Proofs trie.ProofChain `json:"proofs"` // proof of check
}
Check cashing request object is generated by RPC interface and submitted to the target chain through TX. the whole transmission process uses the serialization of this object
func (*CashRequest) Verify ¶
func (r *CashRequest) Verify() (hashOfCheck []byte, err error)
type ChainContext ¶
type ChainContext interface {
// GetHeader returns the hash corresponding to their hash.
GetHeader(common.Hash, uint64) *BlockHeader
}
type ChainCurrencier ¶
type ChainCurrencier interface {
GlobalCurrencier
// Whether there is a local currency, if so, the last one method will return the local currency
// information. Otherwise, the latter one method return basic currency information
HasLocalCurrency() bool
// Return (local currency ID, local currency name), when the local currency ID==0, it is the
// basic currency
GetLocalCurrency() (common.CoinID, string)
// Get the list of administrator public keys of the current chain. If there is a valid value,
// the second return value will return true, otherwise it will return false
GetAdmins() ([][]byte, bool)
// Whether the current chain is a PoC (Proof of Capacity) chain
IsPoc() bool
}
Used to determine whether there is a local currency in the current chain, and if so, what is the type of the local currency
type ChainCurrencierAdapter ¶
type ChainCurrencierAdapter struct {
GlobalCurrencier
CID common.ChainID
}
func NewChainCurrencier ¶
func NewChainCurrencier(global GlobalCurrencier, chainid common.ChainID) ChainCurrencierAdapter
func (ChainCurrencierAdapter) GetAdmins ¶
func (a ChainCurrencierAdapter) GetAdmins() ([][]byte, bool)
func (ChainCurrencierAdapter) GetLocalCurrency ¶
func (a ChainCurrencierAdapter) GetLocalCurrency() (common.CoinID, string)
func (ChainCurrencierAdapter) HasLocalCurrency ¶
func (a ChainCurrencierAdapter) HasLocalCurrency() bool
func (ChainCurrencierAdapter) IsPoc ¶
func (a ChainCurrencierAdapter) IsPoc() bool
type ChainElectResult ¶
type ChainElectResult struct {
ChainID common.ChainID // Election chain
Epoch common.EpochNum // The Epoch where the election took place, the value of the pre-election is NilEpoch
Results NodeResults
}
The compound data structure packed in the block, the memory and the form of the data set in the block
func (*ChainElectResult) HashValue ¶
func (c *ChainElectResult) HashValue() ([]byte, error)
func (*ChainElectResult) ResultLen ¶
func (c *ChainElectResult) ResultLen() int
func (*ChainElectResult) String ¶
func (c *ChainElectResult) String() string
func (*ChainElectResult) Success ¶
func (c *ChainElectResult) Success() bool
func (*ChainElectResult) ToCommittee ¶
func (c *ChainElectResult) ToCommittee() *Committee
type ChainElectResults ¶
type ChainElectResults []*ChainElectResult
func (ChainElectResults) HashValue ¶
func (cs ChainElectResults) HashValue() ([]byte, error)
func (ChainElectResults) HavePreelects ¶
func (cs ChainElectResults) HavePreelects() bool
Whether there is a pre-election result
func (ChainElectResults) Len ¶
func (cs ChainElectResults) Len() int
func (ChainElectResults) Less ¶
func (cs ChainElectResults) Less(i, j int) bool
func (ChainElectResults) Swap ¶
func (cs ChainElectResults) Swap(i, j int)
func (ChainElectResults) ToMap ¶
func (cs ChainElectResults) ToMap() map[common.ChainID]*ChainElectResult
type ChainEpochCommittee ¶
type ChainEpochCommittee struct {
ChainID common.ChainID
Epoch common.EpochNum
Comm *EpochCommittee
}
func (*ChainEpochCommittee) String ¶
func (c *ChainEpochCommittee) String() string
type ChainEvent ¶
type ChainInfoChange ¶
type ChainInfoChange struct {
Sender common.Address // TX.From
Nonce uint64 // TX.Nonce, Sender + Nonce combination should prevent replay attacks
Data []byte // information to be modified
}
func (*ChainInfoChange) Deserialization ¶
func (s *ChainInfoChange) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ChainInfoChange) Serialization ¶
func (s *ChainInfoChange) Serialization(w io.Writer) error
func (*ChainInfoChange) String ¶
func (s *ChainInfoChange) String() string
type ChainSetting ¶
type ChainSetting struct {
Sender common.Address // Address of sender, should same with TX.From
Nonce uint64 // TX.Nonce, Sender+Nonce combination should prevent replay attacks
Name string // setting name to be set
Data []byte // setting value to be set
}
func (*ChainSetting) Deserialization ¶
func (s *ChainSetting) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ChainSetting) Serialization ¶
func (s *ChainSetting) Serialization(w io.Writer) error
func (*ChainSetting) String ¶
func (s *ChainSetting) String() string
type ChainSnapshot ¶
type ChainSnapshot struct {
Height common.Height // current height
Block *BlockEMessage // block of current height
Waterlines []ShardWaterline // waterlines of shards at current height
CheckEpoch bool // whether to check epoch matchness
}
snapshot of chain status
func (*ChainSnapshot) String ¶
func (ss *ChainSnapshot) String() string
type ChainStats ¶
type ChainStats struct {
CurrentHeight uint64 `json:"currentheight"` // current height of the chain
SumTxCount uint64 `json:"txcount"` // The number of current chain transactions after this launch
AllTps uint64 `json:"tps"` // Current chain TPS after this launch
LastEpochTps uint64 `json:"tpsLastEpoch"` // TPS of the previous epoch after this launch
LastNTps uint64 `json:"tpsLastN"` // TPS of previous %N blocks
Lives uint64 `json:"lives"` // Running time after this launch (in seconds)
AccountCount uint64 `json:"accountcount"` // 0
EpochLength uint64 `json:"epochlength"` // The number of blocks in one epoch
AvgEpochDuration uint64 `json:"epochduration"` // Average time of an epoch (in seconds)
LastEpochDuration uint64 `json:"lastepochduration"` // The time spent in the last epoch (in seconds)
LastNDuration uint64 `json:"lastNduration"` // Time spent in the previous %N blocks (in seconds)
LastEpochBlockTime uint64 `json:"lastEpochBlockTime"` // The average block time of the last epcoh (in milliseconds)
LastNBlockTime uint64 `json:"lastNBlockTime"` // Average block time of previous %N blocks (in milliseconds)
N uint64 `json:"N"` // The value of N
GasLimit uint64 `json:"gaslimit"` // Current chain default GasLimit
GasPrice string `json:"gasprice"` // Current chain default GasPrice
CurrentComm []common.NodeID `json:"currentcomm"` // The node list of the current committee of the chain
Version string `json:"version"` // Version of current node
}
type ChainTrie ¶
type ChainTrie struct {
// contains filtered or unexported fields
}
func NewChainTrie ¶
func (*ChainTrie) CheckPoint ¶
func (*ChainTrie) DeleteInfo ¶
func (*ChainTrie) GenesisNodes ¶
According to ChainTrie data, all genesis consensus nodes and genesisi data nodes are obtained to generate the genesis required reserve tree
func (*ChainTrie) GetAllChainInfos ¶
func (c *ChainTrie) GetAllChainInfos() []*common.ChainInfos
func (*ChainTrie) GetChainChildren ¶
func (*ChainTrie) GetChainInfos ¶
func (*ChainTrie) GetChainList ¶
func (*ChainTrie) GetDataNodeList ¶
func (*ChainTrie) GetDataNodeMap ¶
func (*ChainTrie) GetDataNodes ¶
func (*ChainTrie) GetGenesisDataNodeList ¶
func (*ChainTrie) GetLiveChainInfos ¶
func (*ChainTrie) GetReportChildren ¶
func (*ChainTrie) GetShardInfo ¶
func (*ChainTrie) GetVrfChainList ¶
func (*ChainTrie) IsInUsing ¶
Whether the node is the data node in use. If yes, the chain ID and true are returned; otherwise, chainid is meaningless and false returned
func (*ChainTrie) IsNoGas ¶
Whether the chain does not need pay gas feed. If true, the second value returns the chain ID with the AttrNoGas attribute
func (*ChainTrie) RangeAllInfos ¶
func (c *ChainTrie) RangeAllInfos(oneInfosCallback func(oneInfos *common.ChainInfos))
type ChangeChainInfoRequest ¶
type ChangeChainInfoRequest struct {
Data *ChainInfoChange
Sigs [][]byte // signature list
Pubs [][]byte // public key list corresponding to signature one by one
}
func (*ChangeChainInfoRequest) DataDeserialize ¶
func (s *ChangeChainInfoRequest) DataDeserialize(vr rtl.ValueReader) error
func (*ChangeChainInfoRequest) DataSerialize ¶
func (s *ChangeChainInfoRequest) DataSerialize(w io.Writer) error
func (*ChangeChainInfoRequest) Deserialization ¶
func (s *ChangeChainInfoRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ChangeChainInfoRequest) GetData ¶
func (s *ChangeChainInfoRequest) GetData() (o interface{}, exist bool)
func (*ChangeChainInfoRequest) GetPubs ¶
func (s *ChangeChainInfoRequest) GetPubs() [][]byte
func (*ChangeChainInfoRequest) GetSigs ¶
func (s *ChangeChainInfoRequest) GetSigs() [][]byte
func (*ChangeChainInfoRequest) Serialization ¶
func (s *ChangeChainInfoRequest) Serialization(w io.Writer) error
func (*ChangeChainInfoRequest) SetPubs ¶
func (s *ChangeChainInfoRequest) SetPubs(pubs [][]byte)
func (*ChangeChainInfoRequest) SetSigs ¶
func (s *ChangeChainInfoRequest) SetSigs(sigs [][]byte)
func (*ChangeChainInfoRequest) String ¶
func (s *ChangeChainInfoRequest) String() string
type CommReport ¶
type CommReport struct {
ChainId common.ChainID
ToChainId common.ChainID
EpochNum common.EpochNum
Comm *Committee
}
func (*CommReport) GetChainID ¶
func (r *CommReport) GetChainID() common.ChainID
func (*CommReport) Hash ¶
func (r *CommReport) Hash() common.Hash
type CommitCallback ¶
type CommitCallback func(block *BlockEMessage) error
When the data block is confirmed, the callback function executed after the transaction is executed. At this time the block has been confirmed by the committee and all nodes must execute
type Committee ¶
func NewCommittee ¶
func NewCommittee() *Committee
func (*Committee) CopyMembers ¶
func (*Committee) FullString ¶
func (*Committee) IsAvailable ¶
func (*Committee) IsProposor ¶
func (*Committee) ReachRequires ¶
type CompatibleAccount ¶
type CompatibleDelta ¶
for compatible with old version hash of AccountDelta TODO delete compatible when restart the chain with new version
type ConnectedCallBackFunc ¶
type Context ¶
type Context struct {
Op *OpSet
Eventer Eventer
ChainInfo *common.ChainInfos
ShardInfo common.ShardInfo
Networker Networker
Holder DataHolder
Engine Engine
// source of message
Source Location
// for test adapter
// cengine consensus.Engine
// mainChain *consensus.MainChain
Dmanager DataManager
Nmanager NetworkManager
WorkerName string
Logger logrus.FieldLogger
PAS *PubAndSig
}
type DataHolder ¶
type DataHolder interface {
// GetChainInfo() *common.ChainInfos
// GetShardInfo returns ShardInfo only if current chain is a shard chain
GetShardInfo() common.ShardInfo
GetChainInfoRoot() (*common.Hash, error)
SetGenesisHeader(header *BlockHeader) error
GetChainInfo() (*common.ChainInfos, bool)
// ChainList() common.ChainIDs
GetDataNodeList() common.NodeIDs
IsDataNode() bool // is it the data node of current chain
IsMemoNode() bool // is it the full node of current chain
IncCount(height common.Height, timestamp uint64, count uint64)
// FIXME: should not reture database to other layer
GetDb() db.Database
// GetBlockChain get BlockChain of current Chain
GetBlockChain() BlockChain
GetBlock(height common.Height) (*BlockEMessage, error)
GetBlockByHash(hashOfHeader []byte) (*BlockEMessage, error)
GetBlockWithUnverified(height common.Height) (*BlockEMessage, error)
SaveUnverifiedBlock(block *BlockEMessage) error
GetBlockHash(height common.Height) (*common.Hash, bool)
GetHeader(height common.Height) (*BlockHeader, error)
GetHistoryRoot(expectingHeight common.Height) ([]byte, error)
// SaveRewardRequests(block *BlockEMessage, hashOfBlock []byte) error
PutBlock(block *BlockEMessage, appendSuccessFunc BlockAppendSuccess) error
CreateEmptyAccountTrie() *trie.Trie
CreateAccountTrie(rootHash []byte) *trie.Trie
RestoreHistoryTreeFromProofs(lastHeight common.Height, lastHeightHash []byte,
proofs trie.ProofChain) (*trie.HistoryTree, error)
CreateHistoryTree(root []byte, checkPrecedingNil bool) (*trie.HistoryTree, error)
CreateEmptyVccOrigin() *trie.Trie
CreateEmptyCashedOrigin() *trie.Trie
SyncState(height common.Height, block *BlockEMessage, states *WholeWorld, logger logrus.FieldLogger) error
SyncChains(chains *trie.Trie) error
SyncAccTrie(height common.Height, accStates *trie.Trie) error
SyncBlock(block *BlockEMessage) error
// IsSynced returns 0 if the chain is not yet synced, and returns 1 if synced
IsSynced() bool
SetSynced()
IsFull() bool
StopSyncing()
IsEmpty() bool
IsExpectingEpoch(epoch common.EpochNum) error
GetCurrentHeight() common.Height
SetCurrentHeight(height common.Height)
SetCurrentToHeight(height common.Height, hob common.Hash) error
GetWorldStateRoot() ([]byte, error)
SnapshotRoots() (snapshot *ChainSnapshot, err error)
GetWorldStateStream(snapshot *ChainSnapshot) (accStream [][]byte,
stoStream [][]byte, codeStream [][]byte, longStream [][]byte, deltaStream [][]byte, chainsStream []byte, err error)
GetCashCheckState(vccRoot, cashedRoot []byte) (vccs, casheds [][]byte, err error)
// GetTransactions returns transaction trie in specific block
GetTransactions(height common.Height) (trie.ITrie, error)
// GetReceipts returns receipt list in specific block by its receiptsHash
GetReceiptsByRoot(receiptHash common.Hash) Receipts
CallProcessTx(tx *Transaction, senderSig *PubAndSig, blockHeader *BlockHeader) (interface{}, error)
ProposeData(froms DeltaFroms, header *BlockHeader, txs []*Transaction, pas []*PubAndSig) (result *ProposeResult, err error)
CanBeAccept(reportChainID common.ChainID, height common.Height, hob []byte) error
PrepareBlock(block *BlockEMessage) error
ForceCommit() (err error)
CreateRootDeltaTrie() *AccountDeltaTrie
// RestoreDeltaTrieFromBlock recover complete AccountDeltaTrie from block。
RestoreDeltaTrieFromBlock(block *BlockEMessage) (*AccountDeltaTrie, error)
SaveReceivedDelta(fromID common.ChainID, height common.Height, deltas []*AccountDelta) (
overflow bool, waterline common.Height, overflowed []*DeltaFrom, missing bool, missingLength int, err error)
SaveDeltasGroup(fromID common.ChainID, group DeltasGroup) (overflow bool,
waterline common.Height, overflowed []*DeltaFrom, missing bool, missingLength int, err error)
CheckReceivedDelta(fromID common.ChainID, height common.Height) bool
CreateAccountDeltaTrie() trie.ITrie
PopDeltaFroms() DeltaFroms
PutDeltaFroms(deltaFroms DeltaFroms)
CreateDeltaFromTrie() *AccountDeltaFromTrie
ShouldSendDelta() (A, B common.Height, confirmed common.Height, mainBlockSummary *HeaderSummary, err error)
SetDeltaToBeSent(height common.Height)
VerifyDeltasPack(pack *DeltasPack) error
// Verifiable Cash Check Trie
AddVCC(vcc *CashCheck) (hashOfVcc []byte, err error)
DeleteVCC(vcc *CashCheck) (ok bool, hashOfVcc []byte, err error)
VccProof(vcc *CashCheck) (height common.Height, proofChain trie.ProofChain, hashOfHeader []byte, err error)
AddCCC(vcc *CashCheck, txHash *common.Hash) (hashOfVcc []byte, err error)
CCCExsitenceProof(ccc *CashCheck) (height common.Height, existence bool, existProof trie.ProofChain,
cashedRootProof trie.ProofChain, hashOfHeader []byte, err error)
GetCCCRelativeTx(hashOfVcc []byte) (hashOfTx []byte, err error)
CreateVCCTrie(root []byte) *trie.Trie
CreateCCCTrie(root []byte) *trie.Trie
GetAccount(addr *common.Address) (*Account, bool)
GetCodeByHash(codeHash common.Hash) []byte
GetGasSettings() (gasPrice *big.Int, gasLimit uint64)
SwitchEpoch()
HasChild() bool
// Record the committee election result comm of chainid chain in epoch num. if comm is
// not available, prev is the last effective committee.
// Because the parent chain needs to keep the consensus committee information of the
// sub chain, chainId is necessary.
PutCommittee(chainId common.ChainID, num common.EpochNum, comm *Committee, prev *Committee) error
GetCommittee(chainId common.ChainID, num common.EpochNum) (*Committee, error)
GetEpochComm(chainId common.ChainID, num common.EpochNum) (*EpochCommittee, error)
SyncCommittees(currentHeight common.Height) ([]*ChainEpochCommittee, error)
PutHeaderSummaries(bock *BlockEMessage) error
GetHeaderSummary(chainId common.ChainID, height common.Height) (*HeaderSummary, error)
// Interfaces used to record whether messages have been processed
Process(hash common.Hash) bool
Processed(hash common.Hash) bool
RemoveProcessed(hash common.Hash)
ClearProcessed()
AppendHistory(height common.Height, hash []byte) (newRoot []byte, err error)
SetSyncFinish(height common.Height)
GetSyncFinish() common.Height
SetCursorManually(to common.Height) error
GetStateDB() StateDB
GetConsistantLong(addr common.Address, key common.Hash) []byte
SetLongState(addr common.Address, key common.Hash, value []byte)
// interfaces for chain management
MCHAddBootNode(id common.ChainID, bootNode common.Dataserver) (errr error)
MCHRemoveBootNode(id common.ChainID, nodeId common.NodeID) error
MCHAddDataNode(id common.ChainID, nodeId common.NodeID) error
MCHRemoveDataNode(id common.ChainID, nodeId common.NodeID) error
MCHAddAdmin(id common.ChainID, adminPub []byte) error
MCHDelAdmin(id common.ChainID, adminPub []byte) error
MCHAttributes(id common.ChainID, isSet bool, attrs ...common.ChainAttr) error
// interfaces for election
GetPreElecting(id common.ChainID) *PreElecting
PutPreElectResult(resulter ElectResulter)
ProposePreElecting(height common.Height) (PreElectings, ChainElectResults)
SetPreelectExamineResult(chainId common.ChainID, success bool) error
SyncPreElection(electings PreElectings)
MergeProof(key uint64, value []byte, proofs trie.ProofChain) error
// interface for check nodes
CacheAliveDataNode(id common.NodeID, height common.Height)
LoadAliveDataNodes() common.NodeIDs
ClearAliveDataNodes(height common.Height)
}
type DataManager ¶
type DataManager interface {
common.Service
Eventer() Eventer
SetChainStructs(chains *config.Config)
InitOneChain(chainid common.ChainID) error
CreateGenesisData(chainId common.ChainID) error
CreateChainInfosOrigin(rootHash []byte) *trie.Trie
GetChainInfos(id common.ChainID) (*common.ChainInfos, bool)
IsInUsingDataNode(dataNodeId common.NodeID) (common.ChainID, bool)
IsNoGasChain(chainId common.ChainID) (bool, common.ChainID)
GetChainStats(id common.ChainID) (*ChainStats, error)
DataNodeOf() common.ChainID
IsDataNode() bool
IsMemoNode() bool
// Deprecated
IsDataMemoNode() bool
GetShardInfo(chainid common.ChainID) common.ShardInfo
IsDataNodeOf(id common.ChainID) bool
IsShard(id common.ChainID) bool
HasAttribute(id common.ChainID, attr common.ChainAttr) bool
IsLeaf(id common.ChainID) bool
GetChainChildren(chainid common.ChainID) common.ChainIDs
GetChainChildrenAndSelfInfos(chainid common.ChainID) []*common.ChainInfos
GetDataNodes(id common.ChainID) map[common.NodeID]struct{}
GetGenesisDataNodeList(id common.ChainID) common.NodeIDs
GetDataNodeList(id common.ChainID) common.NodeIDs
GetDataNodeIDs(chainId common.ChainID) common.NodeIDs // Return if there is a list of Genesis data nodes, otherwise return to the list of data nodes
GetChainList() common.ChainIDs
GetVrfChainList() common.ChainIDs
GetAllChainInfos() []*common.ChainInfos
GetGenesisNodes() map[common.NodeID]common.NodeType
CreateTestAccount(chainid common.ChainID, addr common.Address, balance *big.Int, local *big.Int) error
ForceCommit(chainid common.ChainID) error
// GetAccount(addr *common.Address, chainID common.ChainID) (Account, bool)
GetChainData(chainid common.ChainID) (DataHolder, error)
GetMainChainLong(addr common.Address, key common.Hash) []byte
GetChainLong(chainid common.ChainID, addr common.Address, key common.Hash) []byte
RemoveChain(chainid common.ChainID)
GetHeaderSummaries(chainid common.ChainID, height common.Height) ([]*HeaderSummary, error)
SetCursorManually(to common.Height) error
ReadOnly() DataManager
GetStartNodes() common.NodeIDs
AddStartNode(id common.NodeID)
StartNodesSize() int
AddLastComm(lastComm *LastCommEMessage) error
ToStartComm(chainIds common.ChainIDs) (*StartCommEMessage, error)
// cache seed
SetSeed(epoch common.EpochNum, newseed *common.Seed) bool
GetSeed() *common.Seed
LastSeedUpdatedAt() common.EpochNum
SaveCommitteeAt(at common.ChainID, commChain common.ChainID,
epoch common.EpochNum, comm, prev *Committee) error
GetCommitteeAt(at common.ChainID, commChain common.ChainID, epoch common.EpochNum) (*EpochCommittee, error)
}
func NewDManager ¶
type DataRequester ¶
type DeltaFrom ¶
type DeltaFrom struct {
Key DeltaFromKey
Deltas []*AccountDelta
}
type DeltaFromKey ¶
func BytesToDeltaFromKey ¶
func BytesToDeltaFromKey(bytes []byte) DeltaFromKey
func (DeltaFromKey) Bytes ¶
func (d DeltaFromKey) Bytes() []byte
func (DeltaFromKey) Cmp ¶
func (d DeltaFromKey) Cmp(to DeltaFromKey) int
func (DeltaFromKey) String ¶
func (d DeltaFromKey) String() string
type DeltaFroms ¶
type DeltaFroms []DeltaFrom
func (DeltaFroms) Len ¶
func (f DeltaFroms) Len() int
func (DeltaFroms) Less ¶
func (f DeltaFroms) Less(i, j int) bool
func (DeltaFroms) Summary ¶
func (f DeltaFroms) Summary() string
func (DeltaFroms) Swap ¶
func (f DeltaFroms) Swap(i, j int)
type DeltaRequestMessage ¶
type DeltaRequestMessage struct {
FromID common.ChainID // source chain of requested delta
ToID common.ChainID // target chain of requested delta
Start common.Height // The starting height of the source chain where the requested delta is located
Length int // The number of delta requested, starting from start (including start)
}
func (*DeltaRequestMessage) A ¶
func (m *DeltaRequestMessage) A() common.Height
func (*DeltaRequestMessage) B ¶
func (m *DeltaRequestMessage) B() common.Height
func (*DeltaRequestMessage) DestChainID ¶
func (m *DeltaRequestMessage) DestChainID() common.ChainID
func (*DeltaRequestMessage) GetChainID ¶
func (m *DeltaRequestMessage) GetChainID() common.ChainID
func (*DeltaRequestMessage) String ¶
func (m *DeltaRequestMessage) String() string
type DeltasGroup ¶
type DeltasGroup []*OneDeltas
Pack deltas generated by multiple blocks together. It is sent to the target chain at one time. Proof chain:root of the trie generated with deltas in block A (1)-> A.BalanceDeltaRoot (2)-> A.BlockHeader.Hash
(3)-> current block B.HashHistory (4)-> B.BlockHeader.Hash (5)-> (block C in main chain which confirmed block B).HdsRoot (6)-> C.BlockHeader.Hash
func (DeltasGroup) Len ¶
func (g DeltasGroup) Len() int
func (DeltasGroup) Less ¶
func (g DeltasGroup) Less(i, j int) bool
func (DeltasGroup) Summary ¶
func (g DeltasGroup) Summary() string
func (DeltasGroup) Swap ¶
func (g DeltasGroup) Swap(i, j int)
type DeltasPack ¶
type DeltasPack struct {
FromID common.ChainID // source chain id
ToChainID common.ChainID // target shard id
ProofedHeight common.Height // block B of source shard was confirmed by the main chain
ProofToMain trie.ProofChain // proof from B.Hash to C.Hash
MainHeight common.Height // the height of main chain block C which packed and confirmed block B
Pack DeltasGroup // deltas of each block from source chain
}
ProofToMain.Proof(BlockHash of ProofedHeight) == BlockHash of MainHeight (5)(6)
func (*DeltasPack) DestChainID ¶
func (d *DeltasPack) DestChainID() common.ChainID
func (*DeltasPack) GetChainID ¶
func (d *DeltasPack) GetChainID() common.ChainID
func (*DeltasPack) String ¶
func (d *DeltasPack) String() string
type DirectiveMsg ¶
type DummyCurrencier ¶
type DummyCurrencier struct {
// contains filtered or unexported fields
}
func GetDummyCurrencier ¶
func GetDummyCurrencier() *DummyCurrencier
func (*DummyCurrencier) GetAdminPrivs ¶
func (d *DummyCurrencier) GetAdminPrivs() ([][]byte, bool)
func (*DummyCurrencier) GetAdmins ¶
func (d *DummyCurrencier) GetAdmins() ([][]byte, bool)
func (*DummyCurrencier) GetChainAdminPrivs ¶
func (d *DummyCurrencier) GetChainAdminPrivs(id common.ChainID) ([][]byte, bool)
func (*DummyCurrencier) GetChainAdmins ¶
func (d *DummyCurrencier) GetChainAdmins(id common.ChainID) ([][]byte, bool)
func (*DummyCurrencier) GetChainLocalCurrencyInfo ¶
func (*DummyCurrencier) GetCurrencyAdmins ¶
func (d *DummyCurrencier) GetCurrencyAdmins() (privs, pubs [][]byte)
func (*DummyCurrencier) GetLocalCurrency ¶
func (d *DummyCurrencier) GetLocalCurrency() (common.CoinID, string)
func (*DummyCurrencier) HasLocalCurrency ¶
func (d *DummyCurrencier) HasLocalCurrency() bool
func (*DummyCurrencier) IsPoc ¶
func (d *DummyCurrencier) IsPoc() bool
func (*DummyCurrencier) IsPocChain ¶
func (d *DummyCurrencier) IsPocChain(chainid common.ChainID) bool
type DynamicFeeTx ¶
type DynamicFeeTx struct {
ChainID *big.Int
Nonce uint64
GasTipCap *big.Int
GasFeeCap *big.Int
Gas uint64
To *common.Address `rlp:"nil"` // nil means contract creation
Value *big.Int
Data []byte
AccessList AccessList
// Signature values
V *big.Int `json:"v" gencodec:"required"`
R *big.Int `json:"r" gencodec:"required"`
S *big.Int `json:"s" gencodec:"required"`
}
type EIP155Signer ¶
type EIP155Signer struct {
}
EIP155Signer implements Signer using the EIP-155 rules. This accepts transactions which are replay-protected as well as unprotected homestead transactions.
func NewEIP155Signer ¶
func NewEIP155Signer() EIP155Signer
func NewEIP155Signer(chainId *big.Int) EIP155Signer {
func (EIP155Signer) Equal ¶
func (s EIP155Signer) Equal(s2 Signer) bool
func (EIP155Signer) Hash ¶
func (s EIP155Signer) Hash(tx *ETHTransaction) common.Hash
Hash returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (EIP155Signer) HashGtkm ¶
func (s EIP155Signer) HashGtkm(tx *Transaction) common.Hash
HashGtkm returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (EIP155Signer) HashGtkmWithSig ¶
func (s EIP155Signer) HashGtkmWithSig(tx *Transaction) common.Hash
HashGtkmWithSig returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (EIP155Signer) RecoverSigAndPub ¶
func (s EIP155Signer) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
func (EIP155Signer) Sender ¶
func (s EIP155Signer) Sender(tx *ETHTransaction) (common.Address, error)
func (EIP155Signer) SignatureValues ¶
func (s EIP155Signer) SignatureValues(tx *ETHTransaction, sig []byte) (R, S, V *big.Int, err error)
SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.
type ETHTransaction ¶
type ETHTransaction struct {
// contains filtered or unexported fields
}
ETHTransaction is an Ethereum transaction.
func NewContractCreation ¶
func NewContractCreation(nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *ETHTransaction
NewContractCreation creates an unsigned legacy transaction. Deprecated: use NewTx instead.
func NewTransaction ¶
func NewTransaction(nonce uint64, to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *ETHTransaction
NewTransaction creates an unsigned legacy transaction. Deprecated: use NewTx instead.
func (*ETHTransaction) AccessList ¶
func (tx *ETHTransaction) AccessList() AccessList
AccessList returns the access list of the transaction.
func (*ETHTransaction) ChainId ¶
func (tx *ETHTransaction) ChainId() *big.Int
ChainId returns the EIP155 chain ID of the transaction. The return value will always be non-nil. For legacy transactions which are not replay-protected, the return value is zero.
func (*ETHTransaction) Data ¶
func (tx *ETHTransaction) Data() []byte
Data returns the input data of the transaction.
func (*ETHTransaction) From ¶
func (tx *ETHTransaction) From() *common.Address
func (*ETHTransaction) Gas ¶
func (tx *ETHTransaction) Gas() uint64
Gas returns the gas limit of the transaction.
func (*ETHTransaction) GasFeeCap ¶
func (tx *ETHTransaction) GasFeeCap() *big.Int
GasFeeCap returns the fee cap per gas of the transaction.
func (*ETHTransaction) GasPrice ¶
func (tx *ETHTransaction) GasPrice() *big.Int
GasPrice returns the gas price of the transaction.
func (*ETHTransaction) GasTipCap ¶
func (tx *ETHTransaction) GasTipCap() *big.Int
GasTipCap returns the gasTipCap per gas of the transaction.
func (*ETHTransaction) GetSigner ¶
func (tx *ETHTransaction) GetSigner() Signer
func (*ETHTransaction) Hash ¶
func (tx *ETHTransaction) Hash() common.Hash
func (*ETHTransaction) HashValue ¶
func (tx *ETHTransaction) HashValue() ([]byte, error)
func (*ETHTransaction) MarshalBinary ¶
func (tx *ETHTransaction) MarshalBinary() ([]byte, error)
func (*ETHTransaction) Nonce ¶
func (tx *ETHTransaction) Nonce() uint64
Nonce returns the sender account nonce of the transaction.
func (*ETHTransaction) Protected ¶
func (tx *ETHTransaction) Protected() bool
Protected says whether the transaction is replay-protected.
func (*ETHTransaction) RawSignatureValues ¶
func (tx *ETHTransaction) RawSignatureValues() (v, r, s *big.Int)
func (*ETHTransaction) SigAndPub ¶
func (tx *ETHTransaction) SigAndPub()
func (*ETHTransaction) To ¶
func (tx *ETHTransaction) To() *common.Address
To returns the recipient address of the transaction. For contract-creation transactions, To returns nil.
func (*ETHTransaction) ToTransaction ¶
func (tx *ETHTransaction) ToTransaction() (*Transaction, error)
func (*ETHTransaction) Type ¶
func (tx *ETHTransaction) Type() uint8
Type returns the transaction type.
func (*ETHTransaction) UnmarshalBinary ¶
func (tx *ETHTransaction) UnmarshalBinary(b []byte) error
func (*ETHTransaction) Value ¶
func (tx *ETHTransaction) Value() *big.Int
Value returns the ether amount of the transaction.
type ElectCallback ¶
type ElectMessage ¶
type ElectMessage struct {
// EpochNum is the current epoch number
// I.e., the elected committee is for epoch EpochNum+1
EpochNum common.EpochNum `json:"epoch"` // 选举时所在epoch
ElectChainID common.ChainID `json:"chainid"`
}
func (*ElectMessage) GetChainID ¶
func (p *ElectMessage) GetChainID() common.ChainID
func (*ElectMessage) Hash ¶
func (p *ElectMessage) Hash() common.Hash
func (*ElectMessage) String ¶
func (p *ElectMessage) String() string
type ElectResult ¶
type ElectResult struct {
NodeID common.NodeID // Node ID participating in the election
ChainID common.ChainID // Election chain
Epoch common.EpochNum // Epoch of the election
Sorthash *common.Hash // The result of the VRF algorithm
Proof []byte // Proof of VRF algorithm results
}
Election results in a unified format, used when transmitting separately In order to be compatible with VRFResultEMessage, the format is compatible
func (*ElectResult) FromResulter ¶
func (r *ElectResult) FromResulter(resulter ElectResulter) *ElectResult
func (*ElectResult) GetChainID ¶
func (r *ElectResult) GetChainID() common.ChainID
func (*ElectResult) GetElectingChainID ¶
func (r *ElectResult) GetElectingChainID() common.ChainID
func (*ElectResult) GetEpochNum ¶
func (r *ElectResult) GetEpochNum() common.EpochNum
func (*ElectResult) GetNodeID ¶
func (r *ElectResult) GetNodeID() common.NodeID
func (*ElectResult) GetVrfResult ¶
func (*ElectResult) IsPreElecting ¶
func (r *ElectResult) IsPreElecting() bool
func (*ElectResult) String ¶
func (r *ElectResult) String() string
type ElectResulter ¶
type ElectResulter interface {
// The chain ID where the election occurs should be distinguished from the GetChainID()
// method of the ChainEvent interface
GetElectingChainID() common.ChainID
// The Epoch where the election took place, the value of the pre-election is NilEpoch
GetEpochNum() common.EpochNum
VrfResulter
}
Election result interface
type ElectResults ¶
type ElectResults []*ElectResult
func (ElectResults) HashValue ¶
func (rs ElectResults) HashValue() ([]byte, error)
func (ElectResults) Len ¶
func (rs ElectResults) Len() int
func (ElectResults) Less ¶
func (rs ElectResults) Less(i, j int) bool
sorted by (ChainID, EpochNum, Sorthash, NodeID)
func (ElectResults) Swap ¶
func (rs ElectResults) Swap(i, j int)
func (ElectResults) ToPreElectMap ¶
func (rs ElectResults) ToPreElectMap() map[common.ChainID]map[common.NodeID]*ElectResult
type Elector ¶
type Elector interface {
// Returns whether the election of current chain is dynamic. False means that dynamic election is not needed
IsDynamic() bool
// Is the current node a legal candidate
IsCandidate() bool
// // Has the next election been completed
// HasNextCommittee() bool
// Filter for receiving block data
BlockReceived(ctx *Context, block *BlockEMessage)
// Filter for generating block data
BlockGenerated(block *BlockEMessage) error
// Set callback function after successful election
RegisterElectedCallback(callback ElectCallback)
// Election message processing
Electioneer(ctx *Context, msg interface{}) error
// Switch epoch, return whether switched to a new epoch with new committee
SwitchEpoch(oldEpoch common.EpochNum) (keepComm bool)
// Electing according to electMsg
ElectToChain(ctx *Context, electMsg interface{}) error
// Preelect according to electMsg
PreElectToChain(ctx *Context, electMsg interface{}) error
// Is the current node elected as the member of committee which specified by epoch number: epoch
Chosen(ctx *Context, epoch common.EpochNum) bool
// reset current elector
Reset()
// Returns committee of next epoch, return nil when the current election is not completed
NextComm() *Committee
}
type Engine ¶
type Engine interface {
common.Service
ChainComm(ChainID common.ChainID) (*Committee, error)
ChainNextComm(ChainID common.ChainID) (*Committee, error)
StartConsensus()
CreateSubChain(chainID common.ChainID)
InitSubChain(chainID common.ChainID) bool // If the creation is successful, true is returned, and false is returned from the existing subchains
RemoveSubChain(chainID common.ChainID)
SetChainComm(cid common.ChainID, nids *Committee) error
}
func NewConsensusEngine ¶
func NewConsensusEngine(enginePlug *plugin.Plugin, eventer Eventer, nmanager NetworkManager, dmanager DataManager, conf *config.Config) Engine
type EpochCommittee ¶
type EpochCommittee struct {
Result *Committee // actual election results
Real *Committee // the final result, if Result.IsAvailable()==false, then Real is the actual Committee. Otherwise, it is nil
}
func NewEpochComm ¶
func NewEpochComm(result *Committee, current *Committee) *EpochCommittee
func (*EpochCommittee) Clone ¶
func (c *EpochCommittee) Clone() *EpochCommittee
func (*EpochCommittee) Comm ¶
func (c *EpochCommittee) Comm() *Committee
func (*EpochCommittee) Hash ¶
func (c *EpochCommittee) Hash() common.Hash
func (*EpochCommittee) IsAvailable ¶
func (c *EpochCommittee) IsAvailable() bool
func (*EpochCommittee) IsEmpty ¶
func (c *EpochCommittee) IsEmpty() bool
func (*EpochCommittee) String ¶
func (c *EpochCommittee) String() string
type EventType ¶
type EventType uint16
const ( // basic event types, the number of these types should not exceed 255, otherwise it will // confilict with consensus event TextEvent EventType = 0x0000 + iota ToOneEvent JustHashEvent WantDetailEvent TxEvent ReportBlockEvent ReportCommEvent BlockEvent StartEvent LastBlockEvent LastReportEvent SyncRequestEvent NeedCommitteeEvent RelayEvent StopEvent ShardDeltaEvent DeltaRequestEvent LastHeightEvent BlockRequestEvent SyncFinishEvent HistoryBlockEvent RewardRequestEvent RRProofsRequestEvent RRProofsMessageEvent ReportNodeInfoEvent LastCommEvent StartCommEvent StartConsEvent PreelectionStartEvent PreelectionConnectEvent PreelectionSyncEvent PreelectionExamineEvent PreelectionExitEvent MissingChainEvent SevereErrEvent DeltasPackEvent NodeStateEvent UNSETEVENT EventType = 0xFFFF // This is the last EventType, ADD A NEW EventType BEFORE THIS PLEASE. )
func ListRegisteredEvents ¶
func ListRegisteredEvents() []EventType
func MarshalEvent ¶
func ToEventType ¶
type Eventer ¶
type Eventer interface {
common.Service
PrintCounts()
SetEngine(engine Engine)
SetDataManager(manager DataManager)
SetNetworkManager(manager NetworkManager)
Shutdown()
HasChainOpType(chainid common.ChainID, opType OperatorType) bool
GetChainOpTypes(chainid common.ChainID) []OperatorType
GetNodeOpTypes() map[common.ChainID][]string
AddChainOpType(id common.ChainID, opType OperatorType)
AppendChainOpType(id common.ChainID, opType OperatorType)
RemoveChainOpType(id common.ChainID, opType OperatorType)
ReplaceChainOpTypes(id common.ChainID, fromType OperatorType, toType OperatorType) bool
ClearChainOpType(chainid common.ChainID)
ResetToFailureOpType(chainid common.ChainID)
RebuildContext(ctx *Context, newChainID common.ChainID) *Context
SetEventThreshold(chainId common.ChainID, threshold interface{})
PostMain(RawData)
SyncPost(event interface{})
Post(interface{})
PostEvent(event interface{}, pub, sig []byte) error
ExitChain(id common.ChainID) // exit from chain
// check access permission
CheckPermission(chainId common.ChainID, nodeId common.NodeID, netType common.NetType, proof []byte) error
}
func NewEventer ¶
func NewEventer(eventerPlug *plugin.Plugin, queueSize, barrelSize, workerSize int, shutingdownFunc func(), isInComm IsInCommitteeFunc) Eventer
type ExchangerAdminData ¶
type ExchangerAdminData struct {
Sender common.Address // Address of sender, should same with TX.From
Nonce uint64 // TX.Nonce, Sender+Nonce combination should prevent replay attacks
NewRate *big.Rat // New consideration base currency: second currency
NewNeedSigns int16 // During management operations, the number of valid signatures needs to be verified. <0 means no modification
NewAdminPubs [][]byte // The public key list of the administrator account, len(NewAdminPubs)==0 means no modification. Either don't change it, or change it all.
}
func (*ExchangerAdminData) Deserialization ¶
func (c *ExchangerAdminData) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ExchangerAdminData) Serialization ¶
func (c *ExchangerAdminData) Serialization(w io.Writer) error
func (*ExchangerAdminData) String ¶
func (c *ExchangerAdminData) String() string
type ExchangerAdminRequest ¶
type ExchangerAdminRequest struct {
Data *ExchangerAdminData // The content of this management request
SigsAndPubs
}
func (*ExchangerAdminRequest) DataDeserialize ¶
func (c *ExchangerAdminRequest) DataDeserialize(vr rtl.ValueReader) error
func (*ExchangerAdminRequest) DataSerialize ¶
func (c *ExchangerAdminRequest) DataSerialize(w io.Writer) error
func (*ExchangerAdminRequest) Deserialization ¶
func (c *ExchangerAdminRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ExchangerAdminRequest) GetData ¶
func (c *ExchangerAdminRequest) GetData() (o interface{}, exist bool)
func (*ExchangerAdminRequest) Serialization ¶
func (c *ExchangerAdminRequest) Serialization(w io.Writer) error
func (*ExchangerAdminRequest) String ¶
func (c *ExchangerAdminRequest) String() string
type ExchangerWithdrawData ¶
type ExchangerWithdrawData struct {
RequestAddr common.Address // sender address
Nonce uint64 // nonce of the system contract
WithdrawTo common.Address // account address to receive the value
UseLocal bool // true for local-currency, false for basic currency
Value *big.Int // amount to withdraw
}
func (*ExchangerWithdrawData) Deserialization ¶
func (d *ExchangerWithdrawData) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ExchangerWithdrawData) Serialization ¶
func (d *ExchangerWithdrawData) Serialization(w io.Writer) error
func (*ExchangerWithdrawData) String ¶
func (d *ExchangerWithdrawData) String() string
type ExchangerWithdrawRequest ¶
type ExchangerWithdrawRequest struct {
Data *ExchangerWithdrawData // The current withdraw data content
SigsAndPubs
}
func (*ExchangerWithdrawRequest) DataDeserialize ¶
func (c *ExchangerWithdrawRequest) DataDeserialize(vr rtl.ValueReader) error
func (*ExchangerWithdrawRequest) DataSerialize ¶
func (c *ExchangerWithdrawRequest) DataSerialize(w io.Writer) error
func (*ExchangerWithdrawRequest) Deserialization ¶
func (c *ExchangerWithdrawRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*ExchangerWithdrawRequest) GetData ¶
func (c *ExchangerWithdrawRequest) GetData() (o interface{}, exist bool)
func (*ExchangerWithdrawRequest) Serialization ¶
func (c *ExchangerWithdrawRequest) Serialization(w io.Writer) error
func (*ExchangerWithdrawRequest) String ¶
func (c *ExchangerWithdrawRequest) String() string
type Extra ¶
type Extra struct {
Type byte `json:"type"`
Gas uint64 `json:"gas"`
GasPrice *big.Int `json:"gasPrice"` // wei per gas
GasTipCap *big.Int
GasFeeCap *big.Int
AccessList AccessList
V, R, S *big.Int
TkmExtra []byte
}
func (*Extra) SetTkmExtra ¶
type FrontierSigner ¶
type FrontierSigner struct{}
func (FrontierSigner) ChainID ¶
func (f FrontierSigner) ChainID() *big.Int
func (FrontierSigner) Equal ¶
func (f FrontierSigner) Equal(s2 Signer) bool
func (FrontierSigner) Hash ¶
func (f FrontierSigner) Hash(tx *ETHTransaction) common.Hash
Hash returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (FrontierSigner) HashGtkm ¶
func (f FrontierSigner) HashGtkm(tx *Transaction) common.Hash
HashGtkm returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (FrontierSigner) HashGtkmWithSig ¶
func (f FrontierSigner) HashGtkmWithSig(tx *Transaction) common.Hash
HashGtkm returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (FrontierSigner) RecoverSig ¶
func (f FrontierSigner) RecoverSig(tx *ETHTransaction) (sig []byte)
func (FrontierSigner) RecoverSigAndPub ¶
func (f FrontierSigner) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
func (FrontierSigner) Sender ¶
func (f FrontierSigner) Sender(tx *ETHTransaction) (common.Address, error)
func (FrontierSigner) SignatureValues ¶
func (f FrontierSigner) SignatureValues(tx *ETHTransaction, sig []byte) (r, s, v *big.Int, err error)
SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.
type GenerateCallback ¶
type GenerateCallback func(header *BlockHeader, result *ProposeResult) error
When the data block is generated, after the transaction is executed, the callback function executed before the stateRoot is generated header: generating block header result: proposing data
type GlobalCurrencier ¶
type GlobalCurrencier interface {
// Query the chain currency by chain ID, and return (local currency ID, local currency name),
// when the local currency ID==0, it is the basic currency, when there is no local currency,
// CoinID returns 0
GetChainLocalCurrencyInfo(chainID common.ChainID) (common.CoinID, string)
// Get the list of administrator public keys of the specific chain. If there is a valid value,
// the second return value will return true, otherwise it will return false
GetChainAdmins(chainID common.ChainID) ([][]byte, bool)
// Whether the specific chain is a PoC (Proof of Capacity) chain
IsPocChain(chainID common.ChainID) bool
}
Global chain currency query
func NewGlobalCurrencierAdapter ¶
func NewGlobalCurrencierAdapter(dmanager DataManager) GlobalCurrencier
type GlobalCurrencierAdapter ¶
type GlobalCurrencierAdapter struct {
// contains filtered or unexported fields
}
func (*GlobalCurrencierAdapter) GetChainAdmins ¶
func (g *GlobalCurrencierAdapter) GetChainAdmins(chainID common.ChainID) ([][]byte, bool)
func (*GlobalCurrencierAdapter) GetChainLocalCurrencyInfo ¶
func (*GlobalCurrencierAdapter) IsPocChain ¶
func (g *GlobalCurrencierAdapter) IsPocChain(chainID common.ChainID) bool
type HeaderSummary ¶
type HeaderSummary struct {
Header *BlockHeader
Summaries []*BlockSummary
}
func (*HeaderSummary) Find ¶
func (s *HeaderSummary) Find(chainId common.ChainID, height common.Height) (index int, summary *BlockSummary)
func (*HeaderSummary) GetChainID ¶
func (s *HeaderSummary) GetChainID() common.ChainID
func (*HeaderSummary) Hash ¶
func (s *HeaderSummary) Hash() common.Hash
func (*HeaderSummary) HeaderProof ¶
func (s *HeaderSummary) HeaderProof(hashOfHeader []byte, proofChain *trie.ProofChain) ([]byte, error)
HeaderProof Get the proof from a packaged HeaderSummary in the current block to the hash of this block
func (*HeaderSummary) String ¶
func (s *HeaderSummary) String() string
type HeighterHashMap ¶
type HeighterHashMap struct {
// contains filtered or unexported fields
}
HeighterHashMap Different objects with different hashs are allowed at the same height
func NewHeighterHashMap ¶
func NewHeighterHashMap() *HeighterHashMap
func (*HeighterHashMap) ClearHeight ¶
func (m *HeighterHashMap) ClearHeight(height common.Height) bool
func (*HeighterHashMap) Get ¶
func (m *HeighterHashMap) Get(height common.Height) ([]BlockHeighter, bool)
func (*HeighterHashMap) Peek ¶
func (m *HeighterHashMap) Peek() (height common.Height, hob common.Hash, o BlockHeighter, exist bool)
func (*HeighterHashMap) PopIfEarlier ¶
func (m *HeighterHashMap) PopIfEarlier(target common.Height) (height common.Height, hob common.Hash, o BlockHeighter, exist bool)
func (*HeighterHashMap) Put ¶
func (m *HeighterHashMap) Put(heighter BlockHeighter) bool
func (*HeighterHashMap) Range ¶
func (m *HeighterHashMap) Range(callback RangeBufferCallback) error
func (*HeighterHashMap) Size ¶
func (m *HeighterHashMap) Size() int
func (*HeighterHashMap) String ¶
func (m *HeighterHashMap) String() string
type HeighterSet ¶
type HeighterSet struct {
// contains filtered or unexported fields
}
func NewHeighterSet ¶
func NewHeighterSet() *HeighterSet
func (*HeighterSet) Len ¶
func (s *HeighterSet) Len() int
func (*HeighterSet) Pop ¶
func (s *HeighterSet) Pop() BlockHeighter
func (*HeighterSet) Put ¶
func (s *HeighterSet) Put(x BlockHeighter) bool
func (*HeighterSet) String ¶
func (s *HeighterSet) String() string
type HistoryBlock ¶
type HistoryBlock struct {
Block *BlockEMessage
}
func (*HistoryBlock) BlockNum ¶
func (b *HistoryBlock) BlockNum() common.BlockNum
func (*HistoryBlock) EpochNum ¶
func (b *HistoryBlock) EpochNum() common.EpochNum
func (*HistoryBlock) GetChainID ¶
func (b *HistoryBlock) GetChainID() common.ChainID
func (*HistoryBlock) GetHeight ¶
func (b *HistoryBlock) GetHeight() common.Height
func (*HistoryBlock) Hash ¶
func (b *HistoryBlock) Hash() common.Hash
func (*HistoryBlock) String ¶
func (b *HistoryBlock) String() string
type HomesteadSigner ¶
type HomesteadSigner struct{ FrontierSigner }
HomesteadSigner HomesteadTransaction implements TransactionInterface using the homestead rules.
func (HomesteadSigner) ChainID ¶
func (h HomesteadSigner) ChainID() *big.Int
func (HomesteadSigner) Equal ¶
func (h HomesteadSigner) Equal(s2 Signer) bool
func (HomesteadSigner) RecoverSigAndPub ¶
func (h HomesteadSigner) RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
func (HomesteadSigner) Sender ¶
func (h HomesteadSigner) Sender(tx *ETHTransaction) (common.Address, error)
func (HomesteadSigner) SignatureValues ¶
func (h HomesteadSigner) SignatureValues(tx *ETHTransaction, sig []byte) (r, s, v *big.Int, err error)
SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.
type IsInCommitteeFunc ¶
type IsInCommitteeFunc func(DataManager, common.Seed, [32]byte, common.ChainID, *RRInfo, byte, logrus.FieldLogger) bool
func LocateIsInCommittee ¶
func LocateIsInCommittee(consensusPlugin *plugin.Plugin) IsInCommitteeFunc
type JustHashEMessage ¶
type LastBlockMessage ¶
type LastBlockMessage struct {
BlockHeight
}
func (*LastBlockMessage) String ¶
func (m *LastBlockMessage) String() string
type LastCommEMessage ¶
When starting, each chain data node reports the last consensus committee to the main chain data node
func (*LastCommEMessage) GetChainID ¶
func (l *LastCommEMessage) GetChainID() common.ChainID
func (*LastCommEMessage) String ¶
func (l *LastCommEMessage) String() string
type LastHeightMessage ¶
type LastHeightMessage struct {
BlockHeight
BlockHash common.Hash
}
func NewLastHeightMessage ¶
func (*LastHeightMessage) String ¶
func (h *LastHeightMessage) String() string
type LastReportMessage ¶
func (*LastReportMessage) DestChainID ¶
func (m *LastReportMessage) DestChainID() common.ChainID
func (*LastReportMessage) GetBlockNum ¶
func (m *LastReportMessage) GetBlockNum() common.BlockNum
func (*LastReportMessage) GetChainID ¶
func (m *LastReportMessage) GetChainID() common.ChainID
func (*LastReportMessage) GetEpochNum ¶
func (m *LastReportMessage) GetEpochNum() common.EpochNum
func (*LastReportMessage) GetHeight ¶
func (m *LastReportMessage) GetHeight() common.Height
func (*LastReportMessage) String ¶
func (m *LastReportMessage) String() string
type LegacyTx ¶
type LegacyTx struct {
Nonce uint64 // nonce of sender account
GasPrice *big.Int // wei per gas
Gas uint64 // gas limit
To *common.Address `rlp:"nil"` // nil means contract creation
Value *big.Int // wei amount
Data []byte // contract invocation input data
V, R, S *big.Int // signature values
}
LegacyTx is the transaction data of regular Ethereum transactions.
type Location ¶
type Location struct {
// contains filtered or unexported fields
}
func (*Location) SetChainID ¶
func (*Location) SetNetType ¶
type Log ¶
type Log struct {
// Consensus fields:
// address of the contract that generated the event
Address common.Address `json:"address" gencodec:"required"`
// list of topics provided by the contract.
Topics []common.Hash `json:"topics" gencodec:"required"`
// supplied by the contract, usually ABI-encoded
Data []byte `json:"data" gencodec:"required"`
// Derived fields. These fields are filled in by the node
// but not secured by consensus.
// block in which the transaction was included
BlockNumber uint64 `json:"blockNumber" gencodec:"required"`
// hash of the transaction
TxHash common.Hash `json:"transactionHash" gencodec:"required"`
// index of the transaction in the block
TxIndex uint `json:"transactionIndex" gencodec:"required"`
// index of the log in the receipt
Index uint `json:"logIndex" gencodec:"required"`
// hash of the block in which the transaction was included
BlockHash *common.Hash `json:"blockHash"`
}
func (*Log) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.
type LongValue ¶
type Message ¶
type Message struct {
// contains filtered or unexported fields
}
Message EVM message
func NewMessage ¶
func (Message) AllValidSigns ¶
AllValidSigns Traverse all the valid signatures without repetition, call the callback method, and return the map with the key as the public key of the valid signature
func (Message) CheckNonce ¶
func (Message) MultiSigs ¶
func (m Message) MultiSigs() PubAndSigs
func (Message) SignedAddresses ¶
SignedAddresses Returns the unordered list of addresses corresponding to all correctly signed public keys
func (Message) SignedPubs ¶
SignedPubs Returns an unordered list of all correctly signed public keys
type MinterMintData ¶
type MinterMintData struct {
Sender common.Address // request from address
Nonce uint64 // nonce of sender can prevent replay attach
Value *big.Int // request value
To common.Address // receive value address
}
func (*MinterMintData) Deserialization ¶
func (d *MinterMintData) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*MinterMintData) Serialization ¶
func (d *MinterMintData) Serialization(w io.Writer) error
func (*MinterMintData) String ¶
func (d *MinterMintData) String() string
type MinterMintReqeust ¶
type MinterMintReqeust struct {
Data *MinterMintData // request data
SigsAndPubs
}
func (*MinterMintReqeust) DataDeserialize ¶
func (c *MinterMintReqeust) DataDeserialize(vr rtl.ValueReader) error
func (*MinterMintReqeust) DataSerialize ¶
func (c *MinterMintReqeust) DataSerialize(w io.Writer) error
func (*MinterMintReqeust) Deserialization ¶
func (c *MinterMintReqeust) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*MinterMintReqeust) GetData ¶
func (c *MinterMintReqeust) GetData() (o interface{}, exist bool)
func (*MinterMintReqeust) Serialization ¶
func (c *MinterMintReqeust) Serialization(w io.Writer) error
func (*MinterMintReqeust) String ¶
func (c *MinterMintReqeust) String() string
type MissingChainEventMsg ¶
The system found a chain that did not exist
func (*MissingChainEventMsg) String ¶
func (msg *MissingChainEventMsg) String() string
type MissingHeights ¶
shardid -> [0]:start height, [1]:length of missing heights
func (MissingHeights) IDs ¶
func (m MissingHeights) IDs() common.ChainIDs
func (MissingHeights) MostUrgent ¶
type NetworkManager ¶
type NetworkManager interface {
common.Service
InitChain(id common.ChainID) error
GetDataServer(chainId common.ChainID) *[]common.Dataserver
GetNetworker(id common.ChainID) Networker
BroadcastFull(info string, skip *common.NodeID, cid common.ChainID, ntp common.NetType,
pb interface{}, pub, sig []byte) error
BroadcastFullSync(info string, skip *common.NodeID, cid common.ChainID, ntp common.NetType,
pb interface{}, pub, sig []byte) error
SendToNode(info string, ntp common.NetType, chainId common.ChainID, to common.NodeIDs,
pb interface{}, pub, sig []byte) error
SendToPeer(info string, ntp common.NetType, chainId common.ChainID, toNodes common.NodeIDs,
pb interface{}, pub, sig []byte) error
SendToChain(info string, ntp common.NetType, fromChain common.ChainID, toChain common.ChainID,
pb interface{}, pub, sig []byte) error
Rand(size int, info string, chainId common.ChainID, ntp common.NetType, msg interface{}, pub, sig []byte,
skips ...*common.NodeID) error
GetChainNet(id common.ChainID, netType common.NetType) (map[common.NodeID]net.Addr, bool)
StartConNet(networker Networker, chainid common.ChainID, netType common.NetType) (common.NodeID, error)
CreateOrConnectNet(ntp common.NetType, bootChainID, localChandID common.ChainID) error
IsBootNode(id common.ChainID) bool
ClearNetWorker(id common.ChainID)
InitNet(chaininfo *common.ChainInfos) error
StopOneNet(cid common.ChainID, ntp common.NetType) (int, error)
ResetNet(chainid common.ChainID, ntp common.NetType) error
ConnectNet(chaininfo *common.ChainInfos) error
Status()
}
type Networker ¶
type Networker interface {
// Create start a boot node
Create(typ common.NetType, addr net.Addr, boots map[common.NodeID]net.Addr, infos []*common.ChainInfos, callback ConnectedCallBackFunc) error
// Connect connect to p2p network with a boot node
Connect(typ common.NetType, bootId common.ChainID, boots map[common.NodeID]net.Addr, infos []*common.ChainInfos, permission []byte, callback ConnectedCallBackFunc) error
// Reset reset a boot node
Reset(typ common.NetType, addr net.Addr, callback ConnectedCallBackFunc) error
// Exit exit from current p2p network
Exit(typ common.NetType) (int, error)
// Check whether a certain net type exists
IsIn(typ common.NetType) bool
// Get chain id that the net worker belongs to
GetChainID() common.ChainID
// Set data net discovery table's tmpNodes
SetTmpDataNodes(nt common.NetType)
// Replace discovery table's dataNodes with tmpNodes
ReplaceDataNodes(nt common.NetType)
// Abandon useless peers
AbandonUselessPeers(nt common.NetType)
// broadcast asynchronized
Broadcast(info string, typ common.NetType, msg interface{},
pub, sig []byte, skips ...*common.NodeID) ([]byte, []byte, error)
// SendToNode send a message to a specific node in p2p network
SendToNode(info string, typ common.NetType, nodeids common.NodeIDs,
msg interface{}, pub, sig []byte) ([]byte, []byte, error)
SendToPeer(info string, typ common.NetType, nodeids common.NodeIDs,
msg interface{}, pub, sig []byte) ([]byte, []byte, error)
SendToChain(info string, typ common.NetType, chainid common.ChainID,
msg interface{}, pub, sig []byte) ([]byte, []byte, error)
Rand(size int, info string, typ common.NetType, msg interface{}, pub, sig []byte,
skips ...*common.NodeID) ([]byte, []byte, error)
// broadcast synchronized
BroadcastSync(info string, typ common.NetType, msg interface{},
pub, sig []byte, skips ...*common.NodeID) ([]byte, []byte, error)
}
type NodeResult ¶
type NodeResult struct {
NodeID common.NodeID // The ID of the node participating in the election. For ManagedComm, only this field is needed, and the other fields are empty
Sorthash *common.Hash // The result of the VRF algorithm
Proof []byte // Proof of VRF algorithm results
FactorHash *common.Hash // since2.0.0 The node declares the hash of the random factor participating in the seed calculation
}
Because the ChainID/Epoch information is missing, it cannot be used alone and needs to be used in conjunction with ChainElectResult
func (*NodeResult) FromVrfResulter ¶
func (n *NodeResult) FromVrfResulter(resulter VrfResulter) *NodeResult
func (*NodeResult) GetNodeID ¶
func (n *NodeResult) GetNodeID() common.NodeID
func (*NodeResult) GetVrfResult ¶
func (*NodeResult) String ¶
func (n *NodeResult) String() string
type NodeResults ¶
type NodeResults []*NodeResult
func (NodeResults) Len ¶
func (ns NodeResults) Len() int
func (NodeResults) Less ¶
func (ns NodeResults) Less(i, j int) bool
func (NodeResults) ManagedCommVerifyAll ¶
func (ns NodeResults) ManagedCommVerifyAll(nidHashes []common.Hash) error
func (NodeResults) Remove ¶
func (ns NodeResults) Remove(os NodeResults) NodeResults
the difference of ns - os
func (NodeResults) Swap ¶
func (ns NodeResults) Swap(i, j int)
func (NodeResults) ToMap ¶
func (ns NodeResults) ToMap() map[common.NodeID]*NodeResult
func (NodeResults) VrfVerifyAll ¶
func (ns NodeResults) VrfVerifyAll(seed common.Seed) error
type NodeState ¶
type NodeState struct {
NodeId common.NodeID
ChainId common.ChainID
Height common.Height
BlockSig []byte
Ip string
BasicPort uint16
DataPort uint16
ConPort0 uint16
ConPort1 uint16
}
func (*NodeState) GetChainID ¶
type Noticer ¶
type Noticer interface {
common.Service
CanPublish(block *BlockEMessage) bool
Publish(block *BlockEMessage, receipts []*Receipt) error
}
type OneDeltas ¶
type OneDeltas struct {
// the height of the block A where delta generated
Height common.Height
// All deltas in a block corresponding to a shard to another shard
Deltas []*AccountDelta
// The proof of this group of delta to the hash of block A at Height (1)(2)
Proof trie.ProofChain
// The proof to HashHistory of block B (specified by DeltasPack) used in this transmission (3).
// You can use this proof.Key() judge the authenticity of Height. When Height==DeltasPack.ProofedHeight,
// this proof is nil. At this time, verify with ProofedHeight in DeltasPack.
// 到本次传输统一使用的块B(由DeltasPack指定)的HashHistory的证明(3)。可以用此proof.Key()判
// 断Height的真实性。当Height==DeltasPack.ProofedHeight时,此证明为nil。此时与DeltasPack
// 中的ProofedHeight做验证。
HistoryProof trie.ProofChain
// Proof from the HashHistory of block B to the Hash of block B (4).
// When Height==DeltasPack.ProofedHeight, this proof is nil.
// At this time, verify with ProofedHeight in DeltasPack.
// 从块B的HashHistory到块B的Hash的证明(4)。当Height==DeltasPack.ProofedHeight时,此证明为nil。
// 此时与DeltasPack中的ProofedHeight做验证。
ProofToB trie.ProofChain
}
Proof.Proof(MerkleHash(Deltas)) == BlockHash of Height (1)(2) HistoryProof.Proof(BlockHash of Height) == BlockHash of DeltasPack.ProofedHeight (3)(4)
type OpSet ¶
type OpSet struct {
// contains filtered or unexported fields
}
func NewOpSet ¶
func NewOpSet(ots []OperatorType) *OpSet
func (*OpSet) Has ¶
func (s *OpSet) Has(opType OperatorType) bool
type Operator ¶
type Operator struct {
Type OperatorType
Operations []interface{}
}
type OperatorType ¶
type OperatorType byte
const ( // The identity type of the node on the chain CtrlOp OperatorType = iota // Control class. The context has no chain information when the control event is executed DataOp // Data node CommitteeOp // Consensus node InitialOp // Initial class of consensus node PreelectOp // Preelect class, higher than SPEC and lower than COMM SpectatorOp // Spectator class MemoOp // Full class StartOp // Starting class FailureOp // Failure class )
func (OperatorType) String ¶
func (o OperatorType) String() string
type P2PServer ¶
type P2PServer interface {
// get boot chain id
BootChain() common.ChainID
// discovery type is sort
DiscoverTypeIsSRT() bool
// set chains dataNodes to discovery table tmpNodes
SetTmpDataNodes(infos []*common.ChainInfos)
// replace discovery dataNodes with tmpNodes
ReplaceDataNodes()
// abandon useless peers in ChainToPeers
AbandonUselessPeers()
// start server
Start() error
// stop server
Stop()
// get the local nodeId
NodeID() *common.NodeID
// get the server local port
LocalPort() uint16
// broadcast message use goroutine
BroadcastAsync(info string, msgv interface{}, pub, sig []byte, skips ...*common.NodeID) ([]byte, []byte, error)
// send a message to oriented nodes
SendToNode(info string, toNodes common.NodeIDs, pb interface{}, pub, sig []byte) ([]byte, []byte, error)
// send a message to my peer
SendToPeer(info string, toNodes common.NodeIDs, pb interface{}, pub, sig []byte) ([]byte, []byte, error)
// send a message to another chain
SendToChain(info string, chainid common.ChainID, pb interface{}, pub, sig []byte) ([]byte, []byte, error)
// randomly select size peers to send messsages
RandBroadcast(size int, info string, msgv interface{}, pub, sig []byte,
skips ...*common.NodeID) ([]byte, []byte, error)
// synchronous broadcast, others not specified are sent asynchronously
BroadcastSync(info string, msgv interface{}, pub, sig []byte, skips ...*common.NodeID) ([]byte, []byte, error)
}
type PreElectPhase ¶
type PreElectPhase byte
const ( PECreating PreElectPhase = 0x0 + iota // new pre-election PEElecting // pre-electing PEStarting // starting PEExiting // exiting )
Create pre-election stage: Create when the contract is successfully executed, enter the Creating
stage, broadcast and delete when proposing, there is no CachedHash at this time.
Pre-election phase: In the commit block phase, use block.PreElectings to overwrite the electings
in the cache, and clear the corresponding creating/results/elected cache.
For different stages:
Creating: Enter the Electing phase, add CachedHash, and generate a PreelectionStart control
event, which is responsible for sending out the election information of this node
Electing: Add CachedHash
Starting: No need to deal with
Exiting: When the Starting timeout, switch to Exiting package, when receiving Exiting in the
package, you need to send a control event to check whether the target chain is started,
if not you need to exit
Pre-launch phase: When reaching Electing.Expire, if the election result is successful, enter the
Starting phase and pack
创建预选举阶段: 合约执行成功时创建,进入Creating阶段,打包时广播并删除,此时没有CachedHash。 预选举阶段: 在commit block阶段,使用block.PreElectings覆盖缓存中的electings, 并清除相应creating/results/elected缓存。针对不同阶段:
Creating: 进入Electing阶段,补CachedHash,并产生PreelectionStart控制消息,该消息负责向外发送本节点的参选信息 Electing: 补CachedHash Starting: 无需处理 Exiting: 当Starting超时时,转为Exiting打包,接收到包中Exiting时,需要发送控制消息检查目标链是否启动了,没有启动需要退出
预启动阶段: 到达Electing.Expire时,如果选举结果成功,则进入Starting阶段并打包
func (PreElectPhase) String ¶
func (p PreElectPhase) String() string
type PreElecting ¶
type PreElecting struct {
// Chain of pre-election
ChainID common.ChainID
// Current execution stage
Phase PreElectPhase
// Seed of main chain when pre-electing
Seed *common.Seed
// Count the number of election retrys, because the election may not be successful, and the
// election can be automatically started again (3 times in total)
Count int
// The height of the main chain when the pre-election starts. Because the Hash value of the
// current block is required when creating PreElecting, it cannot be stored in the object and
// needs to be obtained from the data node when synchronizing data
Start common.Height
// The Hash of the main chain height block at startup has a value in the cache and is nil in
// the BlockBody
CachedHash *common.Hash
// When the new chain is a ManagedComm chain, NidHashes saves the hash values of all authorized
// node IDs, which are the basis for the pre-election. The election type can also be judged
// based on whether this field is empty
NidHashes []common.Hash
// Electing phase: the height of the main chain at which the pre-election ends;
// Starting phase: the height of the main chain at which consensus is initiated
Expire common.Height
}
The pre-election records, generated by the contract call of creation of the chain or the start of the pre-election, are put into the block after the main chain is generated. The consensused pre-election, which is generated from the Start block of the main chain and continues until the Expire block, has been kept in the main chain block until it is deleted. Makes the pre-election well documented. And it is necessary to synchronize the preElectCache in the main chain DataHolder when the new node synchronizes the main chain data, because the seed required by the VRF algorithm will be recorded in the cache. 由创建链或启动预选举合约产生的预选举记录,在主链生成后放入块中,以此 发布经过共识的预选举,从主链的第Start块生成,一直持续到Expire块之后 被主链共识删除为止一直保存在主链块中。使得预选举有据可查。 且需要在新节点同步主链数据时将主链DataHolder中的preElectCache一起 同步,因为在cache中会记录VRF算法需要的seed。
func (*PreElecting) Clone ¶
func (pe *PreElecting) Clone() *PreElecting
func (*PreElecting) Equals ¶
func (pe *PreElecting) Equals(o *PreElecting) bool
func (*PreElecting) IsManagedComm ¶
func (pe *PreElecting) IsManagedComm() bool
func (*PreElecting) IsValidManagedComm ¶
func (pe *PreElecting) IsValidManagedComm() bool
func (*PreElecting) IsVrf ¶
func (pe *PreElecting) IsVrf() bool
func (*PreElecting) String ¶
func (pe *PreElecting) String() string
func (*PreElecting) ToPack ¶
func (pe *PreElecting) ToPack() *PreElecting
Generate objects for packaging, the pre-election information in the block does not include BlockHash
type PreElectings ¶
type PreElectings []*PreElecting
Objects placed in the block, the ongoing pre-election list sorted by (Expire, ChainID), and generate MerkleTreeHash into the block header
func (PreElectings) Equals ¶
func (p PreElectings) Equals(o PreElectings) bool
func (PreElectings) HashValue ¶
func (p PreElectings) HashValue() ([]byte, error)
Calculate MerkelHash, need to sort before calling
func (PreElectings) Len ¶
func (p PreElectings) Len() int
func (PreElectings) Less ¶
func (p PreElectings) Less(i, j int) bool
func (PreElectings) Swap ¶
func (p PreElectings) Swap(i, j int)
type PreelectionConnect ¶
type PreelectionConnect struct {
ChainID common.ChainID // The chain that needs to be connected after the pre-election
Height common.Height // Record the height of the main chain generating the message, and to distinguish different events (to avoid Hash duplication)
Comm *Committee // Committee after pre-election
}
Node internal control event. When the pre-election enters the startup phase, and the node is selected, this message is sent to connect to the network, and the corresponding identity of the chain is set to PREELECT Create at performing commitPreelects.checkElected when executing StateDB.Commit.
func (*PreelectionConnect) GetChainID ¶
func (p *PreelectionConnect) GetChainID() common.ChainID
func (*PreelectionConnect) String ¶
func (p *PreelectionConnect) String() string
type PreelectionExamine ¶
Node internal control event, the consensus node checks whether the consensus is normal during the pre-election startup phase Create at preforming commitPreelects.checkElected when executing StateDB.Commit
func (PreelectionExamine) GetChainID ¶
func (p PreelectionExamine) GetChainID() common.ChainID
func (*PreelectionExamine) String ¶
func (p *PreelectionExamine) String() string
type PreelectionExit ¶
Node internal control event, consensus node found failure in the pre-election during the startup phase, exit the network, and close consensus Create at performing commitPreelects when executing StateDB.Commit. (Fault tolerance mechanism) or create at preforming commitPreelects.checkElected when executing StateDB.Commit
func (PreelectionExit) GetChainID ¶
func (p PreelectionExit) GetChainID() common.ChainID
func (*PreelectionExit) String ¶
func (p *PreelectionExit) String() string
type PreelectionStart ¶
type PreelectionStart struct {
ChainID common.ChainID // the chain starting preelection
ParentHeight common.Height // the main chain height when starting the preelection
}
Node internal control event. When you need to start a preelection, just send a message to the queue Create at performing commitPreelects when executing StateDB.Commit.
func (*PreelectionStart) GetChainID ¶
func (p *PreelectionStart) GetChainID() common.ChainID
func (*PreelectionStart) String ¶
func (p *PreelectionStart) String() string
type PreelectionSync ¶
Node internal control event, the data node starts to broadcast synchronous data during the pre-election startup phase Create at preforming commitPreelects.checkElected when executing StateDB.Commit
func (PreelectionSync) GetChainID ¶
func (p PreelectionSync) GetChainID() common.ChainID
func (*PreelectionSync) String ¶
func (p *PreelectionSync) String() string
type ProposeResult ¶
type ProposeResult struct {
Processed []*Transaction // executed transactions
ProcessedPas []*PubAndSig // the signatures corresponding to the executed transactions one by one
StateRoot []byte // world state tree root hash after transaction execution
DeltaTrie *AccountDeltaTrie // DeltaTrie generated after transaction execution
ReceiptsHash []byte // hash value of all executed transactions receipts
VccRoot []byte // root hash of signed check tree
CashedRoot []byte // root hash of cashed check tree
RREra common.EraNum // current era of reward chain
RRRoot []byte // root hash of required reserve tree at current era in reward chain
RRNextRoot []byte // root hash of required reserve tree at next era in reward chain
RRChangingRoot []byte // root hash of modification request tree currently to be applied in reward chain
ChainInfoRoot []byte // root hash of chain info tree in main chain
WaterlinesRoot []byte // merkle root hash of all waterline values of all shards after the completion of delta merge and transaction execution
}
type PubAndSig ¶
func (*PubAndSig) FullString ¶
type PubAndSigs ¶
type PubAndSigs []*PubAndSig
func (PubAndSigs) Clone ¶
func (ps PubAndSigs) Clone() PubAndSigs
func (PubAndSigs) Len ¶
func (ps PubAndSigs) Len() int
func (PubAndSigs) Swap ¶
func (ps PubAndSigs) Swap(i, j int)
type QueueInfo ¶
type QueueInfo struct {
Name string
Types []EventType // All event types supported by this queue
HigherTypes []EventType // The event types with higher priority
WorkerSize int
QueueLength int
}
queue information
func ListQueueInfos ¶
func ListQueueInfos() []QueueInfo
type QueueInfos ¶
type QueueInfos struct {
// contains filtered or unexported fields
}
func (*QueueInfos) ListInfos ¶
func (q *QueueInfos) ListInfos() []QueueInfo
type QueueObj ¶
type QueueObj struct {
From Location // source of event
EventType EventType // event type
H *common.Hash // payload hash, hash(event body serialization, event type)
V interface{} // event object
P []byte // public key
S []byte // signature of hash of the event: Sign(HashObject(V))
}
func NewQueueObj ¶
type RRAType ¶
type RRAType byte
Required Reserve Act Type
type RRAct ¶
type RRAct struct {
Typ RRAType // Current operation type: deposit, withdraw, penalty
Height common.Height // Block height at the time of request
Amount *big.Int // Nil when withdrawing all, other positive numbers
RelatingChainID common.ChainID // The chain id of the transaction executed that generated this action
RelatingTxHash common.Hash // The transaction that caused this action (Deposit/Withdraw
}
Record changes for the same node, because all changes must be compatible, that is, NodeID/Addr must be equal, and effective Typ must also be equal, so these three pieces of information can only be recorded in RRC.
type RRC ¶
type RRC struct {
NodeIDHash common.Hash // NodeID hash of the changing node
Addr common.Address // Binding address
Typ common.NodeType // Node type
Acts []*RRAct // Changing list according to the order of transaction execution, execute in the order of priority during execution
}
Required Reserve Change
func (*RRC) ApplyTo ¶
func (rr *RRC) ApplyTo(info *RRInfo, stateDB StateDB) ( changed bool, shouldRemove bool, newinfo *RRInfo, err error)
Apply the pledge change request to the corresponding required reserve information and return it. If the info parameter is nil, create a new info apply changes and return it
func (*RRC) CheckWithdraw ¶
Determine whether the withdrawing can be executed according to the Delta generated by the Act queue in the existing Changing and the amount of pledge to be redeemed reduced
func (*RRC) Compatible ¶
func (rr *RRC) Compatible(nodeIdHash common.Hash, typ common.NodeType, addr common.Address, actType RRAType) bool
Check the modification to the same node, whether its nodeid/bindaddr and nodeType are the same
type RRInfo ¶
type RRInfo struct {
// The hash value of the NodeID of the node is used to store information in a more
// private way. It can also reduce storage capacity
NodeIDHash common.Hash
// The main chain block height at the time of the last deposit
Height common.Height
// Which type of node, supports common.Consensus/common.Data
Type common.NodeType
// If it is not nil, it means that this deposit has been applied for withdrawing and
// will no longer participate in the calculation. When the value >= the cycle currently
// being calculated, execute the withdrawing
WithdrawDemand *common.EraNum
// Record the number of penalties, initially 0, +1 after each Penalty execution
PenalizedTimes int
// Pledge amount (the total pledge amount of this node, >= effective pledge amount)
Amount *big.Int
// The percentage of the effective pledge amount of the current node in the total
// effective pledge. If it is nil, it indicates that the current pledge does not
// account for the proportion. It may be waiting for withdrawing at this time.
Ratio *big.Rat
// Reward binding address
RewardAddr common.Address
// Since v1.3.4. When WithdrawDemand!=nil, record all pending withdrawing records. If it
// exists, the withdrawing due in the list will be executed every era.
Withdrawings Withdrawings
// since v1.5.0. Version number, used for compatible
Version uint16
// since v1.5.0。Used to record a total of valid pledged consensus nodes, only valid
// when Type==common.Consensus, others are 0
NodeCount uint32
// node status
Status uint16
}
Required Reserve Information of the node
func CreateGenesisRRInfo ¶
func (*RRInfo) AvailableAmount ¶
Returns the pledge amount of the specified type of nodeType of the current node
func (*RRInfo) Compatible ¶
Compatibility check
func (*RRInfo) Depositing ¶
Return the pledge amount after subtracting the amount to be redeemed
func (*RRInfo) InfoEquals ¶
Compare the immutable information except Ratio and NodeCount
func (*RRInfo) Shares ¶
Returns the share of the current node in Consensus 0:has not, did not participate in the election N:Indicates that N deposits have been paid, and there is a N times chance of being selected
func (*RRInfo) ValidAmount ¶
The current effective pledge amount (minus the part being redeemed)
type RRProofs ¶
type RRProofs struct {
Info *RRInfo
Proof trie.ProofChain
}
func (*RRProofs) PrintString ¶
type RRProofsMessage ¶
type RRProofsMessage struct {
NodeId common.NodeID
Era common.EraNum
RootHash common.Hash
Proofs *RRProofs
}
func (*RRProofsMessage) GetChainID ¶
func (rm *RRProofsMessage) GetChainID() common.ChainID
func (*RRProofsMessage) String ¶
func (rm *RRProofsMessage) String() string
type RRProofsRequest ¶
type RRProofsRequest struct {
ToChainId common.ChainID
NodeId common.NodeID
Era common.EraNum
RootHash common.Hash
}
func (*RRProofsRequest) GetChainID ¶
func (rr *RRProofsRequest) GetChainID() common.ChainID
func (*RRProofsRequest) String ¶
func (rr *RRProofsRequest) String() string
type RRStatusAct ¶
func (*RRStatusAct) Ignored ¶
func (a *RRStatusAct) Ignored() bool
func (*RRStatusAct) Merge ¶
func (a *RRStatusAct) Merge(b *RRStatusAct) error
func (*RRStatusAct) Todo ¶
func (a *RRStatusAct) Todo() (act uint16, setOrClr bool)
type RRTries ¶
type RRTries interface {
Commit() error
Rollback()
MatchEra(era common.EraNum) error
NextEra(toEra common.EraNum) (err error)
PreCommitStatus() (era common.EraNum, rrRoot, nextRoot, changingRoot []byte, err error)
Era() common.EraNum
Deposit(fromChain common.ChainID, fromTxHash common.Hash, height common.Height, typ common.NodeType,
nodeIdHash common.Hash, addr common.Address, amount *big.Int) error
Withdraw(fromChain common.ChainID, fromTxHash common.Hash, height common.Height,
nodeIdHash common.Hash, addr common.Address) error
Penalty(fromChain common.ChainID, fromTxHash common.Hash, nodeIdHash common.Hash, amount *big.Int) error
PreHashValue() (rrRoot, rrNextRoot, rrChangingRoot []byte, err error)
PreCommit() (currentRoot, nextRoot, changingRoot []byte, err error)
}
type RangeBufferCallback ¶
type RangeBufferCallback func(height common.Height, hob common.Hash, o BlockHeighter) (goon bool, nextHeight bool, err error)
RangeBufferCallback if need continue the range, goon return true if need step to next height, nextHeight return true
type RawDataObj ¶
type RawDataObj struct {
// contains filtered or unexported fields
}
func NewRawData ¶
func (*RawDataObj) GetData ¶
func (r *RawDataObj) GetData() []byte
func (*RawDataObj) GetEventType ¶
func (r *RawDataObj) GetEventType() EventType
func (*RawDataObj) GetFrom ¶
func (r *RawDataObj) GetFrom() Location
func (*RawDataObj) GetFromChainID ¶
func (r *RawDataObj) GetFromChainID() common.ChainID
func (*RawDataObj) GetFromNetType ¶
func (r *RawDataObj) GetFromNetType() common.NetType
func (*RawDataObj) GetFromNodeID ¶
func (r *RawDataObj) GetFromNodeID() *common.NodeID
func (*RawDataObj) GetHash ¶
func (r *RawDataObj) GetHash() *common.Hash
func (*RawDataObj) GetObject ¶
func (r *RawDataObj) GetObject() interface{}
func (*RawDataObj) GetPublicKey ¶
func (r *RawDataObj) GetPublicKey() []byte
func (*RawDataObj) GetSignature ¶
func (r *RawDataObj) GetSignature() []byte
func (*RawDataObj) String ¶
func (r *RawDataObj) String() string
type Receipt ¶
type Receipt struct {
// Consensus fields
PostState []byte `json:"root"` // It is used to record the information of transaction execution in JSON format, such as gas, cost "gas", and world state "root" after execution.
Status uint64 `json:"status"`
CumulativeGasUsed uint64 `json:"cumulativeGasUsed" gencodec:"required"`
Logs []*Log `json:"logs" gencodec:"required"`
// Implementation fields (don't reorder!)
TxHash common.Hash `json:"transactionHash" gencodec:"required"`
ContractAddress *common.Address `json:"contractAddress"`
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
Out []byte `json:"out" gencodec:"required"`
Error string `json:"error"`
}
Receipt represents the results of a transaction.
func NewReceipt ¶
NewReceipt creates a barebone transaction receipt, copying the init fields.
func ReadReceipt ¶
ReadReceipt retrieves a specific transaction receipt from the database, along with its added positional metadata.
func (*Receipt) GasFeeString ¶
func (*Receipt) GetPostRoot ¶
type Receipts ¶
type Receipts []*Receipt
func ReadReceipts ¶
ReadReceipts retrieves all the transaction receipts belonging to a block.
type RelayEventMsg ¶
type RelayEventMsg struct {
RType RelayType
FromChain common.ChainID
ToChainID common.ChainID
ToNetType common.NetType
ToNodeID *common.NodeID
Msg interface{}
Pub []byte
Sig []byte
}
RelayEvent Used to forward messages to other networks asynchronously
func (*RelayEventMsg) GetPubAndSig ¶
func (msg *RelayEventMsg) GetPubAndSig() ([]byte, []byte)
func (*RelayEventMsg) String ¶
func (msg *RelayEventMsg) String() string
type RelayType ¶
type RelayType byte
Control class message, carefully forward on the network. The message body is not guaranteed to be serializable or deserialized. Because of the single execution, there is no need to check the repetition
type ReportNodeInfoEMessage ¶
func (*ReportNodeInfoEMessage) GetChainID ¶
func (m *ReportNodeInfoEMessage) GetChainID() common.ChainID
func (*ReportNodeInfoEMessage) String ¶
func (m *ReportNodeInfoEMessage) String() string
type RewardRequest ¶
type RewardRequest struct {
ChainId common.ChainID
CommitteePks [][]byte // The public key list of the members of the current committee in the order of proposing
Epoch common.EpochNum // Epoch where the reward is declared
LastHeader *BlockHeader // The block header of the last block of the epoch declared
Attendance *AttendanceRecord // The attendance table of the last block, which contains the attendance records of the entire epoch
PASs PubAndSigs // Signature list for the last block
}
func (*RewardRequest) DestChainID ¶
func (a *RewardRequest) DestChainID() common.ChainID
func (*RewardRequest) Formalize ¶
func (a *RewardRequest) Formalize()
func (*RewardRequest) GetChainID ¶
func (a *RewardRequest) GetChainID() common.ChainID
func (*RewardRequest) Hash ¶
func (a *RewardRequest) Hash() common.Hash
func (*RewardRequest) HashValue ¶
func (a *RewardRequest) HashValue() ([]byte, error)
func (*RewardRequest) String ¶
func (a *RewardRequest) String() string
type RewardRequests ¶
type RewardRequests []*RewardRequest
func (RewardRequests) Len ¶
func (rs RewardRequests) Len() int
func (RewardRequests) Less ¶
func (rs RewardRequests) Less(i, j int) bool
func (RewardRequests) Swap ¶
func (rs RewardRequests) Swap(i, j int)
type SeedFactor ¶
type SeedFactor []byte
type SetChainSettingRequest ¶
type SetChainSettingRequest struct {
Data *ChainSetting // request content of setting
Sigs [][]byte // signature list
Pubs [][]byte // public key list corresponding to signature one by one
}
func (*SetChainSettingRequest) DataDeserialize ¶
func (s *SetChainSettingRequest) DataDeserialize(vr rtl.ValueReader) error
func (*SetChainSettingRequest) DataSerialize ¶
func (s *SetChainSettingRequest) DataSerialize(w io.Writer) error
func (*SetChainSettingRequest) Deserialization ¶
func (s *SetChainSettingRequest) Deserialization(r io.Reader) (shouldBeNil bool, err error)
func (*SetChainSettingRequest) GetData ¶
func (s *SetChainSettingRequest) GetData() (o interface{}, exist bool)
func (*SetChainSettingRequest) GetPubs ¶
func (s *SetChainSettingRequest) GetPubs() [][]byte
func (*SetChainSettingRequest) GetSigs ¶
func (s *SetChainSettingRequest) GetSigs() [][]byte
func (*SetChainSettingRequest) Serialization ¶
func (s *SetChainSettingRequest) Serialization(w io.Writer) error
func (*SetChainSettingRequest) SetPubs ¶
func (s *SetChainSettingRequest) SetPubs(pubs [][]byte)
func (*SetChainSettingRequest) SetSigs ¶
func (s *SetChainSettingRequest) SetSigs(sigs [][]byte)
func (*SetChainSettingRequest) String ¶
func (s *SetChainSettingRequest) String() string
type SevereErrorEventMsg ¶
Unknown error found
func (*SevereErrorEventMsg) String ¶
func (msg *SevereErrorEventMsg) String() string
type ShardDeltaMessage ¶
type ShardDeltaMessage struct {
ToChainID common.ChainID
FromBlockHeader *BlockHeader
Proof []common.Hash
Deltas []*AccountDelta
}
The shard chain is used to send to other shards the AccountDelta list processed by this shard should fall on the other shard. Including block header and the proof
func (*ShardDeltaMessage) DestChainID ¶
func (m *ShardDeltaMessage) DestChainID() common.ChainID
func (*ShardDeltaMessage) GetChainID ¶
func (m *ShardDeltaMessage) GetChainID() common.ChainID
func (*ShardDeltaMessage) String ¶
func (m *ShardDeltaMessage) String() string
type ShardTransaction ¶
type ShardTransaction struct {
ToChainID common.ChainID
Tx *Transaction
}
func (*ShardTransaction) GetChainID ¶
func (s *ShardTransaction) GetChainID() common.ChainID
type ShardWaterline ¶
type ShardWaterline struct {
ShardID common.ChainID // shard id
Line common.Height // the height of the shard that deltas are to be merged next
}
func (ShardWaterline) Equals ¶
func (s ShardWaterline) Equals(o ShardWaterline) bool
func (ShardWaterline) HashValue ¶
func (s ShardWaterline) HashValue() ([]byte, error)
func (ShardWaterline) String ¶
func (s ShardWaterline) String() string
type Signer ¶
type Signer interface {
// Sender returns the sender address of the transaction.
Sender(tx *ETHTransaction) (common.Address, error)
// SignatureValues returns the raw R, S, V values corresponding to the
// given signature.
SignatureValues(tx *ETHTransaction, sig []byte) (r, s, v *big.Int, err error)
// Hash returns 'signature hash', i.e. the transaction hash that is signed by the
// private key. This hash does not uniquely identify the transaction.
Hash(tx *ETHTransaction) common.Hash
HashGtkm(tx *Transaction) common.Hash
HashGtkmWithSig(tx *Transaction) common.Hash
// Equal returns true if the given signer is the same as the receiver.
Equal(Signer) bool
RecoverSigAndPub(tx *ETHTransaction) (sig, pub []byte, err error)
}
Signer encapsulates transaction signature handling. The name of this type is slightly misleading because Signers don't actually sign, they're just for validating and processing of signatures.
Note that this interface is not a stable API and may change at any time to accommodate new protocol rules.
var ETHSigner Signer = NewLondonSigner()
func NewEIP2930Signer ¶
func NewEIP2930Signer() Signer
NewEIP2930Signer returns a signer that accepts EIP-2930 access list transactions, EIP-155 replay protected transactions, and legacy Homestead transactions.
func NewEIP2930Signer(chainId *big.Int) Signer {
return eip2930Signer{NewEIP155Signer(chainId)}
func NewLondonSigner ¶
func NewLondonSigner() Signer
NewLondonSigner returns a signer that accepts - EIP-1559 dynamic fee transactions - EIP-2930 access list transactions, - EIP-155 replay protected transactions, and - legacy Homestead transactions.
func NewLondonSigner(chainId *big.Int) Signer {
return londonSigner{eip2930Signer{NewEIP155Signer(chainId)}}
type SigsAndPubs ¶
type SigsAndPubs struct {
Sigs [][]byte // signature list
Pubs [][]byte // List of public keys corresponding to the signature list one-to-one
}
func (*SigsAndPubs) GetPubs ¶
func (sp *SigsAndPubs) GetPubs() [][]byte
func (*SigsAndPubs) GetSigs ¶
func (sp *SigsAndPubs) GetSigs() [][]byte
func (*SigsAndPubs) SetPubs ¶
func (sp *SigsAndPubs) SetPubs(pubs [][]byte)
func (*SigsAndPubs) SetSigs ¶
func (sp *SigsAndPubs) SetSigs(sigs [][]byte)
type StartCommEMessage ¶
type StartCommEMessage struct {
Comms []CommEntry
}
func (*StartCommEMessage) GetChainID ¶
func (m *StartCommEMessage) GetChainID() common.ChainID
func (*StartCommEMessage) GetComm ¶
func (m *StartCommEMessage) GetComm(id common.ChainID) *Committee
func (*StartCommEMessage) Hash ¶
func (m *StartCommEMessage) Hash() common.Hash
func (*StartCommEMessage) String ¶
func (m *StartCommEMessage) String() string
type StartConsEMessage ¶
func (*StartConsEMessage) GetChainID ¶
func (m *StartConsEMessage) GetChainID() common.ChainID
func (*StartConsEMessage) String ¶
func (m *StartConsEMessage) String() string
type StartEMessage ¶
func CreateStartMessage ¶
func CreateStartMessage() (*StartEMessage, error)
func (*StartEMessage) GetChainID ¶
func (m *StartEMessage) GetChainID() common.ChainID
func (*StartEMessage) String ¶
func (m *StartEMessage) String() string
func (*StartEMessage) Verify ¶
func (m *StartEMessage) Verify() error
type StateDB ¶
type StateDB interface {
// Whether there is a local currency, if so, the last one method will return the local currency
// information. Otherwise, the latter one method return basic currency information
HasLocalCurrency() bool
GetChainLocalCurrencyInfo(chainID common.ChainID) (common.CoinID, string)
// Get the list of administrator public keys of the current chain. If there is a valid value,
// the second return value will return true, otherwise it will return false
GetAdmins() ([][]byte, bool)
ResetState(stateTrie *trie.Trie)
CreateAccount(common.Address)
HasToken(addr common.Address) bool
NoBalance(addr common.Address) bool
SubBalance(common.Address, *big.Int)
AddBalance(common.Address, *big.Int)
GetBalance(common.Address) *big.Int
NoLocalCurrency(addr common.Address) bool
SubLocalCurrency(common.Address, *big.Int)
AddLocalCurrency(common.Address, *big.Int)
GetLocalCurrency(common.Address) *big.Int
GetNonce(common.Address) uint64
SetNonce(common.Address, uint64)
GetCodeHash(common.Address) common.Hash
GetCode(common.Address) []byte
SetCode(common.Address, []byte)
GetCodeByHash(codeHash common.Hash) []byte
GetCodeSize(common.Address) int
AddRefund(uint64)
SubRefund(uint64)
GetRefund() uint64
GetState(common.Address, common.Hash) common.Hash
SetState(common.Address, common.Hash, common.Hash)
GetLong(addr common.Address, key common.Hash) []byte
GetConsistantLong(addr common.Address, key common.Hash) []byte
SetLong(addr common.Address, key common.Hash, value []byte)
GetLongAsObject(addr common.Address, key common.Hash, obj interface{}) error
SetLongAsObject(addr common.Address, key common.Hash, obj interface{}) error
Suicide(common.Address) bool
HasSuicided(common.Address) bool
// Exist reports whether the given account exists in state.
// Notably this should also return true for suicided accounts.
Exist(common.Address) bool
Empty(common.Address) bool
ClearObjectCache()
RevertToSnapshot(int)
Snapshot() int
AddLog(common.Hash, uint, *Log)
AddPreimage(common.Hash, []byte)
GetOrNewStateObject(addr common.Address) AccountState
GetLogs(hash common.Hash) []*Log
Prepare(block *BlockEMessage, operations ...VerifyCallback) error
// PreCommit(rootShouldBe []byte) ([]byte, error)
Commit(block *BlockEMessage, verifies []VerifyCallback, commits []CommitCallback) error
RestoreDeltasLocked()
ListAllDeltaFroms() DeltaFroms
PutAllDeltaFroms(deltaFroms DeltaFroms)
SyncWaterlines(waterlines []ShardWaterline, logger logrus.FieldLogger)
GetDeltaToBeSent() common.Height
SetDeltaToBeSent(height common.Height)
ProposeWaterlines() (Waterlines, error)
GetOriginHash() ([]byte, error)
DeltasSnapShot() []ShardWaterline
SaveReceivedDelta(fromID common.ChainID, height common.Height, deltas []*AccountDelta) (
overflow bool, waterline common.Height, overflowed []*DeltaFrom, missing bool,
missingLength int, err error)
SaveDeltasGroup(fromID common.ChainID, group DeltasGroup) (overflow bool,
waterline common.Height, overflowed []*DeltaFrom, missing bool, missingLength int, err error)
GetWaterLine(fromID common.ChainID) common.Height
PopDeltaFroms() DeltaFroms
ReadOnlyCall(tx *Transaction, senderSig *PubAndSig, blockHeader *BlockHeader) (interface{}, error)
ReadOnly() StateDB
Propose(froms DeltaFroms, deltaTrie *AccountDeltaTrie, txs []*Transaction, pas []*PubAndSig,
header *BlockHeader, result *ProposeResult, operations ...GenerateCallback) (err error)
ForceCommit() error
GetOriginAccount(addr common.Address) (*Account, bool)
CreateTestAccount(addr common.Address, balance *big.Int) error
Rollback()
GetSettingGasLimit(tx *Transaction) uint64
GetSettingGasPrice(tx *Transaction) *big.Int
}
StateDB is an EVM database for full state querying.
type StopEMessage ¶
func CreateStopMessage ¶
func CreateStopMessage() (*StopEMessage, error)
func (*StopEMessage) GetChainID ¶
func (m *StopEMessage) GetChainID() common.ChainID
func (*StopEMessage) String ¶
func (m *StopEMessage) String() string
func (*StopEMessage) Verify ¶
func (m *StopEMessage) Verify() error
type StorageEntries ¶
type StorageEntries []StorageEntry
func (StorageEntries) String ¶
func (es StorageEntries) String() string
type StorageEntry ¶
type StorageEntry struct {
All int
Num int
K common.Hash
V []EntryHashHash
}
func (StorageEntry) Count ¶
func (e StorageEntry) Count() int
type StorageSize ¶
type StorageSize float64
type SyncFinish ¶
type SyncFinish struct {
ChainID common.ChainID
NodeID common.NodeID // Nodeid to request synchronization
EndHeight common.Height
Timestamp int
}
func (*SyncFinish) GetChainID ¶
func (s *SyncFinish) GetChainID() common.ChainID
func (*SyncFinish) Source ¶
func (s *SyncFinish) Source() common.NodeID
func (*SyncFinish) String ¶
func (s *SyncFinish) String() string
type SyncRequest ¶
type SyncRequest struct {
ChainID common.ChainID
NodeID common.NodeID // Nodeid to request synchronization
ToNode common.NodeID
AllBlock bool // true: indicates synchronization from the first block, false: Indicates that synchronization starts from the current state
StartHeight common.Height
RpcAddr string
Timestamp int
}
func (*SyncRequest) GetChainID ¶
func (s *SyncRequest) GetChainID() common.ChainID
func (*SyncRequest) Source ¶
func (s *SyncRequest) Source() common.NodeID
func (*SyncRequest) String ¶
func (s *SyncRequest) String() string
type TextEMessage ¶
type TextEMessage struct {
Body string
}
type ThresholdEvent ¶
type ThresholdEvent interface {
ChainEvent
// Whether the current message can join the queue according to the threshold value, threshold can be nil
Pass(threshold interface{}) bool
}
type ToOneEMessage ¶
type ToOneEMessage struct {
From common.NodeID
To common.NodeID
NeedRespond bool
Type EventType
Body []byte
}
func (*ToOneEMessage) Source ¶
func (m *ToOneEMessage) Source() common.NodeID
type Transaction ¶
type Transaction struct {
ChainID common.ChainID `json:"chainID"` // The chain ID that needs to process this transaction
From *common.Address `json:"from"` // Address of transaction transmitter
To *common.Address `json:"to"` // Address of transaction receiver
Nonce uint64 `json:"nonce"` // Nonce of sender account
UseLocal bool `json:"uselocal"` // true: local currency,false: basic currency; default false
Val *big.Int `json:"value"` // Amount of the transaction
Input hexutil.Bytes `json:"input"` // Contract code/initial parameters when creating a contract, or input parameters when calling a contract
Extra hexutil.Bytes `json:"extra"` // Store transaction additional information
Version uint16 `json:"version"` // Version number used to distinguish different execution methods when the transaction execution is incompatible due to upgrade
MultiSigs PubAndSigs `json:"multiSigs"` // The signatures used to sign this transaction will only be used when there are multiple signatures. The signature of the transaction sender is not here. Not included in Hash
// contains filtered or unexported fields
}
func (*Transaction) AccessList ¶
func (tx *Transaction) AccessList() AccessList
func (*Transaction) Clone ¶
func (tx *Transaction) Clone() *Transaction
func (Transaction) DeprecatedHash ¶
func (tx Transaction) DeprecatedHash() ([]byte, error)
DeprecatedHash TODO delete compatible when restart the chain with new version Deprecated
func (*Transaction) ETHChainID ¶
func (tx *Transaction) ETHChainID() *big.Int
func (*Transaction) ExtraKeys ¶
func (tx *Transaction) ExtraKeys() (extra *Extra)
EthKeys Type returns the ethtransaction type.
func (Transaction) FullString ¶
func (tx Transaction) FullString() string
func (*Transaction) Gas ¶
func (tx *Transaction) Gas() uint64
func (*Transaction) GasFeeCap ¶
func (tx *Transaction) GasFeeCap() *big.Int
func (*Transaction) GasPrice ¶
func (tx *Transaction) GasPrice() *big.Int
func (*Transaction) GasTipCap ¶
func (tx *Transaction) GasTipCap() *big.Int
func (Transaction) GetChainID ¶
func (tx Transaction) GetChainID() common.ChainID
func (*Transaction) GetTkmExtra ¶
func (tx *Transaction) GetTkmExtra() []byte
func (*Transaction) Hash ¶
func (tx *Transaction) Hash() common.Hash
func (Transaction) HashValue ¶
func (tx Transaction) HashValue() ([]byte, error)
func (*Transaction) RawSignatureValues ¶
func (tx *Transaction) RawSignatureValues() (v, r, s *big.Int)
func (*Transaction) SetExtraKeys ¶
func (tx *Transaction) SetExtraKeys(extras *Extra) error
func (*Transaction) SetTkmExtra ¶
func (tx *Transaction) SetTkmExtra(extra []byte) error
func (Transaction) String ¶
func (tx Transaction) String() string
func (*Transaction) Type ¶
func (tx *Transaction) Type() byte
Type returns the ethtransaction type of tx.
type TxData ¶
type TxData interface {
TxType() byte // returns the type ID
// contains filtered or unexported methods
}
TxData This is implemented by DynamicFeeTx, LegacyTx and AccessListTx.
type VerifyCallback ¶
type VerifyCallback func(block *BlockEMessage) error
The callback function executed after the transaction is executed when the data block is verified block: verifying block
type VrfResulter ¶
type VrfResulter interface {
GetNodeID() common.NodeID
GetVrfResult() (sortHash *common.Hash, proof []byte, factorHash *common.Hash)
VrfVerify(seed common.Seed) error
}
Election type interface based on VRF algorithm
type WantDetailEMessage ¶
type Waterlines ¶
type Waterlines []ShardWaterline
It is used to save the ordered waterlines of all other shards in the same group after the execution of this block in this chain
func (Waterlines) Equals ¶
func (ws Waterlines) Equals(os Waterlines) bool
func (Waterlines) HashValue ¶
func (ws Waterlines) HashValue() ([]byte, error)
func (Waterlines) Len ¶
func (ws Waterlines) Len() int
func (Waterlines) Less ¶
func (ws Waterlines) Less(i, j int) bool
func (Waterlines) Swap ¶
func (ws Waterlines) Swap(i, j int)
type WholeWorld ¶
type WholeWorld struct {
State *trie.Trie
Chains *trie.Trie
History *trie.HistoryTree
Waterlines []ShardWaterline
Vcc *trie.Trie
Cashed *trie.Trie
RREra *common.EraNum
RRCurrent *trie.Trie
RRNext *trie.Trie
RRChanging *trie.Trie
PreElectings PreElectings
}
func (*WholeWorld) String ¶
func (ww *WholeWorld) String() string
type Withdrawing ¶
type Withdrawing struct {
Demand common.EraNum // Withdraw execution era (WithdrawDelayEras lagging after the application execution Era)
Amount *big.Int // Withdraw amount, if it is nil, it means all withdrawing
}
func (*Withdrawing) Equals ¶
func (w *Withdrawing) Equals(o *Withdrawing) bool
func (*Withdrawing) String ¶
func (w *Withdrawing) String() string
type Withdrawings ¶
type Withdrawings []*Withdrawing
func (Withdrawings) All ¶
func (ws Withdrawings) All() (withdrawing *big.Int, withdrawingAll bool)
The total amount withdrawing to be withdrawed in the current withdrawing list. If all withdrawing are made, withdrawingAll is true, and the withdrawing value is meaningless
func (Withdrawings) Clone ¶
func (ws Withdrawings) Clone() Withdrawings
func (Withdrawings) Equals ¶
func (ws Withdrawings) Equals(os Withdrawings) bool
func (Withdrawings) GetWithdrawing ¶
func (ws Withdrawings) GetWithdrawing(expireEra common.EraNum) *Withdrawing
func (Withdrawings) Len ¶
func (ws Withdrawings) Len() int
func (Withdrawings) Less ¶
func (ws Withdrawings) Less(i, j int) bool
func (Withdrawings) String ¶
func (ws Withdrawings) String() string
func (Withdrawings) Swap ¶
func (ws Withdrawings) Swap(i, j int)
Source Files
¶
- account.go
- accountdeltatrie.go
- basic.go
- chaintrie.go
- consensus.go
- consensusevents.go
- consts.go
- controlevents.go
- controller.go
- dataevents.go
- deltafrompool.go
- deltafromtrie.go
- dummy.go
- eth_access_list_tx.go
- eth_dynamic_fee_tx.go
- eth_legacy.go
- eth_transaction.go
- eth_txdata.go
- event.go
- eventproc.go
- gen_log_json.go
- headertrie.go
- heighters.go
- managers.go
- preelect.go
- receipt.go
- registry.go
- requestsadmin.go
- requestscheck.go
- requestscur.go
- requesttools.go
- reward.go
- shared.go
- transaction_signing.go
- types.go
- vm.go