governance

package
v0.7.2 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2020 License: LGPL-3.0 Imports: 19 Imported by: 0

Documentation

Overview

Governance contract: Users can apply for a candidate node to join consensus selection, deposit ONT to authorize for candidate nodes, quit selection and unAuthorize for candidate nodes through this contract. ONT deposited in the contract can get ONG bonus which come from transaction fee of the network.

Index

Constants

View Source
const (
	//function name
	INIT_CONFIG                      = "initConfig"
	REGISTER_CANDIDATE               = "registerCandidate"
	REGISTER_CANDIDATE_TRANSFER_FROM = "registerCandidateTransferFrom"
	UNREGISTER_CANDIDATE             = "unRegisterCandidate"
	AUTHORIZE_FOR_PEER               = "authorizeForPeer"
	AUTHORIZE_FOR_PEER_TRANSFER_FROM = "authorizeForPeerTransferFrom"
	UNAUTHORIZE_FOR_PEER             = "unAuthorizeForPeer"
	APPROVE_CANDIDATE                = "approveCandidate"
	REJECT_CANDIDATE                 = "rejectCandidate"
	BLACK_NODE                       = "blackNode"
	WHITE_NODE                       = "whiteNode"
	QUIT_NODE                        = "quitNode"
	WITHDRAW                         = "withdraw"
	WITHDRAW_FEE                     = "withdrawFee"
	COMMIT_DPOS                      = "commitDpos"
	UPDATE_CONFIG                    = "updateConfig"
	UPDATE_GLOBAL_PARAM              = "updateGlobalParam"
	UPDATE_GLOBAL_PARAM2             = "updateGlobalParam2"
	UPDATE_SPLIT_CURVE               = "updateSplitCurve"
	TRANSFER_PENALTY                 = "transferPenalty"
	CHANGE_MAX_AUTHORIZATION         = "changeMaxAuthorization"
	SET_PEER_COST                    = "setPeerCost"
	ADD_INIT_POS                     = "addInitPos"
	REDUCE_INIT_POS                  = "reduceInitPos"
	SET_PROMISE_POS                  = "setPromisePos"
	SET_GAS_ADDRESS                  = "setGasAddress"

	//key prefix
	GLOBAL_PARAM      = "globalParam"
	GLOBAL_PARAM2     = "globalParam2"
	VBFT_CONFIG       = "vbftConfig"
	GOVERNANCE_VIEW   = "governanceView"
	CANDIDITE_INDEX   = "candidateIndex"
	PEER_POOL         = "peerPool"
	PEER_INDEX        = "peerIndex"
	BLACK_LIST        = "blackList"
	TOTAL_STAKE       = "totalStake"
	PENALTY_STAKE     = "penaltyStake"
	SPLIT_CURVE       = "splitCurve"
	PEER_ATTRIBUTES   = "peerAttributes"
	SPLIT_FEE         = "splitFee"
	SPLIT_FEE_ADDRESS = "splitFeeAddress"
	PROMISE_POS       = "promisePos"
	PRE_CONFIG        = "preConfig"
	GAS_ADDRESS       = "gasAddress"

	//global
	PRECISE            = 1000000
	NEW_VERSION_VIEW   = 6
	NEW_VERSION_BLOCK  = 414100
	NEW_WITHDRAW_BLOCK = 2800000
)

Variables

View Source
var AUTHORIZE_INFO_POOL = []byte{118, 111, 116, 101, 73, 110, 102, 111, 80, 111, 111, 108}
View Source
var MIN_CANDIDATE_FEE = uint64(math.Pow(10, constants.GAS_DECIMALS))

candidate fee must >= 1 ONG

View Source
var Xi = []uint32{}/* 101 elements not displayed */

Functions

func AddInitPos

func AddInitPos(native *native.NativeService) ([]byte, error)

add init pos of a node

func ApproveCandidate

func ApproveCandidate(native *native.NativeService) ([]byte, error)

Approve a registered candidate node Only approved candidate node can participate in consensus selection and get ong bonus.

