Skip to main content

Module sui_system::validator

use std::address;
use std::ascii;
use std::bcs;
use std::internal;
use std::option;
use std::string;
use std::type_name;
use std::u128;
use std::u64;
use std::vector;
use sui::accumulator;
use sui::accumulator_settlement;
use sui::address;
use sui::bag;
use sui::balance;
use sui::bcs;
use sui::coin;
use sui::config;
use sui::deny_list;
use sui::dynamic_field;
use sui::dynamic_object_field;
use sui::event;
use sui::funds_accumulator;
use sui::hash;
use sui::hex;
use sui::object;
use sui::party;
use sui::protocol_config;
use sui::sui;
use sui::table;
use sui::transfer;
use sui::tx_context;
use sui::types;
use sui::url;
use sui::vec_map;
use sui::vec_set;
use sui_system::staking_pool;
use sui_system::validator_cap;

Struct ValidatorMetadata

public struct ValidatorMetadata has store
Click to open
Fields
sui_address: address
The Sui Address of the validator. This is the sender that created the Validator object, and also the address to send validator/coins to during withdraws.
protocol_pubkey_bytes: vector<u8>
The public key bytes corresponding to the private key that the validator holds to sign transactions. For now, this is the same as AuthorityName.
network_pubkey_bytes: vector<u8>
The public key bytes corresponding to the private key that the validator uses to establish TLS connections
worker_pubkey_bytes: vector<u8>
The public key bytes correstponding to the Narwhal Worker
proof_of_possession: vector<u8>
This is a proof that the validator has ownership of the private key
name: std::string::String
A unique human-readable name of this validator.
description: std::string::String
image_url: sui::url::Url
project_url: sui::url::Url
net_address: std::string::String
The network address of the validator (could also contain extra info such as port, DNS and etc.).
p2p_address: std::string::String
The address of the validator used for p2p activities such as state sync (could also contain extra info such as port, DNS and etc.).
primary_address: std::string::String
The address of the narwhal primary
worker_address: std::string::String
The address of the narwhal worker
next_epoch_protocol_pubkey_bytes: std::option::Option<vector<u8>>
"next_epoch" metadata only takes effects in the next epoch.
If none, current value will stay unchanged.
next_epoch_proof_of_possession: std::option::Option<vector<u8>>
next_epoch_network_pubkey_bytes: std::option::Option<vector<u8>>
next_epoch_worker_pubkey_bytes: std::option::Option<vector<u8>>
next_epoch_net_address: std::option::Option<std::string::String>
next_epoch_p2p_address: std::option::Option<std::string::String>
next_epoch_primary_address: std::option::Option<std::string::String>
next_epoch_worker_address: std::option::Option<std::string::String>
extra_fields: sui::bag::Bag
Any extra fields that's not defined statically.

Struct Validator

public struct Validator has store
Click to open
Fields
metadata: sui_system::validator::ValidatorMetadata
Summary of the validator.
voting_power: u64
The voting power of this validator, which might be different from its stake amount.
operation_cap_id: sui::object::ID
The ID of this validator's current valid UnverifiedValidatorOperationCap
gas_price: u64
Gas price quote, updated only at end of epoch.
staking_pool: sui_system::staking_pool::StakingPool
Staking pool for this validator.
commission_rate: u64
Commission rate of the validator, in basis point.
next_epoch_stake: u64
Total amount of stake that would be active in the next epoch.
next_epoch_gas_price: u64
This validator's gas price quote for the next epoch.
next_epoch_commission_rate: u64
The commission rate of the validator starting the next epoch, in basis point.
extra_fields: sui::bag::Bag
Any extra fields that's not defined statically.

Struct StakingRequestEvent

Event emitted when a new stake request is received.

public struct StakingRequestEvent has copy, drop
Click to open
Fields
pool_id: sui::object::ID
validator_address: address
staker_address: address
epoch: u64
amount: u64

Struct UnstakingRequestEvent

Event emitted when a new unstake request is received.

public struct UnstakingRequestEvent has copy, drop
Click to open
Fields
pool_id: sui::object::ID
validator_address: address
staker_address: address
stake_activation_epoch: u64
unstaking_epoch: u64
principal_amount: u64
reward_amount: u64

Struct ConvertingToFungibleStakedSuiEvent

