Sigil documentation
ReferenceRust referencesigil-core

sigil-core · vigil

Source declarations, signatures and documentation for vigil.

Source: sigil/node/sigil-core/src/vigil.rs. SHA-256: b055f1fc1e203d3a3fbb683a404eef612d7d10ace35129cd710ca494921a37d4.

This reference follows declared source modules, retains conditional attributes, and includes public declarations and implementation methods. Private-module re-exports and trait resolution require the compiler; this is a source reference, not a claim that every listed item is a root import. Function bodies and constant values are omitted.

vigil::VIGIL_EVENT_ID_DOMAIN

pub const VIGIL_EVENT_ID_DOMAIN: &[u8];

Source line: 11.

vigil::VIGIL_SUBSCRIPTION_ID_DOMAIN

pub const VIGIL_SUBSCRIPTION_ID_DOMAIN: &[u8];

Source line: 12.

vigil::VIGIL_FILTER_HASH_DOMAIN

pub const VIGIL_FILTER_HASH_DOMAIN: &[u8];

Source line: 13.

vigil::MIN_VIGIL_BOND

pub const MIN_VIGIL_BOND: u128;

Source line: 15.

vigil::MIN_INGESTOR_BOND

pub const MIN_INGESTOR_BOND: u128;

Source line: 16.

vigil::MAX_FILTER_DEPTH

pub const MAX_FILTER_DEPTH: usize;

Source line: 17.

vigil::MAX_FILTER_ARRAY_LEN

pub const MAX_FILTER_ARRAY_LEN: usize;

Source line: 18.

vigil::MAX_FIELD_PATH_LEN

pub const MAX_FIELD_PATH_LEN: usize;

Source line: 19.

vigil::MAX_EVENT_PAYLOAD_BYTES

pub const MAX_EVENT_PAYLOAD_BYTES: usize;

Source line: 20.

vigil::MAX_EVENT_PROOF_BYTES

pub const MAX_EVENT_PROOF_BYTES: usize;

Source line: 21.

vigil::DEFAULT_MAX_CALLBACK_GAS

pub const DEFAULT_MAX_CALLBACK_GAS: u64;

Source line: 22.

vigil::OasDid

pub type OasDid = String;

Source line: 24.

vigil::ContractAddress

pub type ContractAddress = String;

Source line: 25.

vigil::AccountAddress

pub type AccountAddress = String;

Source line: 26.

vigil::MethodSelector

pub type MethodSelector = String;

Source line: 27.

vigil::ZoneId

pub type ZoneId = String;

Source line: 28.

vigil::TopicId

pub type TopicId = String;

Source line: 29.

vigil::ExternalChainId

pub type ExternalChainId = String;

Source line: 30.

vigil::ExternalAddress

pub type ExternalAddress = String;

Source line: 31.

vigil::ExternalTopicId

pub type ExternalTopicId = String;

Source line: 32.

vigil::OracleFeedId

pub type OracleFeedId = String;

Source line: 33.

vigil::AriseRequestId

pub type AriseRequestId = String;

Source line: 34.

vigil::ContentHash

pub type ContentHash = SigilHash;

Source line: 35.

vigil::VigilError

#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum VigilError {
    #[error("vigil filter depth {depth} exceeds max {max}")]
    FilterTooDeep { depth: usize, max: usize },
    #[error("vigil filter array length {len} exceeds max {max}")]
    FilterTooWide { len: usize, max: usize },
    #[error("vigil filter field path length {len} exceeds max {max}")]
    FieldPathTooLong { len: usize, max: usize },
    #[error("vigil field path segment must not be empty")]
    EmptyFieldPathSegment,
    #[error("vigil callback contract must not be empty")]
    EmptyCallbackContract,
    #[error("vigil callback method must not be empty")]
    EmptyCallbackMethod,
    #[error("vigil gas tank account must not be empty")]
    EmptyGasTank,
    #[error("vigil subscriber DID must not be empty")]
    EmptySubscriberDid,
    #[error("vigil ingestor DID must not be empty")]
    EmptyIngestorDid,
    #[error("vigil bond {amount} below minimum {minimum}")]
    BondBelowMinimum { amount: u128, minimum: u128 },
    #[error("vigil max_callback_gas must be greater than zero")]
    ZeroCallbackGas,
    #[error("vigil max_deliveries_per_epoch must be greater than zero")]
    ZeroDeliveryLimit,
    #[error("vigil source does not match subscription")]
    SourceMismatch,
    #[error("vigil source kind {kind:?} requires a proof")]
    ProofRequired { kind: EventSourceKind },
    #[error("vigil proof kind does not match source kind {kind:?}")]
    ProofSourceMismatch { kind: EventSourceKind },
    #[error("vigil event payload is {len} bytes; max is {max}")]
    PayloadTooLarge { len: usize, max: usize },
    #[error("vigil proof is {len} bytes; max is {max}")]
    ProofTooLarge { len: usize, max: usize },
    #[error("vigil canonical encoding failed: {0}")]
    Encoding(String),
}

