Documentation ¶
Index ¶
- Variables
- func AccuVerifiers(blockHash common.Hash, proposalID common.Hash, verifierList []discover.NodeID) error
- func AddActiveNode(blockHash common.Hash, proposalID common.Hash, nodeID discover.NodeID) error
- func AddActiveVersion(activeVersion uint32, activeBlock uint64, state xcom.StateDB) error
- func AddPIPID(pipID string, state xcom.StateDB) error
- func AddVoteValue(proposalID common.Hash, voter discover.NodeID, option VoteOption, ...) error
- func AddVotingProposalID(blockHash common.Hash, proposalID common.Hash) error
- func ClearActiveNodes(blockHash common.Hash, proposalID common.Hash) error
- func DeclareVersion(from common.Address, declaredNodeID discover.NodeID, declaredVersion uint32, ...) error
- func GetActiveNodeList(blockHash common.Hash, proposalID common.Hash) ([]discover.NodeID, error)
- func GetActiveVersion(blockNumber uint64, state xcom.StateDB) uint32
- func GetCurrentActiveVersion(state xcom.StateDB) uint32
- func GetMaxEndVotingBlock(nodeID discover.NodeID, blockHash common.Hash, state xcom.StateDB) (uint64, error)
- func GetPreActiveProposalID(blockHash common.Hash) (common.Hash, error)
- func GetPreActiveVersion(state xcom.StateDB) uint32
- func GetVersionForStaking(state xcom.StateDB) uint32
- func GetVotedVerifierMap(proposalID common.Hash, state xcom.StateDB) (map[discover.NodeID]struct{}, error)
- func KeyAccuVerifier(proposalID common.Hash) []byte
- func KeyActiveNodes(proposalID common.Hash) []byte
- func KeyActiveVersions() []byte
- func KeyEndProposals() []byte
- func KeyPIPIDs() []byte
- func KeyPreActiveProposal() []byte
- func KeyPreActiveVersion() []byte
- func KeyProposal(proposalID common.Hash) []byte
- func KeyTallyResult(proposalID common.Hash) []byte
- func KeyVote(proposalID common.Hash) []byte
- func KeyVotingProposals() []byte
- func ListAccuVerifier(blockHash common.Hash, proposalID common.Hash) ([]discover.NodeID, error)
- func ListEndProposalID(blockHash common.Hash) ([]common.Hash, error)
- func ListPIPID(state xcom.StateDB) ([]string, error)
- func ListVotingProposal(blockHash common.Hash) ([]common.Hash, error)
- func ListVotingProposalID(blockHash common.Hash) ([]common.Hash, error)
- func MovePreActiveProposalIDToEnd(blockHash common.Hash, proposalID common.Hash) error
- func MoveVotingProposalIDToEnd(blockHash common.Hash, proposalID common.Hash) error
- func MoveVotingProposalIDToPreActive(blockHash common.Hash, proposalID common.Hash) error
- func NotifyPunishedVerifiers(blockHash common.Hash, punishedVerifierMap map[discover.NodeID]struct{}, ...) error
- func SetPreActiveVersion(preActiveVersion uint32, state xcom.StateDB) error
- func SetProposal(proposal Proposal, state xcom.StateDB) error
- func SetTallyResult(tallyResult TallyResult, state xcom.StateDB) error
- func Submit(from common.Address, proposal Proposal, blockHash common.Hash, ...) error
- func TallyVoteValue(proposalID common.Hash, state xcom.StateDB) (yeas, nays, abstentions uint16, e error)
- func UpdateVoteValue(proposalID common.Hash, voteValueList []VoteValue, state xcom.StateDB) error
- func Vote(from common.Address, vote VoteInfo, blockHash common.Hash, blockNumber uint64, ...) error
- type ActiveVersionValue
- type CancelProposal
- func (cp *CancelProposal) GetEndVotingBlock() uint64
- func (cp *CancelProposal) GetPIPID() string
- func (cp *CancelProposal) GetProposalID() common.Hash
- func (cp *CancelProposal) GetProposalType() ProposalType
- func (cp *CancelProposal) GetProposer() discover.NodeID
- func (cp *CancelProposal) GetSubmitBlock() uint64
- func (cp *CancelProposal) GetTallyResult() TallyResult
- func (cp *CancelProposal) String() string
- func (cp *CancelProposal) Verify(submitBlock uint64, blockHash common.Hash, state xcom.StateDB) error
- type ParamValue
- type Proposal
- func GetExistProposal(proposalID common.Hash, state xcom.StateDB) (Proposal, error)
- func GetProposal(proposalID common.Hash, state xcom.StateDB) (Proposal, error)
- func GetProposalList(blockHash common.Hash, state xcom.StateDB) ([]Proposal, error)
- func ListProposal(blockHash common.Hash, state xcom.StateDB) ([]Proposal, error)
- type ProposalStatus
- type ProposalType
- type Staking
- type TallyResult
- type TextProposal
- func (tp *TextProposal) GetEndVotingBlock() uint64
- func (tp *TextProposal) GetPIPID() string
- func (tp *TextProposal) GetProposalID() common.Hash
- func (tp *TextProposal) GetProposalType() ProposalType
- func (tp *TextProposal) GetProposer() discover.NodeID
- func (tp *TextProposal) GetSubmitBlock() uint64
- func (tp *TextProposal) GetTallyResult() TallyResult
- func (tp *TextProposal) String() string
- func (tp *TextProposal) Verify(submitBlock uint64, blockHash common.Hash, state xcom.StateDB) error
- type VersionProposal
- func (vp *VersionProposal) GetActiveBlock() uint64
- func (vp *VersionProposal) GetEndVotingBlock() uint64
- func (vp *VersionProposal) GetNewVersion() uint32
- func (vp *VersionProposal) GetPIPID() string
- func (vp *VersionProposal) GetProposalID() common.Hash
- func (vp *VersionProposal) GetProposalType() ProposalType
- func (vp *VersionProposal) GetProposer() discover.NodeID
- func (vp *VersionProposal) GetSubmitBlock() uint64
- func (vp *VersionProposal) GetTallyResult() TallyResult
- func (vp *VersionProposal) String() string
- func (vp *VersionProposal) Verify(submitBlock uint64, blockHash common.Hash, state xcom.StateDB) error
- type VoteInfo
- type VoteOption
- type VoteValue
Constants ¶
This section is empty.
Variables ¶
var ( ActiveVersionError = common.NewBizError(302001, "current active version not found") VoteOptionError = common.NewBizError(302002, "vote option error") ProposalTypeError = common.NewBizError(302003, "proposal type error") ProposalIDEmpty = common.NewBizError(302004, "proposal ID is empty") ProposalIDExist = common.NewBizError(302005, "proposal ID already exists") ProposalNotFound = common.NewBizError(302006, "proposal not found") PIPIDEmpty = common.NewBizError(302007, "PIPID is empty") PIPIDExist = common.NewBizError(302008, "PIPID already exists") EndVotingRoundsTooSmall = common.NewBizError(302009, "endVotingRounds too small") EndVotingRoundsTooLarge = common.NewBizError(302010, "endVotingRounds too large") NewVersionError = common.NewBizError(302011, "newVersion should larger than current active version") VotingVersionProposalExist = common.NewBizError(302012, "another version proposal at voting stage") PreActiveVersionProposalExist = common.NewBizError(302013, "another version proposal at pre-active stage") VotingCancelProposalExist = common.NewBizError(302014, "another cancel proposal at voting stage") TobeCanceledProposalNotFound = common.NewBizError(302015, "to be canceled proposal not found") TobeCanceledProposalTypeError = common.NewBizError(302016, "to be canceled proposal not version type") TobeCanceledProposalNotAtVoting = common.NewBizError(302017, "to be canceled proposal not at voting stage") ProposerEmpty = common.NewBizError(302018, "proposer is empty") VerifierInfoNotFound = common.NewBizError(302019, "verifier detail info not found") VerifierStatusInvalid = common.NewBizError(302020, "verifier status is invalid") TxSenderDifferFromStaking = common.NewBizError(302021, "Tx caller differ from staking") TxSenderIsNotVerifier = common.NewBizError(302022, "Tx caller is not verifier") TxSenderIsNotCandidate = common.NewBizError(302023, "Tx caller is not candidate") VersionSignError = common.NewBizError(302024, "version sign error") VerifierNotUpgraded = common.NewBizError(302025, "verifier not upgraded") ProposalNotAtVoting = common.NewBizError(302026, "proposal not at voting stage") VoteDuplicated = common.NewBizError(302027, "vote duplicated") DeclareVersionError = common.NewBizError(302028, "declared version error") NotifyStakingDeclaredVersionError = common.NewBizError(302029, "notify staking declared version error") TallyResultNotFound = common.NewBizError(302030, "tally result not found") )
var (
KeyDelimiter = []byte(":")
)
var (
ValueDelimiter = []byte(":")
)
Functions ¶
func AccuVerifiers ¶
func AccuVerifiers(blockHash common.Hash, proposalID common.Hash, verifierList []discover.NodeID) error
AccuVerifiers accumulates all distinct verifiers those can vote this proposal ID
func AddActiveNode ¶
Add the node that has made a new version declare or vote during voting period
func AddActiveVersion ¶
Set active version record
func AddVoteValue ¶
func AddVoteValue(proposalID common.Hash, voter discover.NodeID, option VoteOption, state xcom.StateDB) error
Add the Vote detail
func AddVotingProposalID ¶
func ClearActiveNodes ¶
Clear the version declaration records after upgrade
func DeclareVersion ¶
func DeclareVersion(from common.Address, declaredNodeID discover.NodeID, declaredVersion uint32, programVersionSign common.VersionSign, blockHash common.Hash, blockNumber uint64, stk Staking, state xcom.StateDB) error
node declares it's version
func GetActiveNodeList ¶
Get the node list that have made a new version declare or vote during voting period
func GetCurrentActiveVersion ¶
Get current active version record
func GetMaxEndVotingBlock ¶
func GetMaxEndVotingBlock(nodeID discover.NodeID, blockHash common.Hash, state xcom.StateDB) (uint64, error)
GetMaxEndVotingBlock returns the max endVotingBlock of proposals those are at voting stage, and the nodeID has voted for those proposals. or returns 0 if there's no proposal at voting stage, or nodeID didn't voted for any proposal. if any error happened, return 0 and the error
func GetPreActiveProposalID ¶
func GetPreActiveVersion ¶
Get pre-active version
func GetVersionForStaking ¶
func GetVotedVerifierMap ¶
func KeyAccuVerifier ¶
func KeyActiveNodes ¶
func KeyActiveVersions ¶
func KeyActiveVersions() []byte
func KeyEndProposals ¶
func KeyEndProposals() []byte
func KeyPreActiveProposal ¶
func KeyPreActiveProposal() []byte
func KeyPreActiveVersion ¶
func KeyPreActiveVersion() []byte
func KeyProposal ¶
func KeyTallyResult ¶
func KeyVotingProposals ¶
func KeyVotingProposals() []byte
func ListAccuVerifier ¶
Get the total number of all voting verifiers
func ListVotingProposal ¶
Get voting proposal
func ListVotingProposalID ¶
list all proposal IDs at voting stage
func NotifyPunishedVerifiers ¶
func NotifyPunishedVerifiers(blockHash common.Hash, punishedVerifierMap map[discover.NodeID]struct{}, state xcom.StateDB) error
NotifyPunishedVerifiers receives punished verifies notification from Staking
func SetPreActiveVersion ¶
Set pre-active version
func SetTallyResult ¶
func SetTallyResult(tallyResult TallyResult, state xcom.StateDB) error
func Submit ¶
func Submit(from common.Address, proposal Proposal, blockHash common.Hash, blockNumber uint64, stk Staking, state xcom.StateDB) error
submit a proposal
func TallyVoteValue ¶
func TallyVoteValue(proposalID common.Hash, state xcom.StateDB) (yeas, nays, abstentions uint16, e error)
TallyVoteValue statistics vote option for a proposal
func UpdateVoteValue ¶
Types ¶
type ActiveVersionValue ¶
type ActiveVersionValue struct { ActiveVersion uint32 `json:"ActiveVersion"` ActiveBlock uint64 `json:"ActiveBlock"` }
func ListActiveVersion ¶
func ListActiveVersion(state xcom.StateDB) ([]ActiveVersionValue, error)
type CancelProposal ¶
type CancelProposal struct { ProposalID common.Hash ProposalType ProposalType PIPID string SubmitBlock uint64 EndVotingRounds uint64 EndVotingBlock uint64 Proposer discover.NodeID TobeCanceled common.Hash Result TallyResult `json:"-"` }
func FindVotingCancelProposal ¶
func FindVotingCancelProposal(blockHash common.Hash, blockNumber uint64, state xcom.StateDB) (*CancelProposal, error)
find a cancel proposal at voting stage
func (*CancelProposal) GetEndVotingBlock ¶
func (cp *CancelProposal) GetEndVotingBlock() uint64
func (*CancelProposal) GetPIPID ¶
func (cp *CancelProposal) GetPIPID() string
func (*CancelProposal) GetProposalID ¶
func (cp *CancelProposal) GetProposalID() common.Hash
func (*CancelProposal) GetProposalType ¶
func (cp *CancelProposal) GetProposalType() ProposalType
func (*CancelProposal) GetProposer ¶
func (cp *CancelProposal) GetProposer() discover.NodeID
func (*CancelProposal) GetSubmitBlock ¶
func (cp *CancelProposal) GetSubmitBlock() uint64
func (*CancelProposal) GetTallyResult ¶
func (cp *CancelProposal) GetTallyResult() TallyResult
func (*CancelProposal) String ¶
func (cp *CancelProposal) String() string
type ParamValue ¶
type Proposal ¶
type Proposal interface { GetProposalID() common.Hash GetProposalType() ProposalType GetPIPID() string GetSubmitBlock() uint64 GetEndVotingBlock() uint64 GetProposer() discover.NodeID GetTallyResult() TallyResult Verify(blockNumber uint64, blockHash common.Hash, state xcom.StateDB) error String() string }
func GetExistProposal ¶
func GetProposalList ¶
Select proposal id list from snapshot database ,then get proposal detail from statedb one by one
type ProposalStatus ¶
type ProposalStatus uint8
const ( Voting ProposalStatus = 0x01 Pass ProposalStatus = 0x02 Failed ProposalStatus = 0x03 PreActive ProposalStatus = 0x04 Active ProposalStatus = 0x05 Canceled ProposalStatus = 0x06 )
func (ProposalStatus) ToString ¶
func (status ProposalStatus) ToString() string
type ProposalType ¶
type ProposalType uint8
const ( Text ProposalType = 0x01 Version ProposalType = 0x02 Param ProposalType = 0x03 Cancel ProposalType = 0x04 )
type Staking ¶
type Staking interface { GetVerifierList(blockHash common.Hash, blockNumber uint64, isCommit bool) (staking.ValidatorExQueue, error) ListVerifierNodeID(blockHash common.Hash, blockNumber uint64) ([]discover.NodeID, error) GetCandidateList(blockHash common.Hash, blockNumber uint64) (staking.CandidateHexQueue, error) GetCandidateInfo(blockHash common.Hash, addr common.Address) (*staking.Candidate, error) DeclarePromoteNotify(blockHash common.Hash, blockNumber uint64, nodeId discover.NodeID, programVersion uint32) error }
type TallyResult ¶
type TallyResult struct { ProposalID common.Hash `json:"proposalID"` Yeas uint16 `json:"yeas"` Nays uint16 `json:"nays"` Abstentions uint16 `json:"abstentions"` AccuVerifiers uint16 `json:"accuVerifiers"` Status ProposalStatus `json:"status"` CanceledBy common.Hash `json:"canceledBy"` }
func GetTallyResult ¶
type TextProposal ¶
type TextProposal struct { ProposalID common.Hash ProposalType ProposalType PIPID string SubmitBlock uint64 EndVotingBlock uint64 Proposer discover.NodeID Result TallyResult `json:"-"` }
func (*TextProposal) GetEndVotingBlock ¶
func (tp *TextProposal) GetEndVotingBlock() uint64
func (*TextProposal) GetPIPID ¶
func (tp *TextProposal) GetPIPID() string
func (*TextProposal) GetProposalID ¶
func (tp *TextProposal) GetProposalID() common.Hash
func (*TextProposal) GetProposalType ¶
func (tp *TextProposal) GetProposalType() ProposalType
func (*TextProposal) GetProposer ¶
func (tp *TextProposal) GetProposer() discover.NodeID
func (*TextProposal) GetSubmitBlock ¶
func (tp *TextProposal) GetSubmitBlock() uint64
func (*TextProposal) GetTallyResult ¶
func (tp *TextProposal) GetTallyResult() TallyResult
func (*TextProposal) String ¶
func (tp *TextProposal) String() string
type VersionProposal ¶
type VersionProposal struct { ProposalID common.Hash ProposalType ProposalType PIPID string SubmitBlock uint64 EndVotingRounds uint64 EndVotingBlock uint64 Proposer discover.NodeID Result TallyResult `json:"-"` NewVersion uint32 ActiveBlock uint64 }
func FindVotingVersionProposal ¶
find a version proposal at voting stage
func (*VersionProposal) GetActiveBlock ¶
func (vp *VersionProposal) GetActiveBlock() uint64
func (*VersionProposal) GetEndVotingBlock ¶
func (vp *VersionProposal) GetEndVotingBlock() uint64
func (*VersionProposal) GetNewVersion ¶
func (vp *VersionProposal) GetNewVersion() uint32
func (*VersionProposal) GetPIPID ¶
func (vp *VersionProposal) GetPIPID() string
func (*VersionProposal) GetProposalID ¶
func (vp *VersionProposal) GetProposalID() common.Hash
func (*VersionProposal) GetProposalType ¶
func (vp *VersionProposal) GetProposalType() ProposalType
func (*VersionProposal) GetProposer ¶
func (vp *VersionProposal) GetProposer() discover.NodeID
func (*VersionProposal) GetSubmitBlock ¶
func (vp *VersionProposal) GetSubmitBlock() uint64
func (*VersionProposal) GetTallyResult ¶
func (vp *VersionProposal) GetTallyResult() TallyResult
func (*VersionProposal) String ¶
func (vp *VersionProposal) String() string
type VoteInfo ¶
type VoteInfo struct { ProposalID common.Hash `json:"proposalID"` VoteNodeID discover.NodeID `json:"voteNodeID"` VoteOption VoteOption `json:"voteOption"` }
type VoteOption ¶
type VoteOption uint8
const ( Yes VoteOption = 0x01 No VoteOption = 0x02 Abstention VoteOption = 0x03 )
func ParseVoteOption ¶
func ParseVoteOption(option uint8) VoteOption