Event emitted when a staked SUI is converted to a fungible staked SUI.

public struct ConvertingToFungibleStakedSuiEvent has copy, drop
Click to open
Fields
pool_id: sui::object::ID
stake_activation_epoch: u64
staked_sui_principal_amount: u64
fungible_staked_sui_amount: u64

Struct RedeemingFungibleStakedSuiEvent

Event emitted when a fungible staked SUI is redeemed.

public struct RedeemingFungibleStakedSuiEvent has copy, drop
Click to open
Fields
pool_id: sui::object::ID
fungible_staked_sui_amount: u64
sui_amount: u64

Constants

Invalid proof_of_possession field in ValidatorMetadata

const EInvalidProofOfPossession: u64 = 0;

Invalid pubkey_bytes field in ValidatorMetadata

const EMetadataInvalidPubkey: u64 = 1;

Invalid network_pubkey_bytes field in ValidatorMetadata

const EMetadataInvalidNetPubkey: u64 = 2;

Invalid worker_pubkey_bytes field in ValidatorMetadata

const EMetadataInvalidWorkerPubkey: u64 = 3;

Invalid net_address field in ValidatorMetadata

const EMetadataInvalidNetAddr: u64 = 4;

Invalid p2p_address field in ValidatorMetadata

const EMetadataInvalidP2pAddr: u64 = 5;

Invalid primary_address field in ValidatorMetadata

const EMetadataInvalidPrimaryAddr: u64 = 6;

Invalid worker_address field in ValidatorMetadata

const EMetadataInvalidWorkerAddr: u64 = 7;

Commission rate set by the validator is higher than the threshold

const ECommissionRateTooHigh: u64 = 8;

Validator Metadata is too long

const EValidatorMetadataExceedingLengthLimit: u64 = 9;

Intended validator is not a candidate one.

const ENotValidatorCandidate: u64 = 10;

Stake amount is invalid or wrong.

const EInvalidStakeAmount: u64 = 11;

Function called during non-genesis times.

const ECalledDuringNonGenesis: u64 = 12;

New Capability is not created by the validator itself

const ENewCapNotCreatedByValidatorItself: u64 = 100;

Capability code is not valid

const EInvalidCap: u64 = 101;

Validator trying to set gas price higher than threshold.

const EGasPriceHigherThanThreshold: u64 = 102;
const MAX_COMMISSION_RATE: u64 = 2000;
const MAX_VALIDATOR_METADATA_LENGTH: u64 = 256;

Max gas price a validator can set is 100K MIST.

const MAX_VALIDATOR_GAS_PRICE: u64 = 100000;

Function new_metadata

public(package) fun new_metadata(sui_address: address, protocol_pubkey_bytes: vector<u8>, network_pubkey_bytes: vector<u8>, worker_pubkey_bytes: vector<u8>, proof_of_possession: vector<u8>, name: std::string::String, description: std::string::String, image_url: sui::url::Url, project_url: sui::url::Url, net_address: std::string::String, p2p_address: std::string::String, primary_address: std::string::String, worker_address: std::string::String, extra_fields: sui::bag::Bag): sui_system::validator::ValidatorMetadata

Function new

public(package) fun new(sui_address: address, protocol_pubkey_bytes: vector<u8>, network_pubkey_bytes: vector<u8>, worker_pubkey_bytes: vector<u8>, proof_of_possession: vector<u8>, name: vector<u8>, description: vector<u8>, image_url: vector<u8>, project_url: vector<u8>, net_address: vector<u8>, p2p_address: vector<u8>, primary_address: vector<u8>, worker_address: vector<u8>, gas_price: u64, commission_rate: u64, ctx: &mut sui::tx_context::TxContext): sui_system::validator::Validator

Function deactivate

Mark Validator's StakingPool as inactive by setting the deactivation_epoch.

public(package) fun deactivate(self: &mut sui_system::validator::Validator, deactivation_epoch: u64)

Function activate

Activate Validator's StakingPool by setting the activation_epoch.

public(package) fun activate(self: &mut sui_system::validator::Validator, activation_epoch: u64)

Function adjust_stake_and_gas_price

Process pending stake and pending withdraws, and update the gas price.

public(package) fun adjust_stake_and_gas_price(self: &mut sui_system::validator::Validator)