Source line: 38.

vigil::EventSourceKind

#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EventSourceKind {
    InZone,
    CrossZone,
    ExternalChain,
    Oracle,
    ComputeCompletion,
    TimeTrigger,
    TeeAttested,
}

Source line: 79.

vigil::TimeKind

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TimeKind {
    BlockHeight,
    AttestedWallClock,
}

Source line: 91.

vigil::RecurrenceSpec

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RecurrenceSpec {
    EveryBlocks { interval: u64 },
    EveryAttestedSeconds { interval: u64 },
}

Source line: 98.

vigil::OracleThreshold

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct OracleThreshold {
pub committee_id: String,
pub min_signatures: u16
}

Source line: 104.

vigil::ProviderClass

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProviderClass {
    Any,
    TeeBacked,
    Redundant,
    Deterministic,
}

Source line: 111.

vigil::TeeClass

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TeeClass {
    SgxDcap,
    SevSnp,
    Tdx,
    ArmCca,
}

Source line: 120.

vigil::EventSource

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "source_kind", rename_all = "snake_case")]
pub enum EventSource {
    InZone {
        zone_id: ZoneId,
        emitter: ContractAddress,
        topic: TopicId,
    },
    CrossZone {
        source_zone: ZoneId,
        emitter: ContractAddress,
        topic: TopicId,
    },
    ExternalChain {
        chain_id: ExternalChainId,
        emitter: ExternalAddress,
        topic: ExternalTopicId,
    },
    Oracle {
        feed_id: OracleFeedId,
        threshold: OracleThreshold,
    },
    ComputeCompletion {
        arise_request_id: AriseRequestId,
        provider_class: ProviderClass,
    },
    TimeTrigger {
        kind: TimeKind,
        target: u64,
        recurrence: Option<RecurrenceSpec>,
    },
    TeeAttested {
        model_or_payload_id: ContentHash,
        attestation_class: TeeClass,
    },
}

Source line: 129.

vigil::EventSource::kind

pub fn kind(&self) -> EventSourceKind;

Source line: 165.

vigil::EventSource::matches_kind

pub fn matches_kind(&self, kind: EventSourceKind) -> bool;

Source line: 177.

vigil::EventSource::matches_subscription

pub fn matches_subscription(&self, subscription_source: &Self) -> bool;

Source line: 181.

vigil::CanonicalValue

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", content = "value", rename_all = "snake_case")]
pub enum CanonicalValue {
    String(String),
    Bytes(Vec<u8>),
    U64(u64),
    I64(i64),
    Bool(bool),
    Hash(SigilHash),
}

Source line: 188.

vigil::EventFilter

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "op", content = "args", rename_all = "snake_case")]
pub enum EventFilter {
    Any,
    TopicEquals(TopicId),
    PayloadFieldEquals {
        path: Vec<String>,
        value: CanonicalValue,
    },
    PayloadFieldRange {
        path: Vec<String>,
        min: CanonicalValue,
        max: CanonicalValue,
    },
    All(Vec<EventFilter>),
    #[serde(alias = "Any2")]
    AnyOf(Vec<EventFilter>),
}

Source line: 236.

vigil::EventFilter::validate_bounds

pub fn validate_bounds(&self) -> Result<(), VigilError>;

Source line: 254.

vigil::EventFilter::evaluate

pub fn evaluate(&self, payload: &serde_json::Value) -> Result<bool, VigilError>;

Source line: 285.

vigil::EventFilter::filter_hash

pub fn filter_hash(&self) -> Result<SigilHash, VigilError>;

Source line: 322.

vigil::Event

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Event {
pub source: EventSource,
pub payload: serde_json::Value,
pub source_finality_anchor: SigilHash
}

Source line: 332.

vigil::Event::validate_size

pub fn validate_size(&self) -> Result<(), VigilError>;

Source line: 339.

vigil::EventProof

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum EventProof {
    None,
    CrossZone {
        proof_hash: SigilHash,
        encoded_proof: Vec<u8>,
    },
    ExternalChain {
        client_id: String,
        proof_hash: SigilHash,
        encoded_proof: Vec<u8>,
    },
    Oracle {
        committee_id: String,
        signature_bundle: Vec<u8>,
    },
    ComputeReceipt {
        receipt_id: String,
        receipt_hash: SigilHash,
        provider_signature: Vec<u8>,
    },
    TeeQuote {
        quote_hash: SigilHash,
        quote: Vec<u8>,
        material_hash: SigilHash,
    },
}

