fn cancel(
env: soroban_sdk::Env,
operation_id: soroban_sdk::BytesN<32>,
canceller: soroban_sdk::Address,
)
fn execute(
env: soroban_sdk::Env,
target: soroban_sdk::Address,
function: soroban_sdk::Symbol,
args: soroban_sdk::Vec,
predecessor: soroban_sdk::BytesN<32>,
salt: soroban_sdk::BytesN<32>,
executor: Option,
) -> soroban_sdk::Val
Returns Some(index) if the account has the specified role,
where index is the position of the account for that role,
and can be used to query [AccessControl::get_role_member()].
Returns None if the account does not have the specified role.
e - Access to Soroban environment.account - The account to check.role - The role to check for.fn has_role(
env: soroban_sdk::Env,
account: soroban_sdk::Address,
role: soroban_sdk::Symbol,
) -> Option
fn schedule(
env: soroban_sdk::Env,
target: soroban_sdk::Address,
function: soroban_sdk::Symbol,
args: soroban_sdk::Vec,
predecessor: soroban_sdk::BytesN<32>,
salt: soroban_sdk::BytesN<32>,
delay: u32,
proposer: soroban_sdk::Address,
) -> soroban_sdk::BytesN<32>
Returns the admin account.
e - Access to Soroban environment.fn get_admin(env: soroban_sdk::Env) -> Option
Grants a role to an account.
e - Access to Soroban environment.account - The account to grant the role to.role - The role to grant.caller - The address of the caller, must be the admin or have the
RoleAdmin for the role.AccessControlError::Unauthorized] - If the caller does not have
enough privileges.AccessControlError::MaxRolesExceeded] - If adding a new role would
exceed the maximum allowed number of roles.["role_granted", role: Symbol, account: Address][caller: Address]fn grant_role(
env: soroban_sdk::Env,
account: soroban_sdk::Address,
role: soroban_sdk::Symbol,
caller: soroban_sdk::Address,
)
Revokes a role from an account.
To revoke the caller's own role, use
[AccessControl::renounce_role()] instead.
e - Access to Soroban environment.account - The account to revoke the role from.role - The role to revoke.caller - The address of the caller, must be the admin or has the
RoleAdmin for the role.AccessControlError::Unauthorized] - If the caller does not have
enough privileges.AccessControlError::RoleNotHeld] - If the account doesn't have
the role.AccessControlError::RoleIsEmpty] - If the role has no members.["role_revoked", role: Symbol, account: Address][caller: Address]fn revoke_role(
env: soroban_sdk::Env,
account: soroban_sdk::Address,
role: soroban_sdk::Symbol,
caller: soroban_sdk::Address,
)
Custom authorization check for self-administration operations.
This enables the timelock contract to execute operations on itself when
the admin is set to the contract's own address. Unlike external
operations which use execute_op, self-administration operations are
executed by calling the admin function directly (e.g., update_delay,
grant_role).
The __check_auth implementation validates that:
The caller must construct an OperationMeta signature containing the
predecessor and salt values that were used when scheduling the
operation, allowing this function to validate and mark the operation as
executed.
fn __check_auth(
env: soroban_sdk::Env,
signature_payload: soroban_sdk::BytesN<32>,
context_meta: soroban_sdk::Vec,
auth_contexts: soroban_sdk::Vec,
) -> Result<(), TimelockError>
fn update_delay(env: soroban_sdk::Env, new_delay: u32, operator: soroban_sdk::Address)
Initializes the timelock controller.
e - Access to Soroban environment.min_delay - Initial minimum delay in ledgers for operations.proposers - Accounts to be granted proposer and canceller roles.executors - Accounts to be granted executor role.admin - Optional account to be granted admin role for initial setup.
If provided, this admin can configure roles without delay but should
renounce the role after setup to enforce timelock governance.fn __constructor(
env: soroban_sdk::Env,
min_delay: u32,
proposers: soroban_sdk::Vec,
executors: soroban_sdk::Vec,
admin: Option,
)
Returns the minimum delay in ledgers required for operations.
e - Access to the Soroban environment.TimelockError::MinDelayNotSet] - If the minimum delay has not been
initialized.fn get_min_delay(env: soroban_sdk::Env) -> u32
Allows an account to renounce a role assigned to itself. Users can only renounce roles for their own account.
e - Access to Soroban environment.role - The role to renounce.caller - The address of the caller, must be the account that has the
role.AccessControlError::RoleNotHeld] - If the caller doesn't have the
role.AccessControlError::RoleIsEmpty] - If the role has no members.["role_revoked", role: Symbol, account: Address][caller: Address]fn renounce_role(
env: soroban_sdk::Env,
role: soroban_sdk::Symbol,
caller: soroban_sdk::Address,
)
Returns the admin role for a specific role.
If no admin role is explicitly set, returns None.
e - Access to Soroban environment.role - The role to query the admin role for.fn get_role_admin(
env: soroban_sdk::Env,
role: soroban_sdk::Symbol,
) -> Option
Computes the unique identifier for an operation from its parameters.
e - Access to the Soroban environment.target - The target contract address.function - The function name to invoke.args - The arguments to pass to the function.predecessor - The predecessor operation ID.salt - The salt for uniqueness.fn hash_operation(
env: soroban_sdk::Env,
target: soroban_sdk::Address,
function: soroban_sdk::Symbol,
args: soroban_sdk::Vec,
predecessor: soroban_sdk::BytesN<32>,
salt: soroban_sdk::BytesN<32>,
) -> soroban_sdk::BytesN<32>
Allows the current admin to renounce their role, making the contract permanently admin-less. This is useful for decentralization purposes or when the admin role is no longer needed. Once the admin is renounced, it cannot be reinstated.
e - Access to Soroban environment.AccessControlError::AdminNotSet] - If no admin account is set.["admin_renounced", admin: Address][]fn renounce_admin(env: soroban_sdk::Env)
Sets admin_role as the admin role of role.
e - Access to Soroban environment.role - The role to set the admin for.admin_role - The new admin role.["role_admin_changed", role: Symbol][previous_admin_role: Symbol, new_admin_role: Symbol]AccessControlError::AdminNotSet] - If admin account is not set.fn set_role_admin(
env: soroban_sdk::Env,
role: soroban_sdk::Symbol,
admin_role: soroban_sdk::Symbol,
)
Returns the account at the specified index for a given role.
A function to get all members of a role is not provided because that
would be unbounded. To enumerate all members of a role, use
[AccessControl::get_role_member_count()] to get the total number of
members and then use [AccessControl::get_role_member()] to retrieve
each member one by one.
e - Access to Soroban environment.role - The role to query.index - The index of the account to retrieve.AccessControlError::IndexOutOfBounds] - If the index is out of
bounds for the role's member list.fn get_role_member(
env: soroban_sdk::Env,
role: soroban_sdk::Symbol,
index: u32,
) -> soroban_sdk::Address
Returns a vector containing all existing roles. Defaults to empty vector if no roles exist.
e - Access to Soroban environment.This function returns all roles that currently have at least one member.
The maximum number of roles is limited by [MAX_ROLES].
fn get_existing_roles(env: soroban_sdk::Env) -> soroban_sdk::Vec
Returns the current state of an operation.
e - Access to the Soroban environment.operation_id - The unique identifier of the operation.fn get_operation_state(
env: soroban_sdk::Env,
operation_id: soroban_sdk::BytesN<32>,
) -> OperationState
Initiates the admin role transfer. Admin privileges for the current admin are not revoked until the recipient accepts the transfer. Overrides the previous pending transfer if there is one.
e - Access to Soroban environment.new_admin - The account to transfer the admin privileges to.live_until_ledger - The ledger number at which the pending transfer
expires. If live_until_ledger is 0, the pending transfer is
cancelled. live_until_ledger argument is implicitly bounded by the
maximum allowed TTL extension for a temporary storage entry and
specifying a higher value will cause the code to panic.crate::role_transfer::RoleTransferError::NoPendingTransfer] - If
trying to cancel a transfer that doesn't exist.crate::role_transfer::RoleTransferError::InvalidLiveUntilLedger] -
If the specified ledger is in the past.crate::role_transfer::RoleTransferError::InvalidPendingAccount] -
If the specified pending account is not the same as the provided new
address.fn transfer_admin_role(
env: soroban_sdk::Env,
new_admin: soroban_sdk::Address,
live_until_ledger: u32,
)
Returns the ledger sequence number at which an operation becomes ready.
e - Access to the Soroban environment.operation_id - The unique identifier of the operation.fn get_operation_ledger(
env: soroban_sdk::Env,
operation_id: soroban_sdk::BytesN<32>,
) -> u32
Completes the 2-step admin transfer.
e - Access to Soroban environment.["admin_transfer_completed", new_admin: Address][previous_admin: Address]crate::role_transfer::RoleTransferError::NoPendingTransfer] - If
there is no pending transfer to accept.AccessControlError::AdminNotSet] - If admin account is not set.fn accept_admin_transfer(env: soroban_sdk::Env)
Returns the total number of accounts that have the specified role. If the role does not exist, returns 0.
e - Access to Soroban environment.role - The role to get the count for.fn get_role_member_count(env: soroban_sdk::Env, role: soroban_sdk::Symbol) -> u32