func AuthorizeForPeer

func AuthorizeForPeer(native *native.NativeService) ([]byte, error)

Authorize for a node by depositing ONT in this governance contract, used by users

func AuthorizeForPeerTransferFrom

func AuthorizeForPeerTransferFrom(native *native.NativeService) ([]byte, error)

Authorize for a node by depositing ONT in this governance contract, used by contracts

func BlackNode

func BlackNode(native *native.NativeService) ([]byte, error)

Put a node into black list, remove node from pool Whole of initPos of black node will be punished, and several percent of authorize deposit will be punished too. Node in black list can't be registered.

func ChangeMaxAuthorization

func ChangeMaxAuthorization(native *native.NativeService) ([]byte, error)

Change the status if node can receive authorization from ont holders

func CheckVBFTConfig

func CheckVBFTConfig(configuration *config.VBFTConfig) error

func CommitDpos

func CommitDpos(native *native.NativeService) ([]byte, error)

Go to next consensus epoch

func GetBytesUint32

func GetBytesUint32(b []byte) (uint32, error)

func GetBytesUint64

func GetBytesUint64(b []byte) (uint64, error)

func GetUint32Bytes

func GetUint32Bytes(num uint32) ([]byte, error)

func GetUint64Bytes

func GetUint64Bytes(num uint64) []byte

func GetView

func GetView(native *native.NativeService, contract common.Address) (uint32, error)

func InitConfig

func InitConfig(native *native.NativeService) ([]byte, error)

Init governance contract, include vbft config, global param and ontid admin.

func InitGovernance

func InitGovernance()

Init governance contract address

func QuitNode

func QuitNode(native *native.NativeService) ([]byte, error)

Quit a registered node, used by node owner. Remove node from pool and unfreeze deposit next epoch(candidate node) / next next epoch(consensus node)

func ReduceInitPos

func ReduceInitPos(native *native.NativeService) ([]byte, error)

reduce init pos of a node

func RegisterCandidate

func RegisterCandidate(native *native.NativeService) ([]byte, error)

Register a candidate node, used by users. Users can register a candidate node with a authorized ontid. Candidate node can be authorized and become consensus node according to their pos. Candidate node can get ong bonus according to their pos.

func RegisterCandidateTransferFrom

func RegisterCandidateTransferFrom(native *native.NativeService) ([]byte, error)

Register a candidate node, used by contracts. Contracts can register a candidate node with a authorized ontid after approving ont to governance contract before invoke this function. Candidate node can be authorized and become consensus node according to their pos. Candidate node can get ong bonus according to their pos.

func RegisterGovernanceContract

func RegisterGovernanceContract(native *native.NativeService)

Register methods of governance contract

func RejectCandidate

func RejectCandidate(native *native.NativeService) ([]byte, error)

Reject a registered candidate node, remove node from pool and unfreeze deposit ont Only approved candidate node can participate in consensus selection and get ong bonus.

func SetGasAddress

func SetGasAddress(native *native.NativeService) ([]byte, error)

set gas address to receive 50% of gas fee

func SetPeerCost

func SetPeerCost(native *native.NativeService) ([]byte, error)

Set node cost, node can take some percentage of fee before split

func SetPromisePos

func SetPromisePos(native *native.NativeService) ([]byte, error)

set promise pos of a node

func TransferPenalty

func TransferPenalty(native *native.NativeService) ([]byte, error)

Transfer all punished ONT of a black node to a certain address

func UnAuthorizeForPeer

func UnAuthorizeForPeer(native *native.NativeService) ([]byte, error)

UnAuthorize for a node by redeeming ONT from this governance contract

func UnRegisterCandidate

func UnRegisterCandidate(native *native.NativeService) ([]byte, error)

Unregister a registered candidate node, will remove node from pool, and unfreeze deposit ont.

func UpdateConfig

func UpdateConfig(native *native.NativeService) ([]byte, error)

Update VBFT config

func UpdateGlobalParam

func UpdateGlobalParam(native *native.NativeService) ([]byte, error)

Update global params of this governance contract

