Struct switchboard_solana::attestation_program::accounts::service::FunctionServiceAccountData
source · pub struct FunctionServiceAccountData {Show 25 fields
pub attestation_queue: Pubkey,
pub service_worker: Pubkey,
pub status: ServiceStatus,
pub is_disabled: ResourceLevel,
pub enclave_rotation_status: EnclaveRotationStatus,
pub error_status: u8,
pub authority: Pubkey,
pub function: Pubkey,
pub escrow_wallet: Pubkey,
pub escrow_token_wallet: Pubkey,
pub name: [u8; 64],
pub metadata: [u8; 256],
pub created_at: i64,
pub updated_at: i64,
pub enclave: BorshQuote,
pub previous_enclave: BorshQuote,
pub pending_enclave: BorshQuote,
pub last_rotation_timestamp: i64,
pub queue_idx: u32,
pub max_container_params_len: u32,
pub container_params_hash: [u8; 32],
pub container_params: Vec<u8>,
pub enclave_size: u64,
pub cpu: u64,
pub _ebuf: [u8; 512],
}Expand description
A FunctionServiceAccountData represents a long running function for a given FunctionAccountData.
A service determines the execution parameters (environment variables, oracle config, cost).
Fields§
§attestation_queue: PubkeyThe Attestation Queue for this service, responsible for verifying any SGX quotes.
service_worker: PubkeyThe service workerr that is executing the managed service.
status: ServiceStatusThe status of the current service. 0 = disabled, 1 = active.
is_disabled: ResourceLevelFlag to disable the service and prevent new verification requests.
enclave_rotation_status: EnclaveRotationStatusWhether the enclave is in progress for being rotated. Used for quote verifiers to filter and find pending verification requests.
error_status: u8The last reported error code if the most recent response was a failure
Signer allowed to manage the service.
function: PubkeyThe pubkey of the FunctionAccountData that this service belongs to.
escrow_wallet: Pubkey§escrow_token_wallet: PubkeyThe TokenAccount with funds for the escrow.
name: [u8; 64]The name of the service for easier identification.
metadata: [u8; 256]The metadata of the service for easier identification.
created_at: i64The unix timestamp when the service was created.
updated_at: i64The unix timestamp when the service was last updated.
enclave: BorshQuoteRepresents the state of the quote verifiers enclave.
previous_enclave: BorshQuoteThe previous verified quote. Used to facilitate smooth transitions during signer rotations.
pending_enclave: BorshQuoteThe pending Quote indicating a signer rotation is in-progress.
last_rotation_timestamp: i64The timestamp when the signer was last rotated.
queue_idx: u32The index on the queue of the verifier that is assigned to verify the SGX quote.
max_container_params_len: u32The maximum number of bytes to pass to the container params.
container_params_hash: [u8; 32]Hash of the serialized container_params to prevent RPC tampering. Should be verified within your function to ensure you are using the correct parameters.
container_params: Vec<u8>The stringified container params to pass to the function.
enclave_size: u64The size of the enclave to reserve, in bytes.
cpu: u64§_ebuf: [u8; 512]Reserved.
Implementations§
source§impl FunctionServiceAccountData
impl FunctionServiceAccountData
sourcepub fn ready_for_quote_rotation(
&self,
func_signer_rotation_interval: i64
) -> bool
pub fn ready_for_quote_rotation( &self, func_signer_rotation_interval: i64 ) -> bool
Checks if the enclave is ready to rotate its quote.
§Returns
bool-trueif the routine is ready for quote rotation,falseotherwise.
sourcepub fn set_name(&mut self, name: &Option<Vec<u8>>) -> Result<()>
pub fn set_name(&mut self, name: &Option<Vec<u8>>) -> Result<()>
Sets the name of the routine.
§Arguments
name- An optional vector of bytes representing the name of the routine.
§Errors
Returns an error if the length of the name is greater than 64 bytes.
§Example
let mut routine = FunctionServiceAccountData::default();
let name = Some(vec![72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]);
routine.set_name(&name).unwrap();sourcepub fn set_metadata(&mut self, metadata: &Option<Vec<u8>>) -> Result<()>
pub fn set_metadata(&mut self, metadata: &Option<Vec<u8>>) -> Result<()>
If provided, set the metadata for the function routine for easier identification.
§Errors
Returns an error if the length of the metadata is greater than 256 bytes.
sourcepub fn is_disabled(&self) -> bool
pub fn is_disabled(&self) -> bool
Returns a bool representing whether the routine is disabled for use.
sourcepub fn set_container_params(
&mut self,
container_params: &mut Vec<u8>,
append_container_params: bool
) -> Result<()>
pub fn set_container_params( &mut self, container_params: &mut Vec<u8>, append_container_params: bool ) -> Result<()>
Sets the container parameters for the routine. Optionally pass a param to append the bytes to the existing container parameters.
§Arguments
container_params- A mutable reference to a vector of bytes representing the container parameters.append_container_params- A boolean indicating whether to append the container parameters to the existing ones or replace them.
§Errors
Returns an error if the length of the container parameters exceeds the maximum allowed length.
§Returns
Returns Ok(()) if the operation was successful.
sourcepub fn save_enclave(
&mut self,
clock: &Clock,
error_code: u8,
verifier: &Pubkey,
mr_enclave: &[u8; 32],
func_signer_rotation_interval: i64,
queue_data_len: u32
) -> Result<()>
pub fn save_enclave( &mut self, clock: &Clock, error_code: u8, verifier: &Pubkey, mr_enclave: &[u8; 32], func_signer_rotation_interval: i64, queue_data_len: u32 ) -> Result<()>
Saves the enclave verification
§Arguments
clock- The current clock instance.error_code- The error code for the attestation round.verifier- The public key of the verifier.enclave_signer- The public key of the enclave signer.queue_data_len- The number of oracles heartbeating on the attestation queue.
sourcepub fn validate_signer<'a>(
&self,
function_loader: &AccountLoader<'a, FunctionAccountData>,
signer: &Signer<'a>
) -> Result<bool>
pub fn validate_signer<'a>( &self, function_loader: &AccountLoader<'a, FunctionAccountData>, signer: &Signer<'a> ) -> Result<bool>
Validates the given signer account against the function_account_info and the enclave_signer
stored in this FunctionServiceAccountData.
§Arguments
function_account_info- TheAccountInfoof the function account.signer- TheAccountInfoof the account to validate.
§Errors
Returns an error if the function account data cannot be loaded or if the signer account does not match
the expected enclave_signer.
§Returns
Returns Ok(true) if the validation succeeds, Ok(false) otherwise.
§Examples
use switchboard_solana::FunctionServiceAccountData;
#[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_service.validate_signer(
&switchboard_function.to_account_info(),
&enclave_signer.to_account_info()
)?
)]
pub switchboard_service: Box<Account<'info, FunctionServiceAccountData>>,
pub enclave_signer: Signer<'info>,
}pub fn get_name(&self) -> String
pub fn get_metadata(&self) -> String
source§impl FunctionServiceAccountData
impl FunctionServiceAccountData
sourcepub async fn get_program_accounts(
rpc: &RpcClient,
filters: FunctionServiceFilters
) -> Result<Vec<(Pubkey, FunctionServiceAccountData)>, SbError>
pub async fn get_program_accounts( rpc: &RpcClient, filters: FunctionServiceFilters ) -> Result<Vec<(Pubkey, FunctionServiceAccountData)>, SbError>
Client Methods
pub async fn fetch_async( client: &RpcClient, pubkey: Pubkey ) -> Result<Self, SbError>
pub fn fetch_sync<T: SyncClient>( client: &T, pubkey: Pubkey ) -> Result<Self, SbError>
pub fn get_discriminator_filter() -> RpcFilterType
pub fn get_queue_filter(queue_pubkey: &Pubkey) -> RpcFilterType
pub fn get_worker_filter(queue_pubkey: &Pubkey) -> RpcFilterType
pub fn get_queue_and_worker_filter( queue_pubkey: &Pubkey, worker_pubkey: &Pubkey ) -> RpcFilterType
pub fn get_queue_idx_filter(queue_idx: &u32) -> RpcFilterType
pub fn get_is_enabled_filter() -> RpcFilterType
pub fn get_metadata_filter(metadata: Vec<u8>) -> RpcFilterType
Trait Implementations§
source§impl AccountDeserialize for FunctionServiceAccountData
impl AccountDeserialize for FunctionServiceAccountData
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 BorshDeserialize for FunctionServiceAccountDatawhere
Pubkey: BorshDeserialize,
ServiceStatus: BorshDeserialize,
ResourceLevel: BorshDeserialize,
EnclaveRotationStatus: BorshDeserialize,
u8: BorshDeserialize,
[u8; 64]: BorshDeserialize,
[u8; 256]: BorshDeserialize,
i64: BorshDeserialize,
BorshQuote: BorshDeserialize,
u32: BorshDeserialize,
[u8; 32]: BorshDeserialize,
Vec<u8>: BorshDeserialize,
u64: BorshDeserialize,
[u8; 512]: BorshDeserialize,
impl BorshDeserialize for FunctionServiceAccountDatawhere
Pubkey: BorshDeserialize,
ServiceStatus: BorshDeserialize,
ResourceLevel: BorshDeserialize,
EnclaveRotationStatus: BorshDeserialize,
u8: BorshDeserialize,
[u8; 64]: BorshDeserialize,
[u8; 256]: BorshDeserialize,
i64: BorshDeserialize,
BorshQuote: BorshDeserialize,
u32: BorshDeserialize,
[u8; 32]: BorshDeserialize,
Vec<u8>: BorshDeserialize,
u64: BorshDeserialize,
[u8; 512]: BorshDeserialize,
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
source§impl BorshSerialize for FunctionServiceAccountDatawhere
Pubkey: BorshSerialize,
ServiceStatus: BorshSerialize,
ResourceLevel: BorshSerialize,
EnclaveRotationStatus: BorshSerialize,
u8: BorshSerialize,
[u8; 64]: BorshSerialize,
[u8; 256]: BorshSerialize,
i64: BorshSerialize,
BorshQuote: BorshSerialize,
u32: BorshSerialize,
[u8; 32]: BorshSerialize,
Vec<u8>: BorshSerialize,
u64: BorshSerialize,
[u8; 512]: BorshSerialize,
impl BorshSerialize for FunctionServiceAccountDatawhere
Pubkey: BorshSerialize,
ServiceStatus: BorshSerialize,
ResourceLevel: BorshSerialize,
EnclaveRotationStatus: BorshSerialize,
u8: BorshSerialize,
[u8; 64]: BorshSerialize,
[u8; 256]: BorshSerialize,
i64: BorshSerialize,
BorshQuote: BorshSerialize,
u32: BorshSerialize,
[u8; 32]: BorshSerialize,
Vec<u8>: BorshSerialize,
u64: BorshSerialize,
[u8; 512]: BorshSerialize,
source§impl Clone for FunctionServiceAccountData
impl Clone for FunctionServiceAccountData
source§fn clone(&self) -> FunctionServiceAccountData
fn clone(&self) -> FunctionServiceAccountData
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for FunctionServiceAccountData
impl Debug for FunctionServiceAccountData
source§impl Default for FunctionServiceAccountData
impl Default for FunctionServiceAccountData
source§impl Discriminator for FunctionServiceAccountData
impl Discriminator for FunctionServiceAccountData
const DISCRIMINATOR: [u8; 8] = _
fn discriminator() -> [u8; 8]
source§impl PartialEq for FunctionServiceAccountData
impl PartialEq for FunctionServiceAccountData
source§fn eq(&self, other: &FunctionServiceAccountData) -> bool
fn eq(&self, other: &FunctionServiceAccountData) -> bool
self and other values to be equal, and is used
by ==.