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: Pubkey
The Attestation Queue for this service, responsible for verifying any SGX quotes.
service_worker: Pubkey
The service workerr that is executing the managed service.
status: ServiceStatus
The status of the current service. 0 = disabled, 1 = active.
is_disabled: ResourceLevel
Flag to disable the service and prevent new verification requests.
enclave_rotation_status: EnclaveRotationStatus
Whether the enclave is in progress for being rotated. Used for quote verifiers to filter and find pending verification requests.
error_status: u8
The last reported error code if the most recent response was a failure
Signer allowed to manage the service.
function: Pubkey
The pubkey of the FunctionAccountData
that this service belongs to.
escrow_wallet: Pubkey
§escrow_token_wallet: Pubkey
The 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: i64
The unix timestamp when the service was created.
updated_at: i64
The unix timestamp when the service was last updated.
enclave: BorshQuote
Represents the state of the quote verifiers enclave.
previous_enclave: BorshQuote
The previous verified quote. Used to facilitate smooth transitions during signer rotations.
pending_enclave: BorshQuote
The pending Quote
indicating a signer rotation is in-progress.
last_rotation_timestamp: i64
The timestamp when the signer was last rotated.
queue_idx: u32
The index on the queue of the verifier that is assigned to verify the SGX quote.
max_container_params_len: u32
The 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: u64
The 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
-true
if the routine is ready for quote rotation,false
otherwise.
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
- TheAccountInfo
of the function account.signer
- TheAccountInfo
of 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 ==
.