Source line: 353.

vigil::EventProof::encoded_len

pub fn encoded_len(&self) -> usize;

Source line: 381.

vigil::EventProof::validate_size

pub fn validate_size(&self) -> Result<(), VigilError>;

Source line: 397.

vigil::EventProof::matches_source

pub fn matches_source(&self, source: &EventSource) -> Result<bool, VigilError>;

Source line: 408.

vigil::SubscriptionStatus

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SubscriptionStatus {
    Active,
    Paused,
    Slashed,
    Expired,
}

Source line: 439.

vigil::IngestorStatus

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IngestorStatus {
    Active,
    Paused,
    Slashed,
    Deregistered,
}

Source line: 448.

vigil::VigilSubscription

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VigilSubscription {
pub subscription_id: SigilHash,
pub subscriber_did: OasDid,
pub callback_contract: ContractAddress,
pub callback_method: MethodSelector,
pub event_source: EventSource,
pub event_filter: EventFilter,
pub gas_tank: AccountAddress,
pub bond_amount: u128,
pub max_callback_gas: u64,
pub max_deliveries_per_epoch: u32,
pub created_at_height: u64,
pub expires_at_height: Option<u64>,
pub status: SubscriptionStatus,
pub deliveries_this_epoch: u32,
pub epoch_window_start: u64
}

Source line: 456.

vigil::VigilSubscription::is_active_at

pub fn is_active_at(&self, height: u64) -> bool;

Source line: 475.

vigil::VigilSubscription::source_filter_key

pub fn source_filter_key(&self) -> Result<(EventSourceKind, SigilHash), VigilError>;

Source line: 482.

vigil::Ingestor

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Ingestor {
pub ingestor_did: OasDid,
pub bond: u128,
pub supported_sources: Vec<EventSourceKind>,
pub fee_per_delivery: u64,
pub reputation: u32,
pub registered_at_height: u64,
pub status: IngestorStatus
}

Source line: 488.

vigil::Ingestor::supports

pub fn supports(&self, source: EventSourceKind) -> bool;

Source line: 499.

vigil::Ingestor::validate_registration

pub fn validate_registration(&self) -> Result<(), VigilError>;

Source line: 503.

vigil::RegisterVigilSubscriptionData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RegisterVigilSubscriptionData {
pub callback_contract: ContractAddress,
pub callback_method: MethodSelector,
pub event_source: EventSource,
pub event_filter: EventFilter,
pub gas_tank: AccountAddress,
pub bond_amount: u128,
pub max_callback_gas: u64,
pub max_deliveries_per_epoch: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expires_at_height: Option<u64>
}

Source line: 518.

vigil::RegisterVigilSubscriptionData::validate

pub fn validate(&self) -> Result<(), VigilError>;

Source line: 532.

vigil::RegisterVigilSubscriptionData::subscription_id_for

pub fn subscription_id_for(&self, subscriber_did: &str) -> Result<SigilHash, VigilError>;

Source line: 557.

vigil::RegisterVigilSubscriptionData::into_record

pub fn into_record(
        &self,
        subscriber_did: impl Into<String>,
        created_at_height: u64,
        epoch_window_start: u64,
    ) -> Result<VigilSubscription, VigilError>;

Source line: 569.

vigil::UpdateVigilSubscriptionData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UpdateVigilSubscriptionData {
pub subscription_id: SigilHash,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub event_filter: Option<EventFilter>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub callback_method: Option<MethodSelector>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_callback_gas: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_deliveries_per_epoch: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expires_at_height: Option<Option<u64>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<SubscriptionStatus>
}

Source line: 598.

vigil::CancelVigilSubscriptionData

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CancelVigilSubscriptionData {
pub subscription_id: SigilHash
}

Source line: 615.

vigil::DepositVigilGasData

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositVigilGasData {
pub subscription_id: SigilHash,
pub amount: u64
}

Source line: 620.

vigil::WithdrawVigilGasData

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WithdrawVigilGasData {
pub subscription_id: SigilHash,
pub amount: u64,
pub recipient_did: OasDid
}

Source line: 626.

vigil::EventDeliveryData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventDeliveryData {
pub subscription_id: SigilHash,
pub event: Event,
pub proof: EventProof,
pub ingestor_did: OasDid
}

Source line: 633.

vigil::EventDeliveryData::event_id

pub fn event_id(&self) -> Result<SigilHash, VigilError>;

Source line: 641.

