Documentation ¶
Index ¶
- Constants
- Variables
- func GetMaxWeight(chainState state.Chain, validator *state.Staker, startTime time.Time, ...) (uint64, error)
- func GetNextStakerChangeTime(state state.Chain) (time.Time, error)
- func GetRewardsCalculator(backend *Backend, parentState state.Chain, subnetID ids.ID) (reward.Calculator, error)
- func GetTransformSubnetTx(chain state.Chain, subnetID ids.ID) (*txs.TransformSubnetTx, error)
- func GetValidator(state state.Chain, subnetID ids.ID, nodeID ids.NodeID) (*state.Staker, error)
- func VerifyNewChainTime(newChainTime, nextStakerChangeTime, now time.Time) error
- type AtomicTxExecutor
- func (*AtomicTxExecutor) AddDelegatorTx(*txs.AddDelegatorTx) error
- func (*AtomicTxExecutor) AddPermissionlessDelegatorTx(*txs.AddPermissionlessDelegatorTx) error
- func (*AtomicTxExecutor) AddPermissionlessValidatorTx(*txs.AddPermissionlessValidatorTx) error
- func (*AtomicTxExecutor) AddSubnetValidatorTx(*txs.AddSubnetValidatorTx) error
- func (*AtomicTxExecutor) AddValidatorTx(*txs.AddValidatorTx) error
- func (*AtomicTxExecutor) AdvanceTimeTx(*txs.AdvanceTimeTx) error
- func (*AtomicTxExecutor) BaseTx(*txs.BaseTx) error
- func (*AtomicTxExecutor) CreateChainTx(*txs.CreateChainTx) error
- func (*AtomicTxExecutor) CreateSubnetTx(*txs.CreateSubnetTx) error
- func (e *AtomicTxExecutor) ExportTx(tx *txs.ExportTx) error
- func (e *AtomicTxExecutor) ImportTx(tx *txs.ImportTx) error
- func (*AtomicTxExecutor) RemoveSubnetValidatorTx(*txs.RemoveSubnetValidatorTx) error
- func (*AtomicTxExecutor) RewardValidatorTx(*txs.RewardValidatorTx) error
- func (*AtomicTxExecutor) TransferSubnetOwnershipTx(*txs.TransferSubnetOwnershipTx) error
- func (*AtomicTxExecutor) TransformSubnetTx(*txs.TransformSubnetTx) error
- type Backend
- type MempoolTxVerifier
- func (v *MempoolTxVerifier) AddDelegatorTx(tx *txs.AddDelegatorTx) error
- func (v *MempoolTxVerifier) AddPermissionlessDelegatorTx(tx *txs.AddPermissionlessDelegatorTx) error
- func (v *MempoolTxVerifier) AddPermissionlessValidatorTx(tx *txs.AddPermissionlessValidatorTx) error
- func (v *MempoolTxVerifier) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
- func (v *MempoolTxVerifier) AddValidatorTx(tx *txs.AddValidatorTx) error
- func (*MempoolTxVerifier) AdvanceTimeTx(*txs.AdvanceTimeTx) error
- func (v *MempoolTxVerifier) BaseTx(tx *txs.BaseTx) error
- func (v *MempoolTxVerifier) CreateChainTx(tx *txs.CreateChainTx) error
- func (v *MempoolTxVerifier) CreateSubnetTx(tx *txs.CreateSubnetTx) error
- func (v *MempoolTxVerifier) ExportTx(tx *txs.ExportTx) error
- func (v *MempoolTxVerifier) ImportTx(tx *txs.ImportTx) error
- func (v *MempoolTxVerifier) RemoveSubnetValidatorTx(tx *txs.RemoveSubnetValidatorTx) error
- func (*MempoolTxVerifier) RewardValidatorTx(*txs.RewardValidatorTx) error
- func (v *MempoolTxVerifier) TransferSubnetOwnershipTx(tx *txs.TransferSubnetOwnershipTx) error
- func (v *MempoolTxVerifier) TransformSubnetTx(tx *txs.TransformSubnetTx) error
- type ProposalTxExecutor
- func (e *ProposalTxExecutor) AddDelegatorTx(tx *txs.AddDelegatorTx) error
- func (*ProposalTxExecutor) AddPermissionlessDelegatorTx(*txs.AddPermissionlessDelegatorTx) error
- func (*ProposalTxExecutor) AddPermissionlessValidatorTx(*txs.AddPermissionlessValidatorTx) error
- func (e *ProposalTxExecutor) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
- func (e *ProposalTxExecutor) AddValidatorTx(tx *txs.AddValidatorTx) error
- func (e *ProposalTxExecutor) AdvanceTimeTx(tx *txs.AdvanceTimeTx) error
- func (*ProposalTxExecutor) BaseTx(*txs.BaseTx) error
- func (*ProposalTxExecutor) CreateChainTx(*txs.CreateChainTx) error
- func (*ProposalTxExecutor) CreateSubnetTx(*txs.CreateSubnetTx) error
- func (*ProposalTxExecutor) ExportTx(*txs.ExportTx) error
- func (*ProposalTxExecutor) ImportTx(*txs.ImportTx) error
- func (*ProposalTxExecutor) RemoveSubnetValidatorTx(*txs.RemoveSubnetValidatorTx) error
- func (e *ProposalTxExecutor) RewardValidatorTx(tx *txs.RewardValidatorTx) error
- func (*ProposalTxExecutor) TransferSubnetOwnershipTx(*txs.TransferSubnetOwnershipTx) error
- func (*ProposalTxExecutor) TransformSubnetTx(*txs.TransformSubnetTx) error
- type StandardTxExecutor
- func (e *StandardTxExecutor) AddDelegatorTx(tx *txs.AddDelegatorTx) error
- func (e *StandardTxExecutor) AddPermissionlessDelegatorTx(tx *txs.AddPermissionlessDelegatorTx) error
- func (e *StandardTxExecutor) AddPermissionlessValidatorTx(tx *txs.AddPermissionlessValidatorTx) error
- func (e *StandardTxExecutor) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
- func (e *StandardTxExecutor) AddValidatorTx(tx *txs.AddValidatorTx) error
- func (*StandardTxExecutor) AdvanceTimeTx(*txs.AdvanceTimeTx) error
- func (e *StandardTxExecutor) BaseTx(tx *txs.BaseTx) error
- func (e *StandardTxExecutor) CreateChainTx(tx *txs.CreateChainTx) error
- func (e *StandardTxExecutor) CreateSubnetTx(tx *txs.CreateSubnetTx) error
- func (e *StandardTxExecutor) ExportTx(tx *txs.ExportTx) error
- func (e *StandardTxExecutor) ImportTx(tx *txs.ImportTx) error
- func (e *StandardTxExecutor) RemoveSubnetValidatorTx(tx *txs.RemoveSubnetValidatorTx) error
- func (*StandardTxExecutor) RewardValidatorTx(*txs.RewardValidatorTx) error
- func (e *StandardTxExecutor) TransferSubnetOwnershipTx(tx *txs.TransferSubnetOwnershipTx) error
- func (e *StandardTxExecutor) TransformSubnetTx(tx *txs.TransformSubnetTx) error
- type StateChanges
Constants ¶
const ( // Maximum future start time for staking/delegating MaxFutureStartTime = 24 * 7 * 2 * time.Hour // SyncBound is the synchrony bound used for safe decision making SyncBound = 10 * time.Second MaxValidatorWeightFactor = 5 )
Variables ¶
var ( ErrRemoveStakerTooEarly = errors.New("attempting to remove staker before their end time") ErrRemoveWrongStaker = errors.New("attempting to remove wrong staker") ErrChildBlockNotAfterParent = errors.New("proposed timestamp not after current chain time") ErrInvalidState = errors.New("generated output isn't valid state") ErrShouldBePermissionlessStaker = errors.New("expected permissionless staker") ErrWrongTxType = errors.New("wrong transaction type") ErrInvalidID = errors.New("invalid ID") ErrProposedAddStakerTxAfterBanff = errors.New("staker transaction proposed after Banff") ErrAdvanceTimeTxIssuedAfterBanff = errors.New("AdvanceTimeTx issued after Banff") )
var ( ErrWeightTooSmall = errors.New("weight of this validator is too low") ErrWeightTooLarge = errors.New("weight of this validator is too large") ErrInsufficientDelegationFee = errors.New("staker charges an insufficient delegation fee") ErrStakeTooShort = errors.New("staking period is too short") ErrStakeTooLong = errors.New("staking period is too long") ErrFlowCheckFailed = errors.New("flow check failed") ErrFutureStakeTime = fmt.Errorf("staker is attempting to start staking more than %s ahead of the current chain time", MaxFutureStartTime) ErrNotValidator = errors.New("isn't a current or pending validator") ErrRemovePermissionlessValidator = errors.New("attempting to remove permissionless validator") ErrStakeOverflow = errors.New("validator stake exceeds limit") ErrPeriodMismatch = errors.New("proposed staking period is not inside dependant staking period") ErrOverDelegated = errors.New("validator would be over delegated") ErrIsNotTransformSubnetTx = errors.New("is not a transform subnet tx") ErrTimestampNotBeforeStartTime = errors.New("chain timestamp not before start time") ErrAlreadyValidator = errors.New("already a validator") ErrDuplicateValidator = errors.New("duplicate validator") ErrDelegateToPermissionedValidator = errors.New("delegation to permissioned validator") ErrWrongStakedAssetID = errors.New("incorrect staked assetID") ErrDurangoUpgradeNotActive = errors.New("attempting to use a Durango-upgrade feature prior to activation") )
var ( ErrChildBlockAfterStakerChangeTime = errors.New("proposed timestamp later than next staker change time") ErrChildBlockBeyondSyncBound = errors.New("proposed timestamp is too far in the future relative to local time") )
Functions ¶
func GetMaxWeight ¶
func GetMaxWeight( chainState state.Chain, validator *state.Staker, startTime time.Time, endTime time.Time, ) (uint64, error)
GetMaxWeight returns the maximum total weight of the [validator], including its own weight, between [startTime] and [endTime]. The weight changes are applied in the order they will be applied as chain time advances. Invariant: - [validator.StartTime] <= [startTime] < [endTime] <= [validator.EndTime]
func GetNextStakerChangeTime ¶
GetNextStakerChangeTime returns the next time a staker will be either added or removed to/from the current validator set.
func GetRewardsCalculator ¶
func GetTransformSubnetTx ¶
func GetValidator ¶
GetValidator returns information about the given validator, which may be a current validator or pending validator.
func VerifyNewChainTime ¶
VerifyNewChainTime returns nil if the [newChainTime] is a valid chain time given the wall clock time ([now]) and when the next staking set change occurs ([nextStakerChangeTime]). Requires:
- [newChainTime] <= [nextStakerChangeTime]: so that no staking set changes are skipped.
- [newChainTime] <= [now] + SyncBound: to ensure chain time approximates "real" time.
Types ¶
type AtomicTxExecutor ¶
type AtomicTxExecutor struct { // inputs, to be filled before visitor methods are called *Backend ParentID ids.ID StateVersions state.Versions Tx *txs.Tx // outputs of visitor execution OnAccept state.Diff Inputs set.Set[ids.ID] AtomicRequests map[ids.ID]*atomic.Requests }
atomicTxExecutor is used to execute atomic transactions pre-AP5. After AP5 the execution was moved to be performed inside of the standardTxExecutor.
func (*AtomicTxExecutor) AddDelegatorTx ¶
func (*AtomicTxExecutor) AddDelegatorTx(*txs.AddDelegatorTx) error
func (*AtomicTxExecutor) AddPermissionlessDelegatorTx ¶
func (*AtomicTxExecutor) AddPermissionlessDelegatorTx(*txs.AddPermissionlessDelegatorTx) error
func (*AtomicTxExecutor) AddPermissionlessValidatorTx ¶
func (*AtomicTxExecutor) AddPermissionlessValidatorTx(*txs.AddPermissionlessValidatorTx) error
func (*AtomicTxExecutor) AddSubnetValidatorTx ¶
func (*AtomicTxExecutor) AddSubnetValidatorTx(*txs.AddSubnetValidatorTx) error
func (*AtomicTxExecutor) AddValidatorTx ¶
func (*AtomicTxExecutor) AddValidatorTx(*txs.AddValidatorTx) error
func (*AtomicTxExecutor) AdvanceTimeTx ¶
func (*AtomicTxExecutor) AdvanceTimeTx(*txs.AdvanceTimeTx) error
func (*AtomicTxExecutor) CreateChainTx ¶
func (*AtomicTxExecutor) CreateChainTx(*txs.CreateChainTx) error
func (*AtomicTxExecutor) CreateSubnetTx ¶
func (*AtomicTxExecutor) CreateSubnetTx(*txs.CreateSubnetTx) error
func (*AtomicTxExecutor) RemoveSubnetValidatorTx ¶
func (*AtomicTxExecutor) RemoveSubnetValidatorTx(*txs.RemoveSubnetValidatorTx) error
func (*AtomicTxExecutor) RewardValidatorTx ¶
func (*AtomicTxExecutor) RewardValidatorTx(*txs.RewardValidatorTx) error
func (*AtomicTxExecutor) TransferSubnetOwnershipTx ¶
func (*AtomicTxExecutor) TransferSubnetOwnershipTx(*txs.TransferSubnetOwnershipTx) error
func (*AtomicTxExecutor) TransformSubnetTx ¶
func (*AtomicTxExecutor) TransformSubnetTx(*txs.TransformSubnetTx) error
type MempoolTxVerifier ¶
func (*MempoolTxVerifier) AddDelegatorTx ¶
func (v *MempoolTxVerifier) AddDelegatorTx(tx *txs.AddDelegatorTx) error
func (*MempoolTxVerifier) AddPermissionlessDelegatorTx ¶
func (v *MempoolTxVerifier) AddPermissionlessDelegatorTx(tx *txs.AddPermissionlessDelegatorTx) error
func (*MempoolTxVerifier) AddPermissionlessValidatorTx ¶
func (v *MempoolTxVerifier) AddPermissionlessValidatorTx(tx *txs.AddPermissionlessValidatorTx) error
func (*MempoolTxVerifier) AddSubnetValidatorTx ¶
func (v *MempoolTxVerifier) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
func (*MempoolTxVerifier) AddValidatorTx ¶
func (v *MempoolTxVerifier) AddValidatorTx(tx *txs.AddValidatorTx) error
func (*MempoolTxVerifier) AdvanceTimeTx ¶
func (*MempoolTxVerifier) AdvanceTimeTx(*txs.AdvanceTimeTx) error
func (*MempoolTxVerifier) CreateChainTx ¶
func (v *MempoolTxVerifier) CreateChainTx(tx *txs.CreateChainTx) error
func (*MempoolTxVerifier) CreateSubnetTx ¶
func (v *MempoolTxVerifier) CreateSubnetTx(tx *txs.CreateSubnetTx) error
func (*MempoolTxVerifier) RemoveSubnetValidatorTx ¶
func (v *MempoolTxVerifier) RemoveSubnetValidatorTx(tx *txs.RemoveSubnetValidatorTx) error
func (*MempoolTxVerifier) RewardValidatorTx ¶
func (*MempoolTxVerifier) RewardValidatorTx(*txs.RewardValidatorTx) error
func (*MempoolTxVerifier) TransferSubnetOwnershipTx ¶
func (v *MempoolTxVerifier) TransferSubnetOwnershipTx(tx *txs.TransferSubnetOwnershipTx) error
func (*MempoolTxVerifier) TransformSubnetTx ¶
func (v *MempoolTxVerifier) TransformSubnetTx(tx *txs.TransformSubnetTx) error
type ProposalTxExecutor ¶
type ProposalTxExecutor struct { // inputs, to be filled before visitor methods are called *Backend Tx *txs.Tx // [OnCommitState] is the state used for validation. // [OnCommitState] is modified by this struct's methods to // reflect changes made to the state if the proposal is committed. // // Invariant: Both [OnCommitState] and [OnAbortState] represent the same // state when provided to this struct. OnCommitState state.Diff // [OnAbortState] is modified by this struct's methods to // reflect changes made to the state if the proposal is aborted. OnAbortState state.Diff // outputs populated by this struct's methods: // // [PrefersCommit] is true iff this node initially prefers to // commit this block transaction. PrefersCommit bool }
func (*ProposalTxExecutor) AddDelegatorTx ¶
func (e *ProposalTxExecutor) AddDelegatorTx(tx *txs.AddDelegatorTx) error
func (*ProposalTxExecutor) AddPermissionlessDelegatorTx ¶
func (*ProposalTxExecutor) AddPermissionlessDelegatorTx(*txs.AddPermissionlessDelegatorTx) error
func (*ProposalTxExecutor) AddPermissionlessValidatorTx ¶
func (*ProposalTxExecutor) AddPermissionlessValidatorTx(*txs.AddPermissionlessValidatorTx) error
func (*ProposalTxExecutor) AddSubnetValidatorTx ¶
func (e *ProposalTxExecutor) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
func (*ProposalTxExecutor) AddValidatorTx ¶
func (e *ProposalTxExecutor) AddValidatorTx(tx *txs.AddValidatorTx) error
func (*ProposalTxExecutor) AdvanceTimeTx ¶
func (e *ProposalTxExecutor) AdvanceTimeTx(tx *txs.AdvanceTimeTx) error
func (*ProposalTxExecutor) CreateChainTx ¶
func (*ProposalTxExecutor) CreateChainTx(*txs.CreateChainTx) error
func (*ProposalTxExecutor) CreateSubnetTx ¶
func (*ProposalTxExecutor) CreateSubnetTx(*txs.CreateSubnetTx) error
func (*ProposalTxExecutor) RemoveSubnetValidatorTx ¶
func (*ProposalTxExecutor) RemoveSubnetValidatorTx(*txs.RemoveSubnetValidatorTx) error
func (*ProposalTxExecutor) RewardValidatorTx ¶
func (e *ProposalTxExecutor) RewardValidatorTx(tx *txs.RewardValidatorTx) error
func (*ProposalTxExecutor) TransferSubnetOwnershipTx ¶
func (*ProposalTxExecutor) TransferSubnetOwnershipTx(*txs.TransferSubnetOwnershipTx) error
func (*ProposalTxExecutor) TransformSubnetTx ¶
func (*ProposalTxExecutor) TransformSubnetTx(*txs.TransformSubnetTx) error
type StandardTxExecutor ¶
type StandardTxExecutor struct { // inputs, to be filled before visitor methods are called *Backend State state.Diff // state is expected to be modified Tx *txs.Tx // outputs of visitor execution OnAccept func() // may be nil Inputs set.Set[ids.ID] AtomicRequests map[ids.ID]*atomic.Requests // may be nil }
func (*StandardTxExecutor) AddDelegatorTx ¶
func (e *StandardTxExecutor) AddDelegatorTx(tx *txs.AddDelegatorTx) error
func (*StandardTxExecutor) AddPermissionlessDelegatorTx ¶
func (e *StandardTxExecutor) AddPermissionlessDelegatorTx(tx *txs.AddPermissionlessDelegatorTx) error
func (*StandardTxExecutor) AddPermissionlessValidatorTx ¶
func (e *StandardTxExecutor) AddPermissionlessValidatorTx(tx *txs.AddPermissionlessValidatorTx) error
func (*StandardTxExecutor) AddSubnetValidatorTx ¶
func (e *StandardTxExecutor) AddSubnetValidatorTx(tx *txs.AddSubnetValidatorTx) error
func (*StandardTxExecutor) AddValidatorTx ¶
func (e *StandardTxExecutor) AddValidatorTx(tx *txs.AddValidatorTx) error
func (*StandardTxExecutor) AdvanceTimeTx ¶
func (*StandardTxExecutor) AdvanceTimeTx(*txs.AdvanceTimeTx) error
func (*StandardTxExecutor) CreateChainTx ¶
func (e *StandardTxExecutor) CreateChainTx(tx *txs.CreateChainTx) error
func (*StandardTxExecutor) CreateSubnetTx ¶
func (e *StandardTxExecutor) CreateSubnetTx(tx *txs.CreateSubnetTx) error
func (*StandardTxExecutor) RemoveSubnetValidatorTx ¶
func (e *StandardTxExecutor) RemoveSubnetValidatorTx(tx *txs.RemoveSubnetValidatorTx) error
Verifies a *txs.RemoveSubnetValidatorTx and, if it passes, executes it on [e.State]. For verification rules, see [verifyRemoveSubnetValidatorTx]. This transaction will result in [tx.NodeID] being removed as a validator of [tx.SubnetID]. Note: [tx.NodeID] may be either a current or pending validator.
func (*StandardTxExecutor) RewardValidatorTx ¶
func (*StandardTxExecutor) RewardValidatorTx(*txs.RewardValidatorTx) error
func (*StandardTxExecutor) TransferSubnetOwnershipTx ¶
func (e *StandardTxExecutor) TransferSubnetOwnershipTx(tx *txs.TransferSubnetOwnershipTx) error
Verifies a *txs.TransferSubnetOwnershipTx and, if it passes, executes it on [e.State]. For verification rules, see [verifyTransferSubnetOwnershipTx]. This transaction will result in the ownership of [tx.Subnet] being transferred to [tx.Owner].
func (*StandardTxExecutor) TransformSubnetTx ¶
func (e *StandardTxExecutor) TransformSubnetTx(tx *txs.TransformSubnetTx) error
type StateChanges ¶
func AdvanceTimeTo ¶
func AdvanceTimeTo( backend *Backend, parentState state.Chain, newChainTime time.Time, ) (StateChanges, error)
AdvanceTimeTo does not modify [parentState]. Instead it returns all the StateChanges caused by advancing the chain time to the [newChainTime].