crates/sui-framework/docs/sui_system/validator.md
ValidatorMetadataValidatorStakingRequestEventUnstakingRequestEventConvertingToFungibleStakedSuiEventRedeemingFungibleStakedSuiEventnew_metadatanewdeactivateactivateadjust_stake_and_gas_pricerequest_add_stakeconvert_to_fungible_staked_suiredeem_fungible_staked_suirequest_add_stake_at_genesisrequest_withdraw_stakerequest_set_gas_priceset_candidate_gas_pricerequest_set_commission_rateset_candidate_commission_ratedeposit_stake_rewardsprocess_pending_stakes_and_withdrawsis_preactivemetadatasui_addressnamedescriptionimage_urlproject_urlnetwork_addressp2p_addressprimary_addressworker_addressprotocol_pubkey_bytesproof_of_possessionnetwork_pubkey_bytesworker_pubkey_bytesnext_epoch_network_addressnext_epoch_p2p_addressnext_epoch_primary_addressnext_epoch_worker_addressnext_epoch_protocol_pubkey_bytesnext_epoch_proof_of_possessionnext_epoch_network_pubkey_bytesnext_epoch_worker_pubkey_bytesoperation_cap_idnext_epoch_gas_pricetotal_stake_amountstake_amounttotal_stakevoting_powerset_voting_powerpending_stake_amountpending_stake_withdraw_amountgas_pricecommission_ratepool_token_exchange_rate_at_epochstaking_pool_idis_duplicateboth_some_and_equalnew_unverified_validator_operation_cap_and_transferupdate_nameupdate_descriptionupdate_image_urlupdate_project_urlupdate_next_epoch_network_addressupdate_candidate_network_addressupdate_next_epoch_p2p_addressupdate_candidate_p2p_addressupdate_next_epoch_primary_addressupdate_candidate_primary_addressupdate_next_epoch_worker_addressupdate_candidate_worker_addressupdate_next_epoch_protocol_pubkeyupdate_candidate_protocol_pubkeyupdate_next_epoch_network_pubkeyupdate_candidate_network_pubkeyupdate_next_epoch_worker_pubkeyupdate_candidate_worker_pubkeyeffectuate_staged_metadatado_extractvalidate_metadatavalidate_metadata_bcsget_staking_pool_refnew_from_metadata<a name="sui_system_validator_ValidatorMetadata"></a>
ValidatorMetadata<a name="sui_system_validator_Validator"></a>
Validator<a name="sui_system_validator_StakingRequestEvent"></a>
StakingRequestEventEvent emitted when a new stake request is received.
<pre><code><b>public</b> <b>struct</b> <a href="../sui_system/validator.md#sui_system_validator_StakingRequestEvent">StakingRequestEvent</a> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>pool_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>validator_address: <b>address</b></code> </dt> <dd> </dd> <dt> <code>staker_address: <b>address</b></code> </dt> <dd> </dd> <dt> <code>epoch: u64</code> </dt> <dd> </dd> <dt> <code>amount: u64</code> </dt> <dd> </dd> </dl> </details><a name="sui_system_validator_UnstakingRequestEvent"></a>
UnstakingRequestEventEvent emitted when a new unstake request is received.
<pre><code><b>public</b> <b>struct</b> <a href="../sui_system/validator.md#sui_system_validator_UnstakingRequestEvent">UnstakingRequestEvent</a> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>pool_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>validator_address: <b>address</b></code> </dt> <dd> </dd> <dt> <code>staker_address: <b>address</b></code> </dt> <dd> </dd> <dt> <code>stake_activation_epoch: u64</code> </dt> <dd> </dd> <dt> <code>unstaking_epoch: u64</code> </dt> <dd> </dd> <dt> <code>principal_amount: u64</code> </dt> <dd> </dd> <dt> <code>reward_amount: u64</code> </dt> <dd> </dd> </dl> </details><a name="sui_system_validator_ConvertingToFungibleStakedSuiEvent"></a>
ConvertingToFungibleStakedSuiEventEvent emitted when a staked SUI is converted to a fungible staked SUI.
<pre><code><b>public</b> <b>struct</b> <a href="../sui_system/validator.md#sui_system_validator_ConvertingToFungibleStakedSuiEvent">ConvertingToFungibleStakedSuiEvent</a> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>pool_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>stake_activation_epoch: u64</code> </dt> <dd> </dd> <dt> <code>staked_sui_principal_amount: u64</code> </dt> <dd> </dd> <dt> <code>fungible_staked_sui_amount: u64</code> </dt> <dd> </dd> </dl> </details><a name="sui_system_validator_RedeemingFungibleStakedSuiEvent"></a>
RedeemingFungibleStakedSuiEventEvent emitted when a fungible staked SUI is redeemed.
<pre><code><b>public</b> <b>struct</b> <a href="../sui_system/validator.md#sui_system_validator_RedeemingFungibleStakedSuiEvent">RedeemingFungibleStakedSuiEvent</a> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>pool_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>fungible_staked_sui_amount: u64</code> </dt> <dd> </dd> <dt> <code>sui_amount: u64</code> </dt> <dd> </dd> </dl> </details><a name="@Constants_0"></a>
<a name="sui_system_validator_EInvalidProofOfPossession"></a>
Invalid proof_of_possession field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EInvalidProofOfPossession">EInvalidProofOfPossession</a>: u64 = 0; </code></pre><a name="sui_system_validator_EMetadataInvalidPubkey"></a>
Invalid pubkey_bytes field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidPubkey">EMetadataInvalidPubkey</a>: u64 = 1; </code></pre><a name="sui_system_validator_EMetadataInvalidNetPubkey"></a>
Invalid network_pubkey_bytes field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidNetPubkey">EMetadataInvalidNetPubkey</a>: u64 = 2; </code></pre><a name="sui_system_validator_EMetadataInvalidWorkerPubkey"></a>
Invalid worker_pubkey_bytes field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidWorkerPubkey">EMetadataInvalidWorkerPubkey</a>: u64 = 3; </code></pre><a name="sui_system_validator_EMetadataInvalidNetAddr"></a>
Invalid net_address field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidNetAddr">EMetadataInvalidNetAddr</a>: u64 = 4; </code></pre><a name="sui_system_validator_EMetadataInvalidP2pAddr"></a>
Invalid p2p_address field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidP2pAddr">EMetadataInvalidP2pAddr</a>: u64 = 5; </code></pre><a name="sui_system_validator_EMetadataInvalidPrimaryAddr"></a>
Invalid primary_address field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidPrimaryAddr">EMetadataInvalidPrimaryAddr</a>: u64 = 6; </code></pre><a name="sui_system_validator_EMetadataInvalidWorkerAddr"></a>
Invalid worker_address field in ValidatorMetadata
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EMetadataInvalidWorkerAddr">EMetadataInvalidWorkerAddr</a>: u64 = 7; </code></pre><a name="sui_system_validator_ECommissionRateTooHigh"></a>
Commission rate set by the validator is higher than the threshold
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_ECommissionRateTooHigh">ECommissionRateTooHigh</a>: u64 = 8; </code></pre><a name="sui_system_validator_EValidatorMetadataExceedingLengthLimit"></a>
Validator Metadata is too long
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>: u64 = 9; </code></pre><a name="sui_system_validator_ENotValidatorCandidate"></a>
Intended validator is not a candidate one.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>: u64 = 10; </code></pre><a name="sui_system_validator_EInvalidStakeAmount"></a>
Stake amount is invalid or wrong.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EInvalidStakeAmount">EInvalidStakeAmount</a>: u64 = 11; </code></pre><a name="sui_system_validator_ECalledDuringNonGenesis"></a>
Function called during non-genesis times.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_ECalledDuringNonGenesis">ECalledDuringNonGenesis</a>: u64 = 12; </code></pre><a name="sui_system_validator_ENewCapNotCreatedByValidatorItself"></a>
New Capability is not created by the validator itself
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_ENewCapNotCreatedByValidatorItself">ENewCapNotCreatedByValidatorItself</a>: u64 = 100; </code></pre><a name="sui_system_validator_EInvalidCap"></a>
Capability code is not valid
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EInvalidCap">EInvalidCap</a>: u64 = 101; </code></pre><a name="sui_system_validator_EGasPriceHigherThanThreshold"></a>
Validator trying to set gas price higher than threshold.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EGasPriceHigherThanThreshold">EGasPriceHigherThanThreshold</a>: u64 = 102; </code></pre><a name="sui_system_validator_EInvalidProtocolPubKeyLength"></a>
Invalid protocol public key length.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_EInvalidProtocolPubKeyLength">EInvalidProtocolPubKeyLength</a>: u64 = 16; </code></pre><a name="sui_system_validator_MAX_COMMISSION_RATE"></a>
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_MAX_COMMISSION_RATE">MAX_COMMISSION_RATE</a>: u64 = 2000; </code></pre><a name="sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH"></a>
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>: u64 = 256; </code></pre><a name="sui_system_validator_MAX_VALIDATOR_GAS_PRICE"></a>
Max gas price a validator can set is 100K MIST.
<pre><code><b>const</b> <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_GAS_PRICE">MAX_VALIDATOR_GAS_PRICE</a>: u64 = 100000; </code></pre><a name="sui_system_validator_new_metadata"></a>
new_metadata<a name="sui_system_validator_new"></a>
new<a name="sui_system_validator_deactivate"></a>
deactivateMark Validator's <code>StakingPool</code> as inactive by setting the <code>deactivation_epoch</code>.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_deactivate">deactivate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, deactivation_epoch: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_deactivate">deactivate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, deactivation_epoch: u64) { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.deactivate_staking_pool(deactivation_epoch) } </code></pre> </details><a name="sui_system_validator_activate"></a>
activateActivate Validator's <code>StakingPool</code> by setting the <code>activation_epoch</code>.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_activate">activate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, activation_epoch: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_activate">activate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, activation_epoch: u64) { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.activate_staking_pool(activation_epoch); } </code></pre> </details><a name="sui_system_validator_adjust_stake_and_gas_price"></a>
adjust_stake_and_gas_priceProcess pending stake and pending withdraws, and update the gas price.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_adjust_stake_and_gas_price">adjust_stake_and_gas_price</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_adjust_stake_and_gas_price">adjust_stake_and_gas_price</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>) { self.<a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a> = self.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_gas_price">next_epoch_gas_price</a>; self.<a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a> = self.next_epoch_commission_rate; } </code></pre> </details><a name="sui_system_validator_request_add_stake"></a>
request_add_stakeRequest to add stake to the validator's staking pool, processed at the end of the epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_add_stake">request_add_stake</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, stake: <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>>, staker_address: <b>address</b>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui_system/staking_pool.md#sui_system_staking_pool_StakedSui">sui_system::staking_pool::StakedSui</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_add_stake">request_add_stake</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, stake: Balance<SUI>, staker_address: <b>address</b>, ctx: &<b>mut</b> TxContext, ): StakedSui { <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a> = stake.value(); <b>assert</b>!(<a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a> > 0, <a href="../sui_system/validator.md#sui_system_validator_EInvalidStakeAmount">EInvalidStakeAmount</a>); <b>let</b> stake_epoch = ctx.epoch() + 1; <b>let</b> staked_sui = self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_request_add_stake">request_add_stake</a>(stake, stake_epoch, ctx); // Process stake right away <b>if</b> staking pool is preactive. <b>if</b> (self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>()) { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.process_pending_stake(); }; self.next_epoch_stake = self.next_epoch_stake + <a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a>; event::emit(<a href="../sui_system/validator.md#sui_system_validator_StakingRequestEvent">StakingRequestEvent</a> { pool_id: self.<a href="../sui_system/validator.md#sui_system_validator_staking_pool_id">staking_pool_id</a>(), validator_address: self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, staker_address, epoch: ctx.epoch(), amount: <a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a>, }); staked_sui } </code></pre> </details><a name="sui_system_validator_convert_to_fungible_staked_sui"></a>
convert_to_fungible_staked_sui<a name="sui_system_validator_redeem_fungible_staked_sui"></a>
redeem_fungible_staked_sui<a name="sui_system_validator_request_add_stake_at_genesis"></a>
request_add_stake_at_genesisRequest to add stake to the validator's staking pool at genesis
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_add_stake_at_genesis">request_add_stake_at_genesis</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, stake: <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>>, staker_address: <b>address</b>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_add_stake_at_genesis">request_add_stake_at_genesis</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, stake: Balance<SUI>, staker_address: <b>address</b>, ctx: &<b>mut</b> TxContext, ) { <b>assert</b>!(ctx.epoch() == 0, <a href="../sui_system/validator.md#sui_system_validator_ECalledDuringNonGenesis">ECalledDuringNonGenesis</a>); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a> = stake.value(); <b>assert</b>!(<a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a> > 0, <a href="../sui_system/validator.md#sui_system_validator_EInvalidStakeAmount">EInvalidStakeAmount</a>); // 0 = <a href="../sui_system/genesis.md#sui_system_genesis">genesis</a> epoch <b>let</b> staked_sui = self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_request_add_stake">request_add_stake</a>(stake, 0, ctx); transfer::public_transfer(staked_sui, staker_address); // Process stake right away self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.process_pending_stake(); self.next_epoch_stake = self.next_epoch_stake + <a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a>; } </code></pre> </details><a name="sui_system_validator_request_withdraw_stake"></a>
request_withdraw_stakeRequest to withdraw stake from the validator's staking pool, processed at the end of the epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_withdraw_stake">request_withdraw_stake</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, staked_sui: <a href="../sui_system/staking_pool.md#sui_system_staking_pool_StakedSui">sui_system::staking_pool::StakedSui</a>, ctx: &<a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_withdraw_stake">request_withdraw_stake</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, staked_sui: StakedSui, ctx: &TxContext, ): Balance<SUI> { <b>let</b> principal_amount = staked_sui.amount(); <b>let</b> stake_activation_epoch = staked_sui.activation_epoch(); <b>let</b> withdrawn_stake = self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_request_withdraw_stake">request_withdraw_stake</a>(staked_sui, ctx); <b>let</b> withdraw_amount = withdrawn_stake.value(); <b>let</b> reward_amount = withdraw_amount - principal_amount; self.next_epoch_stake = self.next_epoch_stake - withdraw_amount; event::emit(<a href="../sui_system/validator.md#sui_system_validator_UnstakingRequestEvent">UnstakingRequestEvent</a> { pool_id: self.<a href="../sui_system/validator.md#sui_system_validator_staking_pool_id">staking_pool_id</a>(), validator_address: self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, staker_address: ctx.sender(), stake_activation_epoch, unstaking_epoch: ctx.epoch(), principal_amount, reward_amount, }); withdrawn_stake } </code></pre> </details><a name="sui_system_validator_request_set_gas_price"></a>
request_set_gas_priceRequest to set new gas price for the next epoch. Need to present a <code>ValidatorOperationCap</code>.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_set_gas_price">request_set_gas_price</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, verified_cap: <a href="../sui_system/validator_cap.md#sui_system_validator_cap_ValidatorOperationCap">sui_system::validator_cap::ValidatorOperationCap</a>, new_price: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_set_gas_price">request_set_gas_price</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, verified_cap: ValidatorOperationCap, new_price: u64, ) { <b>assert</b>!(new_price < <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_GAS_PRICE">MAX_VALIDATOR_GAS_PRICE</a>, <a href="../sui_system/validator.md#sui_system_validator_EGasPriceHigherThanThreshold">EGasPriceHigherThanThreshold</a>); <b>let</b> validator_address = verified_cap.verified_operation_cap_address(); <b>assert</b>!(validator_address == self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, <a href="../sui_system/validator.md#sui_system_validator_EInvalidCap">EInvalidCap</a>); self.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_gas_price">next_epoch_gas_price</a> = new_price; } </code></pre> </details><a name="sui_system_validator_set_candidate_gas_price"></a>
set_candidate_gas_priceSet new gas price for the candidate validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_candidate_gas_price">set_candidate_gas_price</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, verified_cap: <a href="../sui_system/validator_cap.md#sui_system_validator_cap_ValidatorOperationCap">sui_system::validator_cap::ValidatorOperationCap</a>, new_price: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_candidate_gas_price">set_candidate_gas_price</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, verified_cap: ValidatorOperationCap, new_price: u64, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!(new_price < <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_GAS_PRICE">MAX_VALIDATOR_GAS_PRICE</a>, <a href="../sui_system/validator.md#sui_system_validator_EGasPriceHigherThanThreshold">EGasPriceHigherThanThreshold</a>); <b>let</b> validator_address = verified_cap.verified_operation_cap_address(); <b>assert</b>!(validator_address == self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, <a href="../sui_system/validator.md#sui_system_validator_EInvalidCap">EInvalidCap</a>); self.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_gas_price">next_epoch_gas_price</a> = new_price; self.<a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a> = new_price; } </code></pre> </details><a name="sui_system_validator_request_set_commission_rate"></a>
request_set_commission_rateRequest to set new commission rate for the next epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_set_commission_rate">request_set_commission_rate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, new_commission_rate: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_request_set_commission_rate">request_set_commission_rate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, new_commission_rate: u64) { <b>assert</b>!(new_commission_rate <= <a href="../sui_system/validator.md#sui_system_validator_MAX_COMMISSION_RATE">MAX_COMMISSION_RATE</a>, <a href="../sui_system/validator.md#sui_system_validator_ECommissionRateTooHigh">ECommissionRateTooHigh</a>); self.next_epoch_commission_rate = new_commission_rate; } </code></pre> </details><a name="sui_system_validator_set_candidate_commission_rate"></a>
set_candidate_commission_rateSet new commission rate for the candidate validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_candidate_commission_rate">set_candidate_commission_rate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, new_commission_rate: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_candidate_commission_rate">set_candidate_commission_rate</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, new_commission_rate: u64) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!(new_commission_rate <= <a href="../sui_system/validator.md#sui_system_validator_MAX_COMMISSION_RATE">MAX_COMMISSION_RATE</a>, <a href="../sui_system/validator.md#sui_system_validator_ECommissionRateTooHigh">ECommissionRateTooHigh</a>); self.<a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a> = new_commission_rate; } </code></pre> </details><a name="sui_system_validator_deposit_stake_rewards"></a>
deposit_stake_rewardsDeposit stakes rewards into the validator's staking pool, called at the end of the epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_deposit_stake_rewards">deposit_stake_rewards</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, reward: <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_deposit_stake_rewards">deposit_stake_rewards</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, reward: Balance<SUI>) { self.next_epoch_stake = self.next_epoch_stake + reward.value(); self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.deposit_rewards(reward); } </code></pre> </details><a name="sui_system_validator_process_pending_stakes_and_withdraws"></a>
process_pending_stakes_and_withdrawsProcess pending stakes and withdraws, called at the end of the epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_process_pending_stakes_and_withdraws">process_pending_stakes_and_withdraws</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, ctx: &<a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_process_pending_stakes_and_withdraws">process_pending_stakes_and_withdraws</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, ctx: &TxContext) { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_process_pending_stakes_and_withdraws">process_pending_stakes_and_withdraws</a>(ctx); // TODO: bring this assertion back when we are ready. // <b>assert</b>!(<a href="../sui_system/validator.md#sui_system_validator_stake_amount">stake_amount</a>(self) == self.next_epoch_stake, <a href="../sui_system/validator.md#sui_system_validator_EInvalidStakeAmount">EInvalidStakeAmount</a>); } </code></pre> </details><a name="sui_system_validator_is_preactive"></a>
is_preactiveReturns true if the validator is preactive.
<pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>): bool { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>() } </code></pre> </details><a name="sui_system_validator_metadata"></a>
metadata<a name="sui_system_validator_sui_address"></a>
sui_address<a name="sui_system_validator_name"></a>
name<a name="sui_system_validator_description"></a>
description<a name="sui_system_validator_image_url"></a>
image_url<a name="sui_system_validator_project_url"></a>
project_url<a name="sui_system_validator_network_address"></a>
network_address<a name="sui_system_validator_p2p_address"></a>
p2p_address<a name="sui_system_validator_primary_address"></a>
primary_address<a name="sui_system_validator_worker_address"></a>
worker_address<a name="sui_system_validator_protocol_pubkey_bytes"></a>
protocol_pubkey_bytes<a name="sui_system_validator_proof_of_possession"></a>
proof_of_possession<a name="sui_system_validator_network_pubkey_bytes"></a>
network_pubkey_bytes<a name="sui_system_validator_worker_pubkey_bytes"></a>
worker_pubkey_bytes<a name="sui_system_validator_next_epoch_network_address"></a>
next_epoch_network_address<a name="sui_system_validator_next_epoch_p2p_address"></a>
next_epoch_p2p_address<a name="sui_system_validator_next_epoch_primary_address"></a>
next_epoch_primary_address<a name="sui_system_validator_next_epoch_worker_address"></a>
next_epoch_worker_address<a name="sui_system_validator_next_epoch_protocol_pubkey_bytes"></a>
next_epoch_protocol_pubkey_bytes<a name="sui_system_validator_next_epoch_proof_of_possession"></a>
next_epoch_proof_of_possession<a name="sui_system_validator_next_epoch_network_pubkey_bytes"></a>
next_epoch_network_pubkey_bytes<a name="sui_system_validator_next_epoch_worker_pubkey_bytes"></a>
next_epoch_worker_pubkey_bytes<a name="sui_system_validator_operation_cap_id"></a>
operation_cap_id<a name="sui_system_validator_next_epoch_gas_price"></a>
next_epoch_gas_price<a name="sui_system_validator_total_stake_amount"></a>
total_stake_amount<a name="sui_system_validator_stake_amount"></a>
stake_amount<a name="sui_system_validator_total_stake"></a>
total_stakeReturn the total amount staked with this validator
<pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_total_stake">total_stake</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_total_stake">total_stake</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>): u64 { self.<a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>.sui_balance() } </code></pre> </details><a name="sui_system_validator_voting_power"></a>
voting_powerReturn the voting power of this validator.
<pre><code><b>public</b> <b>fun</b> <a href="../sui_system/voting_power.md#sui_system_voting_power">voting_power</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui_system/voting_power.md#sui_system_voting_power">voting_power</a>(self: &<a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>): u64 { self.<a href="../sui_system/voting_power.md#sui_system_voting_power">voting_power</a> } </code></pre> </details><a name="sui_system_validator_set_voting_power"></a>
set_voting_powerSet the voting power of this validator, called only from validator_set.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_voting_power">set_voting_power</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, new_voting_power: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_set_voting_power">set_voting_power</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, new_voting_power: u64) { self.<a href="../sui_system/voting_power.md#sui_system_voting_power">voting_power</a> = new_voting_power; } </code></pre> </details><a name="sui_system_validator_pending_stake_amount"></a>
pending_stake_amount<a name="sui_system_validator_pending_stake_withdraw_amount"></a>
pending_stake_withdraw_amount<a name="sui_system_validator_gas_price"></a>
gas_price<a name="sui_system_validator_commission_rate"></a>
commission_rate<a name="sui_system_validator_pool_token_exchange_rate_at_epoch"></a>
pool_token_exchange_rate_at_epoch<a name="sui_system_validator_staking_pool_id"></a>
staking_pool_id<a name="sui_system_validator_is_duplicate"></a>
is_duplicate<a name="sui_system_validator_both_some_and_equal"></a>
both_some_and_equal<a name="sui_system_validator_new_unverified_validator_operation_cap_and_transfer"></a>
new_unverified_validator_operation_cap_and_transferCreate a new <code>UnverifiedValidatorOperationCap</code>, transfer to the validator, and registers it, thus revoking the previous cap's permission.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_new_unverified_validator_operation_cap_and_transfer">new_unverified_validator_operation_cap_and_transfer</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_new_unverified_validator_operation_cap_and_transfer">new_unverified_validator_operation_cap_and_transfer</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, ctx: &<b>mut</b> TxContext, ) { <b>let</b> sender = ctx.sender(); <b>assert</b>!(sender == self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, <a href="../sui_system/validator.md#sui_system_validator_ENewCapNotCreatedByValidatorItself">ENewCapNotCreatedByValidatorItself</a>); <b>let</b> new_id = <a href="../sui_system/validator_cap.md#sui_system_validator_cap_new_unverified_validator_operation_cap_and_transfer">validator_cap::new_unverified_validator_operation_cap_and_transfer</a>(sender, ctx); self.<a href="../sui_system/validator.md#sui_system_validator_operation_cap_id">operation_cap_id</a> = new_id; } </code></pre> </details><a name="sui_system_validator_update_name"></a>
update_nameUpdate name of the validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_name">update_name</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_name">name</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_name">update_name</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_name">name</a>: vector<u8>) { <b>assert</b>!(<a href="../sui_system/validator.md#sui_system_validator_name">name</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_name">name</a> = <a href="../sui_system/validator.md#sui_system_validator_name">name</a>.to_ascii_string().to_string(); } </code></pre> </details><a name="sui_system_validator_update_description"></a>
update_descriptionUpdate description of the validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_description">update_description</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_description">description</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_description">update_description</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_description">description</a>: vector<u8>) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_description">description</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_description">description</a> = <a href="../sui_system/validator.md#sui_system_validator_description">description</a>.to_ascii_string().to_string(); } </code></pre> </details><a name="sui_system_validator_update_image_url"></a>
update_image_urlUpdate image url of the validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_image_url">update_image_url</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_image_url">image_url</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_image_url">update_image_url</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_image_url">image_url</a>: vector<u8>) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_image_url">image_url</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_image_url">image_url</a> = url::new_unsafe_from_bytes(<a href="../sui_system/validator.md#sui_system_validator_image_url">image_url</a>); } </code></pre> </details><a name="sui_system_validator_update_project_url"></a>
update_project_urlUpdate project url of the validator.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_project_url">update_project_url</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_project_url">project_url</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_project_url">update_project_url</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_project_url">project_url</a>: vector<u8>) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_project_url">project_url</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_project_url">project_url</a> = url::new_unsafe_from_bytes(<a href="../sui_system/validator.md#sui_system_validator_project_url">project_url</a>); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_network_address"></a>
update_next_epoch_network_addressUpdate network address of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_network_address">update_next_epoch_network_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, net_address: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_network_address">update_next_epoch_network_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, net_address: vector<u8>, ) { <b>assert</b>!( net_address.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> net_address = net_address.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.next_epoch_net_address = option::some(net_address); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_network_address"></a>
update_candidate_network_addressUpdate network address of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_network_address">update_candidate_network_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, net_address: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_network_address">update_candidate_network_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, net_address: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!( net_address.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> net_address = net_address.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.net_address = net_address; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_p2p_address"></a>
update_next_epoch_p2p_addressUpdate p2p address of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_p2p_address">update_next_epoch_p2p_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_p2p_address">update_next_epoch_p2p_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>: vector<u8>) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a> = <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_p2p_address">next_epoch_p2p_address</a> = option::some(<a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_p2p_address"></a>
update_candidate_p2p_addressUpdate p2p address of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_p2p_address">update_candidate_p2p_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_p2p_address">update_candidate_p2p_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>: vector<u8>) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a> = <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a> = <a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a>; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_primary_address"></a>
update_next_epoch_primary_addressUpdate primary address of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_primary_address">update_next_epoch_primary_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_primary_address">update_next_epoch_primary_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>: vector<u8>, ) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a> = <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_primary_address">next_epoch_primary_address</a> = option::some(<a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_primary_address"></a>
update_candidate_primary_addressUpdate primary address of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_primary_address">update_candidate_primary_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_primary_address">update_candidate_primary_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a> = <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a> = <a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a>; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_worker_address"></a>
update_next_epoch_worker_addressUpdate worker address of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_worker_address">update_next_epoch_worker_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_worker_address">update_next_epoch_worker_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>: vector<u8>, ) { <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a> = <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_worker_address">next_epoch_worker_address</a> = option::some(<a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_worker_address"></a>
update_candidate_worker_addressUpdate worker address of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_worker_address">update_candidate_worker_address</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_worker_address">update_candidate_worker_address</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!( <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>.length() <= <a href="../sui_system/validator.md#sui_system_validator_MAX_VALIDATOR_METADATA_LENGTH">MAX_VALIDATOR_METADATA_LENGTH</a>, <a href="../sui_system/validator.md#sui_system_validator_EValidatorMetadataExceedingLengthLimit">EValidatorMetadataExceedingLengthLimit</a>, ); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a> = <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>.to_ascii_string().to_string(); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a> = <a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a>; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_protocol_pubkey"></a>
update_next_epoch_protocol_pubkeyUpdate protocol public key of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_protocol_pubkey">update_next_epoch_protocol_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, protocol_pubkey: vector<u8>, <a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_protocol_pubkey">update_next_epoch_protocol_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, protocol_pubkey: vector<u8>, <a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>: vector<u8>, ) { <b>assert</b>!(protocol_pubkey.length() == 96, <a href="../sui_system/validator.md#sui_system_validator_EInvalidProtocolPubKeyLength">EInvalidProtocolPubKeyLength</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_protocol_pubkey_bytes">next_epoch_protocol_pubkey_bytes</a> = option::some(protocol_pubkey); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_proof_of_possession">next_epoch_proof_of_possession</a> = option::some(<a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_protocol_pubkey"></a>
update_candidate_protocol_pubkeyUpdate protocol public key of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_protocol_pubkey">update_candidate_protocol_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, protocol_pubkey: vector<u8>, <a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_protocol_pubkey">update_candidate_protocol_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, protocol_pubkey: vector<u8>, <a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); <b>assert</b>!(protocol_pubkey.length() == 96, <a href="../sui_system/validator.md#sui_system_validator_EInvalidProtocolPubKeyLength">EInvalidProtocolPubKeyLength</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_protocol_pubkey_bytes">protocol_pubkey_bytes</a> = protocol_pubkey; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a> = <a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a>; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_network_pubkey"></a>
update_next_epoch_network_pubkeyUpdate network public key of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_network_pubkey">update_next_epoch_network_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, network_pubkey: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_network_pubkey">update_next_epoch_network_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, network_pubkey: vector<u8>, ) { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_network_pubkey_bytes">next_epoch_network_pubkey_bytes</a> = option::some(network_pubkey); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_network_pubkey"></a>
update_candidate_network_pubkeyUpdate network public key of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_network_pubkey">update_candidate_network_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, network_pubkey: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_network_pubkey">update_candidate_network_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, network_pubkey: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_network_pubkey_bytes">network_pubkey_bytes</a> = network_pubkey; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_next_epoch_worker_pubkey"></a>
update_next_epoch_worker_pubkeyUpdate Narwhal worker public key of this validator, taking effects from next epoch
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_worker_pubkey">update_next_epoch_worker_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, worker_pubkey: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_next_epoch_worker_pubkey">update_next_epoch_worker_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, worker_pubkey: vector<u8>, ) { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_worker_pubkey_bytes">next_epoch_worker_pubkey_bytes</a> = option::some(worker_pubkey); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_update_candidate_worker_pubkey"></a>
update_candidate_worker_pubkeyUpdate Narwhal worker public key of this candidate validator
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_worker_pubkey">update_candidate_worker_pubkey</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>, worker_pubkey: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_update_candidate_worker_pubkey">update_candidate_worker_pubkey</a>( self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>, worker_pubkey: vector<u8>, ) { <b>assert</b>!(self.<a href="../sui_system/validator.md#sui_system_validator_is_preactive">is_preactive</a>(), <a href="../sui_system/validator.md#sui_system_validator_ENotValidatorCandidate">ENotValidatorCandidate</a>); self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_worker_pubkey_bytes">worker_pubkey_bytes</a> = worker_pubkey; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.validate(); } </code></pre> </details><a name="sui_system_validator_effectuate_staged_metadata"></a>
effectuate_staged_metadataEffectuate all staged next epoch metadata for this validator. NOTE: this function SHOULD ONLY be called by validator_set when advancing an epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_effectuate_staged_metadata">effectuate_staged_metadata</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_effectuate_staged_metadata">effectuate_staged_metadata</a>(self: &<b>mut</b> <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a>) { <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.next_epoch_net_address, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.net_address = v }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_p2p_address">next_epoch_p2p_address</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_p2p_address">p2p_address</a> = v }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_primary_address">next_epoch_primary_address</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_primary_address">primary_address</a> = v }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_worker_address">next_epoch_worker_address</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_worker_address">worker_address</a> = v }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_protocol_pubkey_bytes">next_epoch_protocol_pubkey_bytes</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_protocol_pubkey_bytes">protocol_pubkey_bytes</a> = v; self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_proof_of_possession">proof_of_possession</a> = self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_proof_of_possession">next_epoch_proof_of_possession</a>.extract(); }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_network_pubkey_bytes">next_epoch_network_pubkey_bytes</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_network_pubkey_bytes">network_pubkey_bytes</a> = v }); <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a>!(&<b>mut</b> self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_next_epoch_worker_pubkey_bytes">next_epoch_worker_pubkey_bytes</a>, |v| { self.<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_worker_pubkey_bytes">worker_pubkey_bytes</a> = v }); } </code></pre> </details><a name="sui_system_validator_do_extract"></a>
do_extractHelper macro which extracts the value from <code>Some</code> and applies <code>$f</code> to it.
<pre><code><b>macro</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a><$T>($o: &<b>mut</b> <a href="../std/option.md#std_option_Option">std::option::Option</a><$T>, $f: |$T| -> ()) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>macro</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_do_extract">do_extract</a><$T>($o: &<b>mut</b> Option<$T>, $f: |$T|) { <b>let</b> o = $o; <b>if</b> (o.is_some()) { $f(o.extract()); } } </code></pre> </details><a name="sui_system_validator_validate_metadata"></a>
validate_metadataAborts if validator metadata is valid
<pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_validate_metadata">validate_metadata</a>(<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>: &<a href="../sui_system/validator.md#sui_system_validator_ValidatorMetadata">sui_system::validator::ValidatorMetadata</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_validate_metadata">validate_metadata</a>(<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>: &<a href="../sui_system/validator.md#sui_system_validator_ValidatorMetadata">ValidatorMetadata</a>) { <a href="../sui_system/validator.md#sui_system_validator_validate_metadata_bcs">validate_metadata_bcs</a>(bcs::to_bytes(<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>)); } </code></pre> </details><a name="sui_system_validator_validate_metadata_bcs"></a>
validate_metadata_bcs<a name="sui_system_validator_get_staking_pool_ref"></a>
get_staking_pool_ref<a name="sui_system_validator_new_from_metadata"></a>
new_from_metadataCreate a new validator from the given <code><a href="../sui_system/validator.md#sui_system_validator_ValidatorMetadata">ValidatorMetadata</a></code>, called by both <code><a href="../sui_system/validator.md#sui_system_validator_new">new</a></code> and <code>new_for_testing</code>.
<pre><code><b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_new_from_metadata">new_from_metadata</a>(<a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>: <a href="../sui_system/validator.md#sui_system_validator_ValidatorMetadata">sui_system::validator::ValidatorMetadata</a>, <a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a>: u64, <a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a>: u64, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui_system/validator.md#sui_system_validator_Validator">sui_system::validator::Validator</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>fun</b> <a href="../sui_system/validator.md#sui_system_validator_new_from_metadata">new_from_metadata</a>( <a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>: <a href="../sui_system/validator.md#sui_system_validator_ValidatorMetadata">ValidatorMetadata</a>, <a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a>: u64, <a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a>: u64, ctx: &<b>mut</b> TxContext, ): <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a> { <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a> = <a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>.<a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>; <b>let</b> <a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a> = <a href="../sui_system/staking_pool.md#sui_system_staking_pool_new">staking_pool::new</a>(ctx); <b>let</b> <a href="../sui_system/validator.md#sui_system_validator_operation_cap_id">operation_cap_id</a> = <a href="../sui_system/validator_cap.md#sui_system_validator_cap_new_unverified_validator_operation_cap_and_transfer">validator_cap::new_unverified_validator_operation_cap_and_transfer</a>( <a href="../sui_system/validator.md#sui_system_validator_sui_address">sui_address</a>, ctx, ); <a href="../sui_system/validator.md#sui_system_validator_Validator">Validator</a> { <a href="../sui_system/validator.md#sui_system_validator_metadata">metadata</a>, // Initialize the voting power to be 0. // At the epoch change where this <a href="../sui_system/validator.md#sui_system_validator">validator</a> is actually added to the // active <a href="../sui_system/validator.md#sui_system_validator">validator</a> set, the voting power will be updated accordingly. <a href="../sui_system/voting_power.md#sui_system_voting_power">voting_power</a>: 0, <a href="../sui_system/validator.md#sui_system_validator_operation_cap_id">operation_cap_id</a>, <a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a>, <a href="../sui_system/staking_pool.md#sui_system_staking_pool">staking_pool</a>, <a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a>, next_epoch_stake: 0, <a href="../sui_system/validator.md#sui_system_validator_next_epoch_gas_price">next_epoch_gas_price</a>: <a href="../sui_system/validator.md#sui_system_validator_gas_price">gas_price</a>, next_epoch_commission_rate: <a href="../sui_system/validator.md#sui_system_validator_commission_rate">commission_rate</a>, extra_fields: bag::new(ctx), } } </code></pre> </details>