aptos-move/framework/move-stdlib/doc/features.md
<a id="0x1_features"></a>
0x1::featuresDefines feature flags for Aptos. Those are used in Aptos specific implementations of features in the Move stdlib, the Aptos stdlib, and the Aptos framework.
============================================================================================ Feature Flag Definitions
Each feature flag should come with documentation which justifies the need of the flag. Introduction of a new feature flag requires approval of framework owners. Be frugal when introducing new feature flags, as too many can make it hard to understand the code.
Each feature flag should come with a specification of a lifetime:
a transient feature flag is only needed until a related code rollout has happened. This is typically associated with the introduction of new native Move functions, and is only used from Move code. The owner of this feature is obliged to remove it once this can be done.
a permanent feature flag is required to stay around forever. Typically, those flags guard behavior in native code, and the behavior with or without the feature need to be preserved for playback.
Note that removing a feature flag still requires the function which tests for the feature (like <code>code_dependency_check_enabled</code> below) to stay around for compatibility reasons, as it is a public function. However, once the feature flag is disabled, those functions can constantly return true.
FeaturesPendingFeaturescode_dependency_check_enabledtreat_friend_as_privateget_sha_512_and_ripemd_160_featuresha_512_and_ripemd_160_enabledget_aptos_stdlib_chain_id_featureaptos_stdlib_chain_id_enabledget_vm_binary_format_v6allow_vm_binary_format_v6get_collect_and_distribute_gas_fees_featurecollect_and_distribute_gas_feesmulti_ed25519_pk_validate_v2_featuremulti_ed25519_pk_validate_v2_enabledget_blake2b_256_featureblake2b_256_enabledget_resource_groups_featureresource_groups_enabledget_multisig_accounts_featuremultisig_accounts_enabledget_delegation_pools_featuredelegation_pools_enabledget_cryptography_algebra_natives_featurecryptography_algebra_enabledget_bls12_381_strutures_featurebls12_381_structures_enabledget_periodical_reward_rate_decrease_featureperiodical_reward_rate_decrease_enabledget_partial_governance_votingpartial_governance_voting_enabledget_delegation_pool_partial_governance_votingdelegation_pool_partial_governance_voting_enabledfee_payer_enabledget_auidsauids_enabledget_bulletproofs_featurebulletproofs_enabledget_signer_native_format_fix_featuresigner_native_format_fix_enabledget_module_event_featuremodule_event_enabledget_aggregator_v2_api_featureaggregator_v2_api_enabledget_aggregator_snapshots_featureaggregator_snapshots_enabledget_sponsored_automatic_account_creationsponsored_automatic_account_creation_enabledget_concurrent_token_v2_featureconcurrent_token_v2_enabledget_concurrent_assets_featureconcurrent_assets_enabledget_operator_beneficiary_change_featureoperator_beneficiary_change_enabledget_commission_change_delegation_pool_featurecommission_change_delegation_pool_enabledget_bn254_strutures_featurebn254_structures_enabledget_reconfigure_with_dkg_featurereconfigure_with_dkg_enabledget_keyless_accounts_featurekeyless_accounts_enabledget_keyless_but_zkless_accounts_featurekeyless_but_zkless_accounts_feature_enabledget_jwk_consensus_featurejwk_consensus_enabledget_concurrent_fungible_assets_featureconcurrent_fungible_assets_enabledis_object_code_deployment_enabledget_max_object_nesting_check_featuremax_object_nesting_check_enabledget_keyless_accounts_with_passkeys_featurekeyless_accounts_with_passkeys_feature_enabledget_multisig_v2_enhancement_featuremultisig_v2_enhancement_feature_enabledget_delegation_pool_allowlisting_featuredelegation_pool_allowlisting_enabledget_module_event_migration_featuremodule_event_migration_enabledget_transaction_context_extension_featuretransaction_context_extension_enabledget_coin_to_fungible_asset_migration_featurecoin_to_fungible_asset_migration_feature_enabledget_primary_apt_fungible_store_at_user_address_featureprimary_apt_fungible_store_at_user_address_enabledaggregator_v2_is_at_least_api_enabledget_object_native_derived_address_featureobject_native_derived_address_enabledget_dispatchable_fungible_asset_featuredispatchable_fungible_asset_enabledget_new_accounts_default_to_fa_apt_store_featurenew_accounts_default_to_fa_apt_store_enabledget_operations_default_to_fa_apt_store_featureoperations_default_to_fa_apt_store_enabledget_concurrent_fungible_balance_featureconcurrent_fungible_balance_enabledget_default_to_concurrent_fungible_balance_featuredefault_to_concurrent_fungible_balance_enabledget_abort_if_multisig_payload_mismatch_featureabort_if_multisig_payload_mismatch_enabledget_transaction_simulation_enhancement_featuretransaction_simulation_enhancement_enabledget_collection_owner_featureis_collection_owner_enabledget_native_memory_operations_featureis_native_memory_operations_enabledget_permissioned_signer_featureis_permissioned_signer_enabledget_account_abstraction_featureis_account_abstraction_enabledget_bulletproofs_batch_featurebulletproofs_batch_enabledis_derivable_account_abstraction_enabledis_domain_account_abstraction_enabledget_new_accounts_default_to_fa_store_featurenew_accounts_default_to_fa_store_enabledget_default_account_resource_featureis_default_account_resource_enabledget_jwk_consensus_per_key_mode_featureis_jwk_consensus_per_key_mode_enabledget_orderless_transactions_featureorderless_transactions_enabledget_calculate_transaction_fee_for_distribution_featureis_calculate_transaction_fee_for_distribution_enabledget_distribute_transaction_fee_featureis_distribute_transaction_fee_enabledget_monotonically_increasing_counter_featureis_monotonically_increasing_counter_enabledget_function_reflection_featureis_function_reflection_enabledget_slh_dsa_sha2_128s_signature_featureslh_dsa_sha2_128s_signature_enabledget_encrypted_transactions_featureis_encrypted_transactions_enabledchange_feature_flagschange_feature_flags_internalchange_feature_flags_for_next_epochon_new_epochis_enabledsetcontainsapply_diffensure_framework_signerFeaturesPendingFeaturesperiodical_reward_rate_decrease_enabledpartial_governance_voting_enabledmodule_event_enabledabort_if_multisig_payload_mismatch_enabledis_default_account_resource_enabledchange_feature_flags_internalchange_feature_flags_for_next_epochon_new_epochis_enabledsetcontainsapply_diff<a id="0x1_features_Features"></a>
FeaturesThe enabled features, represented by a bitset stored on chain.
<pre><code><b>struct</b> <a href="features.md#0x1_features_Features">Features</a> <b>has</b> key </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="features.md#0x1_features">features</a>: <a href="vector.md#0x1_vector">vector</a><u8></code> </dt> <dd> </dd> </dl> </details><a id="0x1_features_PendingFeatures"></a>
PendingFeaturesThis resource holds the feature vec updates received in the current epoch. On epoch change, the updates take effect and this buffer is cleared.
<pre><code><b>struct</b> <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a> <b>has</b> key </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="features.md#0x1_features">features</a>: <a href="vector.md#0x1_vector">vector</a><u8></code> </dt> <dd> </dd> </dl> </details><a id="@Constants_0"></a>
<a id="0x1_features_ABORT_IF_MULTISIG_PAYLOAD_MISMATCH"></a>
Whether the multisig v2 fix is enabled. Once enabled, the multisig transaction execution will explicitly abort if the provided payload does not match the payload stored on-chain.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_ABORT_IF_MULTISIG_PAYLOAD_MISMATCH">ABORT_IF_MULTISIG_PAYLOAD_MISMATCH</a>: u64 = 70; </code></pre><a id="0x1_features_ACCOUNT_ABSTRACTION"></a>
Whether the account abstraction is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_ACCOUNT_ABSTRACTION">ACCOUNT_ABSTRACTION</a>: u64 = 85; </code></pre><a id="0x1_features_AGGREGATOR_V2_IS_AT_LEAST_API"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_AGGREGATOR_V2_IS_AT_LEAST_API">AGGREGATOR_V2_IS_AT_LEAST_API</a>: u64 = 66; </code></pre><a id="0x1_features_APTOS_STD_CHAIN_ID_NATIVES"></a>
Whether the new <code>aptos_stdlib::type_info::chain_id()</code> native for fetching the chain ID is enabled. This is needed because of the introduction of a new native function. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_APTOS_STD_CHAIN_ID_NATIVES">APTOS_STD_CHAIN_ID_NATIVES</a>: u64 = 4; </code></pre><a id="0x1_features_APTOS_UNIQUE_IDENTIFIERS"></a>
Whether enable MOVE functions to call create_auid method to create AUIDs. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_APTOS_UNIQUE_IDENTIFIERS">APTOS_UNIQUE_IDENTIFIERS</a>: u64 = 23; </code></pre><a id="0x1_features_BLAKE2B_256_NATIVE"></a>
Whether the new BLAKE2B-256 hash function native is enabled. This is needed because of the introduction of new native function(s). Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_BLAKE2B_256_NATIVE">BLAKE2B_256_NATIVE</a>: u64 = 8; </code></pre><a id="0x1_features_BLS12_381_STRUCTURES"></a>
Whether the generic algebra implementation for BLS12381 operations are enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_BLS12_381_STRUCTURES">BLS12_381_STRUCTURES</a>: u64 = 13; </code></pre><a id="0x1_features_BN254_STRUCTURES"></a>
Whether the generic algebra implementation for BN254 operations are enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_BN254_STRUCTURES">BN254_STRUCTURES</a>: u64 = 43; </code></pre><a id="0x1_features_BULLETPROOFS_BATCH_NATIVES"></a>
Whether the batch Bulletproofs native functions are available. This is needed because of the introduction of a new native function. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_BULLETPROOFS_BATCH_NATIVES">BULLETPROOFS_BATCH_NATIVES</a>: u64 = 87; </code></pre><a id="0x1_features_BULLETPROOFS_NATIVES"></a>
Whether the Bulletproofs zero-knowledge range proof module is enabled, and the related native function is available. This is needed because of the introduction of a new native function. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_BULLETPROOFS_NATIVES">BULLETPROOFS_NATIVES</a>: u64 = 24; </code></pre><a id="0x1_features_CALCULATE_TRANSACTION_FEE_FOR_DISTRIBUTION"></a>
Whether to calculate the transaction fee for distribution.
<pre><code><b>const</b> <a href="features.md#0x1_features_CALCULATE_TRANSACTION_FEE_FOR_DISTRIBUTION">CALCULATE_TRANSACTION_FEE_FOR_DISTRIBUTION</a>: u64 = 96; </code></pre><a id="0x1_features_CHARGE_INVARIANT_VIOLATION"></a>
Charge invariant violation error. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_CHARGE_INVARIANT_VIOLATION">CHARGE_INVARIANT_VIOLATION</a>: u64 = 20; </code></pre><a id="0x1_features_CODE_DEPENDENCY_CHECK"></a>
Whether validation of package dependencies is enabled, and the related native function is available. This is needed because of introduction of a new native function. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_CODE_DEPENDENCY_CHECK">CODE_DEPENDENCY_CHECK</a>: u64 = 1; </code></pre><a id="0x1_features_COIN_TO_FUNGIBLE_ASSET_MIGRATION"></a>
Whether migration from coin to fungible asset feature is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_COIN_TO_FUNGIBLE_ASSET_MIGRATION">COIN_TO_FUNGIBLE_ASSET_MIGRATION</a>: u64 = 60; </code></pre><a id="0x1_features_COLLECTION_OWNER"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_COLLECTION_OWNER">COLLECTION_OWNER</a>: u64 = 79; </code></pre><a id="0x1_features_COLLECT_AND_DISTRIBUTE_GAS_FEES"></a>
Deprecated feature Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_COLLECT_AND_DISTRIBUTE_GAS_FEES">COLLECT_AND_DISTRIBUTE_GAS_FEES</a>: u64 = 6; </code></pre><a id="0x1_features_COMMISSION_CHANGE_DELEGATION_POOL"></a>
Whether the operator commission rate change in delegation pool is enabled. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_COMMISSION_CHANGE_DELEGATION_POOL">COMMISSION_CHANGE_DELEGATION_POOL</a>: u64 = 42; </code></pre><a id="0x1_features_CONCURRENT_FUNGIBLE_ASSETS"></a>
Whether enable Fungible Asset creation to create higher throughput concurrent variants. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_CONCURRENT_FUNGIBLE_ASSETS">CONCURRENT_FUNGIBLE_ASSETS</a>: u64 = 50; </code></pre><a id="0x1_features_CONCURRENT_FUNGIBLE_BALANCE"></a>
Whether enable concurent Fungible Balance to create higher throughput concurrent variants. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_CONCURRENT_FUNGIBLE_BALANCE">CONCURRENT_FUNGIBLE_BALANCE</a>: u64 = 67; </code></pre><a id="0x1_features_CRYPTOGRAPHY_ALGEBRA_NATIVES"></a>
Whether generic algebra basic operation support in <code>crypto_algebra.<b>move</b></code> are enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_CRYPTOGRAPHY_ALGEBRA_NATIVES">CRYPTOGRAPHY_ALGEBRA_NATIVES</a>: u64 = 12; </code></pre><a id="0x1_features_DEFAULT_ACCOUNT_RESOURCE"></a>
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DEFAULT_ACCOUNT_RESOURCE">DEFAULT_ACCOUNT_RESOURCE</a>: u64 = 91; </code></pre><a id="0x1_features_DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE"></a>
Whether to default new Fungible Store to the concurrent variant. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE">DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE</a>: u64 = 68; </code></pre><a id="0x1_features_DELEGATION_POOLS"></a>
Whether delegation pools are enabled. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DELEGATION_POOLS">DELEGATION_POOLS</a>: u64 = 11; </code></pre><a id="0x1_features_DELEGATION_POOL_ALLOWLISTING"></a>
Whether delegators allowlisting for delegation pools is supported. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DELEGATION_POOL_ALLOWLISTING">DELEGATION_POOL_ALLOWLISTING</a>: u64 = 56; </code></pre><a id="0x1_features_DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING"></a>
Whether enable paritial governance voting on delegation_pool. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING">DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING</a>: u64 = 21; </code></pre><a id="0x1_features_DERIVABLE_ACCOUNT_ABSTRACTION"></a>
Whether the account abstraction is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DERIVABLE_ACCOUNT_ABSTRACTION">DERIVABLE_ACCOUNT_ABSTRACTION</a>: u64 = 88; </code></pre><a id="0x1_features_DISPATCHABLE_FUNGIBLE_ASSET"></a>
Whether the dispatchable fungible asset standard feature is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_DISPATCHABLE_FUNGIBLE_ASSET">DISPATCHABLE_FUNGIBLE_ASSET</a>: u64 = 63; </code></pre><a id="0x1_features_DISTRIBUTE_TRANSACTION_FEE"></a>
Whether to distribute transaction fee to validators.
<pre><code><b>const</b> <a href="features.md#0x1_features_DISTRIBUTE_TRANSACTION_FEE">DISTRIBUTE_TRANSACTION_FEE</a>: u64 = 97; </code></pre><a id="0x1_features_EAPI_DISABLED"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_EAPI_DISABLED">EAPI_DISABLED</a>: u64 = 2; </code></pre><a id="0x1_features_ED25519_PUBKEY_VALIDATE_RETURN_FALSE_WRONG_LENGTH"></a>
Whether native_public_key_validate aborts when a public key of the wrong length is given Lifetime: ephemeral
<pre><code><b>const</b> <a href="features.md#0x1_features_ED25519_PUBKEY_VALIDATE_RETURN_FALSE_WRONG_LENGTH">ED25519_PUBKEY_VALIDATE_RETURN_FALSE_WRONG_LENGTH</a>: u64 = 14; </code></pre><a id="0x1_features_EFEATURE_CANNOT_BE_DISABLED"></a>
Deployed to production, and disabling is deprecated.
<pre><code><b>const</b> <a href="features.md#0x1_features_EFEATURE_CANNOT_BE_DISABLED">EFEATURE_CANNOT_BE_DISABLED</a>: u64 = 3; </code></pre><a id="0x1_features_EFRAMEWORK_SIGNER_NEEDED"></a>
The provided signer has not a framework address.
<pre><code><b>const</b> <a href="features.md#0x1_features_EFRAMEWORK_SIGNER_NEEDED">EFRAMEWORK_SIGNER_NEEDED</a>: u64 = 1; </code></pre><a id="0x1_features_EINVALID_FEATURE"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_EINVALID_FEATURE">EINVALID_FEATURE</a>: u64 = 1; </code></pre><a id="0x1_features_ENABLE_FUNCTION_VALUES"></a>
Whether function values are enabled. Lifetime: transient
We do not expect use from Move, so for now only for documentation purposes here
<pre><code><b>const</b> <a href="features.md#0x1_features_ENABLE_FUNCTION_VALUES">ENABLE_FUNCTION_VALUES</a>: u64 = 89; </code></pre><a id="0x1_features_ENCRYPTED_TRANSACTIONS"></a>
Whether the encrypted mempool feature is enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_ENCRYPTED_TRANSACTIONS">ENCRYPTED_TRANSACTIONS</a>: u64 = 108; </code></pre><a id="0x1_features_FEE_PAYER_ACCOUNT_OPTIONAL"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_FEE_PAYER_ACCOUNT_OPTIONAL">FEE_PAYER_ACCOUNT_OPTIONAL</a>: u64 = 35; </code></pre><a id="0x1_features_FEE_PAYER_ENABLED"></a>
Whether alternate gas payer is supported Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_FEE_PAYER_ENABLED">FEE_PAYER_ENABLED</a>: u64 = 22; </code></pre><a id="0x1_features_FUNCTION_REFLECTION"></a>
Whether function reflection is enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_FUNCTION_REFLECTION">FUNCTION_REFLECTION</a>: u64 = 105; </code></pre><a id="0x1_features_JWK_CONSENSUS"></a>
Deprecated by <code>aptos_framework::jwk_consensus_config::JWKConsensusConfig</code>.
<pre><code><b>const</b> <a href="features.md#0x1_features_JWK_CONSENSUS">JWK_CONSENSUS</a>: u64 = 49; </code></pre><a id="0x1_features_JWK_CONSENSUS_PER_KEY_MODE"></a>
If enabled, JWK consensus should run in per-key mode, where:
<a id="0x1_features_KEYLESS_ACCOUNTS"></a>
Whether the OIDB feature is enabled, possibly with the ZK-less verification mode.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_KEYLESS_ACCOUNTS">KEYLESS_ACCOUNTS</a>: u64 = 46; </code></pre><a id="0x1_features_KEYLESS_ACCOUNTS_WITH_PASSKEYS"></a>
Whether keyless accounts support passkey-based ephemeral signatures.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_KEYLESS_ACCOUNTS_WITH_PASSKEYS">KEYLESS_ACCOUNTS_WITH_PASSKEYS</a>: u64 = 54; </code></pre><a id="0x1_features_KEYLESS_BUT_ZKLESS_ACCOUNTS"></a>
Whether the ZK-less mode of the keyless accounts feature is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_KEYLESS_BUT_ZKLESS_ACCOUNTS">KEYLESS_BUT_ZKLESS_ACCOUNTS</a>: u64 = 47; </code></pre><a id="0x1_features_LIMIT_MAX_IDENTIFIER_LENGTH"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_LIMIT_MAX_IDENTIFIER_LENGTH">LIMIT_MAX_IDENTIFIER_LENGTH</a>: u64 = 38; </code></pre><a id="0x1_features_MAX_OBJECT_NESTING_CHECK"></a>
Whether checking the maximum object nesting is enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_MAX_OBJECT_NESTING_CHECK">MAX_OBJECT_NESTING_CHECK</a>: u64 = 53; </code></pre><a id="0x1_features_MODULE_EVENT"></a>
Whether emit function in <code>event.<b>move</b></code> are enabled for module events.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_MODULE_EVENT">MODULE_EVENT</a>: u64 = 26; </code></pre><a id="0x1_features_MODULE_EVENT_MIGRATION"></a>
Whether aptos_framwork enables the behavior of module event migration.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_MODULE_EVENT_MIGRATION">MODULE_EVENT_MIGRATION</a>: u64 = 57; </code></pre><a id="0x1_features_MONOTONICALLY_INCREASING_COUNTER"></a>
Whether the monotonically increasing counter native function is enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_MONOTONICALLY_INCREASING_COUNTER">MONOTONICALLY_INCREASING_COUNTER</a>: u64 = 98; </code></pre><a id="0x1_features_MULTISIG_ACCOUNTS"></a>
Whether multisig accounts (different from accounts with multi-ed25519 auth keys) are enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_MULTISIG_ACCOUNTS">MULTISIG_ACCOUNTS</a>: u64 = 10; </code></pre><a id="0x1_features_MULTISIG_V2_ENHANCEMENT"></a>
Whether the Multisig V2 enhancement feature is enabled.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_MULTISIG_V2_ENHANCEMENT">MULTISIG_V2_ENHANCEMENT</a>: u64 = 55; </code></pre><a id="0x1_features_MULTI_ED25519_PK_VALIDATE_V2_NATIVES"></a>
Whether the new <code>aptos_stdlib::multi_ed25519::public_key_validate_internal_v2()</code> native is enabled. This is needed because of the introduction of a new native function. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_MULTI_ED25519_PK_VALIDATE_V2_NATIVES">MULTI_ED25519_PK_VALIDATE_V2_NATIVES</a>: u64 = 7; </code></pre><a id="0x1_features_NATIVE_MEMORY_OPERATIONS"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_NATIVE_MEMORY_OPERATIONS">NATIVE_MEMORY_OPERATIONS</a>: u64 = 80; </code></pre><a id="0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE"></a>
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE">NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE</a>: u64 = 64; </code></pre><a id="0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_STORE"></a>
Whether new accounts default to the Fungible Asset store. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_STORE">NEW_ACCOUNTS_DEFAULT_TO_FA_STORE</a>: u64 = 90; </code></pre><a id="0x1_features_OBJECT_CODE_DEPLOYMENT"></a>
Whether deploying to objects is enabled.
<pre><code><b>const</b> <a href="features.md#0x1_features_OBJECT_CODE_DEPLOYMENT">OBJECT_CODE_DEPLOYMENT</a>: u64 = 52; </code></pre><a id="0x1_features_OBJECT_NATIVE_DERIVED_ADDRESS"></a>
Whether we use more efficient native implementation of computing object derived address
<pre><code><b>const</b> <a href="features.md#0x1_features_OBJECT_NATIVE_DERIVED_ADDRESS">OBJECT_NATIVE_DERIVED_ADDRESS</a>: u64 = 62; </code></pre><a id="0x1_features_OPERATIONS_DEFAULT_TO_FA_APT_STORE"></a>
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_OPERATIONS_DEFAULT_TO_FA_APT_STORE">OPERATIONS_DEFAULT_TO_FA_APT_STORE</a>: u64 = 65; </code></pre><a id="0x1_features_OPERATOR_BENEFICIARY_CHANGE"></a>
Whether allow changing beneficiaries for operators. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_OPERATOR_BENEFICIARY_CHANGE">OPERATOR_BENEFICIARY_CHANGE</a>: u64 = 39; </code></pre><a id="0x1_features_ORDERLESS_TRANSACTIONS"></a>
Whether orderless transactions are enabled. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_ORDERLESS_TRANSACTIONS">ORDERLESS_TRANSACTIONS</a>: u64 = 94; </code></pre><a id="0x1_features_PARTIAL_GOVERNANCE_VOTING"></a>
Whether enable paritial governance voting on aptos_governance. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_PARTIAL_GOVERNANCE_VOTING">PARTIAL_GOVERNANCE_VOTING</a>: u64 = 17; </code></pre><a id="0x1_features_PERIODICAL_REWARD_RATE_DECREASE"></a>
Whether reward rate decreases periodically. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_PERIODICAL_REWARD_RATE_DECREASE">PERIODICAL_REWARD_RATE_DECREASE</a>: u64 = 16; </code></pre><a id="0x1_features_PERMISSIONED_SIGNER"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_PERMISSIONED_SIGNER">PERMISSIONED_SIGNER</a>: u64 = 84; </code></pre><a id="0x1_features_PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS">PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS</a>: u64 = 61; </code></pre><a id="0x1_features_RECONFIGURE_WITH_DKG"></a>
Deprecated by <code>aptos_framework::randomness_config::RandomnessConfig</code>.
<pre><code><b>const</b> <a href="features.md#0x1_features_RECONFIGURE_WITH_DKG">RECONFIGURE_WITH_DKG</a>: u64 = 45; </code></pre><a id="0x1_features_RESOURCE_GROUPS"></a>
Whether resource groups are enabled. This is needed because of new attributes for structs and a change in storage representation.
<pre><code><b>const</b> <a href="features.md#0x1_features_RESOURCE_GROUPS">RESOURCE_GROUPS</a>: u64 = 9; </code></pre><a id="0x1_features_RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET">RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET</a>: u64 = 41; </code></pre><a id="0x1_features_SAFER_METADATA"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_SAFER_METADATA">SAFER_METADATA</a>: u64 = 32; </code></pre><a id="0x1_features_SAFER_RESOURCE_GROUPS"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_SAFER_RESOURCE_GROUPS">SAFER_RESOURCE_GROUPS</a>: u64 = 31; </code></pre><a id="0x1_features_SHA_512_AND_RIPEMD_160_NATIVES"></a>
Whether the new SHA2-512, SHA3-512 and RIPEMD-160 hash function natives are enabled. This is needed because of the introduction of new native functions. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_SHA_512_AND_RIPEMD_160_NATIVES">SHA_512_AND_RIPEMD_160_NATIVES</a>: u64 = 3; </code></pre><a id="0x1_features_SIGNATURE_CHECKER_V2_SCRIPT_FIX"></a>
Whether the fix for a counting bug in the script path of the signature checker pass is enabled. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_SIGNATURE_CHECKER_V2_SCRIPT_FIX">SIGNATURE_CHECKER_V2_SCRIPT_FIX</a>: u64 = 29; </code></pre><a id="0x1_features_SIGNER_NATIVE_FORMAT_FIX"></a>
Fix the native formatter for signer. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_SIGNER_NATIVE_FORMAT_FIX">SIGNER_NATIVE_FORMAT_FIX</a>: u64 = 25; </code></pre><a id="0x1_features_SINGLE_SENDER_AUTHENTICATOR"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_SINGLE_SENDER_AUTHENTICATOR">SINGLE_SENDER_AUTHENTICATOR</a>: u64 = 33; </code></pre><a id="0x1_features_SLH_DSA_SHA2_128S_SIGNATURE"></a>
Whether SLH-DSA-SHA2-128s signature scheme is enabled for transaction authentication. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_SLH_DSA_SHA2_128S_SIGNATURE">SLH_DSA_SHA2_128S_SIGNATURE</a>: u64 = 107; </code></pre><a id="0x1_features_SPONSORED_AUTOMATIC_ACCOUNT_CREATION"></a>
Whether the automatic creation of accounts is enabled for sponsored transactions. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_SPONSORED_AUTOMATIC_ACCOUNT_CREATION">SPONSORED_AUTOMATIC_ACCOUNT_CREATION</a>: u64 = 34; </code></pre><a id="0x1_features_STRUCT_CONSTRUCTORS"></a>
Whether struct constructors are enabled
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_STRUCT_CONSTRUCTORS">STRUCT_CONSTRUCTORS</a>: u64 = 15; </code></pre><a id="0x1_features_TRANSACTION_CONTEXT_EXTENSION"></a>
Whether the transaction context extension is enabled. This feature allows the module <code>transaction_context</code> to provide contextual information about the user transaction.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_TRANSACTION_CONTEXT_EXTENSION">TRANSACTION_CONTEXT_EXTENSION</a>: u64 = 59; </code></pre><a id="0x1_features_TRANSACTION_SIMULATION_ENHANCEMENT"></a>
Whether the simulation enhancement is enabled. This enables the simulation without an authentication check, the sponsored transaction simulation when the fee payer is set to 0x0, and the multisig transaction simulation consistnet with the execution.
Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_TRANSACTION_SIMULATION_ENHANCEMENT">TRANSACTION_SIMULATION_ENHANCEMENT</a>: u64 = 78; </code></pre><a id="0x1_features_TREAT_FRIEND_AS_PRIVATE"></a>
Whether during upgrade compatibility checking, friend functions should be treated similar like private functions. Lifetime: permanent
<pre><code><b>const</b> <a href="features.md#0x1_features_TREAT_FRIEND_AS_PRIVATE">TREAT_FRIEND_AS_PRIVATE</a>: u64 = 2; </code></pre><a id="0x1_features_VM_BINARY_FORMAT_V6"></a>
Whether to allow the use of binary format version v6. Lifetime: transient
<pre><code><b>const</b> <a href="features.md#0x1_features_VM_BINARY_FORMAT_V6">VM_BINARY_FORMAT_V6</a>: u64 = 5; </code></pre><a id="0x1_features_VM_BINARY_FORMAT_V7"></a>
<pre><code><b>const</b> <a href="features.md#0x1_features_VM_BINARY_FORMAT_V7">VM_BINARY_FORMAT_V7</a>: u64 = 40; </code></pre><a id="0x1_features_VM_BINARY_FORMAT_V8"></a>
Whether bytecode version v8 is enabled. Lifetime: transient
We do not expect use from Move, so for now only for documentation purposes here
<pre><code><b>const</b> <a href="features.md#0x1_features_VM_BINARY_FORMAT_V8">VM_BINARY_FORMAT_V8</a>: u64 = 86; </code></pre><a id="0x1_features_code_dependency_check_enabled"></a>
code_dependency_check_enabled<a id="0x1_features_treat_friend_as_private"></a>
treat_friend_as_private<a id="0x1_features_get_sha_512_and_ripemd_160_feature"></a>
get_sha_512_and_ripemd_160_feature<a id="0x1_features_sha_512_and_ripemd_160_enabled"></a>
sha_512_and_ripemd_160_enabled<a id="0x1_features_get_aptos_stdlib_chain_id_feature"></a>
get_aptos_stdlib_chain_id_feature<a id="0x1_features_aptos_stdlib_chain_id_enabled"></a>
aptos_stdlib_chain_id_enabled<a id="0x1_features_get_vm_binary_format_v6"></a>
get_vm_binary_format_v6<a id="0x1_features_allow_vm_binary_format_v6"></a>
allow_vm_binary_format_v6<a id="0x1_features_get_collect_and_distribute_gas_fees_feature"></a>
get_collect_and_distribute_gas_fees_featureDeprecated feature
<pre><code>#[deprecated] <b>public</b> <b>fun</b> <a href="features.md#0x1_features_get_collect_and_distribute_gas_fees_feature">get_collect_and_distribute_gas_fees_feature</a>(): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_get_collect_and_distribute_gas_fees_feature">get_collect_and_distribute_gas_fees_feature</a>(): u64 { <b>abort</b> <a href="error.md#0x1_error_invalid_argument">error::invalid_argument</a>(<a href="features.md#0x1_features_EINVALID_FEATURE">EINVALID_FEATURE</a>) } </code></pre> </details><a id="0x1_features_collect_and_distribute_gas_fees"></a>
collect_and_distribute_gas_fees<a id="0x1_features_multi_ed25519_pk_validate_v2_feature"></a>
multi_ed25519_pk_validate_v2_feature<a id="0x1_features_multi_ed25519_pk_validate_v2_enabled"></a>
multi_ed25519_pk_validate_v2_enabled<a id="0x1_features_get_blake2b_256_feature"></a>
get_blake2b_256_feature<a id="0x1_features_blake2b_256_enabled"></a>
blake2b_256_enabled<a id="0x1_features_get_resource_groups_feature"></a>
get_resource_groups_feature<a id="0x1_features_resource_groups_enabled"></a>
resource_groups_enabled<a id="0x1_features_get_multisig_accounts_feature"></a>
get_multisig_accounts_feature<a id="0x1_features_multisig_accounts_enabled"></a>
multisig_accounts_enabled<a id="0x1_features_get_delegation_pools_feature"></a>
get_delegation_pools_feature<a id="0x1_features_delegation_pools_enabled"></a>
delegation_pools_enabled<a id="0x1_features_get_cryptography_algebra_natives_feature"></a>
get_cryptography_algebra_natives_feature<a id="0x1_features_cryptography_algebra_enabled"></a>
cryptography_algebra_enabled<a id="0x1_features_get_bls12_381_strutures_feature"></a>
get_bls12_381_strutures_feature<a id="0x1_features_bls12_381_structures_enabled"></a>
bls12_381_structures_enabled<a id="0x1_features_get_periodical_reward_rate_decrease_feature"></a>
get_periodical_reward_rate_decrease_feature<a id="0x1_features_periodical_reward_rate_decrease_enabled"></a>
periodical_reward_rate_decrease_enabled<a id="0x1_features_get_partial_governance_voting"></a>
get_partial_governance_voting<a id="0x1_features_partial_governance_voting_enabled"></a>
partial_governance_voting_enabled<a id="0x1_features_get_delegation_pool_partial_governance_voting"></a>
get_delegation_pool_partial_governance_voting<a id="0x1_features_delegation_pool_partial_governance_voting_enabled"></a>
delegation_pool_partial_governance_voting_enabled<a id="0x1_features_fee_payer_enabled"></a>
fee_payer_enabled<a id="0x1_features_get_auids"></a>
get_auids<a id="0x1_features_auids_enabled"></a>
auids_enabled<a id="0x1_features_get_bulletproofs_feature"></a>
get_bulletproofs_feature<a id="0x1_features_bulletproofs_enabled"></a>
bulletproofs_enabled<a id="0x1_features_get_signer_native_format_fix_feature"></a>
get_signer_native_format_fix_feature<a id="0x1_features_signer_native_format_fix_enabled"></a>
signer_native_format_fix_enabled<a id="0x1_features_get_module_event_feature"></a>
get_module_event_feature<a id="0x1_features_module_event_enabled"></a>
module_event_enabled<a id="0x1_features_get_aggregator_v2_api_feature"></a>
get_aggregator_v2_api_feature<a id="0x1_features_aggregator_v2_api_enabled"></a>
aggregator_v2_api_enabled<a id="0x1_features_get_aggregator_snapshots_feature"></a>
get_aggregator_snapshots_feature<a id="0x1_features_aggregator_snapshots_enabled"></a>
aggregator_snapshots_enabled<a id="0x1_features_get_sponsored_automatic_account_creation"></a>
get_sponsored_automatic_account_creation<a id="0x1_features_sponsored_automatic_account_creation_enabled"></a>
sponsored_automatic_account_creation_enabled<a id="0x1_features_get_concurrent_token_v2_feature"></a>
get_concurrent_token_v2_feature<a id="0x1_features_concurrent_token_v2_enabled"></a>
concurrent_token_v2_enabled<a id="0x1_features_get_concurrent_assets_feature"></a>
get_concurrent_assets_feature<a id="0x1_features_concurrent_assets_enabled"></a>
concurrent_assets_enabled<a id="0x1_features_get_operator_beneficiary_change_feature"></a>
get_operator_beneficiary_change_feature<a id="0x1_features_operator_beneficiary_change_enabled"></a>
operator_beneficiary_change_enabled<a id="0x1_features_get_commission_change_delegation_pool_feature"></a>
get_commission_change_delegation_pool_feature<a id="0x1_features_commission_change_delegation_pool_enabled"></a>
commission_change_delegation_pool_enabled<a id="0x1_features_get_bn254_strutures_feature"></a>
get_bn254_strutures_feature<a id="0x1_features_bn254_structures_enabled"></a>
bn254_structures_enabled<a id="0x1_features_get_reconfigure_with_dkg_feature"></a>
get_reconfigure_with_dkg_feature<a id="0x1_features_reconfigure_with_dkg_enabled"></a>
reconfigure_with_dkg_enabled<a id="0x1_features_get_keyless_accounts_feature"></a>
get_keyless_accounts_feature<a id="0x1_features_keyless_accounts_enabled"></a>
keyless_accounts_enabled<a id="0x1_features_get_keyless_but_zkless_accounts_feature"></a>
get_keyless_but_zkless_accounts_feature<a id="0x1_features_keyless_but_zkless_accounts_feature_enabled"></a>
keyless_but_zkless_accounts_feature_enabled<a id="0x1_features_get_jwk_consensus_feature"></a>
get_jwk_consensus_feature<a id="0x1_features_jwk_consensus_enabled"></a>
jwk_consensus_enabled<a id="0x1_features_get_concurrent_fungible_assets_feature"></a>
get_concurrent_fungible_assets_feature<a id="0x1_features_concurrent_fungible_assets_enabled"></a>
concurrent_fungible_assets_enabled<a id="0x1_features_is_object_code_deployment_enabled"></a>
is_object_code_deployment_enabled<a id="0x1_features_get_max_object_nesting_check_feature"></a>
get_max_object_nesting_check_feature<a id="0x1_features_max_object_nesting_check_enabled"></a>
max_object_nesting_check_enabled<a id="0x1_features_get_keyless_accounts_with_passkeys_feature"></a>
get_keyless_accounts_with_passkeys_feature<a id="0x1_features_keyless_accounts_with_passkeys_feature_enabled"></a>
keyless_accounts_with_passkeys_feature_enabled<a id="0x1_features_get_multisig_v2_enhancement_feature"></a>
get_multisig_v2_enhancement_feature<a id="0x1_features_multisig_v2_enhancement_feature_enabled"></a>
multisig_v2_enhancement_feature_enabled<a id="0x1_features_get_delegation_pool_allowlisting_feature"></a>
get_delegation_pool_allowlisting_feature<a id="0x1_features_delegation_pool_allowlisting_enabled"></a>
delegation_pool_allowlisting_enabled<a id="0x1_features_get_module_event_migration_feature"></a>
get_module_event_migration_feature<a id="0x1_features_module_event_migration_enabled"></a>
module_event_migration_enabled<a id="0x1_features_get_transaction_context_extension_feature"></a>
get_transaction_context_extension_feature<a id="0x1_features_transaction_context_extension_enabled"></a>
transaction_context_extension_enabled<a id="0x1_features_get_coin_to_fungible_asset_migration_feature"></a>
get_coin_to_fungible_asset_migration_feature<a id="0x1_features_coin_to_fungible_asset_migration_feature_enabled"></a>
coin_to_fungible_asset_migration_feature_enabled<a id="0x1_features_get_primary_apt_fungible_store_at_user_address_feature"></a>
get_primary_apt_fungible_store_at_user_address_feature<a id="0x1_features_primary_apt_fungible_store_at_user_address_enabled"></a>
primary_apt_fungible_store_at_user_address_enabled<a id="0x1_features_aggregator_v2_is_at_least_api_enabled"></a>
aggregator_v2_is_at_least_api_enabled<a id="0x1_features_get_object_native_derived_address_feature"></a>
get_object_native_derived_address_feature<a id="0x1_features_object_native_derived_address_enabled"></a>
object_native_derived_address_enabled<a id="0x1_features_get_dispatchable_fungible_asset_feature"></a>
get_dispatchable_fungible_asset_feature<a id="0x1_features_dispatchable_fungible_asset_enabled"></a>
dispatchable_fungible_asset_enabled<a id="0x1_features_get_new_accounts_default_to_fa_apt_store_feature"></a>
get_new_accounts_default_to_fa_apt_store_feature<a id="0x1_features_new_accounts_default_to_fa_apt_store_enabled"></a>
new_accounts_default_to_fa_apt_store_enabled<a id="0x1_features_get_operations_default_to_fa_apt_store_feature"></a>
get_operations_default_to_fa_apt_store_feature<a id="0x1_features_operations_default_to_fa_apt_store_enabled"></a>
operations_default_to_fa_apt_store_enabled<a id="0x1_features_get_concurrent_fungible_balance_feature"></a>
get_concurrent_fungible_balance_feature<a id="0x1_features_concurrent_fungible_balance_enabled"></a>
concurrent_fungible_balance_enabled<a id="0x1_features_get_default_to_concurrent_fungible_balance_feature"></a>
get_default_to_concurrent_fungible_balance_feature<a id="0x1_features_default_to_concurrent_fungible_balance_enabled"></a>
default_to_concurrent_fungible_balance_enabled<a id="0x1_features_get_abort_if_multisig_payload_mismatch_feature"></a>
get_abort_if_multisig_payload_mismatch_feature<a id="0x1_features_abort_if_multisig_payload_mismatch_enabled"></a>
abort_if_multisig_payload_mismatch_enabled<a id="0x1_features_get_transaction_simulation_enhancement_feature"></a>
get_transaction_simulation_enhancement_feature<a id="0x1_features_transaction_simulation_enhancement_enabled"></a>
transaction_simulation_enhancement_enabled<a id="0x1_features_get_collection_owner_feature"></a>
get_collection_owner_feature<a id="0x1_features_is_collection_owner_enabled"></a>
is_collection_owner_enabled<a id="0x1_features_get_native_memory_operations_feature"></a>
get_native_memory_operations_feature<a id="0x1_features_is_native_memory_operations_enabled"></a>
is_native_memory_operations_enabled<a id="0x1_features_get_permissioned_signer_feature"></a>
get_permissioned_signer_feature<a id="0x1_features_is_permissioned_signer_enabled"></a>
is_permissioned_signer_enabled<a id="0x1_features_get_account_abstraction_feature"></a>
get_account_abstraction_feature<a id="0x1_features_is_account_abstraction_enabled"></a>
is_account_abstraction_enabled<a id="0x1_features_get_bulletproofs_batch_feature"></a>
get_bulletproofs_batch_feature<a id="0x1_features_bulletproofs_batch_enabled"></a>
bulletproofs_batch_enabled<a id="0x1_features_is_derivable_account_abstraction_enabled"></a>
is_derivable_account_abstraction_enabled<a id="0x1_features_is_domain_account_abstraction_enabled"></a>
is_domain_account_abstraction_enabled<a id="0x1_features_get_new_accounts_default_to_fa_store_feature"></a>
get_new_accounts_default_to_fa_store_feature<a id="0x1_features_new_accounts_default_to_fa_store_enabled"></a>
new_accounts_default_to_fa_store_enabled<a id="0x1_features_get_default_account_resource_feature"></a>
get_default_account_resource_feature<a id="0x1_features_is_default_account_resource_enabled"></a>
is_default_account_resource_enabled<a id="0x1_features_get_jwk_consensus_per_key_mode_feature"></a>
get_jwk_consensus_per_key_mode_feature<a id="0x1_features_is_jwk_consensus_per_key_mode_enabled"></a>
is_jwk_consensus_per_key_mode_enabled<a id="0x1_features_get_orderless_transactions_feature"></a>
get_orderless_transactions_feature<a id="0x1_features_orderless_transactions_enabled"></a>
orderless_transactions_enabled<a id="0x1_features_get_calculate_transaction_fee_for_distribution_feature"></a>
get_calculate_transaction_fee_for_distribution_feature<a id="0x1_features_is_calculate_transaction_fee_for_distribution_enabled"></a>
is_calculate_transaction_fee_for_distribution_enabled<a id="0x1_features_get_distribute_transaction_fee_feature"></a>
get_distribute_transaction_fee_feature<a id="0x1_features_is_distribute_transaction_fee_enabled"></a>
is_distribute_transaction_fee_enabled<a id="0x1_features_get_monotonically_increasing_counter_feature"></a>
get_monotonically_increasing_counter_feature<a id="0x1_features_is_monotonically_increasing_counter_enabled"></a>
is_monotonically_increasing_counter_enabled<a id="0x1_features_get_function_reflection_feature"></a>
get_function_reflection_feature<a id="0x1_features_is_function_reflection_enabled"></a>
is_function_reflection_enabled<a id="0x1_features_get_slh_dsa_sha2_128s_signature_feature"></a>
get_slh_dsa_sha2_128s_signature_feature<a id="0x1_features_slh_dsa_sha2_128s_signature_enabled"></a>
slh_dsa_sha2_128s_signature_enabled<a id="0x1_features_get_encrypted_transactions_feature"></a>
get_encrypted_transactions_feature<a id="0x1_features_is_encrypted_transactions_enabled"></a>
is_encrypted_transactions_enabled<a id="0x1_features_change_feature_flags"></a>
change_feature_flagsDeprecated to prevent validator set changes during DKG.
Genesis/tests should use <code><a href="features.md#0x1_features_change_feature_flags_internal">change_feature_flags_internal</a>()</code> for feature vec initialization.
Governance proposals should use <code><a href="features.md#0x1_features_change_feature_flags_for_next_epoch">change_feature_flags_for_next_epoch</a>()</code> to enable/disable features.
<pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_change_feature_flags">change_feature_flags</a>(_framework: &<a href="signer.md#0x1_signer">signer</a>, _enable: <a href="vector.md#0x1_vector">vector</a><u64>, _disable: <a href="vector.md#0x1_vector">vector</a><u64>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_change_feature_flags">change_feature_flags</a>( _framework: &<a href="signer.md#0x1_signer">signer</a>, _enable: <a href="vector.md#0x1_vector">vector</a><u64>, _disable: <a href="vector.md#0x1_vector">vector</a><u64> ) { <b>abort</b>(<a href="error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="features.md#0x1_features_EAPI_DISABLED">EAPI_DISABLED</a>)) } </code></pre> </details><a id="0x1_features_change_feature_flags_internal"></a>
change_feature_flags_internalUpdate feature flags directly. Only used in genesis/tests.
<pre><code><b>fun</b> <a href="features.md#0x1_features_change_feature_flags_internal">change_feature_flags_internal</a>(framework: &<a href="signer.md#0x1_signer">signer</a>, enable: <a href="vector.md#0x1_vector">vector</a><u64>, disable: <a href="vector.md#0x1_vector">vector</a><u64>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>fun</b> <a href="features.md#0x1_features_change_feature_flags_internal">change_feature_flags_internal</a>( framework: &<a href="signer.md#0x1_signer">signer</a>, enable: <a href="vector.md#0x1_vector">vector</a><u64>, disable: <a href="vector.md#0x1_vector">vector</a><u64> ) { <b>assert</b>!( <a href="signer.md#0x1_signer_address_of">signer::address_of</a>(framework) == @std, <a href="error.md#0x1_error_permission_denied">error::permission_denied</a>(<a href="features.md#0x1_features_EFRAMEWORK_SIGNER_NEEDED">EFRAMEWORK_SIGNER_NEEDED</a>) ); <b>if</b> (!<b>exists</b><<a href="features.md#0x1_features_Features">Features</a>>(@std)) { <b>move_to</b><<a href="features.md#0x1_features_Features">Features</a>>(framework, <a href="features.md#0x1_features_Features">Features</a> { <a href="features.md#0x1_features">features</a>: <a href="vector.md#0x1_vector">vector</a>[] }) }; <b>let</b> <a href="features.md#0x1_features">features</a> = &<b>mut</b> <a href="features.md#0x1_features_Features">Features</a>[@std].<a href="features.md#0x1_features">features</a>; enable.for_each_ref(|feature| { <a href="features.md#0x1_features_set">set</a>(<a href="features.md#0x1_features">features</a>, *feature, <b>true</b>); }); disable.for_each_ref(|feature| { <a href="features.md#0x1_features_set">set</a>(<a href="features.md#0x1_features">features</a>, *feature, <b>false</b>); }); } </code></pre> </details><a id="0x1_features_change_feature_flags_for_next_epoch"></a>
change_feature_flags_for_next_epochEnable and disable features for the next epoch.
<pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_change_feature_flags_for_next_epoch">change_feature_flags_for_next_epoch</a>(framework: &<a href="signer.md#0x1_signer">signer</a>, enable: <a href="vector.md#0x1_vector">vector</a><u64>, disable: <a href="vector.md#0x1_vector">vector</a><u64>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_change_feature_flags_for_next_epoch">change_feature_flags_for_next_epoch</a>( framework: &<a href="signer.md#0x1_signer">signer</a>, enable: <a href="vector.md#0x1_vector">vector</a><u64>, disable: <a href="vector.md#0x1_vector">vector</a><u64> ) <b>acquires</b> <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a>, <a href="features.md#0x1_features_Features">Features</a> { <b>assert</b>!( <a href="signer.md#0x1_signer_address_of">signer::address_of</a>(framework) == @std, <a href="error.md#0x1_error_permission_denied">error::permission_denied</a>(<a href="features.md#0x1_features_EFRAMEWORK_SIGNER_NEEDED">EFRAMEWORK_SIGNER_NEEDED</a>) ); // Figure out the baseline feature vec that the diff will be applied <b>to</b>. <b>let</b> new_feature_vec = <b>if</b> (<b>exists</b><<a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a>>(@std)) { // If there is a buffered feature vec, <b>use</b> it <b>as</b> the baseline. <b>let</b> <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a> { <a href="features.md#0x1_features">features</a> } = <b>move_from</b><<a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a>>(@std); <a href="features.md#0x1_features">features</a> } <b>else</b> <b>if</b> (<b>exists</b><<a href="features.md#0x1_features_Features">Features</a>>(@std)) { // Otherwise, <b>use</b> the currently effective feature flag vec <b>as</b> the baseline, <b>if</b> it <b>exists</b>. <a href="features.md#0x1_features_Features">Features</a>[@std].<a href="features.md#0x1_features">features</a> } <b>else</b> { // Otherwise, <b>use</b> an empty feature vec. <a href="vector.md#0x1_vector">vector</a>[] }; // Apply the diff and save it <b>to</b> the buffer. <a href="features.md#0x1_features_apply_diff">apply_diff</a>(&<b>mut</b> new_feature_vec, enable, disable); <b>move_to</b>(framework, <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a> { <a href="features.md#0x1_features">features</a>: new_feature_vec }); } </code></pre> </details><a id="0x1_features_on_new_epoch"></a>
on_new_epochApply all the pending feature flag changes. Should only be used at the end of a reconfiguration with DKG.
While the scope is public, it can only be usd in system transactions like <code>block_prologue</code> and governance proposals, who have permission to set the flag that's checked in <code>extract()</code>.
<pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_on_new_epoch">on_new_epoch</a>(framework: &<a href="signer.md#0x1_signer">signer</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_on_new_epoch">on_new_epoch</a>(framework: &<a href="signer.md#0x1_signer">signer</a>) <b>acquires</b> <a href="features.md#0x1_features_Features">Features</a>, <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a> { <a href="features.md#0x1_features_ensure_framework_signer">ensure_framework_signer</a>(framework); <b>if</b> (<b>exists</b><<a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a>>(@std)) { <b>let</b> <a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a> { <a href="features.md#0x1_features">features</a> } = <b>move_from</b><<a href="features.md#0x1_features_PendingFeatures">PendingFeatures</a>>(@std); <b>if</b> (<b>exists</b><<a href="features.md#0x1_features_Features">Features</a>>(@std)) { <a href="features.md#0x1_features_Features">Features</a>[@std].<a href="features.md#0x1_features">features</a> = <a href="features.md#0x1_features">features</a>; } <b>else</b> { <b>move_to</b>(framework, <a href="features.md#0x1_features_Features">Features</a> { <a href="features.md#0x1_features">features</a> }) } } } </code></pre> </details><a id="0x1_features_is_enabled"></a>
is_enabledCheck whether the feature is enabled.
<pre><code>#[view] <b>public</b> <b>fun</b> <a href="features.md#0x1_features_is_enabled">is_enabled</a>(feature: u64): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="features.md#0x1_features_is_enabled">is_enabled</a>(feature: u64): bool { <b>exists</b><<a href="features.md#0x1_features_Features">Features</a>>(@std) && <a href="features.md#0x1_features_contains">contains</a>(&<a href="features.md#0x1_features_Features">Features</a>[@std].<a href="features.md#0x1_features">features</a>, feature) } </code></pre> </details><a id="0x1_features_set"></a>
setHelper to include or exclude a feature flag.
<pre><code><b>fun</b> <a href="features.md#0x1_features_set">set</a>(<a href="features.md#0x1_features">features</a>: &<b>mut</b> <a href="vector.md#0x1_vector">vector</a><u8>, feature: u64, <b>include</b>: bool) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>fun</b> <a href="features.md#0x1_features_set">set</a>(<a href="features.md#0x1_features">features</a>: &<b>mut</b> <a href="vector.md#0x1_vector">vector</a><u8>, feature: u64, <b>include</b>: bool) { <b>let</b> byte_index = feature / 8; <b>let</b> bit_mask = 1 << ((feature % 8) <b>as</b> u8); <b>while</b> (<a href="features.md#0x1_features">features</a>.length() <= byte_index) { <a href="features.md#0x1_features">features</a>.push_back(0) }; <b>if</b> (<b>include</b>) <a href="features.md#0x1_features">features</a>[byte_index] |= bit_mask <b>else</b> <a href="features.md#0x1_features">features</a>[byte_index] &=(0xff ^ bit_mask) } </code></pre> </details><a id="0x1_features_contains"></a>
containsHelper to check whether a feature flag is enabled.
<pre><code><b>fun</b> <a href="features.md#0x1_features_contains">contains</a>(<a href="features.md#0x1_features">features</a>: &<a href="vector.md#0x1_vector">vector</a><u8>, feature: u64): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>fun</b> <a href="features.md#0x1_features_contains">contains</a>(<a href="features.md#0x1_features">features</a>: &<a href="vector.md#0x1_vector">vector</a><u8>, feature: u64): bool { <b>let</b> byte_index = feature / 8; <b>let</b> bit_mask = 1 << ((feature % 8) <b>as</b> u8); byte_index < <a href="features.md#0x1_features">features</a>.length() && (<a href="features.md#0x1_features">features</a>[byte_index] & bit_mask) != 0 } </code></pre> </details><a id="0x1_features_apply_diff"></a>
apply_diff<a id="0x1_features_ensure_framework_signer"></a>
ensure_framework_signer<a id="@Specification_1"></a>
<a id="@Specification_1_Features"></a>
Features<a id="@Specification_1_PendingFeatures"></a>
PendingFeatures<a id="@Specification_1_periodical_reward_rate_decrease_enabled"></a>
periodical_reward_rate_decrease_enabled<a id="0x1_features_spec_partial_governance_voting_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_partial_governance_voting_enabled">spec_partial_governance_voting_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_PARTIAL_GOVERNANCE_VOTING">PARTIAL_GOVERNANCE_VOTING</a>) } </code></pre><a id="@Specification_1_partial_governance_voting_enabled"></a>
partial_governance_voting_enabled<a id="@Specification_1_module_event_enabled"></a>
module_event_enabled<a id="0x1_features_spec_abort_if_multisig_payload_mismatch_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_abort_if_multisig_payload_mismatch_enabled">spec_abort_if_multisig_payload_mismatch_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_ABORT_IF_MULTISIG_PAYLOAD_MISMATCH">ABORT_IF_MULTISIG_PAYLOAD_MISMATCH</a>) } </code></pre><a id="0x1_features_spec_new_accounts_default_to_fa_apt_store_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_new_accounts_default_to_fa_apt_store_enabled">spec_new_accounts_default_to_fa_apt_store_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE">NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE</a>) } </code></pre><a id="0x1_features_spec_new_accounts_default_to_fa_store_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_new_accounts_default_to_fa_store_enabled">spec_new_accounts_default_to_fa_store_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_NEW_ACCOUNTS_DEFAULT_TO_FA_STORE">NEW_ACCOUNTS_DEFAULT_TO_FA_STORE</a>) } </code></pre><a id="0x1_features_spec_simulation_enhancement_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_simulation_enhancement_enabled">spec_simulation_enhancement_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_TRANSACTION_SIMULATION_ENHANCEMENT">TRANSACTION_SIMULATION_ENHANCEMENT</a>) } </code></pre><a id="@Specification_1_abort_if_multisig_payload_mismatch_enabled"></a>
abort_if_multisig_payload_mismatch_enabled<a id="@Specification_1_is_default_account_resource_enabled"></a>
is_default_account_resource_enabled<a id="@Specification_1_change_feature_flags_internal"></a>
change_feature_flags_internal<a id="@Specification_1_change_feature_flags_for_next_epoch"></a>
change_feature_flags_for_next_epoch<a id="0x1_features_spec_contains"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_contains">spec_contains</a>(<a href="features.md#0x1_features">features</a>: <a href="vector.md#0x1_vector">vector</a><u8>, feature: u64): bool { ((int2bv( (((1 <b>as</b> u8) << ((feature % (8 <b>as</b> u64)) <b>as</b> u64)) <b>as</b> u8) ) <b>as</b> u8) & <a href="features.md#0x1_features">features</a>[feature / 8] <b>as</b> u8) > (0 <b>as</b> u8) && (feature / 8) < len(<a href="features.md#0x1_features">features</a>) } </code></pre><a id="@Specification_1_on_new_epoch"></a>
on_new_epoch<a id="0x1_features_spec_sha_512_and_ripemd_160_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_sha_512_and_ripemd_160_enabled">spec_sha_512_and_ripemd_160_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_SHA_512_AND_RIPEMD_160_NATIVES">SHA_512_AND_RIPEMD_160_NATIVES</a>) } </code></pre><a id="@Specification_1_is_enabled"></a>
is_enabled<a id="0x1_features_spec_is_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(feature: u64): bool; </code></pre><a id="0x1_features_spec_periodical_reward_rate_decrease_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_periodical_reward_rate_decrease_enabled">spec_periodical_reward_rate_decrease_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_PERIODICAL_REWARD_RATE_DECREASE">PERIODICAL_REWARD_RATE_DECREASE</a>) } </code></pre><a id="0x1_features_spec_fee_payer_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_fee_payer_enabled">spec_fee_payer_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_FEE_PAYER_ENABLED">FEE_PAYER_ENABLED</a>) } </code></pre><a id="0x1_features_spec_module_event_enabled"></a>
<pre><code><b>fun</b> <a href="features.md#0x1_features_spec_module_event_enabled">spec_module_event_enabled</a>(): bool { <a href="features.md#0x1_features_spec_is_enabled">spec_is_enabled</a>(<a href="features.md#0x1_features_MODULE_EVENT">MODULE_EVENT</a>) } </code></pre><a id="@Specification_1_set"></a>
set<a id="@Specification_1_contains"></a>
contains<a id="@Specification_1_apply_diff"></a>
apply_diff