staking

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: May 14, 2020 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HandleCreateStake       = "createStake"
	HandleUnstake           = "unstake"
	HandleWithdrawStake     = "withdrawStake"
	HandleChangeCandidate   = "changeCandidate"
	HandleTransferStake     = "transferStake"
	HandleDepositToStake    = "depositToStake"
	HandleRestake           = "restake"
	HandleCandidateRegister = "candidateRegister"
	HandleCandidateUpdate   = "candidateUpdate"
)

constants

View Source
const (

	// StakingNameSpace is the bucket name for staking state
	StakingNameSpace = "Staking"

	// CandidateNameSpace is the bucket name for candidate state
	CandidateNameSpace = "Candidate"
)

Variables

View Source
var (
	ErrTypeAssertion = errors.New("failed type assertion")
	TotalBucketKey   = append([]byte{_const}, []byte("totalBucket")...)
)

Errors

View Source
var (
	ErrNilAction           = errors.New("action is nil")
	ErrInvalidAmount       = errors.New("invalid staking amount")
	ErrInvalidCanName      = errors.New("invalid candidate name")
	ErrInvalidOwner        = errors.New("invalid owner address")
	ErrInvalidOperator     = errors.New("invalid operator address")
	ErrInvalidReward       = errors.New("invalid reward address")
	ErrInvalidSelfStkIndex = errors.New("invalid self-staking bucket index")
	ErrMissingField        = errors.New("missing data field")
)

Errors

View Source
var (
	ErrNilParameters = errors.New("parameter is nil")
)

Errors and vars

Functions

func BucketIndexFromReceiptLog added in v1.0.0

func BucketIndexFromReceiptLog(log *iotextypes.Log) (uint64, bool)

BucketIndexFromReceiptLog extracts bucket index from log

Types

type BucketIndices

type BucketIndices []uint64

BucketIndices defines the array of bucket index for a

func (*BucketIndices) Deserialize

func (bis *BucketIndices) Deserialize(data []byte) error

Deserialize deserializes bytes into bucket indices

func (*BucketIndices) LoadProto

func (bis *BucketIndices) LoadProto(bucketIndicesPb *stakingpb.BucketIndices) error

LoadProto converts protobuf to bucket indices

func (*BucketIndices) Proto

func (bis *BucketIndices) Proto() *stakingpb.BucketIndices

Proto converts bucket indices to protobuf

func (*BucketIndices) Serialize

func (bis *BucketIndices) Serialize() ([]byte, error)

Serialize serializes bucket indices into bytes

type Candidate

type Candidate struct {
	Owner              address.Address
	Operator           address.Address
	Reward             address.Address
	Name               string
	Votes              *big.Int
	SelfStakeBucketIdx uint64
	SelfStake          *big.Int
}

Candidate represents the candidate

func (*Candidate) AddSelfStake

func (d *Candidate) AddSelfStake(amount *big.Int) error

AddSelfStake adds self stake

func (*Candidate) AddVote

func (d *Candidate) AddVote(amount *big.Int) error

AddVote adds vote

func (*Candidate) Clone

func (d *Candidate) Clone() *Candidate

Clone returns a copy

func (*Candidate) Collision added in v1.0.0

func (d *Candidate) Collision(c *Candidate) error

Collision checks collsion of 2 candidates

func (*Candidate) Deserialize

func (d *Candidate) Deserialize(buf []byte) error

Deserialize deserializes bytes to candidate

func (*Candidate) Equal added in v1.0.0

func (d *Candidate) Equal(c *Candidate) bool

Equal tests equality of 2 candidates

func (*Candidate) Serialize

func (d *Candidate) Serialize() ([]byte, error)

Serialize serializes candidate to bytes

func (*Candidate) SubSelfStake

func (d *Candidate) SubSelfStake(amount *big.Int) error

SubSelfStake subtracts self stake

func (*Candidate) SubVote

func (d *Candidate) SubVote(amount *big.Int) error

SubVote subtracts vote

func (*Candidate) Validate added in v1.0.0

func (d *Candidate) Validate() error

Validate does the sanity check

type CandidateCenter

type CandidateCenter interface {
	Size() int
	All() CandidateList
	Base() CandidateCenter
	Delta() CandidateList
	SetDelta(CandidateList) error
	Commit() error
	ContainsName(string) bool
	ContainsOwner(address.Address) bool
	ContainsOperator(address.Address) bool
	ContainsSelfStakingBucket(uint64) bool
	GetByName(string) *Candidate
	GetByOwner(address.Address) *Candidate
	GetBySelfStakingIndex(uint64) *Candidate
	Upsert(*Candidate) error
}

CandidateCenter is the candidate center

func NewCandidateCenter

func NewCandidateCenter(all CandidateList) (CandidateCenter, error)

NewCandidateCenter creates an instance of candCenter

type CandidateList

type CandidateList []*Candidate

CandidateList is a list of candidates which is sortable

func (*CandidateList) Deserialize