Function request_add_stake

Request to add stake to the validator's staking pool, processed at the end of the epoch.

public(package) fun request_add_stake(self: &mut sui_system::validator::Validator, stake: sui::balance::Balance<sui::sui::SUI>, staker_address: address, ctx: &mut sui::tx_context::TxContext): sui_system::staking_pool::StakedSui

Function convert_to_fungible_staked_sui

public(package) fun convert_to_fungible_staked_sui(self: &mut sui_system::validator::Validator, staked_sui: sui_system::staking_pool::StakedSui, ctx: &mut sui::tx_context::TxContext): sui_system::staking_pool::FungibleStakedSui

Function redeem_fungible_staked_sui

public(package) fun redeem_fungible_staked_sui(self: &mut sui_system::validator::Validator, fungible_staked_sui: sui_system::staking_pool::FungibleStakedSui, ctx: &sui::tx_context::TxContext): sui::balance::Balance<sui::sui::SUI>

Function request_add_stake_at_genesis

Request to add stake to the validator's staking pool at genesis

public(package) fun request_add_stake_at_genesis(self: &mut sui_system::validator::Validator, stake: sui::balance::Balance<sui::sui::SUI>, staker_address: address, ctx: &mut sui::tx_context::TxContext)

Function request_withdraw_stake

Request to withdraw stake from the validator's staking pool, processed at the end of the epoch.

public(package) fun request_withdraw_stake(self: &mut sui_system::validator::Validator, staked_sui: sui_system::staking_pool::StakedSui, ctx: &sui::tx_context::TxContext): sui::balance::Balance<sui::sui::SUI>

Function request_set_gas_price

Request to set new gas price for the next epoch.
Need to present a ValidatorOperationCap.

public(package) fun request_set_gas_price(self: &mut sui_system::validator::Validator, verified_cap: sui_system::validator_cap::ValidatorOperationCap, new_price: u64)

Function set_candidate_gas_price

Set new gas price for the candidate validator.

public(package) fun set_candidate_gas_price(self: &mut sui_system::validator::Validator, verified_cap: sui_system::validator_cap::ValidatorOperationCap, new_price: u64)

Function request_set_commission_rate

Request to set new commission rate for the next epoch.

public(package) fun request_set_commission_rate(self: &mut sui_system::validator::Validator, new_commission_rate: u64)

Function set_candidate_commission_rate

Set new commission rate for the candidate validator.

public(package) fun set_candidate_commission_rate(self: &mut sui_system::validator::Validator, new_commission_rate: u64)

Function deposit_stake_rewards

Deposit stakes rewards into the validator's staking pool, called at the end of the epoch.

public(package) fun deposit_stake_rewards(self: &mut sui_system::validator::Validator, reward: sui::balance::Balance<sui::sui::SUI>)

Function process_pending_stakes_and_withdraws

Process pending stakes and withdraws, called at the end of the epoch.

public(package) fun process_pending_stakes_and_withdraws(self: &mut sui_system::validator::Validator, ctx: &sui::tx_context::TxContext)

Function is_preactive

Returns true if the validator is preactive.

public fun is_preactive(self: &sui_system::validator::Validator): bool

Function metadata

public fun metadata(self: &sui_system::validator::Validator): &sui_system::validator::ValidatorMetadata

Function sui_address

public fun sui_address(self: &sui_system::validator::Validator): address

Function name

public fun name(self: &sui_system::validator::Validator): &std::string::String

Function description

public fun description(self: &sui_system::validator::Validator): &std::string::String

Function image_url

public fun image_url(self: &sui_system::validator::Validator): &sui::url::Url

Function project_url

public fun project_url(self: &sui_system::validator::Validator): &sui::url::Url

Function network_address

public fun network_address(self: &sui_system::validator::Validator): &std::string::String

Function p2p_address

public fun p2p_address(self: &sui_system::validator::Validator): &std::string::String

Function primary_address

public fun primary_address(self: &sui_system::validator::Validator): &std::string::String

Function worker_address

public fun worker_address(self: &sui_system::validator::Validator): &std::string::String

Function protocol_pubkey_bytes

public fun protocol_pubkey_bytes(self: &sui_system::validator::Validator): &vector<u8>

Function proof_of_possession