func UpdateGlobalParam2

func UpdateGlobalParam2(native *native.NativeService) ([]byte, error)

Update global params of this governance contract

func UpdateSplitCurve

func UpdateSplitCurve(native *native.NativeService) ([]byte, error)

Update split curve

func WhiteNode

func WhiteNode(native *native.NativeService) ([]byte, error)

Remove a node from black list, allow it to be registered

func Withdraw

func Withdraw(native *native.NativeService) ([]byte, error)

Withdraw unfreezed ONT deposited in this governance contract.

func WithdrawFee

func WithdrawFee(native *native.NativeService) ([]byte, error)

Withdraw split fee of address

Types

type ApproveCandidateParam

type ApproveCandidateParam struct {
	PeerPubkey string
}

func (*ApproveCandidateParam) Deserialization

func (this *ApproveCandidateParam) Deserialization(source *common.ZeroCopySource) error

func (*ApproveCandidateParam) Serialization

func (this *ApproveCandidateParam) Serialization(sink *common.ZeroCopySink)

type AuthorizeForPeerParam

type AuthorizeForPeerParam struct {
	Address        common.Address
	PeerPubkeyList []string
	PosList        []uint32
}

func (*AuthorizeForPeerParam) Deserialization

func (this *AuthorizeForPeerParam) Deserialization(source *common.ZeroCopySource) error

func (*AuthorizeForPeerParam) Serialization

func (this *AuthorizeForPeerParam) Serialization(sink *common.ZeroCopySink) error

type AuthorizeInfo

type AuthorizeInfo struct {
	PeerPubkey           string
	Address              common.Address
	ConsensusPos         uint64 //pos deposit in consensus node
	CandidatePos         uint64 //pos deposit in candidate node
	NewPos               uint64 //deposit new pos to consensus or candidate node, it will be calculated in next epoch, you can withdrawal it at any time
	WithdrawConsensusPos uint64 //unAuthorized pos from consensus pos, frozen until next next epoch
	WithdrawCandidatePos uint64 //unAuthorized pos from candidate pos, frozen until next epoch
	WithdrawUnfreezePos  uint64 //unfrozen pos, can withdraw at any time
}

func (*AuthorizeInfo) Deserialization

func (this *AuthorizeInfo) Deserialization(source *common.ZeroCopySource) error

func (*AuthorizeInfo) Serialization

func (this *AuthorizeInfo) Serialization(sink *common.ZeroCopySink)

type BlackListItem

type BlackListItem struct {
	PeerPubkey string         //peerPubkey in black list
	Address    common.Address //the owner of this peer
	InitPos    uint64         //initPos of this peer
}

func (*BlackListItem) Deserialization

func (this *BlackListItem) Deserialization(source *common.ZeroCopySource) error

func (*BlackListItem) Serialization

func (this *BlackListItem) Serialization(sink *common.ZeroCopySink)

type BlackNodeParam

type BlackNodeParam struct {
	PeerPubkeyList []string
}

func (*BlackNodeParam) Deserialization

func (this *BlackNodeParam) Deserialization(source *common.ZeroCopySource) error

func (*BlackNodeParam) Serialization

func (this *BlackNodeParam) Serialization(sink *common.ZeroCopySink)

type CandidateSplitInfo

type CandidateSplitInfo struct {
	PeerPubkey string
	Address    common.Address
	InitPos    uint64
	Stake      uint64 //total stake, init pos + total pos
	S          uint64 //fee split weight of this peer
}

type ChangeInitPosParam

type ChangeInitPosParam struct {
	PeerPubkey string
	Address    common.Address
	Pos        uint32
}

func (*ChangeInitPosParam) Deserialization

func (this *ChangeInitPosParam) Deserialization(source *common.ZeroCopySource) error

func (*ChangeInitPosParam) Serialization

func (this *ChangeInitPosParam) Serialization(sink *common.ZeroCopySink)

type ChangeMaxAuthorizationParam

type ChangeMaxAuthorizationParam struct {
	PeerPubkey   string
	Address      common.Address
	MaxAuthorize uint32
}