vigil::SlashIngestorData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SlashIngestorData {
pub ingestor_did: OasDid,
pub evidence_hash: SigilHash,
pub slash_amount: u128
}

Source line: 647.

vigil::RegisterIngestorData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RegisterIngestorData {
pub ingestor_did: OasDid,
pub bond: u128,
pub supported_sources: Vec<EventSourceKind>,
pub fee_per_delivery: u64
}

Source line: 654.

vigil::UpdateIngestorStakeData

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UpdateIngestorStakeData {
pub ingestor_did: OasDid,
pub bond_delta: i128,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supported_sources: Option<Vec<EventSourceKind>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fee_per_delivery: Option<u64>
}

Source line: 662.

vigil::DeregisterIngestorData

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DeregisterIngestorData {
pub ingestor_did: OasDid
}

Source line: 672.

vigil::VigilDeliveryStatus

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum VigilDeliveryStatus {
    Scheduled,
    Delivered,
    Reverted,
}

Source line: 678.

vigil::VigilDeliveryRecord

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct VigilDeliveryRecord {
pub subscription_id: SigilHash,
pub event_id: SigilHash,
pub ingestor_did: OasDid,
pub delivered_at_height: u64,
pub status: VigilDeliveryStatus,
pub proof_hash: SigilHash
}

Source line: 685.

vigil::ScheduledVigilCallback

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ScheduledVigilCallback {
pub subscription_id: SigilHash,
pub event_id: SigilHash,
pub subscriber_did: OasDid,
pub callback_contract: ContractAddress,
pub callback_method: MethodSelector,
pub payload: serde_json::Value,
pub gas_tank: AccountAddress,
pub gas_limit: u64,
pub scheduled_at_height: u64
}

Source line: 695.

vigil::canonical_event_id

pub fn canonical_event_id(event: &Event) -> Result<SigilHash, VigilError>;

Source line: 707.

vigil::canonical_proof_hash

pub fn canonical_proof_hash(proof: &EventProof) -> Result<SigilHash, VigilError>;

Source line: 719.

On this page

vigil::VIGIL_EVENT_ID_DOMAINvigil::VIGIL_SUBSCRIPTION_ID_DOMAINvigil::VIGIL_FILTER_HASH_DOMAINvigil::MIN_VIGIL_BONDvigil::MIN_INGESTOR_BONDvigil::MAX_FILTER_DEPTHvigil::MAX_FILTER_ARRAY_LENvigil::MAX_FIELD_PATH_LENvigil::MAX_EVENT_PAYLOAD_BYTESvigil::MAX_EVENT_PROOF_BYTESvigil::DEFAULT_MAX_CALLBACK_GASvigil::OasDidvigil::ContractAddressvigil::AccountAddressvigil::MethodSelectorvigil::ZoneIdvigil::TopicIdvigil::ExternalChainIdvigil::ExternalAddressvigil::ExternalTopicIdvigil::OracleFeedIdvigil::AriseRequestIdvigil::ContentHashvigil::VigilErrorvigil::EventSourceKindvigil::TimeKindvigil::RecurrenceSpecvigil::OracleThresholdvigil::ProviderClassvigil::TeeClassvigil::EventSourcevigil::EventSource::kindvigil::EventSource::matches_kindvigil::EventSource::matches_subscriptionvigil::CanonicalValuevigil::EventFiltervigil::EventFilter::validate_boundsvigil::EventFilter::evaluatevigil::EventFilter::filter_hashvigil::Eventvigil::Event::validate_sizevigil::EventProofvigil::EventProof::encoded_lenvigil::EventProof::validate_sizevigil::EventProof::matches_sourcevigil::SubscriptionStatusvigil::IngestorStatusvigil::VigilSubscriptionvigil::VigilSubscription::is_active_atvigil::VigilSubscription::source_filter_keyvigil::Ingestorvigil::Ingestor::supportsvigil::Ingestor::validate_registrationvigil::RegisterVigilSubscriptionDatavigil::RegisterVigilSubscriptionData::validatevigil::RegisterVigilSubscriptionData::subscription_id_forvigil::RegisterVigilSubscriptionData::into_recordvigil::UpdateVigilSubscriptionDatavigil::CancelVigilSubscriptionDatavigil::DepositVigilGasDatavigil::WithdrawVigilGasDatavigil::EventDeliveryDatavigil::EventDeliveryData::event_idvigil::SlashIngestorDatavigil::RegisterIngestorDatavigil::UpdateIngestorStakeDatavigil::DeregisterIngestorDatavigil::VigilDeliveryStatusvigil::VigilDeliveryRecordvigil::ScheduledVigilCallbackvigil::canonical_event_idvigil::canonical_proof_hash