#[repr(packed(1))]pub struct FunctionAccountData {Show 47 fields
pub is_scheduled: u8,
pub is_triggered: u8,
pub permissions: u32,
pub status: FunctionStatus,
pub bump: u8,
pub creator_seed: [u8; 32],
pub name: [u8; 64],
pub metadata: [u8; 256],
pub created_at_slot: u64,
pub created_at: i64,
pub updated_at: i64,
pub enclave: Quote,
pub mr_enclaves: [[u8; 32]; 32],
pub container_registry: [u8; 64],
pub container: [u8; 64],
pub version: [u8; 32],
pub params_schema: [u8; 256],
pub default_container_params: [u8; 256],
pub authority: Pubkey,
pub attestation_queue: Pubkey,
pub queue_idx: u32,
pub address_lookup_table: Pubkey,
pub schedule: [u8; 64],
pub last_execution_timestamp: i64,
pub next_allowed_timestamp: i64,
pub trigger_count: u64,
pub triggered_since: i64,
pub permission_expiration: i64,
pub num_requests: u64,
pub requests_disabled: u8,
pub requests_require_authorization: u8,
pub reserved1: [u8; 8],
pub requests_fee: u64,
pub escrow_wallet: Pubkey,
pub escrow_token_wallet: Pubkey,
pub reward_escrow_wallet: Pubkey,
pub reward_escrow_token_wallet: Pubkey,
pub error_status: u8,
pub num_routines: u64,
pub routines_disabled: BoolWithLock,
pub routines_require_authorization: u8,
pub routines_dev_fee: u64,
pub mr_enclave: [u8; 32],
pub verification_status: u8,
pub verification_timestamp: i64,
pub valid_until: i64,
pub _ebuf: [u8; 956],
}Fields§
§is_scheduled: u8FunctionRoutineAccountData for all scheduled executionsWhether the function is invoked on a schedule or by request
is_triggered: u8FunctionRoutineAccountData for all scheduled executionsWhether the function has been manually triggered with the function_trigger instruction
permissions: u32The function permissions granted by the attestation_queue.authority
status: FunctionStatus§bump: u8PDA bump.
creator_seed: [u8; 32]The payer who originally created the function. Cannot change, used to derive PDA.
name: [u8; 64]The name of the function for easier identification.
metadata: [u8; 256]The metadata of the function for easier identification.
created_at_slot: u64The Solana slot when the function was created. (PDA)
created_at: i64The unix timestamp when the function was created.
updated_at: i64The unix timestamp when the function config (container, registry, version, or schedule) was changed.
enclave: QuoteFunctionRoutineAccountData for all scheduled executionsThe enclave quote
mr_enclaves: [[u8; 32]; 32]An array of permitted mr_enclave measurements for the function.
container_registry: [u8; 64]The off-chain registry to fetch the function container from.
container: [u8; 64]The identifier of the container in the given container_registry.
version: [u8; 32]The version tag of the container to pull.
params_schema: [u8; 256]FunctionRoutineAccountData for all scheduled executionsThe expected schema for the container params.
default_container_params: [u8; 256]FunctionRoutineAccountData for all scheduled executionsThe default params passed to the container during scheduled execution.
The authority of the function which is authorized to make account changes.
attestation_queue: PubkeyThe address of the AttestationQueueAccountData that will be processing function requests and verifying the function measurements.
queue_idx: u32An incrementer used to rotate through an AttestationQueue’s verifiers.
address_lookup_table: PubkeyThe address_lookup_table of the function used to increase the number of accounts we can fit into a function result.
schedule: [u8; 64]FunctionRoutineAccountData for all scheduled executionsThe cron schedule to run the function on.
last_execution_timestamp: i64FunctionRoutineAccountData for all scheduled executionsThe unix timestamp when the function was last run.
next_allowed_timestamp: i64FunctionRoutineAccountData for all scheduled executionsThe unix timestamp when the function is allowed to run next.
trigger_count: u64FunctionRequestAccountData for all on-demand executionsThe number of times to trigger the function upon the next invocation.
triggered_since: i64FunctionRequestAccountData for all on-demand executionsTime this function has been sitting in an explicitly triggered state
permission_expiration: i64UNUSED. The unix timestamp when the current permissions expire.
num_requests: u64Number of requests created for this function. Used to prevent closing when there are live requests.
requests_disabled: u8Whether custom requests have been disabled for this function.
Whether new requests need to be authorized by the FunctionAccount authority before being initialized. Useful if you want to use CPIs to control request account creation.
reserved1: [u8; 8]DEPRECATED.
requests_fee: u64The dev fee that is paid out from the request’s escrow to the function’s escrow on each successful invocation. This is used to reward the function maintainer for providing the function. 0 = No Fee. Sender = requests’s escrow_token_wallet. Receiver = function’s reward_token_wallet.
escrow_wallet: PubkeyThe SwitchboardWallet that will handle pre-funding rewards paid out to function verifiers.
escrow_token_wallet: PubkeyThe escrow_wallet TokenAccount that handles pre-funding rewards paid out to function runners.
reward_escrow_wallet: PubkeyThe SwitchboardWallet that will handle acruing rewards from requests. Defaults to the escrow_wallet.
reward_escrow_token_wallet: PubkeyThe reward_escrow_wallet TokenAccount used to acrue rewards from requests made with custom parameters.
error_status: u8The last reported error code if the most recent response was a failure
num_routines: u64Number of routines created for this function. Used to prevent closing when there are live routines.
routines_disabled: BoolWithLockWhether custom routines have been disabled for this function.
Whether new routines need to be authorized by the FunctionAccount authority before being initialized. Useful if you want to provide AccessControl and only allow certain parties to run routines.
routines_dev_fee: u64The fee that is paid out from the routine’s escrow to the function’s escrow on each successful invocation. This is used to reward the function maintainer for providing the function. 0 = No Fee. Sender = routine’s escrow_token_wallet. Receiver = function’s reward_token_wallet.
mr_enclave: [u8; 32]The functions MRENCLAVE measurement dictating the contents of the secure enclave.
verification_status: u8The VerificationStatus of the quote.
verification_timestamp: i64The unix timestamp when the quote was last verified.
valid_until: i64The unix timestamp when the quotes verification status expires.
_ebuf: [u8; 956]Reserved.
Implementations§
Source§impl FunctionAccountData
impl FunctionAccountData
pub fn size() -> usize
Sourcepub fn new<'info>(
function_account_info: &'info AccountInfo<'info>,
) -> Result<Ref<'info, FunctionAccountData>>
pub fn new<'info>( function_account_info: &'info AccountInfo<'info>, ) -> Result<Ref<'info, FunctionAccountData>>
Sourcepub fn new_from_bytes(data: &[u8]) -> Result<&FunctionAccountData>
pub fn new_from_bytes(data: &[u8]) -> Result<&FunctionAccountData>
Sourcepub fn validate(&self, signer: &AccountInfo<'_>) -> Result<bool>
pub fn validate(&self, signer: &AccountInfo<'_>) -> Result<bool>
Validate that the provided accounts correspond to the expected function accounts
§Arguments
signer- Solana AccountInfo for a signer
Sourcepub fn validate_signer<'a>(&self, signer: &AccountInfo<'a>) -> Result<bool>
👎Deprecated since 0.28.35: please use a FunctionRoutineAccountData for all scheduled executions
pub fn validate_signer<'a>(&self, signer: &AccountInfo<'a>) -> Result<bool>
FunctionRoutineAccountData for all scheduled executionsValidate that the provided accounts correspond to the expected function accounts
§Arguments
signer- Solana AccountInfo for a signer\
Sourcepub fn validate_request(
&self,
request: &FunctionRequestAccountData,
enclave_signer: &AccountInfo<'_>,
) -> Result<bool>
pub fn validate_request( &self, request: &FunctionRequestAccountData, enclave_signer: &AccountInfo<'_>, ) -> Result<bool>
Validates that the provided request is assigned to the same AttestationQueueAccountData as the function and the
provided enclave_signer matches the enclave_signer stored in the request’s active_request field.
§Arguments
request- TheFunctionRequestAccountDatabeing validated.enclave_signer- TheAccountInfoof the enclave signer to validate.
§Errors
Returns an error if:
- the function and request have different attestation queues
- the request’s verified signer does not match the provided
enclave_signer - the
enclave_signerdid not sign the transaction
§Returns
Returns Ok(true) if the validation succeeds, Ok(false) otherwise.
§Examples
use switchboard_solana::FunctionRequestAccountData;
#[derive(Accounts)]
pub struct Settle<'info> {
// YOUR PROGRAM ACCOUNTS
#[account(
mut,
has_one = switchboard_request,
)]
pub user: AccountLoader<'info, UserState>,
// SWITCHBOARD ACCOUNTS
#[account(
constraint = function.load()?.validate_request(
&request,
&enclave_signer.to_account_info()
)?
)]
pub function: AccountLoader<'info, FunctionAccountData>,
#[account(
has_one = function,
)]
pub request: Box<Account<'info, FunctionRequestAccountData>>,
pub enclave_signer: Signer<'info>,
}Sourcepub fn validate_routine(
&self,
routine: &FunctionRoutineAccountData,
enclave_signer: &AccountInfo<'_>,
) -> Result<bool>
pub fn validate_routine( &self, routine: &FunctionRoutineAccountData, enclave_signer: &AccountInfo<'_>, ) -> Result<bool>
Validates that the provided routine is assigned to the same AttestationQueueAccountData as the function and the
provided enclave_signer matches the enclave_signer stored in the routine’s enclave_signer field.
§Arguments
routine- TheFunctionRoutineAccountDatabeing validated.enclave_signer- TheAccountInfoof the enclave signer to validate.
§Errors
Returns an error if:
- the function and routine have different attestation queues
- the routine’s verified signer does not match the provided
enclave_signer - the
enclave_signerdid not sign the transaction
§Returns
Returns Ok(true) if the validation succeeds, Ok(false) otherwise.
§Examples
use switchboard_solana::FunctionRoutineAccountData;
#[derive(Accounts)]
pub struct Settle<'info> {
// YOUR PROGRAM ACCOUNTS
#[account(
mut,
has_one = switchboard_routine,
)]
pub user: AccountLoader<'info, UserState>,
// SWITCHBOARD ACCOUNTS
pub switchboard_function: AccountLoader<'info, FunctionAccountData>,
#[account(
constraint = switchboard_routine.validate_signer(
&switchboard_function.to_account_info(),
&enclave_signer.to_account_info()
)?
)]
pub switchboard_routine: Box<Account<'info, FunctionRoutineAccountData>>,
pub enclave_signer: Signer<'info>,
}pub fn is_empty_schedule(&self) -> bool
FunctionRoutineAccountData for all scheduled executionspub fn get_container(&self) -> String
pub fn get_container_registry(&self) -> String
pub fn get_version(&self) -> String
pub fn get_name(&self) -> String
pub fn get_function_name(&self) -> String
Sourcepub fn assert_permissions(
&self,
queue_require_usage_permissions: bool,
) -> Result<()>
pub fn assert_permissions( &self, queue_require_usage_permissions: bool, ) -> Result<()>
Sourcepub fn assert_mr_enclave(&self, mr_enclave: &[u8; 32]) -> Result<()>
pub fn assert_mr_enclave(&self, mr_enclave: &[u8; 32]) -> Result<()>
Asserts that the given mr_enclave is valid by checking it against the enclave set.
If the mr_enclave is invalid, returns an InvalidMrEnclave error.
Sourcepub fn is_valid_enclave(&self, mr_enclave: &[u8; 32]) -> bool
pub fn is_valid_enclave(&self, mr_enclave: &[u8; 32]) -> bool
Checks if the given mr_enclave is valid by verifying if it exists in the list of valid
mr_enclaves stored in the current instance of FunctionImpl.
§Arguments
mr_enclave- A reference to a 32-byte array representing themr_enclavevalue of the enclave to be validated.
§Returns
A boolean value indicating whether the given mr_enclave is valid or not.
Sourcepub fn parse_enclaves(&self) -> Vec<[u8; 32]>
pub fn parse_enclaves(&self) -> Vec<[u8; 32]>
Parses the enclave measurements and returns a vector of 32-byte arrays representing the non-empty mr_enclaves.
§Example
use crate::FunctionAccountData;
let function = FunctionAccountData::default();
let parsed_enclaves = function.parse_enclaves();
assert_eq(0, parsed_enclaves.len());Sourcepub fn assert_has_enclaves(&self) -> Result<()>
pub fn assert_has_enclaves(&self) -> Result<()>
Asserts that the current instance has enclaves.
§Errors
Returns an error of type SwitchboardError::MrEnclavesEmpty if the enclaves are empty.
Sourcepub fn ready_for_routines(&self) -> Result<()>
pub fn ready_for_routines(&self) -> Result<()>
Sourcepub fn ready_for_requests(&self) -> Result<()>
pub fn ready_for_requests(&self) -> Result<()>
Sourcepub fn get_reward_token_wallet(&self) -> Pubkey
pub fn get_reward_token_wallet(&self) -> Pubkey
Returns the public key of the reward token wallet. If the reward escrow token wallet is set, it returns the reward escrow token wallet. Otherwise, it returns the escrow token wallet.
Source§impl FunctionAccountData
impl FunctionAccountData
pub async fn get_program_accounts( rpc: &RpcClient, filters: FunctionFilters, commitment: Option<CommitmentLevel>, ) -> Result<Vec<(Pubkey, FunctionAccountData)>, SbError>
target_os="solana" only.pub async fn get_or_create_from_seed( rpc: &RpcClient, payer: Arc<Keypair>, attestation_queue: Pubkey, seed: Option<&str>, params: Option<FunctionInitParams>, ) -> Result<Pubkey, SbError>
target_os="solana" only.pub fn get_discriminator_filter() -> RpcFilterType
target_os="solana" only.pub fn get_permissions_filter(permissions: &u32) -> RpcFilterType
target_os="solana" only.pub fn get_is_triggered_filter() -> RpcFilterType
FunctionRequestAccountData for all on-demand executionstarget_os="solana" only.pub fn get_is_scheduled_filter() -> RpcFilterType
FunctionRoutineAccountData for all scheduled executionstarget_os="solana" only.pub fn get_is_active_filter() -> RpcFilterType
target_os="solana" only.pub fn get_queue_filter(queue_pubkey: &Pubkey) -> RpcFilterType
target_os="solana" only.target_os="solana" only.target_os="solana" only.pub fn get_queue_idx_filter(queue_idx: &u32) -> RpcFilterType
target_os="solana" only.pub fn get_metadata_filter(metadata: Vec<u8>) -> RpcFilterType
target_os="solana" only.pub fn get_is_ready_filters(queue_pubkey: &Pubkey) -> Vec<RpcFilterType>
FunctionRoutineAccountData or FunctionRequestAccountData for all function executions.target_os="solana" only.pub fn get_schedule(&self) -> Option<Schedule>
target_os="solana" only.pub fn get_last_execution_datetime(&self) -> DateTime<Utc>
target_os="solana" only.pub fn get_next_execution_datetime(&self) -> Option<DateTime<Utc>>
target_os="solana" only.pub fn should_execute(&self, now: DateTime<Utc>) -> bool
target_os="solana" only.pub fn is_scheduled(&self) -> bool
FunctionRoutineAccountData for all scheduled executionstarget_os="solana" only.pub fn fetch(client: &RpcClient, pubkey: Pubkey) -> Result<Self, SbError>
target_os="solana" only.pub async fn fetch_async( client: &RpcClient, pubkey: Pubkey, ) -> Result<Self, SbError>
target_os="solana" only.pub fn fetch_sync<T: SyncClient>( client: &T, pubkey: Pubkey, ) -> Result<Self, SbError>
target_os="solana" only.pub fn build_ix( accounts: &FunctionInitAccounts, params: &FunctionInitParams, ) -> Result<Instruction, SbError>
target_os="solana" only.Trait Implementations§
Source§impl AccountDeserialize for FunctionAccountData
impl AccountDeserialize for FunctionAccountData
Source§fn try_deserialize(buf: &mut &[u8]) -> Result<Self>
fn try_deserialize(buf: &mut &[u8]) -> Result<Self>
Mint account into a token
Account.Source§fn try_deserialize_unchecked(buf: &mut &[u8]) -> Result<Self>
fn try_deserialize_unchecked(buf: &mut &[u8]) -> Result<Self>
Source§impl Clone for FunctionAccountData
impl Clone for FunctionAccountData
Source§fn clone(&self) -> FunctionAccountData
fn clone(&self) -> FunctionAccountData
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FunctionAccountData
impl Debug for FunctionAccountData
Source§impl Default for FunctionAccountData
impl Default for FunctionAccountData
Source§impl Discriminator for FunctionAccountData
impl Discriminator for FunctionAccountData
const DISCRIMINATOR: [u8; 8]
fn discriminator() -> [u8; 8]
Source§impl PartialEq for FunctionAccountData
impl PartialEq for FunctionAccountData
impl Copy for FunctionAccountData
impl Pod for FunctionAccountData
impl StructuralPartialEq for FunctionAccountData
impl ZeroCopy for FunctionAccountData
Auto Trait Implementations§
impl Freeze for FunctionAccountData
impl RefUnwindSafe for FunctionAccountData
impl Send for FunctionAccountData
impl Sync for FunctionAccountData
impl Unpin for FunctionAccountData
impl UnwindSafe for FunctionAccountData
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
Source§type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern.Source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more