func (l *CandidateList) Deserialize(buf []byte) error

Deserialize deserializes bytes to list of candidates

func (CandidateList) Len

func (l CandidateList) Len() int

func (CandidateList) Less

func (l CandidateList) Less(i, j int) bool

func (CandidateList) Serialize added in v1.0.0

func (l CandidateList) Serialize() ([]byte, error)

Serialize serializes candidate to bytes

func (CandidateList) Swap

func (l CandidateList) Swap(i, j int)

type CandidateStateManager added in v1.0.0

type CandidateStateManager interface {
	protocol.StateManager
	// candidate-related
	Size() int
	ContainsName(string) bool
	ContainsOwner(address.Address) bool
	ContainsOperator(address.Address) bool
	ContainsSelfStakingBucket(uint64) bool
	GetByName(string) *Candidate
	GetByOwner(address.Address) *Candidate
	GetBySelfStakingIndex(uint64) *Candidate
	Upsert(*Candidate) error
	Commit() error
}

CandidateStateManager is candidate manager on top of StateMangaer

func NewCandidateStateManager added in v1.0.0

func NewCandidateStateManager(sm protocol.StateManager, c CandidateCenter) (CandidateStateManager, error)

NewCandidateStateManager returns a new CandidateStateManager instance

type Configuration

type Configuration struct {
	VoteWeightCalConsts   genesis.VoteWeightCalConsts
	RegistrationConsts    RegistrationConsts
	WithdrawWaitingPeriod time.Duration
	MinStakeAmount        *big.Int
	BootstrapCandidates   []genesis.BootstrapCandidate
}

Configuration is the staking protocol configuration.

type DepositGas

type DepositGas func(ctx context.Context, sm protocol.StateManager, amount *big.Int) error

DepositGas deposits gas to some pool

type Protocol

type Protocol struct {
	// contains filtered or unexported fields
}

Protocol defines the protocol of handling staking

func NewProtocol

func NewProtocol(depositGas DepositGas, cfg genesis.Staking) (*Protocol, error)

NewProtocol instantiates the protocol of staking

func (*Protocol) ActiveCandidates

func (p *Protocol) ActiveCandidates(ctx context.Context, sr protocol.StateReader, height uint64) (state.CandidateList, error)

ActiveCandidates returns all active candidates in candidate center

func (*Protocol) Commit added in v1.0.0

func (p *Protocol) Commit(ctx context.Context, sm protocol.StateManager) error

Commit commits the last change

func (*Protocol) CreateGenesisStates

func (p *Protocol) CreateGenesisStates(
	ctx context.Context,
	sm protocol.StateManager,
) error

CreateGenesisStates is used to setup BootstrapCandidates from genesis config.

func (*Protocol) ForceRegister

func (p *Protocol) ForceRegister(r *protocol.Registry) error

ForceRegister registers the protocol with a unique ID and force replacing the previous protocol if it exists

func (*Protocol) Handle

Handle handles a staking message

func (*Protocol) Name added in v1.0.0

func (p *Protocol) Name() string

Name returns the name of protocol

func (*Protocol) ReadState

func (p *Protocol) ReadState(ctx context.Context, sr protocol.StateReader, method []byte, args ...[]byte) ([]byte, error)

ReadState read the state on blockchain via protocol

func (*Protocol) Register

func (p *Protocol) Register(r *protocol.Registry) error

Register registers the protocol with a unique ID

func (*Protocol) Start

func (p *Protocol) Start(ctx context.Context, sr protocol.StateReader) (interface{}, error)

Start starts the protocol

func (*Protocol) Validate

func (p *Protocol) Validate(ctx context.Context, act action.Action, sr protocol.StateReader) error

Validate validates a staking message

type ReceiptError added in v1.0.0

type ReceiptError interface {
	Error() string
	ReceiptStatus() uint64
}

ReceiptError indicates a non-critical error with corresponding receipt status

type RegistrationConsts

type RegistrationConsts struct {
	Fee          *big.Int
	MinSelfStake *big.Int
}

RegistrationConsts are the registration fee and min self stake

type VoteBucket

type VoteBucket struct {
	Index            uint64
	Candidate        address.Address
	Owner            address.Address
	StakedAmount     *big.Int
	StakedDuration   time.Duration
	CreateTime       time.Time
	StakeStartTime   time.Time
	UnstakeStartTime time.Time
	AutoStake        bool
}

VoteBucket represents a vote

func NewVoteBucket

func NewVoteBucket(cand, owner address.Address, amount *big.Int, duration uint32, ctime time.Time, autoStake bool) *VoteBucket

NewVoteBucket creates a new vote bucket

func (*VoteBucket) Deserialize

func (vb *VoteBucket) Deserialize(buf []byte) error

Deserialize deserializes bytes into bucket

func (*VoteBucket) Serialize

func (vb *VoteBucket) Serialize() ([]byte, error)

Serialize serializes bucket into bytes

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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