Module 0x1::system_addresses
- Constants
- Function
assert_core_resource - Function
assert_core_resource_address - Function
is_core_resource_address - Function
assert_aptos_framework - Function
assert_framework_reserved_address - Function
assert_framework_reserved - Function
is_framework_reserved_address - Function
is_aptos_framework_address - Function
assert_vm - Function
is_vm - Function
is_vm_address - Function
is_reserved_address - Specification
use 0x1::error;
use 0x1::signer;
Constants
The address/account did not correspond to the core framework address
const ENOT_APTOS_FRAMEWORK_ADDRESS: u64 = 3;
The address/account did not correspond to the core resource address
const ENOT_CORE_RESOURCE_ADDRESS: u64 = 1;
The address is not framework reserved address
const ENOT_FRAMEWORK_RESERVED_ADDRESS: u64 = 4;
The operation can only be performed by the VM
const EVM: u64 = 2;
Function assert_core_resource
public fun assert_core_resource(account: &signer)
Implementation
public fun assert_core_resource(account: &signer) {
assert_core_resource_address(signer::address_of(account))
}
Function assert_core_resource_address
public fun assert_core_resource_address(addr: address)
Implementation
public fun assert_core_resource_address(addr: address) {
assert!(is_core_resource_address(addr), error::permission_denied(ENOT_CORE_RESOURCE_ADDRESS))
}
Function is_core_resource_address
public fun is_core_resource_address(addr: address): bool
Implementation
public fun is_core_resource_address(addr: address): bool {
addr == @core_resources
}
Function assert_aptos_framework
public fun assert_aptos_framework(account: &signer)
Implementation
public fun assert_aptos_framework(account: &signer) {
assert!(
is_aptos_framework_address(signer::address_of(account)),
error::permission_denied(ENOT_APTOS_FRAMEWORK_ADDRESS),
)
}
Function assert_framework_reserved_address
public fun assert_framework_reserved_address(account: &signer)
Implementation
public fun assert_framework_reserved_address(account: &signer) {
assert_framework_reserved(signer::address_of(account));
}
Function assert_framework_reserved
public fun assert_framework_reserved(addr: address)
Implementation
public fun assert_framework_reserved(addr: address) {
assert!(
is_framework_reserved_address(addr),
error::permission_denied(ENOT_FRAMEWORK_RESERVED_ADDRESS),
)
}
Function is_framework_reserved_address
Return true if addr is 0x0 or under the on chain governance’s control.
public fun is_framework_reserved_address(addr: address): bool
Implementation
public fun is_framework_reserved_address(addr: address): bool {
is_aptos_framework_address(addr) ||
addr == @0x2 ||
addr == @0x3 ||
addr == @0x4 ||
addr == @0x5 ||
addr == @0x6 ||
addr == @0x7 ||
addr == @0x8 ||
addr == @0x9 ||
addr == @0xa
}
Function is_aptos_framework_address
Return true if addr is 0x1.
public fun is_aptos_framework_address(addr: address): bool
Implementation
public fun is_aptos_framework_address(addr: address): bool {
addr == @aptos_framework
}
Function assert_vm
Assert that the signer has the VM reserved address.
public fun assert_vm(account: &signer)
Implementation
public fun assert_vm(account: &signer) {
assert!(is_vm(account), error::permission_denied(EVM))
}
Function is_vm
Return true if addr is a reserved address for the VM to call system modules.
public fun is_vm(account: &signer): bool
Implementation
public fun is_vm(account: &signer): bool {
is_vm_address(signer::address_of(account))
}
Function is_vm_address
Return true if addr is a reserved address for the VM to call system modules.
public fun is_vm_address(addr: address): bool
Implementation
public fun is_vm_address(addr: address): bool {
addr == @vm_reserved
}
Function is_reserved_address
Return true if addr is either the VM address or an Aptos Framework address.
public fun is_reserved_address(addr: address): bool
Implementation
public fun is_reserved_address(addr: address): bool {
is_aptos_framework_address(addr) || is_vm_address(addr)
}
Specification
High-level Requirements
| No. | Requirement | Criticality | Implementation | Enforcement |
|---|---|---|---|---|
| 1 | Asserting that a provided address corresponds to the Core Resources address should always yield a true result when matched. | Low | The assert_core_resource and assert_core_resource_address functions ensure that the provided signer or address belong to the @core_resources account. | Formally verified via AbortsIfNotCoreResource. |
| 2 | Asserting that a provided address corresponds to the Aptos Framework Resources address should always yield a true result when matched. | High | The assert_aptos_framework function ensures that the provided signer belongs to the @aptos_framework account. | Formally verified via AbortsIfNotAptosFramework. |
| 3 | Asserting that a provided address corresponds to the VM address should always yield a true result when matched. | High | The assert_vm function ensure that the provided signer belongs to the @vm_reserved account. | Formally verified via AbortsIfNotVM. |
Module-level Specification
pragma verify = true;
pragma aborts_if_is_strict;
Function assert_core_resource
public fun assert_core_resource(account: &signer)
pragma opaque;
include AbortsIfNotCoreResource { addr: signer::address_of(account) };
Function assert_core_resource_address
public fun assert_core_resource_address(addr: address)
pragma opaque;
include AbortsIfNotCoreResource;
Function is_core_resource_address
public fun is_core_resource_address(addr: address): bool
pragma opaque;
aborts_if false;
ensures result == (addr == @core_resources);
Function assert_aptos_framework
public fun assert_aptos_framework(account: &signer)
pragma opaque;
include AbortsIfNotAptosFramework;
Function assert_framework_reserved_address
public fun assert_framework_reserved_address(account: &signer)
aborts_if !is_framework_reserved_address(signer::address_of(account));
Function assert_framework_reserved
public fun assert_framework_reserved(addr: address)
aborts_if !is_framework_reserved_address(addr);
Specifies that a function aborts if the account does not have the aptos framework address.
schema AbortsIfNotAptosFramework {
account: signer;
// This enforces high-level requirement 2:
aborts_if signer::address_of(account) != @aptos_framework with error::PERMISSION_DENIED;
}
Function assert_vm
public fun assert_vm(account: &signer)
pragma opaque;
include AbortsIfNotVM;
Specifies that a function aborts if the account does not have the VM reserved address.
schema AbortsIfNotVM {
account: signer;
// This enforces high-level requirement 3:
aborts_if signer::address_of(account) != @vm_reserved with error::PERMISSION_DENIED;
}