use crate::core::{
common::{
crypto::signature::PublicKey,
sgx::{EnclaveIdentity, QuotePolicy},
},
consensus::beacon::EpochTime,
};
#[derive(Clone, Debug, PartialEq, Eq, Default, cbor::Encode, cbor::Decode)]
pub struct AppAuthPolicy {
pub quotes: QuotePolicy,
pub enclaves: Vec<EnclaveIdentity>,
pub endorsements: Vec<AllowedEndorsement>,
pub fees: FeePolicy,
pub max_expiration: EpochTime,
}
#[derive(Clone, Debug, PartialEq, Eq, cbor::Encode, cbor::Decode)]
#[cbor(no_default)]
pub enum AllowedEndorsement {
#[cbor(rename = "any", as_struct)]
Any,
#[cbor(rename = "role_compute", as_struct)]
ComputeRole,
#[cbor(rename = "role_observer", as_struct)]
ObserverRole,
#[cbor(rename = "entity")]
Entity(PublicKey),
#[cbor(rename = "node")]
Node(PublicKey),
}
#[derive(Clone, Debug, Default, PartialEq, Eq, cbor::Encode, cbor::Decode)]
#[repr(u8)]
pub enum FeePolicy {
AppPays = 1,
#[default]
EndorsingNodePays = 2,
}