func (*ChangeMaxAuthorizationParam) Deserialization

func (this *ChangeMaxAuthorizationParam) Deserialization(source *common.ZeroCopySource) error

func (*ChangeMaxAuthorizationParam) Serialization

func (this *ChangeMaxAuthorizationParam) Serialization(sink *common.ZeroCopySink)

type Configuration

type Configuration struct {
	N                    uint32
	C                    uint32
	K                    uint32
	L                    uint32
	BlockMsgDelay        uint32
	HashMsgDelay         uint32
	PeerHandshakeTimeout uint32
	MaxBlockChangeView   uint32
}

func (*Configuration) Deserialization

func (this *Configuration) Deserialization(source *common.ZeroCopySource) error

func (*Configuration) Serialization

func (this *Configuration) Serialization(sink *common.ZeroCopySink)

type GasAddress

type GasAddress struct {
	Address common.Address
}

func (*GasAddress) Deserialization

func (this *GasAddress) Deserialization(source *common.ZeroCopySource) error

func (*GasAddress) Serialization

func (this *GasAddress) Serialization(sink *common.ZeroCopySink)

type GlobalParam

type GlobalParam struct {
	CandidateFee uint64 //unit: 10^-9 ong
	MinInitStake uint32 //min init pos
	CandidateNum uint32 //num of candidate and consensus node
	PosLimit     uint32 //authorize pos limit is initPos*posLimit
	A            uint32 //fee split to all consensus node
	B            uint32 //fee split to all candidate node
	Yita         uint32 //split curve coefficient
	Penalty      uint32 //authorize pos penalty percentage
}

func (*GlobalParam) Deserialization

func (this *GlobalParam) Deserialization(source *common.ZeroCopySource) error

func (*GlobalParam) Serialization

func (this *GlobalParam) Serialization(sink *common.ZeroCopySink)

type GlobalParam2

type GlobalParam2 struct {
	MinAuthorizePos      uint32 //min ONT of each authorization, 500 default
	CandidateFeeSplitNum uint32 //num of peer can receive motivation(include consensus and candidate)
	DappFee              uint32 //fee split to dapp bonus
	Field2               []byte //reserved field
	Field3               []byte //reserved field
	Field4               []byte //reserved field
	Field5               []byte //reserved field
	Field6               []byte //reserved field
}

func (*GlobalParam2) Deserialization

func (this *GlobalParam2) Deserialization(source *common.ZeroCopySource) error

func (*GlobalParam2) Serialization

func (this *GlobalParam2) Serialization(sink *common.ZeroCopySink) error

type GovernanceView

type GovernanceView struct {
	View   uint32
	Height uint32
	TxHash common.Uint256
}

func GetGovernanceView

func GetGovernanceView(native *native.NativeService, contract common.Address) (*GovernanceView, error)

func (*GovernanceView) Deserialize

func (this *GovernanceView) Deserialize(r io.Reader) error

func (*GovernanceView) Serialize

func (this *GovernanceView) Serialize(w io.Writer) error

type PeerAttributes

type PeerAttributes struct {
	PeerPubkey   string
	MaxAuthorize uint64 //max authorzie pos this peer can receive(number of ont), set by peer owner
	T2PeerCost   uint64 //candidate or consensus node doesn't share income percent with authorize users, 100 means node will take all incomes, it will take effect in view T + 2
	T1PeerCost   uint64 //candidate or consensus node doesn't share income percent with authorize users, 100 means node will take all incomes, it will take effect in view T + 1
	TPeerCost    uint64 //candidate or consensus node doesn't share income percent with authorize users, 100 means node will take all incomes, it will take effect in view T
	Field1       []byte //reserved field
	Field2       []byte //reserved field
	Field3       []byte //reserved field
	Field4       []byte //reserved field
}

func (*PeerAttributes) Deserialization

func (this *PeerAttributes) Deserialization(source *common.ZeroCopySource) error

func (*PeerAttributes) Serialization