public fun proof_of_possession(self: &sui_system::validator::Validator): &vector<u8>

Function network_pubkey_bytes

public fun network_pubkey_bytes(self: &sui_system::validator::Validator): &vector<u8>

Function worker_pubkey_bytes

public fun worker_pubkey_bytes(self: &sui_system::validator::Validator): &vector<u8>

Function next_epoch_network_address

public fun next_epoch_network_address(self: &sui_system::validator::Validator): &std::option::Option<std::string::String>

Function next_epoch_p2p_address

public fun next_epoch_p2p_address(self: &sui_system::validator::Validator): &std::option::Option<std::string::String>

Function next_epoch_primary_address

public fun next_epoch_primary_address(self: &sui_system::validator::Validator): &std::option::Option<std::string::String>

Function next_epoch_worker_address

public fun next_epoch_worker_address(self: &sui_system::validator::Validator): &std::option::Option<std::string::String>

Function next_epoch_protocol_pubkey_bytes

public fun next_epoch_protocol_pubkey_bytes(self: &sui_system::validator::Validator): &std::option::Option<vector<u8>>

Function next_epoch_proof_of_possession

public fun next_epoch_proof_of_possession(self: &sui_system::validator::Validator): &std::option::Option<vector<u8>>

Function next_epoch_network_pubkey_bytes

public fun next_epoch_network_pubkey_bytes(self: &sui_system::validator::Validator): &std::option::Option<vector<u8>>

Function next_epoch_worker_pubkey_bytes

public fun next_epoch_worker_pubkey_bytes(self: &sui_system::validator::Validator): &std::option::Option<vector<u8>>

Function operation_cap_id

public fun operation_cap_id(self: &sui_system::validator::Validator): &sui::object::ID

Function next_epoch_gas_price

public fun next_epoch_gas_price(self: &sui_system::validator::Validator): u64

Function total_stake_amount

public fun total_stake_amount(self: &sui_system::validator::Validator): u64

Function stake_amount

public fun stake_amount(self: &sui_system::validator::Validator): u64

Function total_stake

Return the total amount staked with this validator

public fun total_stake(self: &sui_system::validator::Validator): u64

Function voting_power

Return the voting power of this validator.

public fun voting_power(self: &sui_system::validator::Validator): u64

Function set_voting_power

Set the voting power of this validator, called only from validator_set.

public(package) fun set_voting_power(self: &mut sui_system::validator::Validator, new_voting_power: u64)

Function pending_stake_amount

public fun pending_stake_amount(self: &sui_system::validator::Validator): u64

Function pending_stake_withdraw_amount

public fun pending_stake_withdraw_amount(self: &sui_system::validator::Validator): u64

Function gas_price

public fun gas_price(self: &sui_system::validator::Validator): u64

Function commission_rate

public fun commission_rate(self: &sui_system::validator::Validator): u64

Function pool_token_exchange_rate_at_epoch

public fun pool_token_exchange_rate_at_epoch(self: &sui_system::validator::Validator, epoch: u64): sui_system::staking_pool::PoolTokenExchangeRate

Function staking_pool_id

public fun staking_pool_id(self: &sui_system::validator::Validator): sui::object::ID

Function is_duplicate

public fun is_duplicate(self: &sui_system::validator::Validator, other: &sui_system::validator::Validator): bool

Macro function both_some_and_equal

macro fun both_some_and_equal<$T>($a: std::option::Option<$T>, $b: std::option::Option<$T>): bool

Function new_unverified_validator_operation_cap_and_transfer

Create a new UnverifiedValidatorOperationCap, transfer to the validator, and registers it, thus revoking the previous cap's permission.

public(package) fun new_unverified_validator_operation_cap_and_transfer(self: &mut sui_system::validator::Validator, ctx: &mut sui::tx_context::TxContext)

Function update_name

Update name of the validator.

public(package) fun update_name(self: &mut sui_system::validator::Validator, name: vector<u8>)

Function update_description

Update description of the validator.

public(package) fun update_description(self: &mut sui_system::validator::Validator, description: vector<u8>)

Function update_image_url

Update image url of the validator.

public(package) fun update_image_url(self: &mut sui_system::validator::Validator, image_url: vector<u8>)

Function update_project_url

Update project url of the validator.

