execution_config - [mainnet]
Maintains the execution config for the blockchain. The config is stored in a Reconfiguration, and may be updated by root.
use 0x1::chain_status;use 0x1::config_buffer;use 0x1::error;use 0x1::reconfiguration;use 0x1::system_addresses;
Constants
The provided on chain config bytes are empty or invalid
const EINVALID_CONFIG: u64 = 1;
Resources
ExecutionConfig
struct ExecutionConfig has drop, store, key
Fields
-
config: vector<u8>
Functions
set
Deprecated by set_for_next_epoch()
.
WARNING: calling this while randomness is enabled will trigger a new epoch without randomness!
TODO: update all the tests that reference this function, then disable this function.
public fun set(account: &signer, config: vector<u8>)
Implementation
public fun set(account: &signer, config: vector<u8>) acquires ExecutionConfig { system_addresses::assert_aptos_framework(account); chain_status::assert_genesis();
assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG));
if (exists<ExecutionConfig>(@aptos_framework)) { let config_ref = &mut borrow_global_mut<ExecutionConfig>(@aptos_framework).config; *config_ref = config; } else { move_to(account, ExecutionConfig { config }); }; // Need to trigger reconfiguration so validator nodes can sync on the updated configs. reconfiguration::reconfigure();}
set_for_next_epoch
This can be called by on-chain governance to update on-chain execution configs for the next epoch. Example usage:
aptos_framework::execution_config::set_for_next_epoch(&framework_signer, some_config_bytes);aptos_framework::aptos_governance::reconfigure(&framework_signer);
public fun set_for_next_epoch(account: &signer, config: vector<u8>)
Implementation
public fun set_for_next_epoch(account: &signer, config: vector<u8>) { system_addresses::assert_aptos_framework(account); assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); config_buffer::upsert(ExecutionConfig { config });}
on_new_epoch
Only used in reconfigurations to apply the pending ExecutionConfig
, if there is any.
public(friend) fun on_new_epoch(framework: &signer)
Implementation
public(friend) fun on_new_epoch(framework: &signer) acquires ExecutionConfig { system_addresses::assert_aptos_framework(framework); if (config_buffer::does_exist<ExecutionConfig>()) { let config = config_buffer::extract_v2<ExecutionConfig>(); if (exists<ExecutionConfig>(@aptos_framework)) { *borrow_global_mut<ExecutionConfig>(@aptos_framework) = config; } else { move_to(framework, config); }; }}
Specification
pragma verify = true;pragma aborts_if_is_strict;
set
public fun set(account: &signer, config: vector<u8>)
Ensure the caller is admin When setting now time must be later than last_reconfiguration_time.
pragma verify_duration_estimate = 600;let addr = signer::address_of(account);requires chain_status::is_genesis();requires exists<staking_config::StakingRewardsConfig>(@aptos_framework);requires len(config) > 0;include features::spec_periodical_reward_rate_decrease_enabled() ==> staking_config::StakingRewardsConfigEnabledRequirement;include aptos_coin::ExistsAptosCoin;requires system_addresses::is_aptos_framework_address(addr);requires timestamp::spec_now_microseconds() >= reconfiguration::last_reconfiguration_time();ensures exists<ExecutionConfig>(@aptos_framework);
set_for_next_epoch
public fun set_for_next_epoch(account: &signer, config: vector<u8>)
include config_buffer::SetForNextEpochAbortsIf;
on_new_epoch
public(friend) fun on_new_epoch(framework: &signer)
requires @aptos_framework == std::signer::address_of(framework);include config_buffer::OnNewEpochRequirement<ExecutionConfig>;aborts_if false;