func (this *PeerAttributes) Serialization(sink *common.ZeroCopySink)

type PeerPoolItem

type PeerPoolItem struct {
	Index      uint32         //peer index
	PeerPubkey string         //peer pubkey
	Address    common.Address //peer owner
	Status     Status         //peer status
	InitPos    uint64         //peer initPos
	TotalPos   uint64         //total authorize pos this peer received
}

func (*PeerPoolItem) Deserialization

func (this *PeerPoolItem) Deserialization(source *common.ZeroCopySource) error

func (*PeerPoolItem) Serialization

func (this *PeerPoolItem) Serialization(sink *common.ZeroCopySink)

type PeerPoolList

type PeerPoolList struct {
	Peers []*PeerPoolItem
}

type PeerPoolMap

type PeerPoolMap struct {
	PeerPoolMap map[string]*PeerPoolItem
}

func GetPeerPoolMap

func GetPeerPoolMap(native *native.NativeService, contract common.Address, view uint32) (*PeerPoolMap, error)

func (*PeerPoolMap) Deserialization

func (this *PeerPoolMap) Deserialization(source *common.ZeroCopySource) error

func (*PeerPoolMap) Serialization

func (this *PeerPoolMap) Serialization(sink *common.ZeroCopySink) error

type PeerStakeInfo

type PeerStakeInfo struct {
	Index      uint32
	PeerPubkey string
	Stake      uint64
}

type PenaltyStake

type PenaltyStake struct {
	PeerPubkey   string //peer pubKey of penalty stake
	InitPos      uint64 //initPos penalty
	AuthorizePos uint64 //authorize pos penalty
	TimeOffset   uint32 //time used for calculate unbound ong
	Amount       uint64 //unbound ong that this penalty unbounded
}

func (*PenaltyStake) Deserialization

func (this *PenaltyStake) Deserialization(source *common.ZeroCopySource) error

func (*PenaltyStake) Serialization

func (this *PenaltyStake) Serialization(sink *common.ZeroCopySink)

type PreConfig

type PreConfig struct {
	Configuration *Configuration
	SetView       uint32
}

func (*PreConfig) Deserialization

func (this *PreConfig) Deserialization(source *common.ZeroCopySource) error

func (*PreConfig) Serialization

func (this *PreConfig) Serialization(sink *common.ZeroCopySink)

type PromisePos

type PromisePos struct {
	PeerPubkey string
	PromisePos uint64
}

func (*PromisePos) Deserialization

func (this *PromisePos) Deserialization(source *common.ZeroCopySource) error

func (*PromisePos) Serialization

func (this *PromisePos) Serialization(sink *common.ZeroCopySink)

type QuitNodeParam

type QuitNodeParam struct {
	PeerPubkey string
	Address    common.Address
}

func (*QuitNodeParam) Deserialization

func (this *QuitNodeParam) Deserialization(source *common.ZeroCopySource) error

func (*QuitNodeParam) Serialization

func (this *QuitNodeParam) Serialization(sink *common.ZeroCopySink)

type RegisterCandidateParam

type RegisterCandidateParam struct {
	PeerPubkey string
	Address    common.Address
	InitPos    uint32
	Caller     []byte
	KeyNo      uint32
}

func (*RegisterCandidateParam) Deserialization

func (this *RegisterCandidateParam) Deserialization(source *common.ZeroCopySource) error

func (*RegisterCandidateParam) Serialization

func (this *RegisterCandidateParam) Serialization(sink *common.ZeroCopySink)

type RejectCandidateParam

type RejectCandidateParam struct {
	PeerPubkey string
}

func (*RejectCandidateParam) Deserialization

func (this *RejectCandidateParam) Deserialization(source *common.ZeroCopySource) error

func (*RejectCandidateParam) Serialization

func (this *RejectCandidateParam) Serialization(sink *common.ZeroCopySink)

type SetPeerCostParam

type SetPeerCostParam struct {
	PeerPubkey string
	Address    common.Address
	PeerCost   uint32
}

func (*SetPeerCostParam) Deserialization