public(package) fun update_project_url(self: &mut sui_system::validator::Validator, project_url: vector<u8>)

Function update_next_epoch_network_address

Update network address of this validator, taking effects from next epoch

public(package) fun update_next_epoch_network_address(self: &mut sui_system::validator::Validator, net_address: vector<u8>)

Function update_candidate_network_address

Update network address of this candidate validator

public(package) fun update_candidate_network_address(self: &mut sui_system::validator::Validator, net_address: vector<u8>)

Function update_next_epoch_p2p_address

Update p2p address of this validator, taking effects from next epoch

public(package) fun update_next_epoch_p2p_address(self: &mut sui_system::validator::Validator, p2p_address: vector<u8>)

Function update_candidate_p2p_address

Update p2p address of this candidate validator

public(package) fun update_candidate_p2p_address(self: &mut sui_system::validator::Validator, p2p_address: vector<u8>)

Function update_next_epoch_primary_address

Update primary address of this validator, taking effects from next epoch

public(package) fun update_next_epoch_primary_address(self: &mut sui_system::validator::Validator, primary_address: vector<u8>)

Function update_candidate_primary_address

Update primary address of this candidate validator

public(package) fun update_candidate_primary_address(self: &mut sui_system::validator::Validator, primary_address: vector<u8>)

Function update_next_epoch_worker_address

Update worker address of this validator, taking effects from next epoch

public(package) fun update_next_epoch_worker_address(self: &mut sui_system::validator::Validator, worker_address: vector<u8>)

Function update_candidate_worker_address

Update worker address of this candidate validator

public(package) fun update_candidate_worker_address(self: &mut sui_system::validator::Validator, worker_address: vector<u8>)

Function update_next_epoch_protocol_pubkey

Update protocol public key of this validator, taking effects from next epoch

public(package) fun update_next_epoch_protocol_pubkey(self: &mut sui_system::validator::Validator, protocol_pubkey: vector<u8>, proof_of_possession: vector<u8>)

Function update_candidate_protocol_pubkey

Update protocol public key of this candidate validator

public(package) fun update_candidate_protocol_pubkey(self: &mut sui_system::validator::Validator, protocol_pubkey: vector<u8>, proof_of_possession: vector<u8>)

Function update_next_epoch_network_pubkey

Update network public key of this validator, taking effects from next epoch

public(package) fun update_next_epoch_network_pubkey(self: &mut sui_system::validator::Validator, network_pubkey: vector<u8>)

Function update_candidate_network_pubkey

Update network public key of this candidate validator

public(package) fun update_candidate_network_pubkey(self: &mut sui_system::validator::Validator, network_pubkey: vector<u8>)

Function update_next_epoch_worker_pubkey

Update Narwhal worker public key of this validator, taking effects from next epoch

public(package) fun update_next_epoch_worker_pubkey(self: &mut sui_system::validator::Validator, worker_pubkey: vector<u8>)

Function update_candidate_worker_pubkey

Update Narwhal worker public key of this candidate validator

public(package) fun update_candidate_worker_pubkey(self: &mut sui_system::validator::Validator, worker_pubkey: vector<u8>)

Function effectuate_staged_metadata

Effectutate all staged next epoch metadata for this validator.
NOTE: this function SHOULD ONLY be called by validator_set when advancing an epoch.

public(package) fun effectuate_staged_metadata(self: &mut sui_system::validator::Validator)

Macro function do_extract

Helper macro which extracts the value from Some and applies $f to it.

macro fun do_extract<$T>($o: &mut std::option::Option<$T>, $f: |$T| -> ())

Function validate_metadata

Aborts if validator metadata is valid

public fun validate_metadata(metadata: &sui_system::validator::ValidatorMetadata)

Function validate_metadata_bcs

public fun validate_metadata_bcs(metadata: vector<u8>)

Function get_staking_pool_ref

public(package) fun get_staking_pool_ref(self: &sui_system::validator::Validator): &sui_system::staking_pool::StakingPool

Function new_from_metadata

Create a new validator from the given ValidatorMetadata, called by both new and new_for_testing.

fun new_from_metadata(metadata: sui_system::validator::ValidatorMetadata, gas_price: u64, commission_rate: u64, ctx: &mut sui::tx_context::TxContext): sui_system::validator::Validator