func (this *SetPeerCostParam) Deserialization(source *common.ZeroCopySource) error

func (*SetPeerCostParam) Serialization

func (this *SetPeerCostParam) Serialization(sink *common.ZeroCopySink) error

type SplitCurve

type SplitCurve struct {
	Yi []uint32
}

func (*SplitCurve) Deserialization

func (this *SplitCurve) Deserialization(source *common.ZeroCopySource) error

func (*SplitCurve) Serialization

func (this *SplitCurve) Serialization(sink *common.ZeroCopySink) error

type SplitFeeAddress

type SplitFeeAddress struct {
	Address common.Address
	Amount  uint64
}

func (*SplitFeeAddress) Deserialization

func (this *SplitFeeAddress) Deserialization(source *common.ZeroCopySource) error

func (*SplitFeeAddress) Serialization

func (this *SplitFeeAddress) Serialization(sink *common.ZeroCopySink)

type Status

type Status uint8
const (
	//status
	RegisterCandidateStatus Status = iota
	CandidateStatus
	ConsensusStatus
	QuitConsensusStatus
	QuitingStatus
	BlackStatus
)

func (*Status) Deserialization

func (this *Status) Deserialization(source *common.ZeroCopySource) error

func (*Status) Serialization

func (this *Status) Serialization(sink *common.ZeroCopySink)

type TotalStake

type TotalStake struct {
	Address    common.Address
	Stake      uint64
	TimeOffset uint32
}

func (*TotalStake) Deserialization

func (this *TotalStake) Deserialization(source *common.ZeroCopySource) error

func (*TotalStake) Serialization

func (this *TotalStake) Serialization(sink *common.ZeroCopySink)

type TransferPenaltyParam

type TransferPenaltyParam struct {
	PeerPubkey string
	Address    common.Address
}

func (*TransferPenaltyParam) Deserialization

func (this *TransferPenaltyParam) Deserialization(source *common.ZeroCopySource) error

func (*TransferPenaltyParam) Serialization

func (this *TransferPenaltyParam) Serialization(sink *common.ZeroCopySink)

type UnRegisterCandidateParam

type UnRegisterCandidateParam struct {
	PeerPubkey string
	Address    common.Address
}

func (*UnRegisterCandidateParam) Deserialization

func (this *UnRegisterCandidateParam) Deserialization(source *common.ZeroCopySource) error

func (*UnRegisterCandidateParam) Serialization

func (this *UnRegisterCandidateParam) Serialization(sink *common.ZeroCopySink)

type WhiteNodeParam

type WhiteNodeParam struct {
	PeerPubkey string
}

func (*WhiteNodeParam) Deserialization

func (this *WhiteNodeParam) Deserialization(source *common.ZeroCopySource) error

func (*WhiteNodeParam) Serialization

func (this *WhiteNodeParam) Serialization(sink *common.ZeroCopySink)

type WithdrawFeeParam

type WithdrawFeeParam struct {
	Address common.Address
}

func (*WithdrawFeeParam) Deserialization

func (this *WithdrawFeeParam) Deserialization(source *common.ZeroCopySource) error

func (*WithdrawFeeParam) Serialization

func (this *WithdrawFeeParam) Serialization(sink *common.ZeroCopySink)

type WithdrawOngParam

type WithdrawOngParam struct {
	Address common.Address
}

func (*WithdrawOngParam) Deserialization

func (this *WithdrawOngParam) Deserialization(source *common.ZeroCopySource) error

func (*WithdrawOngParam) Serialization

func (this *WithdrawOngParam) Serialization(sink *common.ZeroCopySink)

type WithdrawParam

type WithdrawParam struct {
	Address        common.Address
	PeerPubkeyList []string
	WithdrawList   []uint32
}

func (*WithdrawParam) Deserialization

func (this *WithdrawParam) Deserialization(source *common.ZeroCopySource) error

func (*WithdrawParam) Serialization

func (this *WithdrawParam) Serialization(sink *common.ZeroCopySink) error

Jump to

Keyboard shortcuts

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