{
  "schemaVersion": 1,
  "generator": "Tree-sitter Rust module traversal",
  "scope": "Declared modules, public syntax, and implementation methods; feature conditions retained. Not compiler-resolved rustdoc.",
  "packages": [
    {
      "name": "sigil-state",
      "version": "0.1.0",
      "source": "sigil/node/sigil-state",
      "manifestSha256": "d454838d73951bc586de0506b2bbea8333eb8f75584530fdcf6437f16ba43cfe",
      "features": {
        "default": [],
        "dao-validators": [
          "dep:sigil-core",
          "dep:oas-resolve",
          "dep:async-trait"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-state",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-state/src/lib.rs",
          "sha256": "e94fa44c72ccbf3de13427d443b09e54e2255984c347dd3059c32d433abd7956",
          "attributes": "",
          "items": [
            {
              "name": "cache",
              "kind": "module",
              "signature": "pub mod cache;",
              "docs": "# sigil-state\n\nState engine for the Sigil blockchain. Provides BLAKE3-based Merkle commitment\ntrees, organization-partitioned state with zero cross-partition contention,\nincremental root computation, and a hot LRU cache layer.\n\n## Architecture\n\n```text\n+-----------+     +-----------------+     +------------------+\n| StateCache| --> | PartitionedState| --> | CommitmentTree   |\n| (LRU hot) |     | (DashMap conc.) |     | (BLAKE3 Merkle)  |\n+-----------+     +-----------------+     +------------------+\n                         |\n                  +------------------+\n                  | StateRootComputer|\n                  | (incremental)    |\n                  +------------------+\n```\n\n- **CommitmentTree**: Sparse BLAKE3 Merkle tree for cryptographic state commitments.\n- **PartitionedState**: Organization-partitioned state with independent trees per partition.\n- **StateRootComputer**: Incremental global root from dirty partition roots.\n- **StateCache**: LRU cache with hit/miss tracking for hot state reads.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "commitment",
              "kind": "module",
              "signature": "pub mod commitment;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "partitions",
              "kind": "module",
              "signature": "pub mod partitions;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "roots",
              "kind": "module",
              "signature": "pub mod roots;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "dao_validators",
              "kind": "module",
              "signature": "pub mod dao_validators;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 35
            },
            {
              "name": "pub use cache::{CacheStats, StateCache};",
              "kind": "use_declaration",
              "signature": "pub use cache::{CacheStats, StateCache};",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "pub use commitment::proof::{InclusionProof, Side};",
              "kind": "use_declaration",
              "signature": "pub use commitment::proof::{InclusionProof, Side};",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use commitment::tree::CommitmentTree;",
              "kind": "use_declaration",
              "signature": "pub use commitment::tree::CommitmentTree;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use partitions::{Partition, PartitionedState};",
              "kind": "use_declaration",
              "signature": "pub use partitions::{Partition, PartitionedState};",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use roots::StateRootComputer;",
              "kind": "use_declaration",
              "signature": "pub use roots::StateRootComputer;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "::StateError",
              "kind": "enum_item",
              "signature": "pub enum StateError {\n    #[error(\"partition not found: {0}\")]\n    PartitionNotFound(String),\n\n    #[error(\"proof verification failed\")]\n    ProofVerificationFailed,\n\n    #[error(\"key not found\")]\n    KeyNotFound,\n\n    #[error(\"serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Errors produced by the state engine.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 45
            }
          ],
          "parseErrors": false
        },
        {
          "module": "cache",
          "source": "sigil/node/sigil-state/src/cache/mod.rs",
          "sha256": "e4f85e90674705ca900ce1c5950158c848e8c6a34c1291601dffad5d410035f5",
          "attributes": "",
          "items": [
            {
              "name": "cache::StateCache",
              "kind": "struct_item",
              "signature": "pub struct StateCache {\n\n}",
              "docs": "LRU cache for hot blockchain state. Designed for sub-microsecond cache hits\nusing a doubly-linked list backed by a Vec arena plus a HashMap index.\n\nThread-safe via [`parking_lot::RwLock`] -- reads take a shared lock, writes\n(put/invalidate/eviction) take an exclusive lock.",
              "attributes": "#[derive(Debug)]",
              "line": 13
            },
            {
              "name": "cache::CacheStats",
              "kind": "struct_item",
              "signature": "pub struct CacheStats {\npub hits: u64,\npub misses: u64,\npub size: usize,\npub capacity: usize\n}",
              "docs": "Cache performance statistics.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "cache::CacheStats::hit_rate",
              "kind": "function_item",
              "signature": "pub fn hit_rate(&self) -> f64;",
              "docs": "Hit rate as a fraction in [0.0, 1.0]. Returns 0.0 if no accesses.",
              "attributes": "",
              "line": 31
            },
            {
              "name": "cache::StateCache::new",
              "kind": "function_item",
              "signature": "pub fn new(capacity: usize) -> Self;",
              "docs": "Create a new cache with the given maximum capacity.\n\n# Panics\n\nDoes not panic. A capacity of 0 means no entries will ever be stored.",
              "attributes": "",
              "line": 234
            },
            {
              "name": "cache::StateCache::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, key: &[u8]) -> Option<Vec<u8>>;",
              "docs": "Get a value from the cache. Returns `None` on a miss.\n\nOn hit, the entry is promoted to most-recently-used. This requires a\nwrite lock briefly for the promotion.",
              "attributes": "",
              "line": 247
            },
            {
              "name": "cache::StateCache::put",
              "kind": "function_item",
              "signature": "pub fn put(&self, key: Vec<u8>, value: Vec<u8>);",
              "docs": "Put a key-value pair into the cache. If the cache is at capacity,\nthe least-recently-used entry is evicted.",
              "attributes": "",
              "line": 263
            },
            {
              "name": "cache::StateCache::invalidate",
              "kind": "function_item",
              "signature": "pub fn invalidate(&self, key: &[u8]);",
              "docs": "Invalidate (remove) a key from the cache.",
              "attributes": "",
              "line": 272
            },
            {
              "name": "cache::StateCache::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> CacheStats;",
              "docs": "Get cache performance statistics.",
              "attributes": "",
              "line": 278
            },
            {
              "name": "cache::StateCache::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&self);",
              "docs": "Clear the entire cache and reset hit/miss counters.",
              "attributes": "",
              "line": 289
            },
            {
              "name": "cache::StateCache::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Current number of entries in the cache.",
              "attributes": "",
              "line": 297
            },
            {
              "name": "cache::StateCache::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Whether the cache is empty.",
              "attributes": "",
              "line": 302
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commitment",
          "source": "sigil/node/sigil-state/src/commitment/mod.rs",
          "sha256": "bdee6f61f04ec959a54fff40379cf3cd7557e660301cb12f83f07f01c6f474d4",
          "attributes": "",
          "items": [
            {
              "name": "commitment::proof",
              "kind": "module",
              "signature": "pub mod proof;",
              "docs": "",
              "attributes": "",
              "line": 1
            },
            {
              "name": "commitment::tree",
              "kind": "module",
              "signature": "pub mod tree;",
              "docs": "",
              "attributes": "",
              "line": 2
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commitment::proof",
          "source": "sigil/node/sigil-state/src/commitment/proof.rs",
          "sha256": "c975bdb664cbea13a581c47d3980ca3f421d737de193488bb9f0ee255b090b3a",
          "attributes": "",
          "items": [
            {
              "name": "commitment::proof::Side",
              "kind": "enum_item",
              "signature": "pub enum Side {\n    Left,\n    Right,\n}",
              "docs": "Which side a sibling sits on in the Merkle path.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5
            },
            {
              "name": "commitment::proof::InclusionProof",
              "kind": "struct_item",
              "signature": "pub struct InclusionProof {\n/// The original key.\n\npub key: Vec<u8>,\n/// The original value.\n\npub value: Vec<u8>,\n/// Sibling hashes from leaf to root, each annotated with which side the\n\n/// sibling is on (so we know the concatenation order).\n\npub siblings: Vec<([u8; 32], Side)>\n}",
              "docs": "An inclusion proof for a key-value pair in a [`super::tree::CommitmentTree`].\n\nContains the sibling hashes along the Merkle path from the leaf to the root.\nVerification walks from the leaf upward, hashing with each sibling, and\nchecks that the final hash equals the expected root.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 16
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commitment::tree",
          "source": "sigil/node/sigil-state/src/commitment/tree.rs",
          "sha256": "bc6a97df98b4dabd444e6177b791103f6c2b83aa70111b50d0e65d597a0fd3ba",
          "attributes": "",
          "items": [
            {
              "name": "commitment::tree::CommitmentTree",
              "kind": "struct_item",
              "signature": "pub struct CommitmentTree {\n\n}",
              "docs": "A BLAKE3-based sparse Merkle tree for state commitments.\n\nKeys are hashed with BLAKE3 to determine their leaf position in a binary tree\nof depth 256. Internal nodes store `BLAKE3(left || right)`. Empty subtrees\nuse a precomputed \"default hash\" at each level so that the tree is sparse --\nonly populated paths are stored.\n\n# Performance\n\n- Single insert/delete: O(depth) = O(256) hash operations.\n- Batch insert: O(k * depth) but with shared-path deduplication, typically\n  much faster than k individual inserts because Merkle paths overlap.\n- Proof generation: O(depth).\n- Proof verification: O(depth).",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 23
            },
            {
              "name": "commitment::tree::CommitmentTree::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new, empty commitment tree.",
              "attributes": "",
              "line": 50
            },
            {
              "name": "commitment::tree::CommitmentTree::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&mut self, key: &[u8], value: &[u8]);",
              "docs": "Insert or update a key-value pair.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "commitment::tree::CommitmentTree::batch_insert",
              "kind": "function_item",
              "signature": "pub fn batch_insert(&mut self, entries: &[(&[u8], &[u8])]);",
              "docs": "Batch insert multiple key-value pairs. Recomputes shared Merkle paths\nonly once, which is faster than individual inserts when paths overlap.",
              "attributes": "",
              "line": 87
            },
            {
              "name": "commitment::tree::CommitmentTree::delete",
              "kind": "function_item",
              "signature": "pub fn delete(&mut self, key: &[u8]);",
              "docs": "Delete a key from the tree.",
              "attributes": "",
              "line": 120
            },
            {
              "name": "commitment::tree::CommitmentTree::root",
              "kind": "function_item",
              "signature": "pub fn root(&self) -> [u8; 32];",
              "docs": "Get the current root hash. Returns the default root if the tree is empty.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "commitment::tree::CommitmentTree::prove",
              "kind": "function_item",
              "signature": "pub fn prove(&self, key: &[u8]) -> Option<InclusionProof>;",
              "docs": "Generate an inclusion proof for a key. Returns `None` if the key is not\npresent in the tree.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "commitment::tree::CommitmentTree::verify_proof",
              "kind": "function_item",
              "signature": "pub fn verify_proof(root: &[u8; 32], key: &[u8], value: &[u8], proof: &InclusionProof) -> bool;",
              "docs": "Verify a proof against a known root hash.",
              "attributes": "",
              "line": 192
            },
            {
              "name": "commitment::tree::CommitmentTree::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of leaf entries in the tree.",
              "attributes": "",
              "line": 214
            },
            {
              "name": "commitment::tree::CommitmentTree::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Whether the tree is empty.",
              "attributes": "",
              "line": 219
            },
            {
              "name": "commitment::tree::CommitmentTree::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, key: &[u8]) -> Option<Vec<u8>>;",
              "docs": "Get the value for a key, if present.",
              "attributes": "",
              "line": 224
            }
          ],
          "parseErrors": false
        },
        {
          "module": "partitions",
          "source": "sigil/node/sigil-state/src/partitions/mod.rs",
          "sha256": "150d5ca65e23ccf2e8607c4e6ad656a0167491fc740eff22e1327b779959eb42",
          "attributes": "",
          "items": [
            {
              "name": "partitions::CONSENSUS",
              "kind": "const_item",
              "signature": "pub const CONSENSUS: &str;",
              "docs": "Well-known system partition names.",
              "attributes": "",
              "line": 7
            },
            {
              "name": "partitions::STAKES",
              "kind": "const_item",
              "signature": "pub const STAKES: &str;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "partitions::IDENTITY",
              "kind": "const_item",
              "signature": "pub const IDENTITY: &str;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "partitions::MARS",
              "kind": "const_item",
              "signature": "pub const MARS: &str;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "partitions::GOVERNANCE",
              "kind": "const_item",
              "signature": "pub const GOVERNANCE: &str;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "partitions::COMPUTE",
              "kind": "const_item",
              "signature": "pub const COMPUTE: &str;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "partitions::TOWER",
              "kind": "const_item",
              "signature": "pub const TOWER: &str;",
              "docs": "Tower coordination chain state (validator registry, slots, committees, finality).",
              "attributes": "",
              "line": 14
            },
            {
              "name": "partitions::GAL",
              "kind": "const_item",
              "signature": "pub const GAL: &str;",
              "docs": "Global Anchor Layer state (MARS-S shard assignments, topology, root anchors).",
              "attributes": "",
              "line": 16
            },
            {
              "name": "partitions::NOVA",
              "kind": "const_item",
              "signature": "pub const NOVA: &str;",
              "docs": "Nova metaverse world state (parcel ownership, buildings, avatars, zones).",
              "attributes": "",
              "line": 18
            },
            {
              "name": "partitions::PartitionedState",
              "kind": "struct_item",
              "signature": "pub struct PartitionedState {\n\n}",
              "docs": "Organization-partitioned state. Each partition is independent -- zero\ncross-partition contention thanks to [`DashMap`] sharded locking.\n\n## System partitions\n\n- `consensus`: validator set, epoch data\n- `stakes`: staking balances, delegations\n- `identity`: OAS identity state\n- `mars`: MARS anchoring state\n- `governance`: proposals, votes\n- `compute`: compute provider state\n- `tower`: Tower coordination chain state\n- `gal`: Global Anchor Layer (MARS-S sharding) state\n- `nova`: Nova metaverse world state\n\n## Organization partitions\n\nPer-organization partitions are named `org_{did}` and created on demand.",
              "attributes": "#[derive(Debug)]",
              "line": 39
            },
            {
              "name": "partitions::Partition",
              "kind": "struct_item",
              "signature": "pub struct Partition {\npub name: String,\npub tree: CommitmentTree,\npub dirty: bool\n}",
              "docs": "A single state partition backed by a [`CommitmentTree`].",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 45
            },
            {
              "name": "partitions::PartitionedState::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new partitioned state with the well-known system partitions\npre-created (empty).",
              "attributes": "",
              "line": 65
            },
            {
              "name": "partitions::PartitionedState::partition",
              "kind": "function_item",
              "signature": "pub fn partition(&self, name: &str) -> RefMut<'_, String, Partition>;",
              "docs": "Get or create a partition by name. Returns a mutable reference.\n\nOrganization partitions are created on-demand with the naming convention\n`org_{did}`.",
              "attributes": "",
              "line": 79
            },
            {
              "name": "partitions::PartitionedState::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&self, partition: &str, key: &[u8], value: &[u8]);",
              "docs": "Insert a key-value pair into a specific partition.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "partitions::PartitionedState::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, partition: &str, key: &[u8]) -> Option<Vec<u8>>;",
              "docs": "Get a value from a specific partition.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "partitions::PartitionedState::delete",
              "kind": "function_item",
              "signature": "pub fn delete(&self, partition: &str, key: &[u8]);",
              "docs": "Delete a key from a specific partition.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "partitions::PartitionedState::partition_root",
              "kind": "function_item",
              "signature": "pub fn partition_root(&self, partition: &str) -> Option<[u8; 32]>;",
              "docs": "Get the root hash for a specific partition.",
              "attributes": "",
              "line": 106
            },
            {
              "name": "partitions::PartitionedState::partition_names",
              "kind": "function_item",
              "signature": "pub fn partition_names(&self) -> Vec<String>;",
              "docs": "List all partition names (sorted for determinism).",
              "attributes": "",
              "line": 112
            },
            {
              "name": "partitions::PartitionedState::has_partition",
              "kind": "function_item",
              "signature": "pub fn has_partition(&self, name: &str) -> bool;",
              "docs": "Check if a partition exists.",
              "attributes": "",
              "line": 119
            },
            {
              "name": "partitions::PartitionedState::partition_count",
              "kind": "function_item",
              "signature": "pub fn partition_count(&self) -> usize;",
              "docs": "Total number of partitions.",
              "attributes": "",
              "line": 124
            }
          ],
          "parseErrors": false
        },
        {
          "module": "roots",
          "source": "sigil/node/sigil-state/src/roots/mod.rs",
          "sha256": "45ba1b6261b08605c843470c43532975a750f10c35a03318764ae78fdbc13807",
          "attributes": "",
          "items": [
            {
              "name": "roots::StateRootComputer",
              "kind": "struct_item",
              "signature": "pub struct StateRootComputer {\n\n}",
              "docs": "Computes the global state root from all partition roots.\n\nOnly recomputes partition roots that have been marked dirty since the last\ncomputation. The global root is `BLAKE3(sorted partition roots concatenated)`.\n\n## Incremental computation\n\nWhen only a few partitions change per block, `compute_root` avoids\nre-hashing unchanged partition trees. It caches the last-known root for\neach partition and only re-reads dirty ones.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 16
            },
            {
              "name": "roots::StateRootComputer::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new state root computer.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "roots::StateRootComputer::mark_dirty",
              "kind": "function_item",
              "signature": "pub fn mark_dirty(&mut self, partition: &str);",
              "docs": "Mark a partition as dirty (needs its root re-read next computation).",
              "attributes": "",
              "line": 36
            },
            {
              "name": "roots::StateRootComputer::compute_root",
              "kind": "function_item",
              "signature": "pub fn compute_root(&mut self, state: &PartitionedState) -> [u8; 32];",
              "docs": "Compute the global state root from all partition roots.\n\nOn first call, reads all partition roots. On subsequent calls, only\nre-reads partitions that have been marked dirty via [`mark_dirty`].\nAlso detects new partitions that were not present in the previous\ncomputation.\n\nAfter computation, the dirty set is cleared and partition dirty flags\nare reset.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "roots::StateRootComputer::reset",
              "kind": "function_item",
              "signature": "pub fn reset(&mut self);",
              "docs": "Reset dirty tracking without computing a root.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "roots::StateRootComputer::dirty_count",
              "kind": "function_item",
              "signature": "pub fn dirty_count(&self) -> usize;",
              "docs": "Number of partitions currently dirty.",
              "attributes": "",
              "line": 108
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators",
          "source": "sigil/node/sigil-state/src/dao_validators/mod.rs",
          "sha256": "d58c7877e6981a4f5b3dc442279eb16f5c167826c3100a4ece5bacd4682901c6",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::cascade_revoke",
              "kind": "module",
              "signature": "pub mod cascade_revoke;",
              "docs": "DAO Work OS state-transition validators (Phase 2).\n\nAll validators in this module consume the **live GAL trust path\nthrough [`snapshot::IssuerVerifier`]. Production wires this to a\nthin wrapper over `oas_resolve::SigilGuardedResolver` (Rules 1\u20137\ncryptographically enforced); tests wire it via a\n`MemoryGalSource`-backed verifier. There is no local-only issuer\ncheck or trusted-caller shortcut \u2014 the only public path that\nproduces a validator-consumable [`snapshot::GalSnapshot`] is the\nasync [`snapshot::build_snapshot`] function.\n\n## Phase 2 priorities\n\n1. [`mandate_spend::validate_mandate_spend`] \u2014 every state\n   transition that decreases a mandate's remaining budget routes\n   through this validator.\n2. [`labor_release::validate_labor_contract_release`] \u2014 milestone\n   payment release; composes the mandate spend validator after\n   contract-state and milestone preconditions.\n3. [`cascade_revoke::validate_cascade_revoke`] \u2014 issuer-authority\n   plus descendant-capture checks for `RevocationRecord`s with\n   `CascadeRoot` / `CascadeOrg` kinds (and `Single` consistency).\n\n## Determinism / replay-safety\n\nEach validator is a sync function over `(GalSnapshot, on-chain\nrecord, request)`. The snapshot itself is `Serialize +\nDeserialize + PartialEq`, so consensus replay producing the same\nsnapshot deterministically produces the same verdict.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 31
            },
            {
              "name": "dao_validators::error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 32
            },
            {
              "name": "dao_validators::labor_release",
              "kind": "module",
              "signature": "pub mod labor_release;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 33
            },
            {
              "name": "dao_validators::mandate_spend",
              "kind": "module",
              "signature": "pub mod mandate_spend;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 34
            },
            {
              "name": "dao_validators::snapshot",
              "kind": "module",
              "signature": "pub mod snapshot;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 35
            },
            {
              "name": "pub use cascade_revoke::validate_cascade_revoke;",
              "kind": "use_declaration",
              "signature": "pub use cascade_revoke::validate_cascade_revoke;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 37
            },
            {
              "name": "pub use error::DaoValidatorError;",
              "kind": "use_declaration",
              "signature": "pub use error::DaoValidatorError;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 38
            },
            {
              "name": "pub use labor_release::validate_labor_contract_release;",
              "kind": "use_declaration",
              "signature": "pub use labor_release::validate_labor_contract_release;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 39
            },
            {
              "name": "pub use mandate_spend::validate_mandate_spend;",
              "kind": "use_declaration",
              "signature": "pub use mandate_spend::validate_mandate_spend;",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 40
            },
            {
              "name": "pub use snapshot::{build_snapshot, GalSnapshot, IssuerTrust, IssuerVerifier};",
              "kind": "use_declaration",
              "signature": "pub use snapshot::{build_snapshot, GalSnapshot, IssuerTrust, IssuerVerifier};",
              "docs": "",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 41
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators::cascade_revoke",
          "source": "sigil/node/sigil-state/src/dao_validators/cascade_revoke.rs",
          "sha256": "4019c45d04c02e383647abac0c06c716c77b36c54e8092717f0b2cac730e9f69",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::cascade_revoke::validate_cascade_revoke",
              "kind": "function_item",
              "signature": "pub fn validate_cascade_revoke(\n    snapshot: &GalSnapshot,\n    record: &RevocationRecord,\n    descendant_did: &str,\n    descendant_did_chain: &[String],\n) -> Result<(), DaoValidatorError>;",
              "docs": "Validate the issuance and effect of a cascade revocation.\n\n`descendant_did_chain` is the **already-resolved** lineage chain for\nthe claimed descendant (from `LineageSection.human_root_chain` \u2014\nordered from the descendant's immediate parent up to the terminal\nroot). When the descendant DID is the revocation subject itself, the\nchain may be empty.\n\nFor `Single` revocations the chain is unused (no descendants are\nimplicated by the record itself).",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 41
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators::error",
          "source": "sigil/node/sigil-state/src/dao_validators/error.rs",
          "sha256": "2eb10ae5402f05e77fcab461aaadf6943660488d93e5c52430cde012779d384c",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::error::DaoValidatorError",
              "kind": "enum_item",
              "signature": "pub enum DaoValidatorError {\n    // -- GAL trust path failures (consumed via `IssuerVerifier`) --------\n    /// The mandate issuer (or another DID required by the validator) has\n    /// no `HmrAnchor` / `MhrAnchor` / `EnrAnchor` on the GAL. Issuer\n    /// lineage cannot be GAL-verified.\n    #[error(\"missing GAL root for '{did}'\")]\n    MissingGalRoot {\n        /// The DID whose GAL root is missing.\n        did: String,\n    },\n\n    /// The DID itself, or one of its ancestors in `human_root_chain`, is\n    /// revoked on Sigil. Cascade revocation rejects all descendants.\n    #[error(\"revoked GAL subject or ancestor: '{did}'\")]\n    Revoked {\n        /// The revoked DID (which may be an ancestor of the queried DID).\n        did: String,\n    },\n\n    /// The `AgentLineageProof2025` parent signature on a non-root entity\n    /// did not verify against the parent DID document's declared\n    /// `verificationMethod`. Bound to the specific DID whose proof\n    /// failed.\n    #[error(\"invalid parent signature for '{did}': {reason}\")]\n    InvalidParentSignature {\n        /// The DID whose lineage proof failed.\n        did: String,\n        /// Detail string from the GAL trust path.\n        reason: String,\n    },\n\n    /// The GAL has an `OrgLineageRoot` for the entity's creator, but the\n    /// entity's `lineage` carried no `org_inclusion_proof`.\n    #[error(\"missing org inclusion proof for '{did}'\")]\n    MissingOrgInclusionProof {\n        /// The DID whose org inclusion proof is missing.\n        did: String,\n    },\n\n    /// An `org_inclusion_proof` was presented but did not verify against\n    /// the on-chain `OrgLineageRoot.merkle_root` (tampered / wrong\n    /// subject / wrong path).\n    #[error(\"invalid org inclusion proof for '{did}': {reason}\")]\n    InvalidOrgInclusionProof {\n        /// The DID whose proof failed verification.\n        did: String,\n        /// Detail string from the GAL trust path.\n        reason: String,\n    },\n\n    /// The Sigil GAL backend was unreachable during snapshot\n    /// construction. Validators fail closed: an unreachable GAL means\n    /// the trust path cannot be exercised, and the state transition\n    /// MUST be rejected rather than silently degrade.\n    #[error(\"Sigil GAL unreachable for '{did}': {reason}\")]\n    GalUnreachable {\n        /// The DID whose GAL query failed.\n        did: String,\n        /// Underlying transport / RPC failure detail.\n        reason: String,\n    },\n\n    // -- Mandate-layer failures -----------------------------------------\n    /// The mandate's recorded `issuer_did` was not GAL-verified by the\n    /// snapshot \u2014 either the issuer is not a recognised root, or the\n    /// snapshot's verifier did not classify it as a trusted issuer.\n    /// This is distinct from `MissingGalRoot` because it accounts for\n    /// the case where the GAL has an anchor but the issuer's role\n    /// (HMR/MHR/ENR) is wrong for the mandate.\n    #[error(\"unauthorized mandate issuer '{issuer_did}': {reason}\")]\n    UnauthorizedMandateIssuer {\n        /// The DID stored in the mandate's `issuer_did` field.\n        issuer_did: String,\n        /// Detail.\n        reason: String,\n    },\n\n    /// The mandate did not authorize the requested spend (insufficient\n    /// budget, scope mismatch, expired, wrong token, wrong actor,\n    /// wrong counterparty, or any other condition surfaced by\n    /// `Mandate::authorize_spend`).\n    #[error(\"insufficient spend authority: {reason}\")]\n    InsufficientSpendAuthority {\n        /// Detail string. Wraps `sigil_core::MandateError`.\n        reason: String,\n    },\n\n    // -- Labor-contract failures ----------------------------------------\n    /// A precondition on milestone payment release was not met \u2014\n    /// milestone not yet attested, attestation policy not satisfied,\n    /// escrow unfunded, contract in the wrong state, etc.\n    #[error(\"labor release condition unmet: {reason}\")]\n    LaborReleaseConditionUnmet {\n        /// Detail string identifying which precondition failed.\n        reason: String,\n    },\n\n    // -- Cascade-revoke failures ----------------------------------------\n    /// A `RevocationRecord` with cascade kind targets a DID that is\n    /// not a root, or its `parent_root_did` field is inconsistent with\n    /// the declared cascade kind.\n    #[error(\"cascade revoke violation: {reason}\")]\n    CascadeRevokeViolation {\n        /// Detail string.\n        reason: String,\n    },\n\n    // -- Catch-all -------------------------------------------------------\n    /// An unexpected internal error inside a validator. Reserved for\n    /// programming-error surfaces; consensus paths should never hit\n    /// this in practice.\n    #[error(\"internal validator error: {reason}\")]\n    Internal {\n        /// Detail.\n        reason: String,\n    },\n}",
              "docs": "Structured rejection reasons for DAO state-transition validators.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]\n#[derive(Debug, Clone, PartialEq, Eq, Error)]",
              "line": 13
            },
            {
              "name": "dao_validators::error::DaoValidatorError::code",
              "kind": "function_item",
              "signature": "pub fn code(&self) -> &'static str;",
              "docs": "Stable error code string for telemetry / replay logs.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 133
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators::labor_release",
          "source": "sigil/node/sigil-state/src/dao_validators/labor_release.rs",
          "sha256": "885174b891c6cb24467c392c31829e431d7361ecc83c789756a1d618120b4d17",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::labor_release::validate_labor_contract_release",
              "kind": "function_item",
              "signature": "pub fn validate_labor_contract_release(\n    snapshot: &GalSnapshot,\n    contract: &LaborContract,\n    milestone_index: u32,\n    mandate: &Mandate,\n    spend: &SpendRequest<'_>,\n) -> Result<MandateClearance, DaoValidatorError>;",
              "docs": "Validate a milestone payment release.\n\nReturns the [`MandateClearance`] for the spend the caller MUST then\natomically apply (decrement the mandate's remaining budget AND mark\nthe milestone `Paid`).",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 36
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators::mandate_spend",
          "source": "sigil/node/sigil-state/src/dao_validators/mandate_spend.rs",
          "sha256": "aa6c82116cdfc0ab2d0a0101a948c0fd06af18933e66b805c6845b5d89b2c53d",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::mandate_spend::validate_mandate_spend",
              "kind": "function_item",
              "signature": "pub fn validate_mandate_spend(\n    snapshot: &GalSnapshot,\n    mandate: &Mandate,\n    request: &SpendRequest<'_>,\n) -> Result<MandateClearance, DaoValidatorError>;",
              "docs": "Validate a mandate spend against the GAL snapshot.\n\nReturns the [`MandateClearance`] that callers MUST then atomically\napply (decrementing remaining budget on the on-chain `Mandate`\nrecord).\n\nTrust path enforced, in order:\n\n1. **Issuer GAL-verified** \u2014 `mandate.issuer_did` MUST resolve to\n   `IssuerTrust::Verified` in the snapshot. Any other variant\n   promotes to its corresponding `DaoValidatorError`.\n2. **Actor not revoked** \u2014 the actor whose spend is being recorded\n   MUST not be revoked on Sigil (snapshot's raw revocation entry).\n3. **Counterparty not revoked** \u2014 same check on the receiving DID.\n4. **Mandate authorizes spend** \u2014 delegates to\n   [`Mandate::authorize_spend`] which enforces token, scope,\n   per-tx limit, total budget, expiration, allowed counterparty,\n   and active-status invariants. Any failure surfaces as\n   [`DaoValidatorError::InsufficientSpendAuthority`].\n\nNo \"trusted caller\" shortcut: the only way to construct a\n[`GalSnapshot`] is through [`super::snapshot::build_snapshot`]\n(or, in tests, the crate-private `test_support` helpers).",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 42
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao_validators::snapshot",
          "source": "sigil/node/sigil-state/src/dao_validators/snapshot.rs",
          "sha256": "f07f7133cc4c0fde8c6627d082b812d13ce243acf2a9f28fe08f3e2bc8ece41a",
          "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
          "items": [
            {
              "name": "dao_validators::snapshot::IssuerTrust",
              "kind": "enum_item",
              "signature": "pub enum IssuerTrust {\n    /// The full GAL trust path (Rules 1-7) accepts this issuer:\n    ///\n    /// - revocation-first: not revoked\n    /// - root anchor present, status `\"active\"`, anchored in the past\n    /// - non-root issuers presented a valid `AgentLineageProof2025`\n    /// - if the GAL has an `OrgLineageRoot` for the creator, the\n    ///   inclusion proof verified\n    Verified {\n        /// The terminal root anchor that grounds this issuer.\n        anchor: GalRootAnchor,\n        /// The on-chain `OrgLineageRoot` for this issuer when it is an\n        /// MHR / ENR org. `None` for HMRs and for orgs that haven't\n        /// published a Merkle commitment yet.\n        org_root: Option<GalOrgLineageRoot>,\n    },\n    /// The GAL has no terminal root anchor for this DID (or any\n    /// ancestor). The trust path cannot ground the issuer.\n    MissingRoot,\n    /// The DID, or one of its ancestors, is revoked on Sigil. Cascade\n    /// revocation rejects.\n    Revoked {\n        /// The specific revoked DID (issuer itself or an ancestor).\n        revoked_did: String,\n    },\n    /// A non-root issuer presented a `derivation_proof` that did not\n    /// verify against the parent's declared `verificationMethod`, OR\n    /// the proof was missing entirely.\n    ParentSignatureInvalid {\n        /// The DID whose proof failed.\n        did: String,\n        /// Free-form detail.\n        reason: String,\n    },\n    /// The GAL has an `OrgLineageRoot` for the creator, but the entity\n    /// presented no inclusion proof.\n    OrgInclusionMissing {\n        /// The DID with the missing proof.\n        did: String,\n    },\n    /// An `org_inclusion_proof` was present but did not verify against\n    /// the on-chain Merkle root.\n    OrgInclusionInvalid {\n        /// The DID whose proof failed.\n        did: String,\n        /// Free-form detail.\n        reason: String,\n    },\n    /// The GAL backend was unreachable. Validators MUST treat this as a\n    /// hard rejection.\n    Unreachable {\n        /// Free-form transport detail.\n        reason: String,\n    },\n}",
              "docs": "Outcome of running the GAL trust path on a single subject DID. This\ncaptures the resolver-level result without leaking the async resolver\nmachinery into validator code.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"snake_case\")]",
              "line": 32
            },
            {
              "name": "dao_validators::snapshot::IssuerTrust::is_verified",
              "kind": "function_item",
              "signature": "pub fn is_verified(&self) -> bool;",
              "docs": "True iff the issuer is fully GAL-verified for the recorded block\nheight.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 91
            },
            {
              "name": "dao_validators::snapshot::IssuerTrust::to_error",
              "kind": "function_item",
              "signature": "pub fn to_error(&self, fallback_did: &str) -> DaoValidatorError;",
              "docs": "Promote this trust verdict into a typed validator error. Used by\nvalidators when they encounter a non-`Verified` outcome.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 97
            },
            {
              "name": "dao_validators::snapshot::GalSnapshot",
              "kind": "struct_item",
              "signature": "pub struct GalSnapshot {\n/// Block height at which the snapshot was taken. Validators MUST\n\n/// use this rather than wall-clock time, so replay is deterministic.\n\npub snapshot_block: u64,\n/// Per-DID trust verdicts. `BTreeMap` for deterministic iteration.\n\npub issuer_trust: BTreeMap<String, IssuerTrust>,\n/// Per-DID revocation status (raw GAL data). Used by cascade-revoke\n\n/// validators that need to walk lineage chains independently of the\n\n/// `IssuerTrust::Verified` outcome.\n\npub revocations: BTreeMap<String, GalRevocationStatus>\n}",
              "docs": "Canonical, sync, replay-safe GAL view consumed by validators.\n\nThe snapshot is keyed by DID. Validators look up the issuer DID, the\nactor DID, and any ancestor DIDs from this single in-memory map.\nBuilding the snapshot is async (it talks to the GAL); validation is\nsync.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 140
            },
            {
              "name": "dao_validators::snapshot::GalSnapshot::require_trust",
              "kind": "function_item",
              "signature": "pub fn require_trust(&self, did: &str) -> Result<&IssuerTrust, DaoValidatorError>;",
              "docs": "Look up an issuer's trust verdict, or return\n`DaoValidatorError::Internal` when the snapshot did not include\nthe DID. (This is a programmer-error surface \u2014 validators must\nalways pre-populate every DID they will reference.)",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 157
            },
            {
              "name": "dao_validators::snapshot::GalSnapshot::require_revocation",
              "kind": "function_item",
              "signature": "pub fn require_revocation(&self, did: &str) -> Result<&GalRevocationStatus, DaoValidatorError>;",
              "docs": "Look up the raw revocation status for a DID. Returns\n`Internal` when missing.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 167
            },
            {
              "name": "dao_validators::snapshot::IssuerVerifier",
              "kind": "trait_item",
              "signature": "pub trait IssuerVerifier: Send + Sync {\n    /// Resolve the GAL trust verdict for `did`. Implementations MUST:\n    ///\n    /// - run revocation-first\n    /// - reject anchors whose status is not `\"active\"` or whose\n    ///   `anchored_at_block` is in the future\n    /// - exercise parent-signature verification on non-root issuers\n    /// - exercise org Merkle inclusion when the GAL has a root for the\n    ///   creator\n    ///\n    /// Failures from the GAL trust path become `IssuerTrust` failure\n    /// variants; the result is `Err` only for `IssuerVerifier`-level\n    /// programming errors (which validators surface as\n    /// [`DaoValidatorError::Internal`]).\n    async fn verify_issuer(&self, did: &str) -> Result<IssuerTrust, DaoValidatorError>;\n}",
              "docs": "Async trait that produces a single-issuer trust verdict by consuming\nthe live GAL trust path. Production wires this to a thin wrapper\nover `oas_resolve::SigilGuardedResolver`; tests wire it to a\n`MemoryGalSource`-backed implementation.\n\nThe trait is async because the underlying GAL queries are async; the\nsnapshot itself is sync.",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]\n#[async_trait]",
              "line": 184
            },
            {
              "name": "dao_validators::snapshot::build_snapshot",
              "kind": "function_item",
              "signature": "pub async fn build_snapshot<V, G>(\n    verifier: &V,\n    gal: &G,\n    snapshot_block: u64,\n    subject_dids: &[String],\n) -> Result<GalSnapshot, DaoValidatorError>\nwhere\n    V: IssuerVerifier + ?Sized,\n    G: SigilGalSource + ?Sized,;",
              "docs": "Build a `GalSnapshot` covering every DID a validator will reference.\n\n`subject_dids` is the union of (issuer, actor, every ancestor in the\nhuman_root_chain). The builder issues:\n\n- one `IssuerVerifier::verify_issuer` per DID \u2014 the live GAL trust\n  path, recorded as the snapshot's `issuer_trust` entry.\n- one `SigilGalSource::check_revocation` per DID \u2014 captured in\n  `revocations` for cascade-revoke validators that walk lineage.\n\nFailures from the GAL itself surface as `IssuerTrust::Unreachable`\ninside the verdict; transport errors during the raw\n`check_revocation` calls bubble up as\n[`DaoValidatorError::GalUnreachable`].",
              "attributes": "#[cfg(any(feature = \"dao-validators\", test))]",
              "line": 215
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-core",
      "version": "0.1.0",
      "source": "sigil/node/sigil-core",
      "manifestSha256": "a00384259fee1d99047ce19bb789938a5994dcd7e1da3c876ae8ae700aa1d81a",
      "features": {
        "default": [],
        "compute": [],
        "governance": [],
        "marketplace": [],
        "tower": [],
        "czac": [],
        "nova": [
          "czac"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-core",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-core/src/lib.rs",
          "sha256": "b15b55ecc46a1aa15783af977419234a1e328b5cd211462c4f54b1c686e98d0a",
          "attributes": "",
          "items": [
            {
              "name": "address",
              "kind": "module",
              "signature": "pub mod address;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "artifact",
              "kind": "module",
              "signature": "pub mod artifact;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "authority",
              "kind": "module",
              "signature": "pub mod authority;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "block",
              "kind": "module",
              "signature": "pub mod block;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "chain",
              "kind": "module",
              "signature": "pub mod chain;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "dao",
              "kind": "module",
              "signature": "pub mod dao;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "dex",
              "kind": "module",
              "signature": "pub mod dex;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "evidence",
              "kind": "module",
              "signature": "pub mod evidence;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "gal",
              "kind": "module",
              "signature": "pub mod gal;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "genesis",
              "kind": "module",
              "signature": "pub mod genesis;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "hash",
              "kind": "module",
              "signature": "pub mod hash;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "labor",
              "kind": "module",
              "signature": "pub mod labor;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "mail",
              "kind": "module",
              "signature": "pub mod mail;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "mandate",
              "kind": "module",
              "signature": "pub mod mandate;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "nft",
              "kind": "module",
              "signature": "pub mod nft;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "nova",
              "kind": "module",
              "signature": "pub mod nova;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "receipt",
              "kind": "module",
              "signature": "pub mod receipt;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "recovery",
              "kind": "module",
              "signature": "pub mod recovery;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "serde_helpers",
              "kind": "module",
              "signature": "pub mod serde_helpers;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "sns",
              "kind": "module",
              "signature": "pub mod sns;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "storage_market",
              "kind": "module",
              "signature": "pub mod storage_market;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "system_contracts",
              "kind": "module",
              "signature": "pub mod system_contracts;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "transaction",
              "kind": "module",
              "signature": "pub mod transaction;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "username",
              "kind": "module",
              "signature": "pub mod username;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "velocity",
              "kind": "module",
              "signature": "pub mod velocity;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "vigil",
              "kind": "module",
              "signature": "pub mod vigil;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "pub use address::{canonicalize_did, Address, SIGIL_ADDRESS_LEN};",
              "kind": "use_declaration",
              "signature": "pub use address::{canonicalize_did, Address, SIGIL_ADDRESS_LEN};",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use artifact::{ArtifactCommitment, WeftRootCommitment};",
              "kind": "use_declaration",
              "signature": "pub use artifact::{ArtifactCommitment, WeftRootCommitment};",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use authority::{\n    AgentKind, AuthorityStatus, ContractRuntime, ControlPolicy, DistributionPolicy, Permission,\n    ProfitShare, RootKind, SupplyPolicy, ThresholdPolicy, WeightedMember,\n};",
              "kind": "use_declaration",
              "signature": "pub use authority::{\n    AgentKind, AuthorityStatus, ContractRuntime, ControlPolicy, DistributionPolicy, Permission,\n    ProfitShare, RootKind, SupplyPolicy, ThresholdPolicy, WeightedMember,\n};",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pub use block::{Block, BlockBody, BlockHeader};",
              "kind": "use_declaration",
              "signature": "pub use block::{Block, BlockBody, BlockHeader};",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use chain::ChainId;",
              "kind": "use_declaration",
              "signature": "pub use chain::ChainId;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use dao::{DaoIdentity, GovernancePolicy, HiringPolicy, TreasuryRef};",
              "kind": "use_declaration",
              "signature": "pub use dao::{DaoIdentity, GovernancePolicy, HiringPolicy, TreasuryRef};",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use dex::{\n    add_liquidity_quote, canonical_pool_assets, canonical_pool_id, create_pool_quote,\n    remove_liquidity_quote, swap_exact_in_quote, swap_exact_out_quote, AddLiquidityQuote,\n    CreatePoolQuote, DexEvent, DexPool, DexPoolAsset, DexPoolSide, DexPosition, DexQuoteError,\n    RemoveLiquidityQuote, SwapExactInQuote, SwapExactOutQuote, DEX_FEE_DENOMINATOR_BPS,\n    DEX_MAX_FEE_BPS, DEX_POOL_ID_PREFIX,\n};",
              "kind": "use_declaration",
              "signature": "pub use dex::{\n    add_liquidity_quote, canonical_pool_assets, canonical_pool_id, create_pool_quote,\n    remove_liquidity_quote, swap_exact_in_quote, swap_exact_out_quote, AddLiquidityQuote,\n    CreatePoolQuote, DexEvent, DexPool, DexPoolAsset, DexPoolSide, DexPosition, DexQuoteError,\n    RemoveLiquidityQuote, SwapExactInQuote, SwapExactOutQuote, DEX_FEE_DENOMINATOR_BPS,\n    DEX_MAX_FEE_BPS, DEX_POOL_ID_PREFIX,\n};",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "pub use error::CoreError;",
              "kind": "use_declaration",
              "signature": "pub use error::CoreError;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use evidence::{\n    evidence_anchor_id, validate_digest_hex, EvidenceAnchorData, EvidenceAnchorRecord,\n    MAX_EVIDENCE_CLIENT_NONCE_LEN, MAX_EVIDENCE_LABEL_LEN, MAX_EVIDENCE_METADATA_BYTES,\n    MAX_EVIDENCE_URI_LEN,\n};",
              "kind": "use_declaration",
              "signature": "pub use evidence::{\n    evidence_anchor_id, validate_digest_hex, EvidenceAnchorData, EvidenceAnchorRecord,\n    MAX_EVIDENCE_CLIENT_NONCE_LEN, MAX_EVIDENCE_LABEL_LEN, MAX_EVIDENCE_METADATA_BYTES,\n    MAX_EVIDENCE_URI_LEN,\n};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use gal::{\n    is_revoked, validate_root_anchor, verify_metadata_commitment, AffinityKind, EnrAnchor,\n    GalValidationError, HmrAnchor, MhrAnchor, OrgLineageRoot, RevocationKind, RevocationRecord,\n    RevocationStatus, RootAnchor, RootStatus, ShardAssignment, ShardOp, ShardTopologyEntry,\n};",
              "kind": "use_declaration",
              "signature": "pub use gal::{\n    is_revoked, validate_root_anchor, verify_metadata_commitment, AffinityKind, EnrAnchor,\n    GalValidationError, HmrAnchor, MhrAnchor, OrgLineageRoot, RevocationKind, RevocationRecord,\n    RevocationStatus, RootAnchor, RootStatus, ShardAssignment, ShardOp, ShardTopologyEntry,\n};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use genesis::{\n    generate_testnet_genesis, ContractParams, CzacParams, EconomicParams, GenesisBuilder,\n    GenesisConfig, GenesisValidationError, GenesisValidator, GovernanceParams, ProtocolParams,\n    TowerParams, ValidatorGenesisMode,\n};",
              "kind": "use_declaration",
              "signature": "pub use genesis::{\n    generate_testnet_genesis, ContractParams, CzacParams, EconomicParams, GenesisBuilder,\n    GenesisConfig, GenesisValidationError, GenesisValidator, GovernanceParams, ProtocolParams,\n    TowerParams, ValidatorGenesisMode,\n};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use hash::SigilHash;",
              "kind": "use_declaration",
              "signature": "pub use hash::SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "pub use labor::{\n    AttestationPolicy, AttestationVerdict, AttesterKind, BidStatus, BidderKind, BountyClaim,\n    BountyClaimState, BountyOffer, BountyState, CapabilitySpec, ClaimAttestation,\n    CompletionAttestation, ContractState, CounterpartyFilter, DecayPolicy, Deliverable,\n    DeliverableRef, Dispute, DisputeCause, DisputeResolution, DisputeState, EscrowPolicy,\n    JobStatus, LaborBid, LaborContract, LaborEscrow, LaborJob, LaborOffer, Milestone,\n    MilestonePlan, MilestoneState, MilestoneTemplate, ReputationSignal, ReputationSnapshot,\n    RevenueShare, RevenueShareError, Review, RoyaltyRecipient, ShareRevocability, SignalSource,\n    SkillTag, VerificationMode,\n};",
              "kind": "use_declaration",
              "signature": "pub use labor::{\n    AttestationPolicy, AttestationVerdict, AttesterKind, BidStatus, BidderKind, BountyClaim,\n    BountyClaimState, BountyOffer, BountyState, CapabilitySpec, ClaimAttestation,\n    CompletionAttestation, ContractState, CounterpartyFilter, DecayPolicy, Deliverable,\n    DeliverableRef, Dispute, DisputeCause, DisputeResolution, DisputeState, EscrowPolicy,\n    JobStatus, LaborBid, LaborContract, LaborEscrow, LaborJob, LaborOffer, Milestone,\n    MilestonePlan, MilestoneState, MilestoneTemplate, ReputationSignal, ReputationSnapshot,\n    RevenueShare, RevenueShareError, Review, RoyaltyRecipient, ShareRevocability, SignalSource,\n    SkillTag, VerificationMode,\n};",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use mail::{\n    abuse_id, alias_id, delegation_id, delivery_commitment_id, evaluate_policy, key_id, mailbox_id,\n    policy_id, AbuseReport, AbuseResolution, AbuseStatus, AliasStatus, DeliveryCommitmentRecord,\n    DeliveryStatus, EconomicsStatus, MailAddAliasData, MailAliasKind, MailAliasRecord,\n    MailCreateMailboxData, MailDeactivateMailboxData, MailDelegationGrant, MailExpireKeysData,\n    MailGrantPermissionData, MailKeyPurpose, MailLockMailboxData, MailMailboxStatusData,\n    MailPermissionScope, MailPublicKeyRecord, MailPublishDeliveryCommitmentData,\n    MailPublishKeyData, MailRecoverMailboxData, MailRemoveAliasData, MailReportAbuseData,\n    MailResolveAbuseData, MailRevokeKeyData, MailRevokePermissionData, MailRevokeReceivePolicyData,\n    MailRotateKeyData, MailSetPrimaryAliasData, MailUnlockMailboxData, MailUpdateReceivePolicyData,\n    MailboxCapabilityRecord, MailboxPolicyRecord, MailboxStatus, PolicyAction, PolicyStatus,\n    ReceivePolicyRule, SenderEconomicsRecord, SenderRoute, SenderSelector, MAILBOX_ID_DOMAIN,\n};",
              "kind": "use_declaration",
              "signature": "pub use mail::{\n    abuse_id, alias_id, delegation_id, delivery_commitment_id, evaluate_policy, key_id, mailbox_id,\n    policy_id, AbuseReport, AbuseResolution, AbuseStatus, AliasStatus, DeliveryCommitmentRecord,\n    DeliveryStatus, EconomicsStatus, MailAddAliasData, MailAliasKind, MailAliasRecord,\n    MailCreateMailboxData, MailDeactivateMailboxData, MailDelegationGrant, MailExpireKeysData,\n    MailGrantPermissionData, MailKeyPurpose, MailLockMailboxData, MailMailboxStatusData,\n    MailPermissionScope, MailPublicKeyRecord, MailPublishDeliveryCommitmentData,\n    MailPublishKeyData, MailRecoverMailboxData, MailRemoveAliasData, MailReportAbuseData,\n    MailResolveAbuseData, MailRevokeKeyData, MailRevokePermissionData, MailRevokeReceivePolicyData,\n    MailRotateKeyData, MailSetPrimaryAliasData, MailUnlockMailboxData, MailUpdateReceivePolicyData,\n    MailboxCapabilityRecord, MailboxPolicyRecord, MailboxStatus, PolicyAction, PolicyStatus,\n    ReceivePolicyRule, SenderEconomicsRecord, SenderRoute, SenderSelector, MAILBOX_ID_DOMAIN,\n};",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "pub use mandate::{\n    AllowedCounterparties, ApprovalPolicy, CounterpartyClass, DelegationPolicy, DisputePolicy,\n    JobCategory, Mandate, MandateBudget, MandateClearance, MandateError, MandateId, MandateScope,\n    MandateStatus, MilestonePolicy, ReputationImpactPolicy, RevocationPolicy, SpendLimits,\n    SpendRequest, TokenId,\n};",
              "kind": "use_declaration",
              "signature": "pub use mandate::{\n    AllowedCounterparties, ApprovalPolicy, CounterpartyClass, DelegationPolicy, DisputePolicy,\n    JobCategory, Mandate, MandateBudget, MandateClearance, MandateError, MandateId, MandateScope,\n    MandateStatus, MilestonePolicy, ReputationImpactPolicy, RevocationPolicy, SpendLimits,\n    SpendRequest, TokenId,\n};",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "pub use nft::{\n    BurnAuth, CollectionId, CollectionPolicy, DidIdentityIndex, IdentityBinding, IdentityNftKind,\n    LockState, NftCollection, NftEvent, NftEventKind, NftKind, NftToken, OwnerIndexEntry,\n    TokenId as NftTokenId,\n};",
              "kind": "use_declaration",
              "signature": "pub use nft::{\n    BurnAuth, CollectionId, CollectionPolicy, DidIdentityIndex, IdentityBinding, IdentityNftKind,\n    LockState, NftCollection, NftEvent, NftEventKind, NftKind, NftToken, OwnerIndexEntry,\n    TokenId as NftTokenId,\n};",
              "docs": "",
              "attributes": "",
              "line": 95
            },
            {
              "name": "pub use nova::{\n    canonical_json_string, deterministic_auction_id, deterministic_avatar_id,\n    deterministic_building_id, deterministic_component_id, deterministic_parcel_id,\n    deterministic_world_id, NovaAuctionRecord, NovaAuctionStatus, NovaAvatarRecord, NovaBidRecord,\n    NovaBuildingRecord, NovaParams, NovaParcelCoord, NovaParcelRecord, NovaParcelType,\n    NovaWorldConfig, NOVA_AUCTION_PREFIX, NOVA_AVATAR_PREFIX, NOVA_BUILDING_PREFIX,\n    NOVA_PARCEL_PREFIX, NOVA_WORLD_PREFIX,\n};",
              "kind": "use_declaration",
              "signature": "pub use nova::{\n    canonical_json_string, deterministic_auction_id, deterministic_avatar_id,\n    deterministic_building_id, deterministic_component_id, deterministic_parcel_id,\n    deterministic_world_id, NovaAuctionRecord, NovaAuctionStatus, NovaAvatarRecord, NovaBidRecord,\n    NovaBuildingRecord, NovaParams, NovaParcelCoord, NovaParcelRecord, NovaParcelType,\n    NovaWorldConfig, NOVA_AUCTION_PREFIX, NOVA_AVATAR_PREFIX, NOVA_BUILDING_PREFIX,\n    NOVA_PARCEL_PREFIX, NOVA_WORLD_PREFIX,\n};",
              "docs": "",
              "attributes": "",
              "line": 100
            },
            {
              "name": "pub use receipt::{Receipt, ReceiptStatus};",
              "kind": "use_declaration",
              "signature": "pub use receipt::{Receipt, ReceiptStatus};",
              "docs": "",
              "attributes": "",
              "line": 108
            },
            {
              "name": "pub use recovery::{\n    abort_signing_bytes, compute_ceremony_id, recovery_signing_bytes, validate_recovery_config,\n    AbortReason, AbortRecoveryData, AddRecoveryAuthorizationData, FinalizeRecoveryData,\n    GuardianAuthorization, InitiateRecoveryData, RecoveryCeremony, RecoveryConfig,\n    RecoveryGuardian, RecoveryStatus, RegisterRecoveryData, BLOCKS_PER_DAY,\n    DEFAULT_RECOVERY_TIMELOCK_BLOCKS, MAX_RECOVERY_GUARDIANS, MAX_RECOVERY_TIMELOCK_BLOCKS,\n    MIN_RECOVERY_GUARDIANS, MIN_RECOVERY_TIMELOCK_BLOCKS, RECOVERY_DOMAIN_TAG,\n};",
              "kind": "use_declaration",
              "signature": "pub use recovery::{\n    abort_signing_bytes, compute_ceremony_id, recovery_signing_bytes, validate_recovery_config,\n    AbortReason, AbortRecoveryData, AddRecoveryAuthorizationData, FinalizeRecoveryData,\n    GuardianAuthorization, InitiateRecoveryData, RecoveryCeremony, RecoveryConfig,\n    RecoveryGuardian, RecoveryStatus, RegisterRecoveryData, BLOCKS_PER_DAY,\n    DEFAULT_RECOVERY_TIMELOCK_BLOCKS, MAX_RECOVERY_GUARDIANS, MAX_RECOVERY_TIMELOCK_BLOCKS,\n    MIN_RECOVERY_GUARDIANS, MIN_RECOVERY_TIMELOCK_BLOCKS, RECOVERY_DOMAIN_TAG,\n};",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "pub use sns::{\n    namehash, normalize_sigil_name, CommitNameRegistrationData, CommitSealedNameBidData,\n    DelegateSubdomainData, DeleteNameRecordsData, NameDelegation, NamePermissionScope,\n    NameRecordKind, NameStatus, RegisterNameData, RenewNameData, RevealSealedNameBidData,\n    RevokeDelegationData, SetNameRecordsData, SetPrimaryNameData, SnsNameRecord, SnsResolverRecord,\n};",
              "kind": "use_declaration",
              "signature": "pub use sns::{\n    namehash, normalize_sigil_name, CommitNameRegistrationData, CommitSealedNameBidData,\n    DelegateSubdomainData, DeleteNameRecordsData, NameDelegation, NamePermissionScope,\n    NameRecordKind, NameStatus, RegisterNameData, RenewNameData, RevealSealedNameBidData,\n    RevokeDelegationData, SetNameRecordsData, SetPrimaryNameData, SnsNameRecord, SnsResolverRecord,\n};",
              "docs": "",
              "attributes": "",
              "line": 117
            },
            {
              "name": "pub use storage_market::{\n    storage_challenge_id, storage_contract_id, storage_pin_request_id, StorageChallengeData,\n    StorageChallengeProof, StorageChallengeRecord, StorageChallengeResolveData,\n    StorageChallengeStatus, StorageChunkProof, StoragePinAcceptData, StoragePinContract,\n    StoragePinReceipt, StoragePinRequest, StoragePinRequestData, StoragePinStatus,\n    StorageProofPosition, StorageProofSibling, StorageProviderExitData, StorageProviderRecord,\n    StorageProviderRegisterData, StorageProviderStatus, StorageProviderUpdateData,\n    StorageReceiptSettleData,\n};",
              "kind": "use_declaration",
              "signature": "pub use storage_market::{\n    storage_challenge_id, storage_contract_id, storage_pin_request_id, StorageChallengeData,\n    StorageChallengeProof, StorageChallengeRecord, StorageChallengeResolveData,\n    StorageChallengeStatus, StorageChunkProof, StoragePinAcceptData, StoragePinContract,\n    StoragePinReceipt, StoragePinRequest, StoragePinRequestData, StoragePinStatus,\n    StorageProofPosition, StorageProofSibling, StorageProviderExitData, StorageProviderRecord,\n    StorageProviderRegisterData, StorageProviderStatus, StorageProviderUpdateData,\n    StorageReceiptSettleData,\n};",
              "docs": "",
              "attributes": "",
              "line": 123
            },
            {
              "name": "pub use transaction::{\n    InitialDeviceAnchorData, SignedTransaction, SponsoredSetupData, SponsoredSetupScope,\n    Transaction, TransactionCategory, TransactionType,\n};",
              "kind": "use_declaration",
              "signature": "pub use transaction::{\n    InitialDeviceAnchorData, SignedTransaction, SponsoredSetupData, SponsoredSetupScope,\n    Transaction, TransactionCategory, TransactionType,\n};",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "pub use username::{\n    compute_auction_opening_price, compute_dispute_id, compute_lease_price, compute_min_next_bid,\n    dispute_resolve_signing_bytes, validate_genesis_username, validate_username, AuctionStatus,\n    DisputeMultisigSignature, DisputeOutcome, DisputeSignerEntry, DisputeStatus,\n    RaiseUsernameDisputeData, RegisterUsernameData, ReleaseUsernameData,\n    ResolveUsernameDisputeData, ReverseUsernameRecord, SetReverseUsernameData,\n    SetUsernameMetadataData, TransferUsernameData, UsernameAuction, UsernameAuctionBidData,\n    UsernameAuctionFinalizeData, UsernameDispute, UsernameParams, UsernameRecord,\n    RESERVED_GENESIS_USERNAMES, USERNAME_MAX_LEASE_YEARS, USERNAME_MAX_LEN, USERNAME_MIN_LEN,\n};",
              "kind": "use_declaration",
              "signature": "pub use username::{\n    compute_auction_opening_price, compute_dispute_id, compute_lease_price, compute_min_next_bid,\n    dispute_resolve_signing_bytes, validate_genesis_username, validate_username, AuctionStatus,\n    DisputeMultisigSignature, DisputeOutcome, DisputeSignerEntry, DisputeStatus,\n    RaiseUsernameDisputeData, RegisterUsernameData, ReleaseUsernameData,\n    ResolveUsernameDisputeData, ReverseUsernameRecord, SetReverseUsernameData,\n    SetUsernameMetadataData, TransferUsernameData, UsernameAuction, UsernameAuctionBidData,\n    UsernameAuctionFinalizeData, UsernameDispute, UsernameParams, UsernameRecord,\n    RESERVED_GENESIS_USERNAMES, USERNAME_MAX_LEASE_YEARS, USERNAME_MAX_LEN, USERNAME_MIN_LEN,\n};",
              "docs": "",
              "attributes": "",
              "line": 136
            },
            {
              "name": "pub use vigil::{\n    canonical_event_id, AccountAddress, CanonicalValue, ContractAddress, DepositVigilGasData,\n    DeregisterIngestorData, Event, EventDeliveryData, EventFilter, EventProof, EventSource,\n    EventSourceKind, Ingestor, IngestorStatus, MethodSelector, OasDid, RegisterIngestorData,\n    RegisterVigilSubscriptionData, ScheduledVigilCallback, SlashIngestorData, SubscriptionStatus,\n    TimeKind, UpdateIngestorStakeData, UpdateVigilSubscriptionData, VigilDeliveryRecord,\n    VigilDeliveryStatus, VigilError, VigilSubscription, WithdrawVigilGasData, MIN_INGESTOR_BOND,\n    MIN_VIGIL_BOND,\n};",
              "kind": "use_declaration",
              "signature": "pub use vigil::{\n    canonical_event_id, AccountAddress, CanonicalValue, ContractAddress, DepositVigilGasData,\n    DeregisterIngestorData, Event, EventDeliveryData, EventFilter, EventProof, EventSource,\n    EventSourceKind, Ingestor, IngestorStatus, MethodSelector, OasDid, RegisterIngestorData,\n    RegisterVigilSubscriptionData, ScheduledVigilCallback, SlashIngestorData, SubscriptionStatus,\n    TimeKind, UpdateIngestorStakeData, UpdateVigilSubscriptionData, VigilDeliveryRecord,\n    VigilDeliveryStatus, VigilError, VigilSubscription, WithdrawVigilGasData, MIN_INGESTOR_BOND,\n    MIN_VIGIL_BOND,\n};",
              "docs": "",
              "attributes": "",
              "line": 146
            },
            {
              "name": "::PROTOCOL_VERSION",
              "kind": "const_item",
              "signature": "pub const PROTOCOL_VERSION: &str;",
              "docs": "Sigil protocol version.",
              "attributes": "",
              "line": 157
            },
            {
              "name": "::TARGET_BLOCK_TIME_SECS",
              "kind": "const_item",
              "signature": "pub const TARGET_BLOCK_TIME_SECS: u64;",
              "docs": "Block time target in seconds.",
              "attributes": "",
              "line": 160
            },
            {
              "name": "::BLOCKS_PER_EPOCH",
              "kind": "const_item",
              "signature": "pub const BLOCKS_PER_EPOCH: u64;",
              "docs": "Blocks per epoch (~8 hours at 4s block time).",
              "attributes": "",
              "line": 163
            }
          ],
          "parseErrors": false
        },
        {
          "module": "address",
          "source": "sigil/node/sigil-core/src/address.rs",
          "sha256": "e325c6571d81a330e2ede0038b29317a62f70509bf9c33fb2fd8a77944e9689a",
          "attributes": "",
          "items": [
            {
              "name": "address::SIGIL_ADDRESS_LEN",
              "kind": "const_item",
              "signature": "pub const SIGIL_ADDRESS_LEN: usize;",
              "docs": "Length of a Sigil address in bytes.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "address::Address",
              "kind": "struct_item",
              "signature": "pub struct Address(#[serde(with = \"address_hex\")] pub [u8; SIGIL_ADDRESS_LEN]);",
              "docs": "A 32-byte Sigil address.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 31
            },
            {
              "name": "address::Address::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: &[u8]) -> Result<Self, CoreError>;",
              "docs": "Construct an address from a 32-byte slice.\n\n# Errors\nReturns [`CoreError::ValidationError`] if `bytes.len() != 32`.",
              "attributes": "",
              "line": 38
            },
            {
              "name": "address::Address::from_did",
              "kind": "function_item",
              "signature": "pub fn from_did(did: &str) -> Result<Self, CoreError>;",
              "docs": "Derive the address from a DID per the canonical scheme.\n\n`address = blake3(canonicalize(did))[..32]`\n\nCanonicalization rules (must match\n`wallet-extension/src/crypto/address.ts::canonicalizeDid`):\n- Trim outer ASCII whitespace.\n- Lowercase the entire DID (URI schemes are case-insensitive per RFC 3986;\n  the OAS DID method-specific portion is also case-insensitive in practice).\n- Reject empty input.\n- Reject DIDs that don't start with `did:`.\n- Reject embedded whitespace, control characters (U+0000..U+001F), or\n  U+007F.",
              "attributes": "",
              "line": 63
            },
            {
              "name": "address::Address::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "Render as a `0x`-prefixed lowercase hex string (66 chars).\n\nSigil display convention follows Ethereum's `0x...` prefix for instant\nvisual distinction from DIDs (`did:oas:...`) and usernames (`@alice`).",
              "attributes": "",
              "line": 75
            },
            {
              "name": "address::Address::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; SIGIL_ADDRESS_LEN];",
              "docs": "Get the raw 32-byte representation.",
              "attributes": "",
              "line": 85
            },
            {
              "name": "address::canonicalize_did",
              "kind": "function_item",
              "signature": "pub fn canonicalize_did(did: &str) -> Result<String, CoreError>;",
              "docs": "Canonicalize a DID string for hashing. See `Address::from_did` for the\nrules. Returns the canonicalized (lowercased + validated) string.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "address::address_hex::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S: Serializer>(\n        bytes: &[u8; SIGIL_ADDRESS_LEN],\n        s: S,\n    ) -> Result<S::Ok, S::Error>;",
              "docs": "",
              "attributes": "",
              "line": 118
            },
            {
              "name": "address::address_hex::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D: Deserializer<'de>>(\n        d: D,\n    ) -> Result<[u8; SIGIL_ADDRESS_LEN], D::Error>;",
              "docs": "",
              "attributes": "",
              "line": 130
            }
          ],
          "parseErrors": false
        },
        {
          "module": "artifact",
          "source": "sigil/node/sigil-core/src/artifact.rs",
          "sha256": "c4cc452c9390e6399bcc2ccf3ccfad9c724dff07beadaa9df347eb14ff704234",
          "attributes": "",
          "items": [
            {
              "name": "artifact::WeftRootCommitment",
              "kind": "struct_item",
              "signature": "pub struct WeftRootCommitment {\n/// Weft Merkle root over ordered chunk IDs.\n\npub root: SigilHash,\n/// Configured chunk size in bytes.\n\npub chunk_size: u64,\n/// Number of chunks in the manifest.\n\npub chunk_count: u64,\n/// Original payload byte length.\n\npub total_len: u64,\n/// CID of the committed Weft manifest.\n\npub manifest_cid: String\n}",
              "docs": "Typed Weft root metadata attached to an artifact commitment.\n\nThe enclosing [`ArtifactCommitment`] still commits to exact bytes with its\n`blake3` field. For Weft, those bytes SHOULD be the canonical Weft manifest;\nthis extension carries the large-payload Merkle root without pretending that\nthe root is the byte digest of the manifest or original payload.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "artifact::WeftRootCommitment::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        root: SigilHash,\n        chunk_size: u64,\n        chunk_count: u64,\n        total_len: u64,\n        manifest_cid: String,\n    ) -> Result<Self, String>;",
              "docs": "Build a validated Weft root commitment.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "artifact::WeftRootCommitment::deterministic_root_cid",
              "kind": "function_item",
              "signature": "pub fn deterministic_root_cid(root: &SigilHash) -> String;",
              "docs": "Deterministic CID-like identity for a Weft Merkle root.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "artifact::WeftRootCommitment::root_cid",
              "kind": "function_item",
              "signature": "pub fn root_cid(&self) -> String;",
              "docs": "Deterministic CID-like identity for this Weft Merkle root.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "artifact::ArtifactCommitment",
              "kind": "struct_item",
              "signature": "pub struct ArtifactCommitment {\n/// Weave content ID. Sigil's deterministic fallback CID form is\n\n/// `weave:blake3:<hex>`.\n\npub cid: String,\n/// BLAKE3 digest of the exact committed bytes.\n\npub blake3: SigilHash,\n/// Exact artifact byte length.\n\npub byte_len: u64,\n/// Optional Weft root metadata for sharded large-blob artifacts.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub weft: Option<WeftRootCommitment>,\n/// Media type such as `application/json` or `model/gltf-binary`.\n\npub media_type: String,\n/// Schema identifier for deterministic interpretation.\n\npub schema: String,\n/// Producer DID that created or published the artifact.\n\npub producer_did: String,\n/// Producer signature over the domain-separated commitment envelope.\n\npub signature: Vec<u8>,\n/// Block height at which this commitment became visible.\n\npub created_height: u64\n}",
              "docs": "Canonical off-chain artifact commitment recorded by Sigil transactions,\nreceipts, metadata manifests, and RPC responses.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 75
            },
            {
              "name": "artifact::ArtifactCommitment::deterministic_cid",
              "kind": "function_item",
              "signature": "pub fn deterministic_cid(blake3: &SigilHash) -> String;",
              "docs": "Build the deterministic Sigil/Weave CID form used until a concrete\nmounted Weave model adapter supplies a stronger native CID verifier.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "artifact::ArtifactCommitment::verifies_bytes",
              "kind": "function_item",
              "signature": "pub fn verifies_bytes(&self, bytes: &[u8]) -> bool;",
              "docs": "Verify byte length, BLAKE3 digest, and the deterministic CID binding.",
              "attributes": "",
              "line": 106
            },
            {
              "name": "artifact::ArtifactCommitment::has_verified_identity",
              "kind": "function_item",
              "signature": "pub fn has_verified_identity(&self) -> bool;",
              "docs": "Return true when the commitment has the required content-addressing\nfields and is bound to the deterministic CID form.",
              "attributes": "",
              "line": 114
            }
          ],
          "parseErrors": false
        },
        {
          "module": "authority",
          "source": "sigil/node/sigil-core/src/authority.rs",
          "sha256": "99ec62c615a12e4fe4d9b9600712a20dfef12daa450a933fe53761209daebe40",
          "attributes": "",
          "items": [
            {
              "name": "authority::RootKind",
              "kind": "enum_item",
              "signature": "pub enum RootKind {\n    /// Human root.\n    Hmr,\n    /// Machine/model root.\n    Mhr,\n    /// Enterprise/entity root.\n    Enr,\n}",
              "docs": "Root identity type.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 12
            },
            {
              "name": "authority::AuthorityStatus",
              "kind": "enum_item",
              "signature": "pub enum AuthorityStatus {\n    Active,\n    Rotating,\n    Revoked,\n}",
              "docs": "Status for root and agent identities.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 24
            },
            {
              "name": "authority::WeightedMember",
              "kind": "struct_item",
              "signature": "pub struct WeightedMember {\npub did: String,\npub weight: u64\n}",
              "docs": "A weighted member in a root group.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "authority::ProfitShare",
              "kind": "struct_item",
              "signature": "pub struct ProfitShare {\npub recipient_did: String,\npub basis_points: u16\n}",
              "docs": "Profit share assignment in basis points.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "authority::ThresholdPolicy",
              "kind": "struct_item",
              "signature": "pub struct ThresholdPolicy {\npub threshold_weight: u64,\npub members: Vec<WeightedMember>\n}",
              "docs": "Weighted threshold policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "authority::ThresholdPolicy::total_weight",
              "kind": "function_item",
              "signature": "pub fn total_weight(&self) -> u64;",
              "docs": "Total configured member weight.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "authority::ThresholdPolicy::is_satisfied_by",
              "kind": "function_item",
              "signature": "pub fn is_satisfied_by<'a>(&self, signers: impl IntoIterator<Item = &'a str>) -> bool;",
              "docs": "Returns true if the supplied signer DIDs satisfy the threshold.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "authority::Permission",
              "kind": "enum_item",
              "signature": "pub enum Permission {\n    IssueAgent,\n    RotateAgent,\n    RevokeAgent,\n    DeployContract,\n    CallContract,\n    UpgradeContract,\n    CreateToken,\n    MintToken,\n    BurnToken,\n    TransferToken,\n    CreateTreasury,\n    WithdrawTreasury,\n    DistributeRevenue,\n    ManageApp,\n    ManageValidator,\n}",
              "docs": "Permission granted to an agent or app agent.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 73
            },
            {
              "name": "authority::ControlPolicy",
              "kind": "enum_item",
              "signature": "pub enum ControlPolicy {\n    /// Any signed transaction sender may perform the action.\n    Open,\n    /// A single DID controls the object.\n    Single { controller_did: String },\n    /// Weighted threshold control.\n    Threshold(ThresholdPolicy),\n    /// A root or group controls the object with specific permissions.\n    Delegated {\n        controller_did: String,\n        delegate_did: String,\n        permissions: Vec<Permission>,\n    },\n}",
              "docs": "Policy for a controlled object.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 94
            },
            {
              "name": "authority::ControlPolicy::is_authorized",
              "kind": "function_item",
              "signature": "pub fn is_authorized<'a>(\n        &self,\n        actor_did: &str,\n        requested_permission: Option<&Permission>,\n        signers: impl IntoIterator<Item = &'a str>,\n    ) -> bool;",
              "docs": "Returns true when the supplied signers satisfy this control policy.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "authority::AgentKind",
              "kind": "enum_item",
              "signature": "pub enum AgentKind {\n    Validator,\n    App,\n    Service,\n    ContractOperator,\n    ComputeWorker,\n    AutonomousOrg,\n}",
              "docs": "Agent role used for lineage and explorer display.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 143
            },
            {
              "name": "authority::ContractRuntime",
              "kind": "enum_item",
              "signature": "pub enum ContractRuntime {\n    Wasm,\n}",
              "docs": "Smart contract runtime.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 155
            },
            {
              "name": "authority::SupplyPolicy",
              "kind": "enum_item",
              "signature": "pub enum SupplyPolicy {\n    Fixed {\n        max_supply: u128,\n    },\n    Controlled {\n        controller_did: String,\n        max_supply: Option<u128>,\n    },\n}",
              "docs": "Token supply policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 162
            },
            {
              "name": "authority::DistributionPolicy",
              "kind": "struct_item",
              "signature": "pub struct DistributionPolicy {\npub shares: Vec<ProfitShare>\n}",
              "docs": "Revenue distribution policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 174
            },
            {
              "name": "authority::DistributionPolicy::is_complete",
              "kind": "function_item",
              "signature": "pub fn is_complete(&self) -> bool;",
              "docs": "Returns true when all shares sum to 100%.",
              "attributes": "",
              "line": 180
            }
          ],
          "parseErrors": false
        },
        {
          "module": "block",
          "source": "sigil/node/sigil-core/src/block.rs",
          "sha256": "0eadbef175837a1271abe0244993b837f5bf0e58f1affab3dc2ed9471d7e5386",
          "attributes": "",
          "items": [
            {
              "name": "block::Block",
              "kind": "struct_item",
              "signature": "pub struct Block {\n/// Block header with metadata and commitments.\n\npub header: BlockHeader,\n/// Block body with transactions and receipts.\n\npub body: BlockBody\n}",
              "docs": "A complete Sigil blockchain block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "block::Block::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> SigilHash;",
              "docs": "Compute the block hash from the header.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "block::Block::height",
              "kind": "function_item",
              "signature": "pub fn height(&self) -> u64;",
              "docs": "Returns the block height.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "block::Block::tx_count",
              "kind": "function_item",
              "signature": "pub fn tx_count(&self) -> usize;",
              "docs": "Returns the number of transactions in this block.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "block::Block::verify_tx_root",
              "kind": "function_item",
              "signature": "pub fn verify_tx_root(&self) -> Result<bool, CoreError>;",
              "docs": "Verify that the tx_root in the header matches the actual transactions.\n\nReturns an error if any transaction fails to serialize.",
              "attributes": "",
              "line": 41
            },
            {
              "name": "block::Block::verify_receipt_root",
              "kind": "function_item",
              "signature": "pub fn verify_receipt_root(&self) -> Result<bool, CoreError>;",
              "docs": "Verify that the receipt_root matches the actual receipts.\n\nReturns an error if any receipt fails to serialize.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "block::BlockHeader",
              "kind": "struct_item",
              "signature": "pub struct BlockHeader {\n/// Hash of the parent block (ZERO for genesis).\n\npub parent_hash: SigilHash,\n/// Merkle root of the post-execution state.\n\npub state_root: SigilHash,\n/// Merkle root of the transactions in this block.\n\npub tx_root: SigilHash,\n/// Merkle root of the transaction receipts.\n\npub receipt_root: SigilHash,\n/// OAS DID of the block proposer.\n\npub proposer_did: String,\n/// Block height (0 for genesis).\n\npub height: u64,\n/// Unix timestamp in seconds.\n\npub timestamp: u64,\n/// Epoch number (height / BLOCKS_PER_EPOCH).\n\npub epoch: u64,\n/// Chain ID string.\n\npub chain_id: String,\n/// Protocol version at time of block creation.\n\npub protocol_version: String,\n/// Optional ZK proof of correct block execution.\n\n/// Only Block Producers generate this; Block Validators verify it.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub zk_proof: Option<ZkProof>,\n/// Gas used by all transactions in this block.\n\npub gas_used: u64,\n/// Gas limit for this block.\n\npub gas_limit: u64,\n/// Extra data (up to 32 bytes, for proposer vanity or protocol signals).\n\n#[serde(default)]\npub extra_data: Vec<u8>\n}",
              "docs": "Block header containing metadata and Merkle root commitments.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "block::BlockHeader::compute_hash",
              "kind": "function_item",
              "signature": "pub fn compute_hash(&self) -> SigilHash;",
              "docs": "Compute the block hash: BLAKE3 of the serialized header (excluding zk_proof).",
              "attributes": "",
              "line": 93
            },
            {
              "name": "block::BlockHeader::is_genesis",
              "kind": "function_item",
              "signature": "pub fn is_genesis(&self) -> bool;",
              "docs": "Check if this is a genesis block header.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "block::ZkProof",
              "kind": "struct_item",
              "signature": "pub struct ZkProof {\n/// The proof bytes (format depends on proving system).\n\npub proof_bytes: Vec<u8>,\n/// The proving system identifier (e.g., \"jolt-v1\").\n\npub proving_system: String,\n/// Public inputs to the proof (block hash, state transitions).\n\npub public_inputs: Vec<Vec<u8>>,\n/// Verification key hash (identifies the circuit).\n\npub verification_key_hash: SigilHash\n}",
              "docs": "A zero-knowledge proof of correct block execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 120
            },
            {
              "name": "block::BlockBody",
              "kind": "struct_item",
              "signature": "pub struct BlockBody {\n/// Signed transactions included in this block.\n\npub transactions: Vec<SignedTransaction>,\n/// Receipts for each transaction (same order as transactions).\n\npub receipts: Vec<Receipt>\n}",
              "docs": "Block body containing transactions and their receipts.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 133
            },
            {
              "name": "block::MAX_EXTRA_DATA_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_EXTRA_DATA_SIZE: usize;",
              "docs": "Maximum allowed size of the block header `extra_data` field (bytes).",
              "attributes": "",
              "line": 141
            },
            {
              "name": "block::MAX_CLOCK_DRIFT_SECS",
              "kind": "const_item",
              "signature": "pub const MAX_CLOCK_DRIFT_SECS: u64;",
              "docs": "Maximum allowed clock drift for block timestamps (seconds).",
              "attributes": "",
              "line": 144
            },
            {
              "name": "block::validate_timestamp",
              "kind": "function_item",
              "signature": "pub fn validate_timestamp(\n    header: &BlockHeader,\n    parent_timestamp: u64,\n    current_time: u64,\n) -> Result<(), CoreError>;",
              "docs": "Validate that a block timestamp is strictly after the parent and within\nacceptable clock drift of the current time.",
              "attributes": "",
              "line": 148
            },
            {
              "name": "block::validate_extra_data",
              "kind": "function_item",
              "signature": "pub fn validate_extra_data(extra_data: &[u8]) -> Result<(), CoreError>;",
              "docs": "Validate that the extra_data field does not exceed the maximum allowed size.",
              "attributes": "",
              "line": 169
            },
            {
              "name": "block::compute_tx_root",
              "kind": "function_item",
              "signature": "pub fn compute_tx_root(txs: &[SignedTransaction]) -> Result<SigilHash, CoreError>;",
              "docs": "Compute the Merkle root of a list of signed transactions.\n\nReturns an error if any transaction fails to serialize.",
              "attributes": "",
              "line": 183
            },
            {
              "name": "block::compute_receipt_root",
              "kind": "function_item",
              "signature": "pub fn compute_receipt_root(receipts: &[Receipt]) -> Result<SigilHash, CoreError>;",
              "docs": "Compute the Merkle root of a list of receipts.\n\nReturns an error if any receipt fails to serialize.",
              "attributes": "",
              "line": 197
            }
          ],
          "parseErrors": false
        },
        {
          "module": "chain",
          "source": "sigil/node/sigil-core/src/chain.rs",
          "sha256": "378285946e54e679832127450aab3df687ab160a5c1deb8c4f6c401dad08e08d",
          "attributes": "",
          "items": [
            {
              "name": "chain::ChainId",
              "kind": "struct_item",
              "signature": "pub struct ChainId(String);",
              "docs": "A chain identifier for distinguishing networks.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "chain::ChainId::mainnet",
              "kind": "function_item",
              "signature": "pub fn mainnet() -> Self;",
              "docs": "Sigil mainnet chain ID.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "chain::ChainId::testnet",
              "kind": "function_item",
              "signature": "pub fn testnet() -> Self;",
              "docs": "Sigil testnet chain ID.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "chain::ChainId::devnet",
              "kind": "function_item",
              "signature": "pub fn devnet() -> Self;",
              "docs": "Sigil devnet chain ID.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "chain::ChainId::custom",
              "kind": "function_item",
              "signature": "pub fn custom(id: impl Into<String>) -> Self;",
              "docs": "Custom chain ID.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "chain::ChainId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Returns the chain ID string.",
              "attributes": "",
              "line": 32
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dao",
          "source": "sigil/node/sigil-core/src/dao.rs",
          "sha256": "b61d5595bdc2e343ba62e6033c0e7014713f0cf303786f533ee420fb038874f9",
          "attributes": "",
          "items": [
            {
              "name": "dao::TreasuryRef",
              "kind": "struct_item",
              "signature": "pub struct TreasuryRef {\n/// The treasury DID, e.g. `did:oas:sigil:treasury:<id>`.\n\npub treasury_did: String,\n/// Optional human-readable label for explorer surfaces.\n\npub label: Option<String>\n}",
              "docs": "Reference to a treasury DID controlled by a DAO.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "dao::HiringPolicy",
              "kind": "enum_item",
              "signature": "pub enum HiringPolicy {\n    /// Only the DAO controller (root or root group) may post jobs / issue\n    /// mandates.\n    RestrictedToControllers,\n    /// A specific list of DIDs may post jobs / issue mandates on behalf of\n    /// the DAO.\n    Delegated { allowed_dids: Vec<String> },\n    /// Any DID with the supplied permission attestation may act. This is\n    /// fail-closed until a verifier supplies attestations to the DAO runtime.\n    AttestationGated { required_attestation: String },\n}",
              "docs": "Who is allowed to post jobs and issue mandates on behalf of a DAO.\n\n`Open` is intentionally permissive only when paired with a downstream\napproval policy. Most DAOs should use `RestrictedToControllers` or\n`Delegated`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 31
            },
            {
              "name": "dao::GovernancePolicy",
              "kind": "enum_item",
              "signature": "pub enum GovernancePolicy {\n    /// All actions execute via the controller policy directly. No proposals.\n    DirectControl,\n    /// Proposals routed through the existing Sigil governance category with\n    /// a quorum and a timelock window expressed in blocks.\n    Proposal {\n        quorum_basis_points: u16,\n        timelock_blocks: u64,\n    },\n}",
              "docs": "DAO governance policy. Phase 1 stores the policy verbatim and treats it\nas opaque metadata for the chain; richer voting semantics arrive after\nthe governance category is extended.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 48
            },
            {
              "name": "dao::DaoIdentity",
              "kind": "struct_item",
              "signature": "pub struct DaoIdentity {\n/// The DAO DID (`did:oas:sigil:dao:<id>`).\n\npub dao_did: String,\n/// Authority required to update DAO policy or rotate controllers.\n\npub controller_policy: ControlPolicy,\n/// Governance configuration.\n\npub governance_policy: GovernancePolicy,\n/// Treasuries owned by this DAO.\n\npub treasuries: Vec<TreasuryRef>,\n/// Optional default token class (e.g., membership / voting / profit\n\n/// share).\n\npub default_token_id: Option<String>,\n/// Hiring policy: who may post jobs and issue mandates.\n\npub hiring_policy: HiringPolicy,\n/// Commitment hash of off-chain DAO metadata (charter, mission, etc.).\n\npub metadata_commitment: Option<String>,\n/// Active / paused / revoked.\n\npub status: AuthorityStatus\n}",
              "docs": "On-chain DAO / Autonomous Organization identity record.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 61
            },
            {
              "name": "dao::DaoIdentity::actor_may_initiate_hiring",
              "kind": "function_item",
              "signature": "pub fn actor_may_initiate_hiring(&self, actor_did: &str) -> bool;",
              "docs": "Return whether the supplied actor DID is permitted to *post jobs* or\n*issue mandates* on behalf of this DAO under the configured hiring\npolicy.\n\nThis is a *necessary* check, not a sufficient one \u2014 a downstream\nsignature/threshold check is still required.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "dao::DaoIdentity::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Returns true when the DAO is currently usable (active).",
              "attributes": "",
              "line": 110
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dex",
          "source": "sigil/node/sigil-core/src/dex.rs",
          "sha256": "df8fecf898c6cb385b0b43bac72dbce3f8f428d0845a3bb599803e7d1a23b7b1",
          "attributes": "",
          "items": [
            {
              "name": "dex::DEX_POOL_ID_PREFIX",
              "kind": "const_item",
              "signature": "pub const DEX_POOL_ID_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "dex::DEX_FEE_DENOMINATOR_BPS",
              "kind": "const_item",
              "signature": "pub const DEX_FEE_DENOMINATOR_BPS: u128;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "dex::DEX_MAX_FEE_BPS",
              "kind": "const_item",
              "signature": "pub const DEX_MAX_FEE_BPS: u16;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "dex::DexPoolAsset",
              "kind": "struct_item",
              "signature": "pub struct DexPoolAsset(String);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(transparent)]",
              "line": 13
            },
            {
              "name": "dex::DexPoolAsset::new",
              "kind": "function_item",
              "signature": "pub fn new(value: impl Into<String>) -> Result<Self, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "dex::DexPoolAsset::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "dex::DexPool",
              "kind": "struct_item",
              "signature": "pub struct DexPool {\npub pool_id: String,\npub asset_a: DexPoolAsset,\npub asset_b: DexPoolAsset,\npub reserve_a: u64,\npub reserve_b: u64,\npub lp_total_shares: u64,\npub fee_bps: u16\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 37
            },
            {
              "name": "dex::DexPool::reserves_for_input",
              "kind": "function_item",
              "signature": "pub fn reserves_for_input(\n        &self,\n        asset_in: &DexPoolAsset,\n    ) -> Result<(u64, u64, DexPoolSide), DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "dex::DexPool::reserves_for_output",
              "kind": "function_item",
              "signature": "pub fn reserves_for_output(\n        &self,\n        asset_out: &DexPoolAsset,\n    ) -> Result<(u64, u64, DexPoolSide), DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "dex::DexPoolSide",
              "kind": "enum_item",
              "signature": "pub enum DexPoolSide {\n    A,\n    B,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 76
            },
            {
              "name": "dex::DexPosition",
              "kind": "struct_item",
              "signature": "pub struct DexPosition {\npub pool_id: String,\npub owner_did: String,\npub lp_shares: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "dex::DexEvent",
              "kind": "struct_item",
              "signature": "pub struct DexEvent {\npub sequence: u64,\npub block_height: u64,\npub tx_hash: SigilHash,\npub pool_id: String,\npub kind: String,\npub actor_did: String,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 89
            },
            {
              "name": "dex::CreatePoolQuote",
              "kind": "struct_item",
              "signature": "pub struct CreatePoolQuote {\npub lp_shares: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 100
            },
            {
              "name": "dex::AddLiquidityQuote",
              "kind": "struct_item",
              "signature": "pub struct AddLiquidityQuote {\npub amount_a: u64,\npub amount_b: u64,\npub lp_shares: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 105
            },
            {
              "name": "dex::RemoveLiquidityQuote",
              "kind": "struct_item",
              "signature": "pub struct RemoveLiquidityQuote {\npub amount_a: u64,\npub amount_b: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 112
            },
            {
              "name": "dex::SwapExactInQuote",
              "kind": "struct_item",
              "signature": "pub struct SwapExactInQuote {\npub amount_in: u64,\npub amount_out: u64,\npub fee_amount: u64,\npub post_reserve_in: u64,\npub post_reserve_out: u64,\npub input_side: DexPoolSide\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 118
            },
            {
              "name": "dex::SwapExactOutQuote",
              "kind": "struct_item",
              "signature": "pub struct SwapExactOutQuote {\npub amount_in: u64,\npub amount_out: u64,\npub fee_amount: u64,\npub post_reserve_in: u64,\npub post_reserve_out: u64,\npub output_side: DexPoolSide\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 128
            },
            {
              "name": "dex::DexQuoteError",
              "kind": "enum_item",
              "signature": "pub enum DexQuoteError {\n    InvalidAsset,\n    SameAsset,\n    InvalidFee,\n    ZeroAmount,\n    InsufficientLiquidity,\n    InsufficientLpShares,\n    AssetNotInPool,\n    SlippageExceeded,\n    Overflow,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 138
            },
            {
              "name": "dex::canonical_pool_assets",
              "kind": "function_item",
              "signature": "pub fn canonical_pool_assets(\n    asset_a: DexPoolAsset,\n    asset_b: DexPoolAsset,\n) -> Result<(DexPoolAsset, DexPoolAsset), DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 169
            },
            {
              "name": "dex::canonical_pool_id",
              "kind": "function_item",
              "signature": "pub fn canonical_pool_id(\n    asset_a: &DexPoolAsset,\n    asset_b: &DexPoolAsset,\n    fee_bps: u16,\n) -> Result<String, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 183
            },
            {
              "name": "dex::create_pool_quote",
              "kind": "function_item",
              "signature": "pub fn create_pool_quote(\n    amount_a: u64,\n    amount_b: u64,\n    fee_bps: u16,\n    min_lp_shares: u64,\n) -> Result<CreatePoolQuote, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 207
            },
            {
              "name": "dex::add_liquidity_quote",
              "kind": "function_item",
              "signature": "pub fn add_liquidity_quote(\n    pool: &DexPool,\n    amount_a_desired: u64,\n    amount_b_desired: u64,\n    amount_a_min: u64,\n    amount_b_min: u64,\n    min_lp_shares: u64,\n) -> Result<AddLiquidityQuote, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 228
            },
            {
              "name": "dex::remove_liquidity_quote",
              "kind": "function_item",
              "signature": "pub fn remove_liquidity_quote(\n    pool: &DexPool,\n    lp_shares: u64,\n    amount_a_min: u64,\n    amount_b_min: u64,\n) -> Result<RemoveLiquidityQuote, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 283
            },
            {
              "name": "dex::swap_exact_in_quote",
              "kind": "function_item",
              "signature": "pub fn swap_exact_in_quote(\n    pool: &DexPool,\n    asset_in: &str,\n    amount_in: u64,\n    min_amount_out: u64,\n) -> Result<SwapExactInQuote, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 312
            },
            {
              "name": "dex::swap_exact_out_quote",
              "kind": "function_item",
              "signature": "pub fn swap_exact_out_quote(\n    pool: &DexPool,\n    asset_out: &str,\n    amount_out: u64,\n    max_amount_in: u64,\n) -> Result<SwapExactOutQuote, DexQuoteError>;",
              "docs": "",
              "attributes": "",
              "line": 369
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-core/src/error.rs",
          "sha256": "994ac6e074aeeb8c597cfbe9d44a3a3aedcb03dc6dc46ec8dc6402753830b18f",
          "attributes": "",
          "items": [
            {
              "name": "error::CoreError",
              "kind": "enum_item",
              "signature": "pub enum CoreError {\n    #[error(\"invalid hash: {0}\")]\n    InvalidHash(String),\n\n    #[error(\"invalid transaction: {0}\")]\n    InvalidTransaction(String),\n\n    #[error(\"invalid block: {0}\")]\n    InvalidBlock(String),\n\n    #[error(\"invalid signature: {0}\")]\n    InvalidSignature(String),\n\n    #[error(\"unknown transaction type: {0}\")]\n    UnknownTransactionType(String),\n\n    #[error(\"missing field: {0}\")]\n    MissingField(String),\n\n    #[error(\"serialization error: {0}\")]\n    SerializationError(String),\n\n    #[error(\"chain error: {0}\")]\n    ChainError(String),\n\n    #[error(\"genesis error: {0}\")]\n    GenesisError(String),\n\n    #[error(\"validation error: {0}\")]\n    ValidationError(String),\n}",
              "docs": "Error types for the Sigil core crate.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 4
            }
          ],
          "parseErrors": false
        },
        {
          "module": "evidence",
          "source": "sigil/node/sigil-core/src/evidence.rs",
          "sha256": "16f65f8b5a50f6e3d5fb5c1b03a79b06ea4260444a325b2a3b59e5614073200b",
          "attributes": "",
          "items": [
            {
              "name": "evidence::MAX_EVIDENCE_LABEL_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_EVIDENCE_LABEL_LEN: usize;",
              "docs": "Maximum byte length of the anchor label.",
              "attributes": "",
              "line": 31
            },
            {
              "name": "evidence::MAX_EVIDENCE_METADATA_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_EVIDENCE_METADATA_BYTES: usize;",
              "docs": "Maximum serialized byte size of the anchor metadata JSON.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "evidence::MAX_EVIDENCE_URI_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_EVIDENCE_URI_LEN: usize;",
              "docs": "Maximum byte length of the optional content URI.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "evidence::MAX_EVIDENCE_CLIENT_NONCE_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_EVIDENCE_CLIENT_NONCE_LEN: usize;",
              "docs": "Maximum byte length of the client nonce.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "evidence::EvidenceAnchorData",
              "kind": "struct_item",
              "signature": "pub struct EvidenceAnchorData {\n/// Lowercase hex-encoded BLAKE3 digest (64 hex chars) of the artifact.\n\npub digest: String,\n/// Bounded classification label, e.g. `\"one.harness-archive.v1\"`.\n\npub label: String,\n/// Optional content-addressed URI for retrieval (Weft CID, IPFS, HTTPS).\n\npub uri: Option<String>,\n/// Small JSON metadata object (bounded by [`MAX_EVIDENCE_METADATA_BYTES`]).\n\npub metadata: serde_json::Value,\n/// Client-chosen nonce; participates in the deterministic anchor ID so\n\n/// re-anchoring the same digest is possible while accidental duplicate\n\n/// submission is rejected.\n\npub client_nonce: String\n}",
              "docs": "Payload for an [`crate::transaction::TransactionType::EvidenceAnchor`]\ntransaction.\n\nThe `digest` is the lowercase hex-encoded BLAKE3-256 digest of the\nanchored artifact. All fields are bounded so the payload stays small\nenough for deterministic block propagation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "evidence::EvidenceAnchorData::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), CoreError>;",
              "docs": "Validate the payload. Called by the executor; SDK callers should\nvalidate before signing to fail fast.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "evidence::EvidenceAnchorData::digest_hash",
              "kind": "function_item",
              "signature": "pub fn digest_hash(&self) -> Result<SigilHash, CoreError>;",
              "docs": "The digest as a typed [`SigilHash`].",
              "attributes": "",
              "line": 95
            },
            {
              "name": "evidence::EvidenceAnchorRecord",
              "kind": "struct_item",
              "signature": "pub struct EvidenceAnchorRecord {\n/// Deterministic anchor ID (`evidence:anchor:<blake3 hex>`).\n\npub anchor_id: String,\n/// Lowercase hex BLAKE3 digest of the anchored artifact.\n\npub digest: String,\n/// Classification label from the anchor payload.\n\npub label: String,\n/// Optional content URI from the anchor payload.\n\npub uri: Option<String>,\n/// Metadata JSON from the anchor payload.\n\npub metadata: serde_json::Value,\n/// DID of the account that anchored (the transaction sender).\n\npub anchor_did: String,\n/// Block height at which the anchor transaction executed.\n\npub anchored_at_height: u64,\n/// Hex hash of the anchor transaction.\n\npub tx_hash: String\n}",
              "docs": "On-chain record produced by a successful `EvidenceAnchor` execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 102
            },
            {
              "name": "evidence::evidence_anchor_id",
              "kind": "function_item",
              "signature": "pub fn evidence_anchor_id(\n    chain_id: &str,\n    anchor_did: &str,\n    digest: &str,\n    client_nonce: &str,\n) -> Result<String, CoreError>;",
              "docs": "Derive the deterministic anchor ID for an evidence anchor.\n\nThe ID is `evidence:anchor:<hex>` where the hex is a domain-separated\nBLAKE3 hash over `(chain_id, anchor_did, digest, client_nonce)`. It is\nstable across nodes and replays, so duplicate submissions of the same\nlogical anchor are rejected deterministically at execution time.",
              "attributes": "",
              "line": 127
            },
            {
              "name": "evidence::validate_digest_hex",
              "kind": "function_item",
              "signature": "pub fn validate_digest_hex(digest: &str) -> Result<(), CoreError>;",
              "docs": "Validate that `digest` is exactly 64 lowercase hex characters.\n\nUppercase input is rejected rather than normalized: anchor payloads are\nconsensus data, and canonical form must be unambiguous across clients.",
              "attributes": "",
              "line": 153
            }
          ],
          "parseErrors": false
        },
        {
          "module": "gal",
          "source": "sigil/node/sigil-core/src/gal.rs",
          "sha256": "b6adee272791a48c7fd1a18126c5620936bdf457ff76ca61277c3cce7dfd11dd",
          "attributes": "",
          "items": [
            {
              "name": "gal::RootStatus",
              "kind": "enum_item",
              "signature": "pub enum RootStatus {\n    /// The root is currently authoritative and may be used to verify lineage.\n    Active,\n    /// A key rotation is in progress; new signatures must use the new key, but\n    /// the previous key is still recognized for a grace window.\n    Rotating,\n    /// The root has been revoked; resolution MUST reject any DID rooted here.\n    Revoked,\n}",
              "docs": "Lifecycle of a root anchor on the GAL.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 35
            },
            {
              "name": "gal::AffinityKind",
              "kind": "enum_item",
              "signature": "pub enum AffinityKind {\n    /// Co-located with the rest of the issuing organization.\n    Organization,\n    /// Co-located by DID namespace prefix.\n    Namespace,\n    /// Random / load-balanced.\n    Random,\n}",
              "docs": "How a subject was assigned to its shard.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 48
            },
            {
              "name": "gal::RevocationKind",
              "kind": "enum_item",
              "signature": "pub enum RevocationKind {\n    /// Revokes a single DID only.\n    Single,\n    /// Revokes an HMR / MHR / ENR root and cascades to every descendant.\n    CascadeRoot,\n    /// Revokes through an org-tree subset (e.g., a single department).\n    CascadeOrg,\n}",
              "docs": "Shape of a revocation: targets a single DID, cascades from a root, or\ncascades through an org tree.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 61
            },
            {
              "name": "gal::ShardOp",
              "kind": "enum_item",
              "signature": "pub enum ShardOp {\n    Add,\n    Remove,\n    Split,\n    Merge,\n    Migrate,\n}",
              "docs": "Topology change kind.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 73
            },
            {
              "name": "gal::HmrAnchor",
              "kind": "struct_item",
              "signature": "pub struct HmrAnchor {\n/// `did:oas:sigil:hmr:<id>`.\n\npub hmr_did: String,\n/// Multibase-encoded ed25519 controller public key.\n\npub controller_pubkey: String,\n/// Multibase-encoded ed25519 recovery public keys.\n\npub recovery_pubkeys: Vec<String>,\n/// BLAKE3 commitment to the off-chain DID document / bio / charter.\n\npub metadata_commitment: String,\n/// Shard the anchor lives on.\n\npub shard_id: String,\n/// Lifecycle status.\n\npub status: RootStatus,\n/// Monotonic per-subject sequence number across updates.\n\npub sequence: u64,\n/// Block height at which this version was anchored.\n\npub anchored_at_block: u64\n}",
              "docs": "Human Root (HMR) anchor.\n\nA single human's controlling root identity.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 89
            },
            {
              "name": "gal::MhrAnchor",
              "kind": "struct_item",
              "signature": "pub struct MhrAnchor {\n/// `did:oas:sigil:mhr:<id>`.\n\npub mhr_did: String,\n/// Threshold policy over member HMR DIDs.\n\npub controller_policy: ThresholdPolicy,\n/// Member HMR DIDs explicitly enumerated for explorer / cascade purposes.\n\npub member_hmrs: Vec<String>,\n/// Profit share assignments (sum to 10_000 basis points; enforced\n\n/// downstream by the `DistributionPolicy::is_complete` invariant).\n\npub profit_shares: Vec<ProfitShare>,\n/// Recovery policy for compromise / rotation events.\n\npub recovery_policy: ControlPolicy,\n/// BLAKE3 commitment to off-chain metadata.\n\npub metadata_commitment: String,\npub shard_id: String,\npub status: RootStatus,\npub sequence: u64,\npub anchored_at_block: u64\n}",
              "docs": "Machine / Multi-Human Root (MHR) anchor.\n\nA multi-party root controlled by a threshold of HMRs (or other roots).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 112
            },
            {
              "name": "gal::EnrAnchor",
              "kind": "struct_item",
              "signature": "pub struct EnrAnchor {\n/// `did:oas:sigil:enr:<id>`.\n\npub enr_did: String,\n/// Authority policy over enterprise actions.\n\npub controller_policy: ControlPolicy,\n/// Anchoring commitment to off-chain governance documents.\n\npub governance_root: String,\n/// Authorized signers (officers / employees) that can sign ENR-issued\n\n/// child anchors.\n\npub authorized_signers: Vec<String>,\npub metadata_commitment: String,\npub shard_id: String,\npub status: RootStatus,\npub sequence: u64,\npub anchored_at_block: u64\n}",
              "docs": "Enterprise / Entity Root (ENR) anchor.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 134
            },
            {
              "name": "gal::OrgLineageRoot",
              "kind": "struct_item",
              "signature": "pub struct OrgLineageRoot {\n/// Controlling org DID \u2014 typically an MHR or ENR.\n\npub org_did: String,\n/// BLAKE3 Merkle root over canonical leaf hashes.\n\npub merkle_root: String,\n/// Number of leaves the root covers.\n\npub leaf_count: u64,\npub sequence: u64,\npub anchored_at_block: u64,\npub status: RootStatus\n}",
              "docs": "Org-tree Merkle root.\n\nUpdated atomically when child membership changes. Resolvers verify a\nMerkle inclusion proof against this root before trusting any sub-org or\nagent claim of org membership.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 157
            },
            {
              "name": "gal::ShardAssignment",
              "kind": "struct_item",
              "signature": "pub struct ShardAssignment {\npub subject_did: String,\npub shard_id: String,\npub affinity_kind: AffinityKind,\npub assigned_at_block: u64,\npub sequence: u64\n}",
              "docs": "Shard assignment for a single DID.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 171
            },
            {
              "name": "gal::RevocationRecord",
              "kind": "struct_item",
              "signature": "pub struct RevocationRecord {\npub subject_did: String,\npub revocation_kind: RevocationKind,\n/// BLAKE3 commitment to the off-chain reason document.\n\npub reason_commitment: String,\npub revoked_at_block: u64,\npub revoked_by_did: String,\n/// Set when `revocation_kind != Single` so cascade chains are\n\n/// deterministically reconstructible from on-chain state.\n\npub parent_root_did: Option<String>\n}",
              "docs": "Revocation record. The chain serves these via `gal_check_revocation`,\nwhich MUST be called first by every resolver.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 182
            },
            {
              "name": "gal::ShardTopologyEntry",
              "kind": "struct_item",
              "signature": "pub struct ShardTopologyEntry {\npub shard_id: String,\npub operation: ShardOp,\npub affected_dids: Vec<String>,\npub parent_shard_id: Option<String>,\npub new_shard_id: Option<String>,\npub applied_at_block: u64,\npub sequence: u64\n}",
              "docs": "Shard topology change entry.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 196
            },
            {
              "name": "gal::RevocationStatus",
              "kind": "struct_item",
              "signature": "pub struct RevocationStatus {\n/// True if the subject is revoked.\n\npub revoked: bool,\n/// The matching record when `revoked == true`. None otherwise.\n\npub record: Option<RevocationRecord>\n}",
              "docs": "Status returned by `gal_check_revocation`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 212
            },
            {
              "name": "gal::GalValidationError",
              "kind": "enum_item",
              "signature": "pub enum GalValidationError {\n    #[error(\"did mismatch: expected {expected}, found {found}\")]\n    DidMismatch { expected: String, found: String },\n    #[error(\"status is not active\")]\n    StatusNotActive,\n    #[error(\"anchor block is in the future\")]\n    AnchorInFuture,\n    #[error(\"sequence is not monotonic (have {have}, got {got})\")]\n    NonMonotonicSequence { have: u64, got: u64 },\n    #[error(\"metadata commitment mismatch\")]\n    MetadataCommitmentMismatch,\n    #[error(\"subject is revoked\")]\n    Revoked,\n}",
              "docs": "Errors produced when validating GAL records.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Error)]",
              "line": 221
            },
            {
              "name": "gal::RootAnchor",
              "kind": "trait_item",
              "signature": "pub trait RootAnchor {\n    /// The subject DID this anchor binds.\n    fn subject_did(&self) -> &str;\n    /// Current lifecycle status.\n    fn status(&self) -> RootStatus;\n    /// Block height the anchor was first / last published at.\n    fn anchored_at_block(&self) -> u64;\n    /// Monotonic sequence for the subject.\n    fn sequence(&self) -> u64;\n    /// BLAKE3 commitment to the off-chain DID document.\n    fn metadata_commitment(&self) -> &str;\n}",
              "docs": "Common interface for typed root anchors.\n\nImplemented by [`HmrAnchor`], [`MhrAnchor`], [`EnrAnchor`].",
              "attributes": "",
              "line": 239
            },
            {
              "name": "gal::validate_root_anchor",
              "kind": "function_item",
              "signature": "pub fn validate_root_anchor<A: RootAnchor>(\n    anchor: &A,\n    expected_did: &str,\n    current_block: u64,\n    prior_sequence: u64,\n) -> Result<(), GalValidationError>;",
              "docs": "Validate a candidate root anchor against the chain state.\n\n`current_block` is the latest finalized block height; `prior_sequence` is\nthe most recent on-chain sequence for this subject (or zero if none).\n`expected_did` is the subject DID the caller already resolved.",
              "attributes": "",
              "line": 311
            },
            {
              "name": "gal::verify_metadata_commitment",
              "kind": "function_item",
              "signature": "pub fn verify_metadata_commitment<A: RootAnchor>(\n    anchor: &A,\n    document_blake3: &str,\n) -> Result<(), GalValidationError>;",
              "docs": "Verify the off-chain DID document matches an anchor's commitment.\n\n`document_blake3` is the BLAKE3 hex digest of the canonical JSON form of\nthe resolved DID document; equality is the one-and-only check.",
              "attributes": "",
              "line": 342
            },
            {
              "name": "gal::is_revoked",
              "kind": "function_item",
              "signature": "pub fn is_revoked(status: &RevocationStatus) -> bool;",
              "docs": "Returns true when the supplied [`RevocationStatus`] indicates the subject\nis currently revoked. Sugar so callers can lead with this check.",
              "attributes": "",
              "line": 355
            }
          ],
          "parseErrors": false
        },
        {
          "module": "genesis",
          "source": "sigil/node/sigil-core/src/genesis.rs",
          "sha256": "9235fb95d731524071e18b46676772bd9693c7ffd163e7afbb07d9e021fae49b",
          "attributes": "",
          "items": [
            {
              "name": "genesis::GenesisConfig",
              "kind": "struct_item",
              "signature": "pub struct GenesisConfig {\n/// Chain identifier.\n\npub chain_id: ChainId,\n/// Unix timestamp for genesis block.\n\npub genesis_time: u64,\n/// Protocol version at genesis.\n\npub protocol_version: String,\n/// Initial validator set with their stakes.\n\npub validators: Vec<GenesisValidator>,\n/// Initial account balances (DID -> balance in micro-MINT).\n\n#[serde(default)]\npub balances: HashMap<String, u64>,\n/// Initial identity documents for launch/custody DIDs.\n\n///\n\n/// A DID with a genesis balance but no identity document is spend-locked\n\n/// until a key-derived self-registration is possible. Mainnet launch\n\n/// custody accounts should seed explicit identity documents here.\n\n#[serde(default, skip_serializing_if = \"HashMap::is_empty\")]\npub identities: HashMap<String, serde_json::Value>,\n/// Protocol parameters.\n\npub params: ProtocolParams,\n/// Economic parameters.\n\npub economics: EconomicParams,\n/// Tower consensus parameters (slot duration, epoch length, committee sizes).\n\n/// Absent in old genesis files \u2014 defaults applied automatically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tower_params: Option<TowerParams>,\n/// On-chain governance parameters (deposits, voting period, quorum, timelock).\n\n/// Absent in old genesis files \u2014 defaults applied automatically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub governance_params: Option<GovernanceParams>,\n/// Smart-contract platform parameters.\n\n/// Absent in old genesis files \u2014 defaults applied automatically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub contract_params: Option<ContractParams>,\n/// CZAC protocol parameters.\n\n/// Absent in old genesis files \u2014 defaults applied automatically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub czac_params: Option<CzacParams>,\n/// Vigils event-driven autonomous contract parameters.\n\n/// Absent in old genesis files \u2014 defaults applied automatically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub vigils_params: Option<VigilsParams>,\n/// Nova metaverse launch configuration.\n\n/// Absent in old genesis files \u2014 defaults to disabled/no genesis worlds.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub nova_params: Option<crate::nova::NovaParams>,\n/// Reference contracts deployed as part of genesis.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub reference_contracts: Vec<GenesisReferenceContract>,\n/// Compute marketplace parameters.\n\n#[cfg(feature = \"compute\")]\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub compute_params: Option<ComputeParams>,\n/// On-chain `@username` registry parameters (length-tier prices, multiplier,\n\n/// reserved list, dispute multisig DIDs). Absent in old genesis files \u2014\n\n/// defaults applied via `effective_username_params`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub username_params: Option<crate::username::UsernameParams>\n}",
              "docs": "Complete genesis configuration for a Sigil network.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "genesis::GenesisConfig::compute_state_root",
              "kind": "function_item",
              "signature": "pub fn compute_state_root(&self) -> Result<SigilHash, crate::error::CoreError>;",
              "docs": "Compute the genesis state root from the initial configuration.\n\nReturns an error if the configuration cannot be serialized.",
              "attributes": "",
              "line": 87
            },
            {
              "name": "genesis::GenesisConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), GenesisValidationError>;",
              "docs": "Validate the genesis configuration.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "genesis::GenesisConfig::testnet_default",
              "kind": "function_item",
              "signature": "pub fn testnet_default() -> Self;",
              "docs": "Create a minimal testnet genesis config.",
              "attributes": "",
              "line": 325
            },
            {
              "name": "genesis::GenesisConfig::effective_tower_params",
              "kind": "function_item",
              "signature": "pub fn effective_tower_params(&self) -> TowerParams;",
              "docs": "Return the effective `TowerParams`, falling back to the default if the\ngenesis file pre-dates this field.",
              "attributes": "",
              "line": 350
            },
            {
              "name": "genesis::GenesisConfig::effective_governance_params",
              "kind": "function_item",
              "signature": "pub fn effective_governance_params(&self) -> GovernanceParams;",
              "docs": "Return the effective `GovernanceParams`, falling back to the default if\nthe genesis file pre-dates this field.",
              "attributes": "",
              "line": 356
            },
            {
              "name": "genesis::GenesisConfig::effective_contract_params",
              "kind": "function_item",
              "signature": "pub fn effective_contract_params(&self) -> ContractParams;",
              "docs": "Return the effective `ContractParams`, falling back to the default if\nthe genesis file pre-dates this field.",
              "attributes": "",
              "line": 362
            },
            {
              "name": "genesis::GenesisConfig::effective_czac_params",
              "kind": "function_item",
              "signature": "pub fn effective_czac_params(&self) -> CzacParams;",
              "docs": "Return the effective `CzacParams`, falling back to the default if the\ngenesis file pre-dates this field.",
              "attributes": "",
              "line": 368
            },
            {
              "name": "genesis::GenesisConfig::effective_vigils_params",
              "kind": "function_item",
              "signature": "pub fn effective_vigils_params(&self) -> VigilsParams;",
              "docs": "Return the effective `VigilsParams`, falling back to the default if the\ngenesis file pre-dates this field.",
              "attributes": "",
              "line": 374
            },
            {
              "name": "genesis::GenesisConfig::effective_nova_params",
              "kind": "function_item",
              "signature": "pub fn effective_nova_params(&self) -> crate::nova::NovaParams;",
              "docs": "Return the effective `NovaParams`, falling back to disabled/no worlds if\nthe genesis file pre-dates this field.",
              "attributes": "",
              "line": 380
            },
            {
              "name": "genesis::GenesisReferenceContract",
              "kind": "struct_item",
              "signature": "pub struct GenesisReferenceContract {\npub name: String,\npub version: String,\npub contract_did: String,\npub controller_did: String,\npub runtime: ContractRuntime,\npub code_hash: String,\n/// Hex-encoded WASM bytecode. Embedded in genesis so validators deploy\n\n/// identical content-addressed code without filesystem dependencies.\n\npub code_hex: String,\n#[serde(default)]\npub init_args: serde_json::Value,\npub upgrade_policy: ControlPolicy,\npub call_policy: ControlPolicy,\n#[serde(default)]\npub allowed_host_functions: Vec<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub zone_id: Option<String>,\npub contract_kind: ContractKind,\n#[serde(default)]\npub accepts_vigil_callbacks: bool,\npub license_metadata: ContractLicenseMetadata\n}",
              "docs": "A WASM reference contract deployed into genesis state.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 387
            },
            {
              "name": "genesis::GenesisReferenceContract::code_bytes",
              "kind": "function_item",
              "signature": "pub fn code_bytes(&self) -> Result<Vec<u8>, String>;",
              "docs": "",
              "attributes": "",
              "line": 412
            },
            {
              "name": "genesis::GenesisReferenceContract::parsed_code_hash",
              "kind": "function_item",
              "signature": "pub fn parsed_code_hash(&self) -> Result<SigilHash, String>;",
              "docs": "",
              "attributes": "",
              "line": 416
            },
            {
              "name": "genesis::GenesisValidator",
              "kind": "struct_item",
              "signature": "pub struct GenesisValidator {\n/// OAS DID of the validator entity.\n\npub did: String,\n/// Human root DID in the lineage chain.\n\npub human_root_did: String,\n/// Generation distance from human root.\n\npub generation: u32,\n/// Initial stake in micro-MINT.\n\npub stake: u64,\n/// Validator mode.\n\npub mode: ValidatorGenesisMode,\n/// Ed25519 consensus public key (hex-encoded).\n\npub consensus_pubkey: String,\n/// P2P networking public key (hex-encoded).\n\npub network_pubkey: String\n}",
              "docs": "A validator entry in the genesis config.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 460
            },
            {
              "name": "genesis::validate_validator_did",
              "kind": "function_item",
              "signature": "pub fn validate_validator_did(did: &str) -> Result<(), GenesisValidationError>;",
              "docs": "",
              "attributes": "",
              "line": 484
            },
            {
              "name": "genesis::ValidatorGenesisMode",
              "kind": "enum_item",
              "signature": "pub enum ValidatorGenesisMode {\n    /// Block Producer: executes transactions and generates ZK proofs.\n    BlockProducer,\n    /// Block Validator: verifies ZK proofs without re-executing.\n    BlockValidator,\n}",
              "docs": "Validator mode for genesis.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 662
            },
            {
              "name": "genesis::ProtocolParams",
              "kind": "struct_item",
              "signature": "pub struct ProtocolParams {\n/// Backward-compatible target block time in whole seconds.\n\npub target_block_time_secs: u64,\n/// Precise target block time in milliseconds. When present, this is the\n\n/// canonical value; `target_block_time_secs` is retained for older config\n\n/// files and coarse operator displays.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub target_block_time_ms: Option<u64>,\n/// Blocks per epoch.\n\npub blocks_per_epoch: u64,\n/// Maximum transactions per block.\n\npub max_txs_per_block: u32,\n/// Maximum block gas limit.\n\npub max_block_gas: u64,\n/// Ed25519 transaction signature batch size for validator admission.\n\n///\n\n/// This is a node-performance knob, not consensus entropy: different\n\n/// values still verify the same ordered transaction list deterministically.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub signature_batch_size: Option<usize>,\n/// Minimum stake for Block Producers (micro-MINT).\n\npub min_bp_stake: u64,\n/// Minimum stake for Block Validators (micro-MINT).\n\npub min_bv_stake: u64,\n/// Unbonding period in epochs.\n\npub unbonding_epochs: u32,\n/// Maximum validators in the active set.\n\npub max_validators: u32\n}",
              "docs": "Protocol parameters that can be changed via governance.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 671
            },
            {
              "name": "genesis::ProtocolParams::target_block_time_millis",
              "kind": "function_item",
              "signature": "pub fn target_block_time_millis(&self) -> u64;",
              "docs": "Canonical target block time in milliseconds.",
              "attributes": "",
              "line": 720
            },
            {
              "name": "genesis::ProtocolParams::target_block_time_seconds",
              "kind": "function_item",
              "signature": "pub fn target_block_time_seconds(&self) -> f64;",
              "docs": "Canonical target block time in seconds, preserving sub-second precision.",
              "attributes": "",
              "line": 727
            },
            {
              "name": "genesis::ProtocolParams::signature_batch_size",
              "kind": "function_item",
              "signature": "pub fn signature_batch_size(&self) -> usize;",
              "docs": "Configured signature batch size, falling back to the production default.",
              "attributes": "",
              "line": 732
            },
            {
              "name": "genesis::EconomicParams",
              "kind": "struct_item",
              "signature": "pub struct EconomicParams {\n/// Base block reward in micro-MINT.\n\npub base_block_reward: u64,\n/// Lineage generation decay factor (beta).\n\npub generation_decay_beta: f64,\n/// Minimum human root share of rewards (as fraction, e.g., 0.51).\n\npub min_human_share: f64,\n/// Treasury allocation fraction (e.g., 0.15).\n\npub treasury_fraction: f64,\n/// Slashing lineage propagation factor (delta).\n\npub slashing_delta: f64,\n/// Publisher bond slash distribution: reporter share.\n\npub bond_slash_reporter: f64,\n/// Publisher bond slash distribution: harmed party share.\n\npub bond_slash_harmed: f64,\n/// Publisher bond slash distribution: treasury share.\n\npub bond_slash_treasury: f64\n}",
              "docs": "Economic parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 741
            },
            {
              "name": "genesis::ComputeParams",
              "kind": "struct_item",
              "signature": "pub struct ComputeParams {\n/// Minimum stake for compute providers by tier (micro-MINT).\n\npub provider_stake_tiers: ProviderStakeTiers,\n/// Challenge window in epochs.\n\npub challenge_window_epochs: u32,\n/// Number of arbitrators for challenge resolution.\n\npub arbitration_committee_size: u32,\n/// Challenge success split: challenger share.\n\npub challenge_success_challenger: f64,\n/// Challenge success split: arbitrators share.\n\npub challenge_success_arbitrators: f64,\n/// Challenge success split: treasury share.\n\npub challenge_success_treasury: f64,\n/// Sentinel probe interval in seconds.\n\npub sentinel_probe_interval_secs: u64,\n/// Allowlist of DIDs authorised to resolve compute challenges. The\n\n/// executor MUST fail closed when the sender is not in this list. An\n\n/// empty list disables challenge resolution entirely (intentional \u2014\n\n/// safer default than implicit prefix-matching authority).\n\n#[serde(default)]\npub challenge_resolver_dids: Vec<String>,\n/// When `true`, T3 (TEE) receipts may settle. When `false`, the\n\n/// executor refuses T3 settlement (vendor-specific TEE crypto is not\n\n/// yet wired). Default is `false`.\n\n#[serde(default)]\npub tee_verifier_enabled: bool,\n/// Provider exit cooldown in epochs.\n\n#[serde(default = \"default_unbonding_epochs\")]\npub unbonding_epochs: u64,\n/// Default challenger deposit (micro-MINT) when the tx omits one.\n\n#[serde(default = \"default_challenge_deposit\")]\npub default_challenge_deposit: u64,\n/// Phase 12 \u2014 DIDs authorised to submit `MacaProposeEpoch` /\n\n/// `MacaFinalizeEpoch`. Empty disables MACA epoch proposal.\n\n#[serde(default)]\npub proposer_dids: Vec<String>,\n/// Phase 12 \u2014 DIDs authorised to submit `MacaPublishBeacon`.\n\n#[serde(default)]\npub beacon_dids: Vec<String>,\n/// Phase 12 \u2014 minimum agreeing validators for `MacaQuorumProof`\n\n/// to be `Confirmed`.\n\n#[serde(default = \"default_validator_quorum_threshold\")]\npub validator_quorum_threshold: u32,\n/// Permit settlement of receipts with no stored compute job. This is a\n\n/// named compatibility mode only; mainnet and canary default it off.\n\n#[serde(default)]\npub allow_ad_hoc_receipts: bool,\n/// Phase 14a \u2014 AMD SEV-SNP trust anchors. SEC1-uncompressed VCEK\n\n/// pubkeys + SHA-384 measurement allowlist. `None` keeps the\n\n/// SEV-SNP verifier in Phase 13 fail-closed mode.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub sev_snp_trust_anchors: Option<SevSnpTrustAnchorsGenesis>,\n/// Phase 14b \u2014 Intel SGX DCAP trust anchors. Pinned Intel SGX Root\n\n/// CA fingerprint + MRENCLAVE / MRSIGNER allowlists + freshness +\n\n/// minimum SVN. `None` keeps the SGX verifier in fail-closed mode.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub sgx_dcap_trust_anchors: Option<SgxDcapTrustAnchorsGenesis>,\n/// Phase 14c \u2014 Intel TDX trust anchors. Pinned Intel SGX Root CA\n\n/// fingerprint + MRTD / MRSIGNER_SEAM / RTMR allowlists +\n\n/// collateral. `None` keeps the TDX verifier in fail-closed mode.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tdx_trust_anchors: Option<TdxTrustAnchorsGenesis>,\n/// Phase 14d \u2014 Arm CCA trust anchors. Pinned IAK pubkey(s) + RIM\n\n/// allowlist + receipt-binding/freshness toggles. `None` keeps\n\n/// the Arm CCA verifier in fail-closed mode.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub arm_cca_trust_anchors: Option<ArmCcaTrustAnchorsGenesis>\n}",
              "docs": "Compute marketplace parameters (feature-gated).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 778
            },
            {
              "name": "genesis::SevSnpTrustAnchorsGenesis",
              "kind": "struct_item",
              "signature": "pub struct SevSnpTrustAnchorsGenesis {\n#[serde(default)]\npub acceptable_vcek_pubkeys: Vec<Vec<u8>>,\n#[serde(\n        default,\n        serialize_with = \"bytes_hex_vec_serde::serialize\",\n        deserialize_with = \"bytes_hex_vec_serde::deserialize\"\n    )]\npub measurement_allowlist: Vec<Vec<u8>>,\n/// SHA-256 of the AMD ARK certificate (DER form). When set, the\n\n/// verifier validates the cert chain VCEK\u2192ASK\u2192ARK and extracts the\n\n/// VCEK pubkey from it.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_ark_fingerprint_sha256: Option<[u8; 32]>,\n/// SHA-256 of the AMD ASK / product signing certificate (DER form).\n\n/// When set, the chain accepts only SEV-SNP attestations carrying the\n\n/// product ASK pinned here.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_ask_fingerprint_sha256: Option<[u8; 32]>,\n/// Optional exact VCEK allowlist by chip ID and reported TCB.\n\n#[serde(default)]\npub vcek_allowlist: Vec<SevSnpVcekAllowlistEntryGenesis>,\n/// Maximum attestation age in chain epochs.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n/// Minimum SEV-SNP TCB version components.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_tcb: Option<SevSnpTcbGenesis>,\n/// Require REPORT_DATA receipt-binding on every report.\n\n#[serde(default)]\npub require_receipt_binding: bool\n}",
              "docs": "Genesis-side mirror of `compute_state::SevSnpTrustAnchors` (sigil-core\ncan't depend on sigil-node, so we duplicate the shape; the engine\ncrate translates one to the other at startup).\n\nPhase 14a-2 added optional production-hardening fields. All are\n`None`/`false` by default so existing genesis files remain valid;\noperators that want to tighten T3 SEV-SNP acceptance set them\nexplicitly.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 857
            },
            {
              "name": "genesis::bytes_hex_vec_serde::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S>(values: &[Vec<u8>], serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: Serializer,;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 894
            },
            {
              "name": "genesis::bytes_hex_vec_serde::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>\n    where\n        D: Deserializer<'de>,;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 902
            },
            {
              "name": "genesis::SevSnpVcekAllowlistEntryGenesis",
              "kind": "struct_item",
              "signature": "pub struct SevSnpVcekAllowlistEntryGenesis {\npub product: String,\npub chip_id: Vec<u8>,\npub tcb: SevSnpTcbGenesis,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub vcek_fingerprint_sha256: Option<[u8; 32]>\n}",
              "docs": "Genesis mirror of `compute_state::SevSnpVcekAllowlistEntry`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 948
            },
            {
              "name": "genesis::SevSnpTcbGenesis",
              "kind": "struct_item",
              "signature": "pub struct SevSnpTcbGenesis {\npub bootloader: u8,\npub tee: u8,\npub snp: u8,\npub microcode: u8\n}",
              "docs": "Genesis mirror of `compute_state::SevSnpTcb`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 959
            },
            {
              "name": "genesis::SgxDcapTrustAnchorsGenesis",
              "kind": "struct_item",
              "signature": "pub struct SgxDcapTrustAnchorsGenesis {\n/// SHA-256 of Intel SGX Root CA DER.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_intel_root_fingerprint_sha256: Option<[u8; 32]>,\n/// 32-byte MRENCLAVE values the chain accepts.\n\n#[serde(default)]\npub mrenclave_allowlist: Vec<Vec<u8>>,\n/// 32-byte MRSIGNER values the chain accepts.\n\n#[serde(default)]\npub mrsigner_allowlist: Vec<Vec<u8>>,\n/// Freshness window in chain epochs.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n/// Minimum ISV enclave SVN.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_isv_svn: Option<u16>,\n/// Minimum PCE SVN.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_pce_svn: Option<u16>,\n/// Require REPORT_DATA receipt-binding on every quote.\n\n#[serde(default)]\npub require_receipt_binding: bool,\n// ----- Phase 14b-2 collateral hardening -----\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub intel_tcb_signing_cert_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tcb_info_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub qe_identity_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pck_crl_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub root_ca_crl_der: Option<Vec<u8>>,\n#[serde(default)]\npub allowed_tcb_statuses: Vec<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub collateral_max_age_epochs: Option<u64>\n}",
              "docs": "Genesis-side mirror of `compute_state::SgxDcapTrustAnchors`\n(Phases 14b + 14b-2).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 970
            },
            {
              "name": "genesis::ArmCcaTrustAnchorsGenesis",
              "kind": "struct_item",
              "signature": "pub struct ArmCcaTrustAnchorsGenesis {\n#[serde(default)]\npub pinned_iak_pubkeys_sec1: Vec<Vec<u8>>,\n#[serde(default)]\npub rim_allowlist: Vec<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n#[serde(default)]\npub require_receipt_binding: bool\n}",
              "docs": "Genesis-side mirror of `compute_state::ArmCcaTrustAnchors` (Phase 14d).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 1055
            },
            {
              "name": "genesis::TdxTrustAnchorsGenesis",
              "kind": "struct_item",
              "signature": "pub struct TdxTrustAnchorsGenesis {\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_intel_root_fingerprint_sha256: Option<[u8; 32]>,\n#[serde(default)]\npub mrtd_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub mrsigner_seam_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr0_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr1_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr2_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr3_allowlist: Vec<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_pce_svn: Option<u16>,\n#[serde(default)]\npub require_receipt_binding: bool,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub intel_tcb_signing_cert_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tcb_info_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub qe_identity_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pck_crl_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub root_ca_crl_der: Option<Vec<u8>>,\n#[serde(default)]\npub allowed_tcb_statuses: Vec<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub collateral_max_age_epochs: Option<u64>\n}",
              "docs": "Genesis-side mirror of `compute_state::TdxTrustAnchors` (Phase 14c).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 1069
            },
            {
              "name": "genesis::ProviderStakeTiers",
              "kind": "struct_item",
              "signature": "pub struct ProviderStakeTiers {\n/// Consumer tier (micro-MINT).\n\npub consumer: u64,\n/// Professional tier (micro-MINT).\n\npub professional: u64,\n/// Enterprise tier (micro-MINT).\n\npub enterprise: u64,\n/// Cluster tier (micro-MINT).\n\npub cluster: u64\n}",
              "docs": "Provider stake tiers for compute marketplace.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 1109
            },
            {
              "name": "genesis::TowerParams",
              "kind": "struct_item",
              "signature": "pub struct TowerParams {\n/// Slot duration in seconds.\n\npub slot_duration_secs: u64,\n/// Number of slots per epoch.\n\npub slots_per_epoch: u64,\n/// Minimum stake to become a Tower validator (micro-MINT).\n\npub min_tower_stake: u64,\n/// Tower committee size (Block Producers per slot).\n\npub bp_committee_size: u32,\n/// Tower committee size (Block Validators per slot).\n\npub bv_committee_size: u32\n}",
              "docs": "Tower consensus parameters for the genesis config.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 1134
            },
            {
              "name": "genesis::GovernanceParams",
              "kind": "struct_item",
              "signature": "pub struct GovernanceParams {\n/// Minimum deposit for a parameter change proposal (micro-MINT).\n\npub proposal_deposit_parameter: u64,\n/// Minimum deposit for a WASI module upgrade proposal (micro-MINT).\n\npub proposal_deposit_wasi: u64,\n/// Minimum deposit for a treasury spend proposal (micro-MINT).\n\npub proposal_deposit_treasury: u64,\n/// Minimum deposit for a validator slashing proposal (micro-MINT).\n\npub proposal_deposit_slashing: u64,\n/// Minimum deposit for an emergency action proposal (micro-MINT).\n\npub proposal_deposit_emergency: u64,\n/// Voting period in epochs (standard proposals).\n\npub voting_period_epochs: u64,\n/// Voting period in epochs (emergency proposals).\n\npub emergency_voting_period_epochs: u64,\n/// Timelock period in epochs (standard proposals).\n\npub timelock_epochs: u64,\n/// Minimum quorum fraction (e.g. 0.40 = 40% of staked SIGIL must vote).\n\npub quorum_fraction: f64\n}",
              "docs": "Governance parameters for the genesis config.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 1161
            },
            {
              "name": "genesis::ContractParams",
              "kind": "struct_item",
              "signature": "pub struct ContractParams {\n/// Maximum bytecode size for `RegisterContractCode`, in bytes.\n\npub max_code_size: u64,\n/// Required base fee for code registration, in micro-MINT.\n\npub register_code_base_fee: u64,\n/// Additional fee per started KiB of bytecode, in micro-MINT.\n\npub register_code_fee_per_kib: u64,\n/// Height where privileged system contracts become the policy gate for\n\n/// core chain features. Before this height, legacy native execution stays\n\n/// active so a hard fork can be scheduled without changing old genesis\n\n/// files. `u64::MAX` means not scheduled.\n\n#[serde(default = \"default_system_contracts_activation_height\")]\npub system_contracts_activation_height: u64\n}",
              "docs": "Smart-contract platform parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1200
            },
            {
              "name": "genesis::CzacParams",
              "kind": "struct_item",
              "signature": "pub struct CzacParams {\n/// Enables CZAC payment-channel transactions that take custody of user\n\n/// funds. Must remain false on `sigil-mainnet-1` for v1.\n\npub payment_channels_enabled: bool\n}",
              "docs": "CZAC protocol launch controls.",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1232
            },
            {
              "name": "genesis::CzacParams::canary_enabled",
              "kind": "function_item",
              "signature": "pub fn canary_enabled() -> Self;",
              "docs": "Canary posture after operators intentionally opt into payment-channel\nsoak testing under real load.",
              "attributes": "",
              "line": 1241
            },
            {
              "name": "genesis::VigilsParams",
              "kind": "struct_item",
              "signature": "pub struct VigilsParams {\n/// Master switch for all Vigils transactions.\n\npub active: bool,\n/// Height before which Vigils transactions fail validation.\n\npub activation_height: u64,\n/// Event source kinds currently accepted by semantic validation.\n\npub enabled_sources: Vec<crate::vigil::EventSourceKind>,\n/// Maximum accepted EventDelivery transactions per block.\n\npub max_event_deliveries_per_block: u32,\n/// Separate callback gas budget for the Vigils execution pass.\n\npub max_callback_gas_per_block: u64,\n/// Maximum gas for one callback.\n\npub max_single_callback_gas: u64,\n/// Maximum canonical event payload size.\n\npub max_event_payload_bytes: u64,\n/// Maximum canonical proof size.\n\npub max_event_proof_bytes: u64\n}",
              "docs": "Vigils launch and source-gating parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1250
            },
            {
              "name": "genesis::GenesisConfig::to_json",
              "kind": "function_item",
              "signature": "pub fn to_json(&self) -> Result<String, crate::error::CoreError>;",
              "docs": "Serialize this genesis configuration to a JSON string.",
              "attributes": "",
              "line": 1286
            },
            {
              "name": "genesis::GenesisConfig::from_json",
              "kind": "function_item",
              "signature": "pub fn from_json(json: &str) -> Result<Self, crate::error::CoreError>;",
              "docs": "Deserialize a genesis configuration from a JSON string.",
              "attributes": "",
              "line": 1292
            },
            {
              "name": "genesis::GenesisConfig::write_to_file",
              "kind": "function_item",
              "signature": "pub fn write_to_file(&self, path: &std::path::Path) -> Result<(), crate::error::CoreError>;",
              "docs": "Write this genesis configuration to a file.",
              "attributes": "",
              "line": 1298
            },
            {
              "name": "genesis::GenesisConfig::read_from_file",
              "kind": "function_item",
              "signature": "pub fn read_from_file(path: &std::path::Path) -> Result<Self, crate::error::CoreError>;",
              "docs": "Read a genesis configuration from a file (does NOT validate).",
              "attributes": "",
              "line": 1306
            },
            {
              "name": "genesis::GenesisBuilder",
              "kind": "struct_item",
              "signature": "pub struct GenesisBuilder {\n\n}",
              "docs": "Builder for constructing a `GenesisConfig` with fluent API.",
              "attributes": "#[derive(Debug)]",
              "line": 1316
            },
            {
              "name": "genesis::GenesisBuilder::new_testnet",
              "kind": "function_item",
              "signature": "pub fn new_testnet() -> Self;",
              "docs": "Start a new genesis builder with testnet defaults.",
              "attributes": "",
              "line": 1339
            },
            {
              "name": "genesis::GenesisBuilder::username_params",
              "kind": "function_item",
              "signature": "pub fn username_params(mut self, params: crate::username::UsernameParams) -> Self;",
              "docs": "Set username registry parameters (length-tier prices, multiplier,\nreserved list, dispute multisig DIDs).",
              "attributes": "",
              "line": 1364
            },
            {
              "name": "genesis::GenesisBuilder::chain_id",
              "kind": "function_item",
              "signature": "pub fn chain_id(mut self, id: ChainId) -> Self;",
              "docs": "Set the chain ID.",
              "attributes": "",
              "line": 1370
            },
            {
              "name": "genesis::GenesisBuilder::genesis_time",
              "kind": "function_item",
              "signature": "pub fn genesis_time(mut self, time: u64) -> Self;",
              "docs": "Set the genesis time as a Unix timestamp.",
              "attributes": "",
              "line": 1376
            },
            {
              "name": "genesis::GenesisBuilder::add_validator",
              "kind": "function_item",
              "signature": "pub fn add_validator(mut self, validator: GenesisValidator) -> Self;",
              "docs": "Add a validator to the genesis set.",
              "attributes": "",
              "line": 1382
            },
            {
              "name": "genesis::GenesisBuilder::add_balance",
              "kind": "function_item",
              "signature": "pub fn add_balance(mut self, did: String, balance: u64) -> Self;",
              "docs": "Add an initial account balance.",
              "attributes": "",
              "line": 1388
            },
            {
              "name": "genesis::GenesisBuilder::add_identity",
              "kind": "function_item",
              "signature": "pub fn add_identity(mut self, did: String, document: serde_json::Value) -> Self;",
              "docs": "Add an initial identity document for a launch/custody DID.",
              "attributes": "",
              "line": 1394
            },
            {
              "name": "genesis::GenesisBuilder::protocol_params",
              "kind": "function_item",
              "signature": "pub fn protocol_params(mut self, params: ProtocolParams) -> Self;",
              "docs": "Set protocol parameters.",
              "attributes": "",
              "line": 1400
            },
            {
              "name": "genesis::GenesisBuilder::economics",
              "kind": "function_item",
              "signature": "pub fn economics(mut self, economics: EconomicParams) -> Self;",
              "docs": "Set economic parameters.",
              "attributes": "",
              "line": 1406
            },
            {
              "name": "genesis::GenesisBuilder::tower_params",
              "kind": "function_item",
              "signature": "pub fn tower_params(mut self, tower: TowerParams) -> Self;",
              "docs": "Set Tower consensus parameters.",
              "attributes": "",
              "line": 1412
            },
            {
              "name": "genesis::GenesisBuilder::governance_params",
              "kind": "function_item",
              "signature": "pub fn governance_params(mut self, governance: GovernanceParams) -> Self;",
              "docs": "Set governance parameters.",
              "attributes": "",
              "line": 1418
            },
            {
              "name": "genesis::GenesisBuilder::contract_params",
              "kind": "function_item",
              "signature": "pub fn contract_params(mut self, contracts: ContractParams) -> Self;",
              "docs": "Set smart-contract platform parameters.",
              "attributes": "",
              "line": 1424
            },
            {
              "name": "genesis::GenesisBuilder::czac_params",
              "kind": "function_item",
              "signature": "pub fn czac_params(mut self, czac: CzacParams) -> Self;",
              "docs": "Set CZAC protocol parameters.",
              "attributes": "",
              "line": 1430
            },
            {
              "name": "genesis::GenesisBuilder::vigils_params",
              "kind": "function_item",
              "signature": "pub fn vigils_params(mut self, vigils: VigilsParams) -> Self;",
              "docs": "Set Vigils launch and source-gating parameters.",
              "attributes": "",
              "line": 1436
            },
            {
              "name": "genesis::GenesisBuilder::nova_params",
              "kind": "function_item",
              "signature": "pub fn nova_params(mut self, nova: crate::nova::NovaParams) -> Self;",
              "docs": "Set Nova metaverse launch parameters and genesis worlds.",
              "attributes": "",
              "line": 1442
            },
            {
              "name": "genesis::GenesisBuilder::reference_contract",
              "kind": "function_item",
              "signature": "pub fn reference_contract(mut self, contract: GenesisReferenceContract) -> Self;",
              "docs": "Add a reference contract to be deployed at genesis.",
              "attributes": "",
              "line": 1448
            },
            {
              "name": "genesis::GenesisBuilder::build",
              "kind": "function_item",
              "signature": "pub fn build(self) -> Result<GenesisConfig, GenesisValidationError>;",
              "docs": "Build the genesis config and validate it.",
              "attributes": "",
              "line": 1454
            },
            {
              "name": "genesis::ProtocolParams::testnet_default",
              "kind": "function_item",
              "signature": "pub fn testnet_default() -> Self;",
              "docs": "Reduced-stake testnet defaults for easier testing.",
              "attributes": "",
              "line": 1482
            },
            {
              "name": "genesis::EconomicParams::testnet_default",
              "kind": "function_item",
              "signature": "pub fn testnet_default() -> Self;",
              "docs": "Testnet economic defaults with higher block rewards for faucet sustainability.",
              "attributes": "",
              "line": 1500
            },
            {
              "name": "genesis::generate_testnet_genesis",
              "kind": "function_item",
              "signature": "pub fn generate_testnet_genesis(\n    num_validators: usize,\n    genesis_time: u64,\n) -> Result<GenesisConfig, GenesisValidationError>;",
              "docs": "Generate a complete testnet genesis configuration with the specified number\nof validators. Each validator gets deterministic keys derived from its index.\n\nReturns a fully validated `GenesisConfig` ready to write to disk.",
              "attributes": "",
              "line": 1518
            },
            {
              "name": "genesis::GenesisValidationError",
              "kind": "enum_item",
              "signature": "pub enum GenesisValidationError {\n    #[error(\"genesis must have at least one validator\")]\n    NoValidators,\n\n    #[error(\"invalid OAS DID for {did}: {reason}\")]\n    InvalidDid { did: String, reason: String },\n\n    #[error(\"invalid {field} for {did}: {reason}\")]\n    InvalidPublicKey {\n        did: String,\n        field: &'static str,\n        reason: String,\n    },\n\n    #[error(\"invalid genesis identity document for {did}: {reason}\")]\n    InvalidIdentityDocument { did: String, reason: String },\n\n    #[error(\"validator {did} has insufficient stake: {stake} < {minimum}\")]\n    InsufficientStake {\n        did: String,\n        stake: u64,\n        minimum: u64,\n    },\n\n    #[error(\"duplicate validator DID: {0}\")]\n    DuplicateValidator(String),\n\n    #[error(\"duplicate validator {field}: {value}\")]\n    DuplicateValidatorPublicKey { field: &'static str, value: String },\n\n    #[error(\"validator {0} missing human root DID\")]\n    MissingHumanRoot(String),\n\n    #[error(\"invalid compute genesis params: {reason}\")]\n    InvalidComputeParams { reason: String },\n\n    #[error(\"invalid CZAC genesis params: {reason}\")]\n    InvalidCzacParams { reason: String },\n\n    #[error(\"invalid Nova genesis params: {reason}\")]\n    InvalidNovaParams { reason: String },\n\n    #[error(\"invalid reference contract {contract_did}: {reason}\")]\n    InvalidReferenceContract {\n        contract_did: String,\n        reason: String,\n    },\n}",
              "docs": "Errors during genesis validation.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 1622
            }
          ],
          "parseErrors": false
        },
        {
          "module": "hash",
          "source": "sigil/node/sigil-core/src/hash.rs",
          "sha256": "65e418481f6d103c23adcf3665061468a65e84619a00c9e0acdaf173f31648c4",
          "attributes": "",
          "items": [
            {
              "name": "hash::SigilHash",
              "kind": "struct_item",
              "signature": "pub struct SigilHash([u8; 32]);",
              "docs": "A 32-byte BLAKE3 hash used throughout the Sigil blockchain.",
              "attributes": "#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "hash::SigilHash::ZERO",
              "kind": "const_item",
              "signature": "pub const ZERO: Self;",
              "docs": "The zero hash (used as parent hash for genesis block).",
              "attributes": "",
              "line": 12
            },
            {
              "name": "hash::SigilHash::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: [u8; 32]) -> Self;",
              "docs": "Create from raw bytes.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "hash::SigilHash::digest",
              "kind": "function_item",
              "signature": "pub fn digest(data: &[u8]) -> Self;",
              "docs": "Hash arbitrary data.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "hash::SigilHash::digest_many",
              "kind": "function_item",
              "signature": "pub fn digest_many(parts: &[&[u8]]) -> Self;",
              "docs": "Hash multiple byte slices (concatenated).",
              "attributes": "",
              "line": 25
            },
            {
              "name": "hash::SigilHash::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "Returns the raw 32 bytes.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "hash::SigilHash::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "Returns hex-encoded string.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "hash::SigilHash::from_hex",
              "kind": "function_item",
              "signature": "pub fn from_hex(hex: &str) -> Result<Self, crate::error::CoreError>;",
              "docs": "Parse from hex string.",
              "attributes": "",
              "line": 48
            }
          ],
          "parseErrors": false
        },
        {
          "module": "labor",
          "source": "sigil/node/sigil-core/src/labor.rs",
          "sha256": "be2ad662ad493142d2e72886662f3184a2ea3b9559b44d3ab2bf3eeab06f2241",
          "attributes": "",
          "items": [
            {
              "name": "labor::CounterpartyFilter",
              "kind": "enum_item",
              "signature": "pub enum CounterpartyFilter {\n    HumansOnly,\n    AgentsOnly,\n    DaosOnly,\n    AriseProvidersOnly,\n    Any,\n}",
              "docs": "Counterparty filter for a labor job posting.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 22
            },
            {
              "name": "labor::JobStatus",
              "kind": "enum_item",
              "signature": "pub enum JobStatus {\n    Open,\n    Reviewing,\n    Awarded,\n    Cancelled,\n    Closed,\n}",
              "docs": "Lifecycle of a labor job.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 33
            },
            {
              "name": "labor::SkillTag",
              "kind": "type_item",
              "signature": "pub type SkillTag = String;",
              "docs": "Skill / category tag attached to a job posting or bid.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "labor::LaborJob",
              "kind": "struct_item",
              "signature": "pub struct LaborJob {\n/// `did:oas:sigil:job:<id>`.\n\npub job_id: String,\n/// DID that posted the job (DAO / agent / human).\n\npub poster_did: String,\n/// Mandate id used to post this job. Required when poster is an agent.\n\npub posting_mandate_id: Option<MandateId>,\n/// BLAKE3 commitment of off-chain title text.\n\npub title_commitment: String,\n/// BLAKE3 commitment of off-chain job description.\n\npub description_commitment: String,\n/// Job category.\n\npub category: String,\n/// Required skills.\n\npub required_skills: Vec<SkillTag>,\n/// Required attestations (e.g., kyc, expertise).\n\npub required_attestations: Vec<String>,\n/// Token paid for completion.\n\npub budget_token_id: TokenId,\n/// Total budget amount.\n\npub budget_amount: u128,\n/// Milestone plan template.\n\npub milestone_plan: MilestonePlan,\n/// Escrow policy template.\n\npub escrow_policy: EscrowPolicy,\n/// Counterparty filter.\n\npub counterparty_filter: CounterpartyFilter,\n/// Optional epoch deadline.\n\npub deadline_epoch: Option<u64>,\n/// Status.\n\npub status: JobStatus,\n/// Epoch the job was created at.\n\npub created_at_epoch: u64\n}",
              "docs": "Posted labor job (advertisement on-chain).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "labor::BidderKind",
              "kind": "enum_item",
              "signature": "pub enum BidderKind {\n    Human,\n    Agent,\n    Dao,\n    Committee,\n    AriseProvider,\n}",
              "docs": "Class of entity submitting a bid.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 88
            },
            {
              "name": "labor::BidStatus",
              "kind": "enum_item",
              "signature": "pub enum BidStatus {\n    Submitted,\n    Withdrawn,\n    Accepted,\n    Rejected,\n}",
              "docs": "Bid lifecycle status.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 99
            },
            {
              "name": "labor::ReputationSnapshot",
              "kind": "struct_item",
              "signature": "pub struct ReputationSnapshot {\npub aggregate_score: i64,\npub completed_contracts: u32,\npub disputes_lost: u32,\npub captured_at_epoch: u64\n}",
              "docs": "Reputation snapshot at bid time.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 108
            },
            {
              "name": "labor::AttestationRef",
              "kind": "struct_item",
              "signature": "pub struct AttestationRef {\npub attestation_id: String,\npub attester_did: String,\npub commitment: String\n}",
              "docs": "Reference to an off-chain attestation document.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 117
            },
            {
              "name": "labor::LaborBid",
              "kind": "struct_item",
              "signature": "pub struct LaborBid {\npub bid_id: String,\npub job_id: String,\npub bidder_did: String,\npub bidder_kind: BidderKind,\npub proposed_price: u128,\npub proposed_token_id: TokenId,\npub estimated_duration_seconds: u64,\npub capabilities_proof: Vec<AttestationRef>,\npub reputation_snapshot: Option<ReputationSnapshot>,\npub mandate_id_for_work: Option<MandateId>,\npub status: BidStatus,\npub submitted_at_epoch: u64\n}",
              "docs": "Submitted bid for a labor job.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 125
            },
            {
              "name": "labor::ContractState",
              "kind": "enum_item",
              "signature": "pub enum ContractState {\n    Proposed,\n    Funded,\n    InProgress,\n    Delivered,\n    Disputed,\n    Completed,\n    Cancelled,\n}",
              "docs": "Lifecycle of a labor contract.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 147
            },
            {
              "name": "labor::MilestoneState",
              "kind": "enum_item",
              "signature": "pub enum MilestoneState {\n    Pending,\n    Submitted,\n    Attested,\n    Paid,\n    Disputed,\n    Cancelled,\n}",
              "docs": "Lifecycle of a single milestone.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 160
            },
            {
              "name": "labor::DeliverableRef",
              "kind": "struct_item",
              "signature": "pub struct DeliverableRef {\npub deliverable_id: String,\npub payload_hash: String\n}",
              "docs": "Reference to an on-chain deliverable.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 171
            },
            {
              "name": "labor::Milestone",
              "kind": "struct_item",
              "signature": "pub struct Milestone {\npub milestone_index: u32,\npub description_hash: String,\npub amount: u128,\npub due_epoch: Option<u64>,\npub state: MilestoneState,\npub deliverable_ref: Option<DeliverableRef>\n}",
              "docs": "Single milestone within a labor contract.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 178
            },
            {
              "name": "labor::MilestonePlan",
              "kind": "struct_item",
              "signature": "pub struct MilestonePlan {\npub milestones: Vec<MilestoneTemplate>\n}",
              "docs": "Plan describing milestone breakdown attached to a job and inherited by the\nresulting contract.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 190
            },
            {
              "name": "labor::MilestonePlan::total_amount",
              "kind": "function_item",
              "signature": "pub fn total_amount(&self) -> u128;",
              "docs": "Sum of milestone amounts.",
              "attributes": "",
              "line": 196
            },
            {
              "name": "labor::MilestoneTemplate",
              "kind": "struct_item",
              "signature": "pub struct MilestoneTemplate {\npub milestone_index: u32,\npub description_hash: String,\npub amount: u128,\npub due_epoch: Option<u64>\n}",
              "docs": "Template milestone (without runtime state) used in postings/plans.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 203
            },
            {
              "name": "labor::EscrowPolicy",
              "kind": "enum_item",
              "signature": "pub enum EscrowPolicy {\n    /// Full amount must be escrowed before work begins.\n    FundFullUpFront,\n    /// Each milestone is funded independently before its work begins.\n    FundPerMilestone,\n}",
              "docs": "Escrow funding policy for a labor contract.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 213
            },
            {
              "name": "labor::LaborEscrow",
              "kind": "struct_item",
              "signature": "pub struct LaborEscrow {\npub contract_id: String,\npub funder_did: String,\npub escrow_account_did: String,\npub token_id: TokenId,\npub total_required: u128,\npub reserved_amount: u128,\npub released_amount: u128,\npub refunded_amount: u128,\npub slashed_amount: u128,\npub last_updated_epoch: u64\n}",
              "docs": "Durable escrow accounting for one labor contract.\n\nAmounts are protocol units of `token_id`. Settlement is exact: funds move\nfrom `reserved_amount` to exactly one of released, refunded, or slashed.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 225
            },
            {
              "name": "labor::LaborEscrow::remaining_unsettled",
              "kind": "function_item",
              "signature": "pub fn remaining_unsettled(&self) -> u128;",
              "docs": "",
              "attributes": "",
              "line": 239
            },
            {
              "name": "labor::LaborEscrow::accounted_total",
              "kind": "function_item",
              "signature": "pub fn accounted_total(&self) -> u128;",
              "docs": "",
              "attributes": "",
              "line": 243
            },
            {
              "name": "labor::AttestationPolicy",
              "kind": "enum_item",
              "signature": "pub enum AttestationPolicy {\n    /// Inherit the mandate's approval policy.\n    InheritFromMandate,\n    /// Override with an employer-only attestation.\n    Employer,\n    /// Override with a committee threshold.\n    Committee {\n        members: Vec<String>,\n        threshold: u32,\n    },\n}",
              "docs": "Attestation policy applied to a contract milestone (refines the\nmandate-level approval policy).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 255
            },
            {
              "name": "labor::RoyaltyRecipient",
              "kind": "struct_item",
              "signature": "pub struct RoyaltyRecipient {\npub recipient_did: String,\npub basis_points: u16,\npub rationale_commitment: Option<String>\n}",
              "docs": "Royalty recipient \u2014 a long-tail human/agent credited for their\ncontribution to the work product.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 270
            },
            {
              "name": "labor::LaborContract",
              "kind": "struct_item",
              "signature": "pub struct LaborContract {\n/// `did:oas:sigil:contract:labor:<id>`.\n\npub contract_id: String,\npub job_id: String,\npub employer_did: String,\npub worker_did: String,\npub employer_mandate_id: Option<MandateId>,\npub worker_mandate_id: Option<MandateId>,\npub token_id: TokenId,\npub total_amount: u128,\n/// Dedicated escrow account DID\n\n/// (`did:oas:sigil:treasury:escrow:<contract>`).\n\npub escrow_account_did: String,\npub milestones: Vec<Milestone>,\npub milestone_policy: MilestonePolicy,\npub attestation_policy: AttestationPolicy,\npub dispute_policy: DisputePolicy,\npub reputation_impact: ReputationImpactPolicy,\n/// Optional revenue share applied to this contract's payout (beyond the\n\n/// worker).\n\npub revenue_share: Option<DistributionPolicy>,\n/// Royalty recipients credited on each payout.\n\npub royalty_recipients: Vec<RoyaltyRecipient>,\npub state: ContractState,\npub created_at_epoch: u64\n}",
              "docs": "Labor contract \u2014 the binding agreement between employer and worker.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 278
            },
            {
              "name": "labor::LaborContract::milestone_sum_matches_total",
              "kind": "function_item",
              "signature": "pub fn milestone_sum_matches_total(&self) -> bool;",
              "docs": "Returns true when the sum of all milestone amounts equals\n`total_amount`.",
              "attributes": "",
              "line": 308
            },
            {
              "name": "labor::LaborContract::validate_revenue_invariants",
              "kind": "function_item",
              "signature": "pub fn validate_revenue_invariants(&self) -> Result<(), RevenueShareError>;",
              "docs": "Validate that royalty basis points sum to `<= 10_000` and revenue\nshare, if present, sums to exactly 10_000.",
              "attributes": "",
              "line": 315
            },
            {
              "name": "labor::CapabilitySpec",
              "kind": "struct_item",
              "signature": "pub struct CapabilitySpec {\npub required_skills: Vec<SkillTag>,\npub required_attestations: Vec<String>,\npub artifact_policy_commitment: Option<String>\n}",
              "docs": "Capability boundary for an open bounty claim.\n\nThese fields are commitments and tags only. The executor does not infer a\nclaimant's ability from self-asserted metadata; verification still has to\npass through the offer's [`VerificationMode`].",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 344
            },
            {
              "name": "labor::VerificationMode",
              "kind": "enum_item",
              "signature": "pub enum VerificationMode {\n    /// Deterministic allowlist of human approvers. Launch-live when\n    /// `threshold` signatures from unique listed DIDs are present.\n    HumanApproved {\n        approver_dids: Vec<String>,\n        threshold: u32,\n    },\n    /// Deterministic quorum allowlist. Launch-live when `threshold` unique\n    /// members agree.\n    QuorumAgreed {\n        member_dids: Vec<String>,\n        threshold: u32,\n    },\n    /// Lumen verifier mode. Launch-live when the claimant submits a valid\n    /// Lumen attestation during `LaborAttestClaim`; `registry_id` is matched\n    /// as the expected Lumen model/registry id.\n    LumenAttested { registry_id: String },\n    /// Reserved verifier mode. Fails closed until the exact TEE verifier\n    /// registry and vendor roots are wired into consensus execution.\n    TeeAttested { registry_id: String },\n}",
              "docs": "Verification primitive required before an open bounty can pay.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 353
            },
            {
              "name": "labor::BountyState",
              "kind": "enum_item",
              "signature": "pub enum BountyState {\n    Open,\n    Exhausted,\n    Closed,\n    Cancelled,\n}",
              "docs": "Lifecycle of an open bounty offer.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 378
            },
            {
              "name": "labor::BountyClaimState",
              "kind": "enum_item",
              "signature": "pub enum BountyClaimState {\n    Submitted,\n    Verified,\n    Rejected,\n    Paid,\n    Expired,\n}",
              "docs": "Lifecycle of a submitted bounty claim.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 388
            },
            {
              "name": "labor::BountyOffer",
              "kind": "struct_item",
              "signature": "pub struct BountyOffer {\npub offer_id: String,\npub sponsor_did: String,\npub posting_mandate_id: Option<MandateId>,\npub title_commitment: String,\npub description_commitment: String,\npub category: String,\npub capability_spec: CapabilitySpec,\npub token_id: TokenId,\npub total_funding: u128,\npub reserved_claim_amount: u128,\npub paid_amount: u128,\npub refunded_amount: u128,\npub slashed_bond_amount: u128,\npub spam_fee_collected: u128,\npub claim_bond: u128,\npub spam_fee: u128,\npub max_claims: u32,\npub per_claim_payout_cap: u128,\npub claim_window_start_block: u64,\npub claim_window_end_block: u64,\npub claim_timeout_blocks: u64,\npub verification_mode: VerificationMode,\npub escrow_account_did: String,\npub state: BountyState,\npub submitted_claim_count: u32,\npub created_at_block: u64,\npub last_updated_block: u64\n}",
              "docs": "Open offer funded up front by a sponsor. Claim payouts are reserved at\nsubmission time and released only after the verification mode reaches its\ndeterministic threshold.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 400
            },
            {
              "name": "labor::BountyOffer::available_amount",
              "kind": "function_item",
              "signature": "pub fn available_amount(&self) -> u128;",
              "docs": "",
              "attributes": "",
              "line": 431
            },
            {
              "name": "labor::BountyOffer::accounted_funding",
              "kind": "function_item",
              "signature": "pub fn accounted_funding(&self) -> u128;",
              "docs": "",
              "attributes": "",
              "line": 438
            },
            {
              "name": "labor::BountyClaim",
              "kind": "struct_item",
              "signature": "pub struct BountyClaim {\npub claim_id: String,\npub offer_id: String,\npub claimant_did: String,\npub claim_sequence: u32,\npub deliverable_hash: String,\npub evidence_hashes: Vec<String>,\npub requested_payout: u128,\npub bond_amount: u128,\npub spam_fee_paid: u128,\npub submitted_at_block: u64,\npub timeout_block: u64,\npub state: BountyClaimState,\npub attestation_ids: Vec<String>,\npub paid_at_block: Option<u64>,\npub settled_at_block: Option<u64>\n}",
              "docs": "Claim against an open bounty offer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 448
            },
            {
              "name": "labor::ClaimAttestation",
              "kind": "struct_item",
              "signature": "pub struct ClaimAttestation {\npub attestation_id: String,\npub offer_id: String,\npub claim_id: String,\npub attester_did: String,\npub verdict: AttestationVerdict,\npub reason_commitment: Option<String>,\npub signed_at_block: u64\n}",
              "docs": "Deterministic attestation recorded for a bounty claim.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 468
            },
            {
              "name": "labor::LaborOffer",
              "kind": "enum_item",
              "signature": "pub enum LaborOffer {\n    Named(LaborContract),\n    Open(BountyOffer),\n}",
              "docs": "Compatibility wrapper for code that wants to reason over both named\ncontracts and open offers without changing the existing named labor model.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 482
            },
            {
              "name": "labor::Deliverable",
              "kind": "struct_item",
              "signature": "pub struct Deliverable {\npub deliverable_id: String,\npub contract_id: String,\npub milestone_index: u32,\npub payload_hash: String,\npub submitted_by_did: String,\npub submitted_at_epoch: u64\n}",
              "docs": "Submitted deliverable for a milestone.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 493
            },
            {
              "name": "labor::AttesterKind",
              "kind": "enum_item",
              "signature": "pub enum AttesterKind {\n    Employer,\n    Committee,\n    Oracle,\n    Automated,\n}",
              "docs": "Class of attester signing a milestone completion.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 505
            },
            {
              "name": "labor::AttestationVerdict",
              "kind": "enum_item",
              "signature": "pub enum AttestationVerdict {\n    Accept,\n    Reject,\n    Partial,\n}",
              "docs": "Outcome of an attestation.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 515
            },
            {
              "name": "labor::CompletionAttestation",
              "kind": "struct_item",
              "signature": "pub struct CompletionAttestation {\npub attestation_id: String,\npub contract_id: String,\npub milestone_index: u32,\npub attester_did: String,\npub attester_kind: AttesterKind,\npub verdict: AttestationVerdict,\npub reason_commitment: Option<String>,\npub signed_at_epoch: u64\n}",
              "docs": "Milestone completion attestation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 523
            },
            {
              "name": "labor::Review",
              "kind": "struct_item",
              "signature": "pub struct Review {\npub review_id: String,\npub contract_id: String,\npub reviewer_did: String,\npub subject_did: String,\n/// Score in 0..=100.\n\npub score: u8,\npub commentary_hash: String,\n/// Reviewer weight derived from reputation snapshot.\n\npub weight: u32,\npub recorded_at_epoch: u64\n}",
              "docs": "Post-completion review.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 536
            },
            {
              "name": "labor::SignalSource",
              "kind": "enum_item",
              "signature": "pub enum SignalSource {\n    ContractCompletion,\n    Attestation,\n    Review,\n    DisputeOutcome,\n    StakeLoss,\n    AriseChallenge,\n}",
              "docs": "Source category of a reputation signal.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 556
            },
            {
              "name": "labor::DecayPolicy",
              "kind": "enum_item",
              "signature": "pub enum DecayPolicy {\n    /// No decay \u2014 permanent signal.\n    None,\n    /// Half-life expressed in epochs.\n    HalfLife { epochs: u64 },\n    /// Linear decay over a fixed window (signal is zero after `epochs`).\n    LinearOver { epochs: u64 },\n}",
              "docs": "Decay policy applied to a reputation signal at read time.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 568
            },
            {
              "name": "labor::ReputationSignal",
              "kind": "struct_item",
              "signature": "pub struct ReputationSignal {\npub signal_id: String,\npub subject_did: String,\npub source: SignalSource,\npub delta_score: i32,\npub decay_policy: DecayPolicy,\npub epoch: u64\n}",
              "docs": "Append-only reputation signal stored on-chain.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 579
            },
            {
              "name": "labor::DisputeCause",
              "kind": "enum_item",
              "signature": "pub enum DisputeCause {\n    NonDelivery,\n    QualityIssue,\n    PaymentWithheld,\n    Misuse,\n    Other,\n}",
              "docs": "Cause classification for a dispute.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 595
            },
            {
              "name": "labor::DisputeState",
              "kind": "enum_item",
              "signature": "pub enum DisputeState {\n    Raised,\n    UnderReview,\n    Resolved,\n    Appealed,\n}",
              "docs": "Lifecycle of a dispute.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 606
            },
            {
              "name": "labor::DisputeResolution",
              "kind": "enum_item",
              "signature": "pub enum DisputeResolution {\n    /// Pay worker the supplied amount; refund remainder to employer.\n    Split {\n        worker_amount: u128,\n        employer_amount: u128,\n    },\n    /// Cancel contract; refund full escrow to employer.\n    RefundEmployer,\n    /// Pay full escrow to worker.\n    PayWorker,\n}",
              "docs": "Resolution outcome for a dispute.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 616
            },
            {
              "name": "labor::Dispute",
              "kind": "struct_item",
              "signature": "pub struct Dispute {\npub dispute_id: String,\npub contract_id: String,\npub raiser_did: String,\npub cause: DisputeCause,\npub evidence_hashes: Vec<String>,\npub arbitration: DisputePolicy,\npub state: DisputeState,\npub resolution: Option<DisputeResolution>,\npub raised_at_epoch: u64\n}",
              "docs": "On-chain dispute record.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 630
            },
            {
              "name": "labor::Dispute::allows_transition",
              "kind": "function_item",
              "signature": "pub fn allows_transition(&self, next: DisputeState) -> bool;",
              "docs": "Validate a state transition. Allowed transitions:\n`Raised -> UnderReview -> Resolved`, `Resolved -> Appealed`,\n`Appealed -> UnderReview`.",
              "attributes": "",
              "line": 646
            },
            {
              "name": "labor::ShareRevocability",
              "kind": "enum_item",
              "signature": "pub enum ShareRevocability {\n    Immutable,\n    RevocableByIssuer,\n    DaoGovernance,\n}",
              "docs": "Revocability of a revenue share.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 664
            },
            {
              "name": "labor::RevenueShare",
              "kind": "struct_item",
              "signature": "pub struct RevenueShare {\npub share_id: String,\n/// Source DID generating the revenue (contract / agent / skill / model /\n\n/// workflow).\n\npub source_did: String,\npub distribution: DistributionPolicy,\npub expiry_epoch: Option<u64>,\npub revocability: ShareRevocability\n}",
              "docs": "Revenue share record. The chain enforces the basis-point invariant on\nevery distribute operation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 673
            },
            {
              "name": "labor::RevenueShare::validate_totals",
              "kind": "function_item",
              "signature": "pub fn validate_totals(&self) -> Result<(), RevenueShareError>;",
              "docs": "Returns Ok if and only if `\u03a3 basis_points == 10_000` exactly.",
              "attributes": "",
              "line": 685
            },
            {
              "name": "labor::RevenueShare::split",
              "kind": "function_item",
              "signature": "pub fn split(&self, gross: u128) -> Vec<(String, u128)>;",
              "docs": "Compute payout amounts per recipient for a given gross amount. Any\nresidual (rounding) goes to the source.",
              "attributes": "",
              "line": 701
            },
            {
              "name": "labor::RevenueShareError",
              "kind": "enum_item",
              "signature": "pub enum RevenueShareError {\n    #[error(\"revenue shares must total 10000 basis points\")]\n    ShareTotalsInvalid,\n    #[error(\"royalty basis points exceed 10000\")]\n    RoyaltyTotalExceedsLimit,\n}",
              "docs": "Errors related to revenue share / royalty arithmetic.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Error)]",
              "line": 724
            },
            {
              "name": "labor::single_recipient_distribution",
              "kind": "function_item",
              "signature": "pub fn single_recipient_distribution(recipient_did: impl Into<String>) -> DistributionPolicy;",
              "docs": "Convenience constructor for a single-recipient distribution policy.",
              "attributes": "",
              "line": 732
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mail",
          "source": "sigil/node/sigil-core/src/mail.rs",
          "sha256": "22b8ff2d591b28fb405bb0bc2e1fc379b5390792fb9fcaaa5d406d7f2879ab95",
          "attributes": "",
          "items": [
            {
              "name": "mail::MAILBOX_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const MAILBOX_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "mail::ALIAS_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const ALIAS_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "mail::KEY_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const KEY_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "mail::POLICY_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const POLICY_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "mail::DELIVERY_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const DELIVERY_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "mail::DELIVERY_SIGNATURE_DOMAIN",
              "kind": "const_item",
              "signature": "pub const DELIVERY_SIGNATURE_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "mail::DELEGATION_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const DELEGATION_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "mail::ABUSE_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const ABUSE_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "mail::TX_DOMAIN",
              "kind": "const_item",
              "signature": "pub const TX_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "mail::EVENT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const EVENT_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "mail::MAIL_TREASURY_DID",
              "kind": "const_item",
              "signature": "pub const MAIL_TREASURY_DID: &str;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "mail::validate_hex32",
              "kind": "function_item",
              "signature": "pub fn validate_hex32(label: &str, value: &str) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "mail::mailbox_id",
              "kind": "function_item",
              "signature": "pub fn mailbox_id(\n    chain_id: &str,\n    subject_did: &str,\n    mailbox_salt_commitment: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "mail::alias_id",
              "kind": "function_item",
              "signature": "pub fn alias_id(\n    chain_id: &str,\n    alias_kind: MailAliasKind,\n    canonical_alias_or_commitment: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "mail::key_id",
              "kind": "function_item",
              "signature": "pub fn key_id(\n    chain_id: &str,\n    mailbox_id: &str,\n    purpose: MailKeyPurpose,\n    algorithm: &str,\n    public_key_bytes: &[u8],\n    key_version: u64,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "mail::policy_id",
              "kind": "function_item",
              "signature": "pub fn policy_id(\n    chain_id: &str,\n    mailbox_id: &str,\n    policy_version: u64,\n    policy_hash: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 118
            },
            {
              "name": "mail::delivery_commitment_id",
              "kind": "function_item",
              "signature": "pub fn delivery_commitment_id(\n    chain_id: &str,\n    sender_route_id: &str,\n    recipient_mailbox_id: &str,\n    encrypted_weave_ref_commitment: &str,\n    ciphertext_content_hash: &str,\n    client_nonce: &str,\n    recipient_key_version: u64,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "mail::delegation_id",
              "kind": "function_item",
              "signature": "pub fn delegation_id(\n    chain_id: &str,\n    mailbox_id: &str,\n    grantee_did: &str,\n    nonce: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 164
            },
            {
              "name": "mail::abuse_id",
              "kind": "function_item",
              "signature": "pub fn abuse_id(\n    chain_id: &str,\n    mailbox_id: &str,\n    delivery_commitment_id: &str,\n    reporter_did: &str,\n    evidence_commitment: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 180
            },
            {
              "name": "mail::validate_no_plaintext_mail_value",
              "kind": "function_item",
              "signature": "pub fn validate_no_plaintext_mail_value(label: &str, value: &str) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 203
            },
            {
              "name": "mail::MailboxStatus",
              "kind": "enum_item",
              "signature": "pub enum MailboxStatus {\n    Active,\n    Locked,\n    Recovering,\n    Deactivated,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 234
            },
            {
              "name": "mail::MailboxCapabilityRecord",
              "kind": "struct_item",
              "signature": "pub struct MailboxCapabilityRecord {\npub mailbox_id: String,\npub subject_did: String,\npub controller_policy: ControlPolicy,\npub recovery_policy_ref: Option<String>,\npub wallet_address: Option<String>,\npub primary_alias_id: Option<String>,\npub alias_ids: Vec<String>,\npub status: MailboxStatus,\npub current_policy_version: u64,\npub current_encryption_key_version: u64,\npub current_signing_key_version: u64,\npub mailbox_storage_commitment: Option<String>,\npub created_at_height: u64,\npub updated_at_height: u64,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 242
            },
            {
              "name": "mail::MailboxCapabilityRecord::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 261
            },
            {
              "name": "mail::MailAliasKind",
              "kind": "enum_item",
              "signature": "pub enum MailAliasKind {\n    SigilUsername,\n    Did,\n    Wallet,\n    FutureAddress,\n    Blinded,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 279
            },
            {
              "name": "mail::MailAliasKind::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 288
            },
            {
              "name": "mail::AliasStatus",
              "kind": "enum_item",
              "signature": "pub enum AliasStatus {\n    Active,\n    Revoked,\n    Superseded,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 301
            },
            {
              "name": "mail::MailAliasRecord",
              "kind": "struct_item",
              "signature": "pub struct MailAliasRecord {\npub alias_id: String,\npub mailbox_id: String,\npub alias_kind: MailAliasKind,\npub public_value: Option<String>,\npub blinded_commitment: Option<String>,\npub verified_source_ref: Option<String>,\npub status: AliasStatus,\npub created_at_height: u64,\npub revoked_at_height: Option<u64>,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 308
            },
            {
              "name": "mail::MailAliasRecord::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 322
            },
            {
              "name": "mail::PolicyStatus",
              "kind": "enum_item",
              "signature": "pub enum PolicyStatus {\n    Active,\n    Superseded,\n    Revoked,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 343
            },
            {
              "name": "mail::PolicyAction",
              "kind": "enum_item",
              "signature": "pub enum PolicyAction {\n    Allow,\n    Deny,\n    ContactsOnly,\n    RequireStake,\n    RequireFee,\n    RequireVerifiedSender,\n    RequireProof,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 351
            },
            {
              "name": "mail::SenderSelector",
              "kind": "enum_item",
              "signature": "pub enum SenderSelector {\n    Any,\n    Did(String),\n    Mailbox(String),\n    Alias(String),\n    Wallet(String),\n    VerifiedOrganization(String),\n    Blinded(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\", tag = \"kind\", content = \"value\")]",
              "line": 363
            },
            {
              "name": "mail::SenderSelector::matches",
              "kind": "function_item",
              "signature": "pub fn matches(&self, route: &SenderRoute) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 374
            },
            {
              "name": "mail::ReceivePolicyRule",
              "kind": "struct_item",
              "signature": "pub struct ReceivePolicyRule {\npub selector: SenderSelector,\npub action: PolicyAction,\npub priority: u16,\npub stake_required: u128,\npub fee_required: u128,\npub max_per_epoch: Option<u32>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 391
            },
            {
              "name": "mail::MailboxPolicyRecord",
              "kind": "struct_item",
              "signature": "pub struct MailboxPolicyRecord {\npub policy_id: String,\npub mailbox_id: String,\npub version: u64,\npub status: PolicyStatus,\npub rules: Vec<ReceivePolicyRule>,\npub emergency_lock_bypass: bool,\npub created_at_height: u64,\npub revoked_at_height: Option<u64>,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 401
            },
            {
              "name": "mail::MailboxPolicyRecord::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 414
            },
            {
              "name": "mail::evaluate_policy",
              "kind": "function_item",
              "signature": "pub fn evaluate_policy(\n    rules: &[ReceivePolicyRule],\n    route: &SenderRoute,\n) -> Result<PolicyAction, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 426
            },
            {
              "name": "mail::MailKeyPurpose",
              "kind": "enum_item",
              "signature": "pub enum MailKeyPurpose {\n    Encryption,\n    Signing,\n    Recovery,\n    Device,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 446
            },
            {
              "name": "mail::MailKeyPurpose::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 454
            },
            {
              "name": "mail::KeyStatus",
              "kind": "enum_item",
              "signature": "pub enum KeyStatus {\n    Active,\n    Rotated,\n    Revoked,\n    Expired,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 466
            },
            {
              "name": "mail::MailPublicKeyRecord",
              "kind": "struct_item",
              "signature": "pub struct MailPublicKeyRecord {\npub key_id: String,\npub mailbox_id: String,\npub purpose: MailKeyPurpose,\npub algorithm: String,\npub public_key_hex: String,\npub device_commitment: String,\npub version: u64,\npub status: KeyStatus,\npub published_at_height: u64,\npub expires_at_height: Option<u64>,\npub revoked_at_height: Option<u64>,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 474
            },
            {
              "name": "mail::MailPublicKeyRecord::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self, height: u64) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 490
            },
            {
              "name": "mail::DeliveryStatus",
              "kind": "enum_item",
              "signature": "pub enum DeliveryStatus {\n    Committed,\n    Refunded,\n    Slashed,\n    Burned,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 518
            },
            {
              "name": "mail::SenderRoute",
              "kind": "enum_item",
              "signature": "pub enum SenderRoute {\n    Did { did: String },\n    Mailbox { mailbox_id: String },\n    Alias { alias_id: String },\n    Wallet { wallet_address: String },\n    VerifiedOrganization { org_did: String },\n    Blinded { commitment: String },\n    SelectiveDisclosure { commitment: String },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\", tag = \"kind\", content = \"value\")]",
              "line": 527
            },
            {
              "name": "mail::SenderRoute::route_id",
              "kind": "function_item",
              "signature": "pub fn route_id(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 538
            },
            {
              "name": "mail::SenderRoute::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 551
            },
            {
              "name": "mail::DeliveryCommitmentRecord",
              "kind": "struct_item",
              "signature": "pub struct DeliveryCommitmentRecord {\npub delivery_commitment_id: String,\npub sender_route: SenderRoute,\npub sender_route_id: String,\npub recipient_mailbox_id: String,\npub encrypted_weave_ref_commitment: String,\npub ciphertext_content_hash: String,\npub recipient_key_id: String,\npub recipient_key_version: u64,\npub policy_version: u64,\npub client_nonce: String,\npub block_height: u64,\npub status: DeliveryStatus,\npub reply_to_commitment: Option<String>,\npub required_fee: u128,\npub locked_stake: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 567
            },
            {
              "name": "mail::DeliveryCommitmentRecord::validate_privacy_shape",
              "kind": "function_item",
              "signature": "pub fn validate_privacy_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 586
            },
            {
              "name": "mail::delivery_signature_payload",
              "kind": "function_item",
              "signature": "pub fn delivery_signature_payload(\n    chain_id: &str,\n    commitment: &DeliveryCommitmentRecord,\n) -> Result<Vec<u8>, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 607
            },
            {
              "name": "mail::EconomicsStatus",
              "kind": "enum_item",
              "signature": "pub enum EconomicsStatus {\n    Active,\n    Refunded,\n    Slashed,\n    Burned,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 639
            },
            {
              "name": "mail::SenderEconomicsRecord",
              "kind": "struct_item",
              "signature": "pub struct SenderEconomicsRecord {\npub sender_route_id: String,\npub recipient_mailbox_id: String,\npub locked_stake: u128,\npub collected_fee: u128,\npub status: EconomicsStatus,\npub updated_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 647
            },
            {
              "name": "mail::MailPermissionScope",
              "kind": "enum_item",
              "signature": "pub enum MailPermissionScope {\n    DeliverMail,\n    ReadMailboxReferences,\n    WriteMailboxReferences,\n    ManageReceivePolicy,\n    ManageAliases,\n    ManageKeys,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 658
            },
            {
              "name": "mail::MailDelegationGrant",
              "kind": "struct_item",
              "signature": "pub struct MailDelegationGrant {\npub grant_id: String,\npub mailbox_id: String,\npub grantor_did: String,\npub grantee_did: String,\npub scopes: Vec<MailPermissionScope>,\npub expires_at_height: Option<u64>,\npub revoked_at_height: Option<u64>,\npub rate_limit_per_epoch: Option<u32>,\npub nonce: String,\npub created_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 668
            },
            {
              "name": "mail::AbuseStatus",
              "kind": "enum_item",
              "signature": "pub enum AbuseStatus {\n    Open,\n    Resolved,\n    Rejected,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 683
            },
            {
              "name": "mail::AbuseResolution",
              "kind": "enum_item",
              "signature": "pub enum AbuseResolution {\n    Refund,\n    Slash,\n    Burn,\n    Reject,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 691
            },
            {
              "name": "mail::AbuseReport",
              "kind": "struct_item",
              "signature": "pub struct AbuseReport {\npub abuse_report_id: String,\npub mailbox_id: String,\npub delivery_commitment_id: String,\npub reporter_did: String,\npub evidence_commitment: String,\npub status: AbuseStatus,\npub resolution: Option<AbuseResolution>,\npub created_at_height: u64,\npub resolved_at_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 699
            },
            {
              "name": "mail::AbuseReport::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 712
            },
            {
              "name": "mail::MailCreateMailboxData",
              "kind": "struct_item",
              "signature": "pub struct MailCreateMailboxData {\npub mailbox_id: String,\npub subject_did: String,\npub controller_policy: ControlPolicy,\npub wallet_address: Option<String>,\npub mailbox_salt_commitment: String,\npub mailbox_storage_commitment: Option<String>,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 723
            },
            {
              "name": "mail::MailAddAliasData",
              "kind": "struct_item",
              "signature": "pub struct MailAddAliasData {\npub mailbox_id: String,\npub alias: MailAliasRecord,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 734
            },
            {
              "name": "mail::MailRemoveAliasData",
              "kind": "struct_item",
              "signature": "pub struct MailRemoveAliasData {\npub mailbox_id: String,\npub alias_id: String,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 742
            },
            {
              "name": "mail::MailSetPrimaryAliasData",
              "kind": "struct_item",
              "signature": "pub struct MailSetPrimaryAliasData {\npub mailbox_id: String,\npub alias_id: String,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 750
            },
            {
              "name": "mail::MailMailboxStatusData",
              "kind": "struct_item",
              "signature": "pub struct MailMailboxStatusData {\npub mailbox_id: String,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 758
            },
            {
              "name": "mail::MailLockMailboxData",
              "kind": "type_item",
              "signature": "pub type MailLockMailboxData = MailMailboxStatusData;",
              "docs": "",
              "attributes": "",
              "line": 764
            },
            {
              "name": "mail::MailUnlockMailboxData",
              "kind": "type_item",
              "signature": "pub type MailUnlockMailboxData = MailMailboxStatusData;",
              "docs": "",
              "attributes": "",
              "line": 765
            },
            {
              "name": "mail::MailDeactivateMailboxData",
              "kind": "type_item",
              "signature": "pub type MailDeactivateMailboxData = MailMailboxStatusData;",
              "docs": "",
              "attributes": "",
              "line": 766
            },
            {
              "name": "mail::MailRecoverMailboxData",
              "kind": "struct_item",
              "signature": "pub struct MailRecoverMailboxData {\npub mailbox_id: String,\npub recovery_policy_ref: String,\npub new_controller_policy: ControlPolicy,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 769
            },
            {
              "name": "mail::MailUpdateReceivePolicyData",
              "kind": "struct_item",
              "signature": "pub struct MailUpdateReceivePolicyData {\npub mailbox_id: String,\npub policy: MailboxPolicyRecord,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 778
            },
            {
              "name": "mail::MailRevokeReceivePolicyData",
              "kind": "struct_item",
              "signature": "pub struct MailRevokeReceivePolicyData {\npub mailbox_id: String,\npub policy_version: u64,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 786
            },
            {
              "name": "mail::MailPublishKeyData",
              "kind": "struct_item",
              "signature": "pub struct MailPublishKeyData {\npub mailbox_id: String,\npub key: MailPublicKeyRecord,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 794
            },
            {
              "name": "mail::MailRotateKeyData",
              "kind": "struct_item",
              "signature": "pub struct MailRotateKeyData {\npub mailbox_id: String,\npub old_key_id: String,\npub new_key: MailPublicKeyRecord,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 802
            },
            {
              "name": "mail::MailRevokeKeyData",
              "kind": "struct_item",
              "signature": "pub struct MailRevokeKeyData {\npub mailbox_id: String,\npub key_id: String,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 811
            },
            {
              "name": "mail::MailExpireKeysData",
              "kind": "struct_item",
              "signature": "pub struct MailExpireKeysData {\npub mailbox_id: String,\npub before_height: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 819
            },
            {
              "name": "mail::MailPublishDeliveryCommitmentData",
              "kind": "struct_item",
              "signature": "pub struct MailPublishDeliveryCommitmentData {\npub commitment: DeliveryCommitmentRecord,\npub sender_signature_hex: Option<String>,\npub sender_signing_key_id: Option<String>,\npub sender_signing_key_version: Option<u64>,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 826
            },
            {
              "name": "mail::MailReportAbuseData",
              "kind": "struct_item",
              "signature": "pub struct MailReportAbuseData {\npub report: AbuseReport,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 835
            },
            {
              "name": "mail::MailResolveAbuseData",
              "kind": "struct_item",
              "signature": "pub struct MailResolveAbuseData {\npub abuse_report_id: String,\npub resolution: AbuseResolution,\npub resolver_did: String,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 841
            },
            {
              "name": "mail::MailGrantPermissionData",
              "kind": "struct_item",
              "signature": "pub struct MailGrantPermissionData {\npub grant: MailDelegationGrant,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 849
            },
            {
              "name": "mail::MailRevokePermissionData",
              "kind": "struct_item",
              "signature": "pub struct MailRevokePermissionData {\npub grant_id: String,\npub mailbox_id: String,\npub expected_sequence: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 855
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mandate",
          "source": "sigil/node/sigil-core/src/mandate.rs",
          "sha256": "69429341049624e22dd6fb997f19bdd7ee712e2a0455760cf233fbb7f416b149",
          "attributes": "",
          "items": [
            {
              "name": "mandate::MandateId",
              "kind": "type_item",
              "signature": "pub type MandateId = String;",
              "docs": "Stable identifier for an issued mandate.\n\nConceptually `did:oas:sigil:mandate:<id>` \u2014 kept as an opaque string for\nflexibility across encodings.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "mandate::JobCategory",
              "kind": "type_item",
              "signature": "pub type JobCategory = String;",
              "docs": "Job category tag. Free-form lowercase string kept stable in indices.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "mandate::TokenId",
              "kind": "type_item",
              "signature": "pub type TokenId = String;",
              "docs": "Token identifier (native `SIGIL` or a custom token DID).",
              "attributes": "",
              "line": 36
            },
            {
              "name": "mandate::MandateStatus",
              "kind": "enum_item",
              "signature": "pub enum MandateStatus {\n    Active,\n    Paused,\n    Expired,\n    Revoked,\n}",
              "docs": "Status of a mandate.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 41
            },
            {
              "name": "mandate::AllowedCounterparties",
              "kind": "enum_item",
              "signature": "pub enum AllowedCounterparties {\n    /// Any DID allowed.\n    Any,\n    /// Restricted to an explicit allowlist of DIDs.\n    Allowlist { dids: Vec<String> },\n    /// Restricted to specific entity classes.\n    Classes { classes: Vec<CounterpartyClass> },\n}",
              "docs": "Allowed counterparties for actions taken under a mandate.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 51
            },
            {
              "name": "mandate::CounterpartyClass",
              "kind": "enum_item",
              "signature": "pub enum CounterpartyClass {\n    Human,\n    Agent,\n    Dao,\n    Committee,\n    AriseProvider,\n    Contract,\n}",
              "docs": "Class of counterparty an actor is allowed to engage with.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 63
            },
            {
              "name": "mandate::SpendLimits",
              "kind": "struct_item",
              "signature": "pub struct SpendLimits {\n/// Maximum amount permitted in a single transaction.\n\npub per_transaction_max: u128,\n/// Maximum aggregate spend per epoch (or `None` for no per-period cap).\n\npub per_epoch_max: Option<u128>\n}",
              "docs": "Spend limits enforced at every spend.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 74
            },
            {
              "name": "mandate::MandateBudget",
              "kind": "struct_item",
              "signature": "pub struct MandateBudget {\n/// Total amount granted.\n\npub total_amount: u128,\n/// Amount already spent (recorded on-chain via `RecordMandateSpend`).\n\npub spent_amount: u128\n}",
              "docs": "Total budget available under a mandate, independent of period caps.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 83
            },
            {
              "name": "mandate::MandateBudget::remaining",
              "kind": "function_item",
              "signature": "pub fn remaining(&self) -> u128;",
              "docs": "Remaining spendable amount.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "mandate::MandateScope",
              "kind": "struct_item",
              "signature": "pub struct MandateScope {\n/// Job categories the mandate may engage with (e.g., \"audit\",\n\n/// \"explorer-frontend\", \"infra-ops\"). Empty means \"any\".\n\npub job_categories: Vec<JobCategory>,\n/// Free-form tag commitments for explorer/UI.\n\npub tag_commitments: Vec<String>,\n/// If `Some(true)` the mandate may *post* jobs; otherwise post-only flows\n\n/// are denied. Used to distinguish hiring-only vs paying-only mandates.\n\npub may_post_jobs: bool,\n/// If `Some(true)` the mandate may *accept* jobs as a worker.\n\npub may_accept_jobs: bool\n}",
              "docs": "Scope of work a mandate authorizes.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 99
            },
            {
              "name": "mandate::MilestonePolicy",
              "kind": "enum_item",
              "signature": "pub enum MilestonePolicy {\n    /// Pay each milestone independently as it is attested.\n    PerMilestone,\n    /// Final lump-sum payment after all milestones are attested.\n    LumpSumOnCompletion,\n}",
              "docs": "Milestone payment policy under a mandate.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 115
            },
            {
              "name": "mandate::ApprovalPolicy",
              "kind": "enum_item",
              "signature": "pub enum ApprovalPolicy {\n    /// Single signer (employer DID).\n    Employer,\n    /// Threshold of named DIDs.\n    Committee {\n        members: Vec<String>,\n        threshold: u32,\n    },\n    /// Single trusted oracle DID.\n    Oracle { oracle_did: String },\n    /// Automated rule executed by a deterministic verifier (e.g., a CI hash\n    /// match). The string is a verifier identifier.\n    Automated { verifier_id: String },\n}",
              "docs": "Approval policy for milestone attestations.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 125
            },
            {
              "name": "mandate::DisputePolicy",
              "kind": "enum_item",
              "signature": "pub enum DisputePolicy {\n    /// DAO governance resolves disputes.\n    DaoGovernance,\n    /// Threshold of a named arbitration committee.\n    Committee {\n        members: Vec<String>,\n        threshold: u32,\n    },\n    /// Single oracle resolves disputes.\n    Oracle { oracle_did: String },\n    /// Random selection from staked jurors. Selection rule is consensus-defined.\n    StakedJury { minimum_stake: u128 },\n}",
              "docs": "Dispute policy associated with a mandate or contract.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 143
            },
            {
              "name": "mandate::RevocationPolicy",
              "kind": "enum_item",
              "signature": "pub enum RevocationPolicy {\n    /// Issuer may revoke at any time.\n    IssuerAtWill,\n    /// Issuer may revoke only after a notice period in blocks.\n    IssuerWithNotice { notice_blocks: u64 },\n    /// Revocation requires DAO governance.\n    DaoGovernance,\n}",
              "docs": "Revocation policy for a mandate.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\", rename_all = \"snake_case\")]",
              "line": 160
            },
            {
              "name": "mandate::ReputationImpactPolicy",
              "kind": "enum_item",
              "signature": "pub enum ReputationImpactPolicy {\n    /// Successful completion grants reputation; failure deducts.\n    Standard,\n    /// Successful completion grants reputation; failure has no impact.\n    UpsideOnly,\n    /// No reputation effect.\n    None,\n}",
              "docs": "Reputation impact rules that downstream contracts inherit.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 172
            },
            {
              "name": "mandate::DelegationPolicy",
              "kind": "struct_item",
              "signature": "pub struct DelegationPolicy {\n/// May the authorized actor issue sub-mandates?\n\npub allow_subdelegation: bool,\n/// Max remaining-budget percentage that may be sub-delegated, in basis\n\n/// points (0..=10_000).\n\npub max_subdelegated_basis_points: u16\n}",
              "docs": "Sub-delegation policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 183
            },
            {
              "name": "mandate::Mandate",
              "kind": "struct_item",
              "signature": "pub struct Mandate {\npub mandate_id: MandateId,\npub issuer_did: String,\npub authorized_actor_did: String,\npub scope: MandateScope,\npub budget: MandateBudget,\npub token_id: TokenId,\npub spend_limits: SpendLimits,\npub allowed_counterparties: AllowedCounterparties,\npub milestone_policy: MilestonePolicy,\npub approval_policy: ApprovalPolicy,\npub dispute_policy: DisputePolicy,\npub revocation_policy: RevocationPolicy,\npub reputation_impact: ReputationImpactPolicy,\npub revenue_share: Option<DistributionPolicy>,\npub delegation_policy: DelegationPolicy,\n/// Optional inclusive expiration epoch. None means \"no expiration\"\n\n/// (still subject to revocation).\n\npub expires_at_epoch: Option<u64>,\n/// Per-mandate spend nonce, monotonically increasing.\n\npub nonce: u64,\npub status: MandateStatus\n}",
              "docs": "On-chain mandate record.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 193
            },
            {
              "name": "mandate::SpendRequest",
              "kind": "struct_item",
              "signature": "pub struct SpendRequest<'a> {\n/// DID of the actor attempting the spend.\n\npub actor_did: &'a str,\n/// DID of the counterparty receiving funds.\n\npub counterparty_did: &'a str,\n/// Counterparty class (used when allowed_counterparties is `Classes`).\n\npub counterparty_class: CounterpartyClass,\n/// Token requested.\n\npub token_id: &'a str,\n/// Amount requested.\n\npub amount: u128,\n/// Job category for this spend.\n\npub job_category: &'a str,\n/// Current chain epoch.\n\npub current_epoch: u64\n}",
              "docs": "Detail describing a proposed spend, validated against a mandate.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 219
            },
            {
              "name": "mandate::MandateClearance",
              "kind": "struct_item",
              "signature": "pub struct MandateClearance {\npub mandate_id: MandateId,\npub authorized_amount: u128,\npub remaining_after: u128\n}",
              "docs": "Successful authorization output.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 238
            },
            {
              "name": "mandate::MandateError",
              "kind": "enum_item",
              "signature": "pub enum MandateError {\n    #[error(\"mandate is not active\")]\n    NotActive,\n    #[error(\"mandate has expired\")]\n    Expired,\n    #[error(\"actor does not match authorized actor\")]\n    UnauthorizedActor,\n    #[error(\"token does not match mandate token\")]\n    TokenMismatch,\n    #[error(\"amount exceeds per-transaction limit\")]\n    PerTxLimitExceeded,\n    #[error(\"amount exceeds remaining budget\")]\n    BudgetExhausted,\n    #[error(\"counterparty not allowed by mandate\")]\n    CounterpartyNotAllowed,\n    #[error(\"job category not in mandate scope\")]\n    CategoryOutOfScope,\n    #[error(\"mandate scope forbids this action\")]\n    ActionOutOfScope,\n    #[error(\"subdelegation not permitted\")]\n    SubdelegationNotPermitted,\n    #[error(\"subdelegation exceeds permitted fraction\")]\n    SubdelegationExceedsCap,\n    #[error(\"revenue shares must total 10000 basis points\")]\n    RevenueShareInvalid,\n}",
              "docs": "Errors returned by mandate authorization.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Error)]",
              "line": 246
            },
            {
              "name": "mandate::Mandate::authorize_spend",
              "kind": "function_item",
              "signature": "pub fn authorize_spend(\n        &self,\n        req: &SpendRequest<'_>,\n    ) -> Result<MandateClearance, MandateError>;",
              "docs": "Validate a proposed spend against this mandate. Does **not** mutate the\nmandate; on success the caller must record the spend with\n`RecordMandateSpend`.",
              "attributes": "",
              "line": 277
            },
            {
              "name": "mandate::Mandate::authorize_subdelegation",
              "kind": "function_item",
              "signature": "pub fn authorize_subdelegation(&self, child: &Mandate) -> Result<(), MandateError>;",
              "docs": "Validate a proposed sub-mandate against this parent mandate.\n\nSub-mandates must (a) be permitted by `delegation_policy`, (b) not\nexceed the parent's remaining budget, scope, expiration, or token,\nand (c) not exceed the configured fraction cap.",
              "attributes": "",
              "line": 335
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nft",
          "source": "sigil/node/sigil-core/src/nft.rs",
          "sha256": "17518c87483b5d66243b1434a30c2a1111385c4cd037df9e3924c8981c3328d9",
          "attributes": "",
          "items": [
            {
              "name": "nft::CollectionId",
              "kind": "struct_item",
              "signature": "pub struct CollectionId(pub String);",
              "docs": "A unique identifier for an NFT collection.\n\nMust be a non-empty string. Use [`CollectionId::try_new`] for validated\nconstruction; [`CollectionId::new`] is a direct (unchecked) constructor\nintended for trusted callers (e.g., deserialization or tests).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 24
            },
            {
              "name": "nft::CollectionId::new",
              "kind": "function_item",
              "signature": "pub fn new(s: impl Into<String>) -> Self;",
              "docs": "Construct directly without validation. Prefer [`try_new`] in\napplication code.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "nft::CollectionId::try_new",
              "kind": "function_item",
              "signature": "pub fn try_new(s: impl Into<String>) -> Result<Self, CoreError>;",
              "docs": "Construct with validation \u2014 returns an error when `s` is empty.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "nft::CollectionId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Borrow the underlying string slice.",
              "attributes": "",
              "line": 45
            },
            {
              "name": "nft::TokenId",
              "kind": "struct_item",
              "signature": "pub struct TokenId(pub u128);",
              "docs": "A token identifier within a collection (sequential or arbitrary u128).",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 52
            },
            {
              "name": "nft::NftKind",
              "kind": "enum_item",
              "signature": "pub enum NftKind {\n    /// Standard ERC-721-style NFT \u2014 transferable unless locked by policy.\n    Standard,\n    /// Identity-bound NFT \u2014 non-transferable token representing a DID\n    /// credential or on-chain identity claim.\n    Identity,\n}",
              "docs": "Whether a collection holds standard transferable NFTs or identity-bound\n(soulbound) tokens.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 62
            },
            {
              "name": "nft::IdentityNftKind",
              "kind": "enum_item",
              "signature": "pub enum IdentityNftKind {\n    /// Human root identity (HMR).\n    Human,\n    /// Machine / model root identity (MHR).\n    Mhr,\n    /// Enterprise / entity root identity (ENR).\n    Enr,\n    /// Autonomous agent identity.\n    Agent,\n    /// Autonomous organization identity.\n    Ao,\n    /// Application identity.\n    App,\n}",
              "docs": "Sub-kind of an identity NFT, indicating which OAS entity kind is bound.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 73
            },
            {
              "name": "nft::BurnAuth",
              "kind": "enum_item",
              "signature": "pub enum BurnAuth {\n    /// Only the original issuer may burn the token.\n    IssuerOnly,\n    /// Only the current owner may burn the token.\n    OwnerOnly,\n    /// Either the issuer or the current owner may burn the token.\n    Both,\n    /// The token is non-burnable.\n    Neither,\n}",
              "docs": "Who is authorised to burn this token (ERC-5484).",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 91
            },
            {
              "name": "nft::LockState",
              "kind": "enum_item",
              "signature": "pub enum LockState {\n    /// Token is locked and may not be transferred.\n    Locked,\n    /// Token is unlocked and may be transferred (subject to collection\n    /// transfer policy).\n    Unlocked,\n}",
              "docs": "Whether a token is locked (non-transferable) per ERC-5192.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 105
            },
            {
              "name": "nft::CollectionPolicy",
              "kind": "struct_item",
              "signature": "pub struct CollectionPolicy {\n/// When `true`, newly minted tokens start in the `Locked` state (ERC-5192).\n\npub default_locked: bool,\n/// Default burn authorization applied to each newly minted token.\n\npub default_burn_auth: BurnAuth,\n/// When `true`, the controller may update per-token metadata URIs and\n\n/// hashes after mint (ERC-4906 inspired).\n\npub allow_metadata_updates: bool,\n/// Optional policy governing who may mint tokens in this collection.\n\n/// `None` means only the issuer DID can mint.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mint_policy: Option<ControlPolicy>,\n/// Optional policy governing who may initiate transfers.\n\n/// `None` means the owner controls transfers (subject to `default_locked`).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub transfer_policy: Option<ControlPolicy>,\n/// Maximum number of tokens that may ever be minted in this collection.\n\n/// `None` means unlimited supply.\n\n///\n\n/// Serialized as a quoted decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(\n        with = \"serde_helpers::string_u128_option\",\n        default,\n        skip_serializing_if = \"Option::is_none\"\n    )]\npub max_supply: Option<u128>\n}",
              "docs": "Per-collection mint, transfer, and metadata governance settings.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 119
            },
            {
              "name": "nft::NftCollection",
              "kind": "struct_item",
              "signature": "pub struct NftCollection {\n/// Unique collection identifier.\n\npub collection_id: CollectionId,\n/// Human-readable collection name.\n\npub name: String,\n/// Short ticker symbol (e.g. \"BADGE\").\n\npub symbol: String,\n/// Whether this collection is for transferable NFTs or identity tokens.\n\npub kind: NftKind,\n/// DID of the party that created and issued the collection.\n\npub issuer_did: String,\n/// DID of the party that can update the collection policy.\n\npub controller_did: String,\n/// Governance rules for this collection.\n\npub policy: CollectionPolicy,\n/// Optional collection-level metadata URI (analogous to ERC-721\n\n/// `contractURI`).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// Block height at which this collection was created.\n\npub created_height: u64,\n/// Cumulative count of tokens minted (never decremented on burn).\n\npub total_minted: u128,\n/// Cumulative count of tokens burned.\n\npub total_burned: u128\n}",
              "docs": "On-chain record for an NFT collection.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 154
            },
            {
              "name": "nft::IdentityBinding",
              "kind": "struct_item",
              "signature": "pub struct IdentityBinding {\n/// DID of the identity subject this token is bound to.\n\npub subject_did: String,\n/// DID of the root anchor (HMR / MHR / ENR) that vouches for this\n\n/// subject.\n\npub root_did: String,\n/// Kind of the root anchor.\n\npub root_kind: RootKind,\n/// Specific identity sub-type for this token.\n\npub identity_kind: IdentityNftKind,\n/// Numeric verification level (0 = unverified, 255 = fully verified).\n\npub verification_level: u8,\n/// Optional pointer to an external reputation or attestation anchor.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub reputation_anchor: Option<String>\n}",
              "docs": "Binds an NFT token to an on-chain OAS identity.\n\nPopulated on identity-collection tokens; `None` for standard NFTs.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 189
            },
            {
              "name": "nft::NftToken",
              "kind": "struct_item",
              "signature": "pub struct NftToken {\n/// Collection this token belongs to.\n\npub collection_id: CollectionId,\n/// Token identifier (unique within the collection).\n\npub token_id: TokenId,\n/// DID of the current owner.\n\npub owner_did: String,\n/// Optional per-token metadata URI.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// Optional BLAKE3 hash of the canonical metadata document, for\n\n/// on-chain integrity verification.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<SigilHash>,\n/// Whether this token is currently locked (ERC-5192).\n\npub locked: bool,\n/// Burn authorisation for this token (ERC-5484).\n\npub burn_auth: BurnAuth,\n/// Identity binding for tokens in identity collections.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub identity: Option<IdentityBinding>,\n/// Block height at which this token was minted.\n\npub minted_height: u64,\n/// Block height of the most recent metadata update (equals\n\n/// `minted_height` if metadata has never been updated).\n\npub last_metadata_update_height: u64\n}",
              "docs": "On-chain record for a single NFT token.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 212
            },
            {
              "name": "nft::OwnerIndexEntry",
              "kind": "struct_item",
              "signature": "pub struct OwnerIndexEntry {\n/// The collection being indexed.\n\npub collection_id: CollectionId,\n/// The owner DID.\n\npub owner_did: String,\n/// All token IDs currently held by this owner in this collection.\n\npub token_ids: Vec<TokenId>\n}",
              "docs": "Secondary index mapping a (collection, owner) pair to all token IDs owned\nby that DID in that collection.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 247
            },
            {
              "name": "nft::DidIdentityIndex",
              "kind": "struct_item",
              "signature": "pub struct DidIdentityIndex {\n/// The subject DID being indexed.\n\npub subject_did: String,\n/// All `(collection_id, token_id)` pairs of identity tokens bound to\n\n/// this DID.\n\npub identity_tokens: Vec<(CollectionId, TokenId)>\n}",
              "docs": "Secondary index mapping a subject DID to all identity tokens bound to it.\n\nUsed for fast \"which identity NFTs does this DID hold?\" lookups.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 260
            },
            {
              "name": "nft::NftEventKind",
              "kind": "enum_item",
              "signature": "pub enum NftEventKind {\n    /// A new token was minted.\n    Mint,\n    /// Token ownership was transferred.\n    Transfer,\n    /// Token was burned.\n    Burn,\n    /// Token metadata URI or hash was updated (ERC-4906).\n    MetadataUpdate,\n    /// Token was locked (ERC-5192).\n    Locked,\n    /// Token was unlocked (ERC-5192).\n    Unlocked,\n    /// Identity binding verification level was raised.\n    IdentityVerified,\n}",
              "docs": "Kind of NFT lifecycle event emitted in the transaction receipt.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 275
            },
            {
              "name": "nft::NftEvent",
              "kind": "struct_item",
              "signature": "pub struct NftEvent {\n/// The kind of state change that occurred.\n\npub kind: NftEventKind,\n/// The collection in which the event occurred.\n\npub collection_id: CollectionId,\n/// The token involved, or `None` for collection-level events.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub token_id: Option<TokenId>,\n/// Previous owner or minting authority (present on Transfer and Burn).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub from_did: Option<String>,\n/// New owner or recipient (present on Mint and Transfer).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub to_did: Option<String>,\n/// Updated metadata URI (present on MetadataUpdate and Mint when\n\n/// metadata_uri is supplied).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// Updated metadata hash (present on MetadataUpdate and Mint when\n\n/// metadata_hash is supplied).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<SigilHash>,\n/// Block height at which this event was emitted.\n\npub block_height: u64,\n/// Hash of the transaction that produced this event.\n\npub tx_hash: SigilHash\n}",
              "docs": "An NFT lifecycle event recorded in the transaction receipt.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 294
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nova",
          "source": "sigil/node/sigil-core/src/nova.rs",
          "sha256": "20cd0162dec9a2617713ca7b792bb54f68e506fa5ea7e12998e850c0a6861e6e",
          "attributes": "",
          "items": [
            {
              "name": "nova::NOVA_WORLD_PREFIX",
              "kind": "const_item",
              "signature": "pub const NOVA_WORLD_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "nova::NOVA_PARCEL_PREFIX",
              "kind": "const_item",
              "signature": "pub const NOVA_PARCEL_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "nova::NOVA_BUILDING_PREFIX",
              "kind": "const_item",
              "signature": "pub const NOVA_BUILDING_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "nova::NOVA_AVATAR_PREFIX",
              "kind": "const_item",
              "signature": "pub const NOVA_AVATAR_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "nova::NOVA_AUCTION_PREFIX",
              "kind": "const_item",
              "signature": "pub const NOVA_AUCTION_PREFIX: &str;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "nova::deterministic_component_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_component_id(prefix: &str, domain: &str, parts: &[String]) -> String;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "nova::canonical_json_string",
              "kind": "function_item",
              "signature": "pub fn canonical_json_string(value: &serde_json::Value) -> String;",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "nova::deterministic_world_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_world_id(creator_did: &str, name: &str, config: &serde_json::Value) -> String;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "nova::deterministic_parcel_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_parcel_id(\n    world_id: &str,\n    region_x: i32,\n    region_z: i32,\n    local_x: u16,\n    local_z: u16,\n) -> String;",
              "docs": "",
              "attributes": "",
              "line": 88
            },
            {
              "name": "nova::deterministic_building_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_building_id(\n    world_id: &str,\n    parcel_id: &str,\n    owner_did: &str,\n    asset_did: &str,\n) -> String;",
              "docs": "",
              "attributes": "",
              "line": 108
            },
            {
              "name": "nova::deterministic_avatar_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_avatar_id(world_id: &str, owner_did: &str) -> String;",
              "docs": "",
              "attributes": "",
              "line": 126
            },
            {
              "name": "nova::deterministic_auction_id",
              "kind": "function_item",
              "signature": "pub fn deterministic_auction_id(\n    world_id: &str,\n    parcel_id: &str,\n    seller_did: &str,\n    opened_at_height: u64,\n) -> String;",
              "docs": "",
              "attributes": "",
              "line": 134
            },
            {
              "name": "nova::NovaWorldConfig",
              "kind": "struct_item",
              "signature": "pub struct NovaWorldConfig {\npub world_id: String,\npub name: String,\npub gravity: f64,\npub time_scale: f64,\npub max_height: u32,\npub region_size: u16,\npub chunk_size: u16,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub terrain_seed_commitment: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub generation_profile: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 153
            },
            {
              "name": "nova::NovaParams",
              "kind": "struct_item",
              "signature": "pub struct NovaParams {\npub enabled: bool,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub worlds: Vec<NovaWorldConfig>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]",
              "line": 187
            },
            {
              "name": "nova::NovaParcelType",
              "kind": "enum_item",
              "signature": "pub enum NovaParcelType {\n    Residential,\n    Commercial,\n    Public,\n    Wilderness,\n    Reserved,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 195
            },
            {
              "name": "nova::NovaParcelType::parse",
              "kind": "function_item",
              "signature": "pub fn parse(value: &str) -> Option<Self>;",
              "docs": "",
              "attributes": "",
              "line": 204
            },
            {
              "name": "nova::NovaParcelCoord",
              "kind": "struct_item",
              "signature": "pub struct NovaParcelCoord {\npub world_id: String,\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 217
            },
            {
              "name": "nova::NovaParcelCoord::parcel_id",
              "kind": "function_item",
              "signature": "pub fn parcel_id(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 226
            },
            {
              "name": "nova::NovaParcelRecord",
              "kind": "struct_item",
              "signature": "pub struct NovaParcelRecord {\npub parcel_id: String,\npub world_id: String,\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16,\npub owner_did: String,\npub parcel_type: NovaParcelType,\n#[serde(default)]\npub metadata: serde_json::Value,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub buildings: Vec<String>,\npub acquired_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 238
            },
            {
              "name": "nova::NovaBuildingRecord",
              "kind": "struct_item",
              "signature": "pub struct NovaBuildingRecord {\npub building_id: String,\npub world_id: String,\npub parcel_id: String,\npub owner_did: String,\npub asset_did: String,\npub polycount: u32,\npub placed_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 255
            },
            {
              "name": "nova::NovaAvatarRecord",
              "kind": "struct_item",
              "signature": "pub struct NovaAvatarRecord {\npub avatar_id: String,\npub world_id: String,\npub owner_did: String,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub avatar_asset_did: Option<String>,\npub position: [f64; 3],\npub rotation: [f32; 3],\npub animation_state: String,\npub presence: String,\npub last_updated_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 266
            },
            {
              "name": "nova::NovaAuctionStatus",
              "kind": "enum_item",
              "signature": "pub enum NovaAuctionStatus {\n    Open,\n    Settled,\n    Cancelled,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 281
            },
            {
              "name": "nova::NovaBidRecord",
              "kind": "struct_item",
              "signature": "pub struct NovaBidRecord {\npub bidder_did: String,\npub amount: u64,\npub height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 288
            },
            {
              "name": "nova::NovaAuctionRecord",
              "kind": "struct_item",
              "signature": "pub struct NovaAuctionRecord {\npub auction_id: String,\npub world_id: String,\npub parcel_id: String,\npub seller_did: String,\npub reserve_amount: u64,\npub highest_bid: Option<NovaBidRecord>,\npub opened_at_height: u64,\npub closes_at_height: u64,\npub status: NovaAuctionStatus\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 295
            },
            {
              "name": "nova::validate_world_config",
              "kind": "function_item",
              "signature": "pub fn validate_world_config(world: &NovaWorldConfig) -> Result<(), String>;",
              "docs": "",
              "attributes": "",
              "line": 307
            },
            {
              "name": "nova::validate_nova_params",
              "kind": "function_item",
              "signature": "pub fn validate_nova_params(params: &NovaParams) -> Result<(), String>;",
              "docs": "",
              "attributes": "",
              "line": 329
            },
            {
              "name": "nova::position_is_finite",
              "kind": "function_item",
              "signature": "pub fn position_is_finite(position: &[f64; 3]) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 340
            },
            {
              "name": "nova::rotation_is_finite",
              "kind": "function_item",
              "signature": "pub fn rotation_is_finite(rotation: &[f32; 3]) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 344
            }
          ],
          "parseErrors": false
        },
        {
          "module": "receipt",
          "source": "sigil/node/sigil-core/src/receipt.rs",
          "sha256": "ae8c23981b44294abbb3a19b8e57d786e2a42547d7b74382b028013b8809ab84",
          "attributes": "",
          "items": [
            {
              "name": "receipt::Receipt",
              "kind": "struct_item",
              "signature": "pub struct Receipt {\n/// Hash of the transaction that produced this receipt.\n\npub tx_hash: SigilHash,\n/// Execution status.\n\npub status: ReceiptStatus,\n/// Gas consumed during execution.\n\npub gas_used: u64,\n/// Block height at which this transaction was included.\n\npub block_height: u64,\n/// Index of this transaction within the block.\n\npub tx_index: u32,\n/// Events emitted during execution.\n\npub events: Vec<Event>,\n/// State changes applied by this transaction.\n\npub state_changes: Vec<StateChange>,\n/// Cumulative gas used in the block up to and including this transaction.\n\npub cumulative_gas_used: u64\n}",
              "docs": "A transaction receipt recording execution outcome.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "receipt::ReceiptStatus",
              "kind": "enum_item",
              "signature": "pub enum ReceiptStatus {\n    /// Transaction executed successfully.\n    Success,\n    /// Transaction failed (state changes reverted, gas still consumed).\n    Failed,\n    /// Transaction reverted explicitly (e.g., from WASM trap or assertion).\n    Reverted,\n}",
              "docs": "Execution status of a transaction.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 34
            },
            {
              "name": "receipt::ReceiptStatus::is_success",
              "kind": "function_item",
              "signature": "pub fn is_success(&self) -> bool;",
              "docs": "Returns true if the transaction succeeded.",
              "attributes": "",
              "line": 45
            },
            {
              "name": "receipt::Event",
              "kind": "struct_item",
              "signature": "pub struct Event {\n/// The source of the event (e.g., module DID or system component).\n\npub source: String,\n/// Event topic/type (e.g., \"identity.registered\", \"stake.deposited\").\n\npub topic: String,\n/// Indexed fields for efficient filtering.\n\npub indexed: Vec<EventField>,\n/// Non-indexed data payload.\n\npub data: Vec<u8>\n}",
              "docs": "An event emitted during transaction execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 52
            },
            {
              "name": "receipt::EventField",
              "kind": "struct_item",
              "signature": "pub struct EventField {\n/// Field name.\n\npub name: String,\n/// Field value as bytes (application-defined encoding).\n\npub value: Vec<u8>\n}",
              "docs": "An indexed event field for log filtering.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 65
            },
            {
              "name": "receipt::StateChange",
              "kind": "struct_item",
              "signature": "pub struct StateChange {\n/// Which state partition was affected.\n\npub partition: StatePartition,\n/// The key that was modified.\n\npub key: Vec<u8>,\n/// Previous value (None if the key was created).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub old_value: Option<Vec<u8>>,\n/// New value (None if the key was deleted).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub new_value: Option<Vec<u8>>\n}",
              "docs": "A state change applied by a transaction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 74
            },
            {
              "name": "receipt::StatePartition",
              "kind": "enum_item",
              "signature": "pub enum StatePartition {\n    /// Global consensus state (validator set, epoch data).\n    Consensus,\n    /// Staking and delegation records.\n    Stakes,\n    /// OAS identity documents and lineage data.\n    Identity,\n    /// MARS registry entries and anchors.\n    Mars,\n    /// Governance proposals and votes.\n    Governance,\n    /// Organization zone state.\n    Organization,\n    /// Compute provider registry and escrow.\n    Compute,\n    /// Agent Contract Zones \u2014 contract records, per-contract keyed\n    /// state, code-blob index, and contract events.\n    Contracts,\n    /// Native NFT state \u2014 collections, tokens, owner index, DID identity\n    /// index, and NFT event log.\n    Nft,\n    /// On-chain labor marketplace state \u2014 jobs, bids, contracts, open offers,\n    /// claims, per-milestone state, worker assignment index, and audit event log.\n    Labor,\n    /// Sigil Mail and Sigil Name System state \u2014 mailbox capability records,\n    /// aliases, receive policies, public keys, delivery commitments, scoped\n    /// delegations, abuse reports, `.sigil` resolver records, and mail-safe\n    /// name indexes.\n    Mail,\n    /// L1-coordinated training runs, rollout commitments, reward attestations,\n    /// slashing evidence, and model weight roots.\n    Crucible,\n    /// Vigils subscriptions, ingestors, deliveries, and callback queue.\n    Vigils,\n    /// Storage pinning marketplace provider records, pin requests, contracts,\n    /// receipts, challenges, and slashing/reward outcomes.\n    Storage,\n    /// Native DEX pools, LP positions, asset balances, and swap events.\n    Dex,\n    /// Nova metaverse worlds, parcels, buildings, avatars, and auctions.\n    Nova,\n    /// Evidence anchor records (content-addressed digest commitments).\n    Evidence,\n}",
              "docs": "State partitions in the Sigil blockchain.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 90
            }
          ],
          "parseErrors": false
        },
        {
          "module": "recovery",
          "source": "sigil/node/sigil-core/src/recovery.rs",
          "sha256": "59158fff11c66cbc0e1c0e9cb897a9ef017cf7037d8ebcb61a0eec09e681a980",
          "attributes": "",
          "items": [
            {
              "name": "recovery::BLOCKS_PER_DAY",
              "kind": "const_item",
              "signature": "pub const BLOCKS_PER_DAY: u64;",
              "docs": "Approximate blocks per day at 4-second block time.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "recovery::MIN_RECOVERY_TIMELOCK_BLOCKS",
              "kind": "const_item",
              "signature": "pub const MIN_RECOVERY_TIMELOCK_BLOCKS: u64;",
              "docs": "Minimum recovery timelock (7 days). User-tunable down to this floor.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "recovery::MAX_RECOVERY_TIMELOCK_BLOCKS",
              "kind": "const_item",
              "signature": "pub const MAX_RECOVERY_TIMELOCK_BLOCKS: u64;",
              "docs": "Maximum recovery timelock (90 days).",
              "attributes": "",
              "line": 43
            },
            {
              "name": "recovery::DEFAULT_RECOVERY_TIMELOCK_BLOCKS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_RECOVERY_TIMELOCK_BLOCKS: u64;",
              "docs": "Default recovery timelock (30 days). Recommended baseline; deviates from\nthe agent-06 brief (7 days) per pushback C7.",
              "attributes": "",
              "line": 47
            },
            {
              "name": "recovery::MAX_RECOVERY_GUARDIANS",
              "kind": "const_item",
              "signature": "pub const MAX_RECOVERY_GUARDIANS: usize;",
              "docs": "Hard cap on guardian count per recovery group.",
              "attributes": "",
              "line": 50
            },
            {
              "name": "recovery::MIN_RECOVERY_GUARDIANS",
              "kind": "const_item",
              "signature": "pub const MIN_RECOVERY_GUARDIANS: usize;",
              "docs": "Minimum guardian count.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "recovery::RECOVERY_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const RECOVERY_DOMAIN_TAG: &[u8];",
              "docs": "Domain separator for canonical recovery-authorization signatures.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "recovery::RecoveryGuardian",
              "kind": "struct_item",
              "signature": "pub struct RecoveryGuardian {\npub guardian_did: String,\n/// 32-byte Ed25519 public key, hex-encoded (no `0x` prefix).\n\npub guardian_pubkey_hex: String,\n/// Vote weight. Default 1; weighted thresholds support tiered guardians\n\n/// (e.g. 1 spouse weight 2 + 3 friends weight 1, threshold 3).\n\npub weight: u32\n}",
              "docs": "One member of a recovery group.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 63
            },
            {
              "name": "recovery::RecoveryConfig",
              "kind": "struct_item",
              "signature": "pub struct RecoveryConfig {\npub subject_did: String,\npub guardians: Vec<RecoveryGuardian>,\n/// Total weight required to authorize a recovery. Must be \u2265 1 and\n\n/// \u2264 sum(guardians.weight). Recommended floor: \u2308sum \u00d7 0.6\u2309.\n\npub threshold: u32,\n/// Number of blocks the timelock holds open after `InitiateRecovery`.\n\npub timelock_blocks: u64,\n/// 32-byte Ed25519 public key (hex) of the panic-abort key. The user\n\n/// holds the corresponding private key offline.\n\npub panic_pubkey_hex: String,\npub registered_at_height: u64\n}",
              "docs": "Per-DID recovery configuration. Single registration per subject DID;\nre-registration replaces the prior config.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 75
            },
            {
              "name": "recovery::RecoveryStatus",
              "kind": "enum_item",
              "signature": "pub enum RecoveryStatus {\n    /// Initiated; collecting guardian authorizations and waiting for timelock.\n    Pending,\n    /// Threshold met AND timelock elapsed; ready to finalize.\n    Ready,\n    /// Pubkey has been rotated; ceremony archived.\n    Finalized,\n    /// Aborted by the panic key, the original owner, or by guardian\n    /// revocation. No further state changes.\n    Aborted { reason: AbortReason },\n}",
              "docs": "Status of a `RecoveryCeremony`.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 91
            },
            {
              "name": "recovery::AbortReason",
              "kind": "enum_item",
              "signature": "pub enum AbortReason {\n    PanicKey,\n    OriginalOwner,\n    GuardianRevocation,\n}",
              "docs": "Why a ceremony was aborted.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 105
            },
            {
              "name": "recovery::GuardianAuthorization",
              "kind": "struct_item",
              "signature": "pub struct GuardianAuthorization {\npub guardian_did: String,\npub guardian_pubkey_hex: String,\n/// 64-byte Ed25519 signature over the canonical payload (hex).\n\npub signature_hex: String,\npub recorded_at_height: u64\n}",
              "docs": "One signed authorization from a guardian.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 113
            },
            {
              "name": "recovery::RecoveryCeremony",
              "kind": "struct_item",
              "signature": "pub struct RecoveryCeremony {\npub ceremony_id: String,\npub subject_did: String,\npub initiated_at_height: u64,\n/// Earliest block at which `FinalizeRecovery` may succeed.\n\npub finalize_after_height: u64,\n/// 32-byte Ed25519 public key (hex) that will replace the subject's\n\n/// current pubkey on finalize.\n\npub new_pubkey_hex: String,\npub authorizations: Vec<GuardianAuthorization>,\npub status: RecoveryStatus\n}",
              "docs": "An open recovery ceremony.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 123
            },
            {
              "name": "recovery::RecoveryCeremony::accumulated_weight",
              "kind": "function_item",
              "signature": "pub fn accumulated_weight(&self, config: &RecoveryConfig) -> u32;",
              "docs": "Total accumulated guardian weight from `authorizations`, looking up\neach guardian in `config.guardians`. Authorizations whose\n`guardian_did` is not in the config contribute 0.",
              "attributes": "",
              "line": 140
            },
            {
              "name": "recovery::RecoveryCeremony::threshold_met",
              "kind": "function_item",
              "signature": "pub fn threshold_met(&self, config: &RecoveryConfig) -> bool;",
              "docs": "True if the threshold weight has been accumulated.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "recovery::RecoveryCeremony::timelock_expired_at",
              "kind": "function_item",
              "signature": "pub fn timelock_expired_at(&self, current_height: u64) -> bool;",
              "docs": "True if the timelock has elapsed at the given block height.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "recovery::RecoveryCeremony::finalizable_at",
              "kind": "function_item",
              "signature": "pub fn finalizable_at(&self, current_height: u64, config: &RecoveryConfig) -> bool;",
              "docs": "True if the ceremony is finalizable at `current_height`: status is\nstill `Pending`, threshold met, and timelock elapsed.",
              "attributes": "",
              "line": 165
            },
            {
              "name": "recovery::RegisterRecoveryData",
              "kind": "struct_item",
              "signature": "pub struct RegisterRecoveryData {\npub subject_did: String,\npub guardians: Vec<RecoveryGuardian>,\npub threshold: u32,\npub timelock_blocks: u64,\npub panic_pubkey_hex: String\n}",
              "docs": "Register or replace a recovery group for `subject_did` (the sender).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 178
            },
            {
              "name": "recovery::InitiateRecoveryData",
              "kind": "struct_item",
              "signature": "pub struct InitiateRecoveryData {\npub subject_did: String,\npub new_pubkey_hex: String\n}",
              "docs": "Initiate a new recovery ceremony for `subject_did`.\n\nThe sender (gas payer) need NOT be the subject \u2014 typically the subject\nhas lost their key and uses a fresh device. The new public key must be\ngenerated client-side and supplied here.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 192
            },
            {
              "name": "recovery::AddRecoveryAuthorizationData",
              "kind": "struct_item",
              "signature": "pub struct AddRecoveryAuthorizationData {\npub ceremony_id: String,\npub guardian_did: String,\npub guardian_pubkey_hex: String,\n/// 64-byte Ed25519 signature over `recovery_signing_bytes(ceremony_id,\n\n/// subject_did, new_pubkey_hex)`. Hex-encoded.\n\npub signature_hex: String\n}",
              "docs": "Add one guardian's authorization to an open ceremony.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 199
            },
            {
              "name": "recovery::AbortRecoveryData",
              "kind": "struct_item",
              "signature": "pub struct AbortRecoveryData {\npub ceremony_id: String,\n/// The Ed25519 public key that signed the abort. The executor checks\n\n/// this matches either the registered panic key or the subject's\n\n/// current pubkey.\n\npub aborter_pubkey_hex: String,\npub signature_hex: String\n}",
              "docs": "Abort an open ceremony. The signature must come from EITHER the panic\nkey or the subject's current (pre-rotation) pubkey.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 211
            },
            {
              "name": "recovery::FinalizeRecoveryData",
              "kind": "struct_item",
              "signature": "pub struct FinalizeRecoveryData {\npub ceremony_id: String\n}",
              "docs": "Finalize a Ready ceremony \u2014 rotates the subject's on-chain pubkey.\n\nPermissionless: any DID can pay gas to finalize.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 224
            },
            {
              "name": "recovery::recovery_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn recovery_signing_bytes(\n    ceremony_id: &str,\n    subject_did: &str,\n    new_pubkey_hex: &str,\n) -> Vec<u8>;",
              "docs": "Build the canonical payload that guardians sign for an authorization.\n\nFormat:\n  `RECOVERY_DOMAIN_TAG || ceremony_id || '|' || subject_did || '|' || new_pubkey_hex`\n\nThe 32-byte BLAKE3 of this payload is what the Ed25519 key actually\nsigns. Including the new_pubkey_hex prevents an authorized signature\nfrom being replayed against a different new_pubkey.",
              "attributes": "",
              "line": 240
            },
            {
              "name": "recovery::abort_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn abort_signing_bytes(ceremony_id: &str) -> Vec<u8>;",
              "docs": "Build the abort signing payload. Aborters sign over a different\ncanonical message than guardians so an authorization can never be\nreplayed as an abort or vice-versa.",
              "attributes": "",
              "line": 265
            },
            {
              "name": "recovery::compute_ceremony_id",
              "kind": "function_item",
              "signature": "pub fn compute_ceremony_id(subject_did: &str, initiated_at_height: u64) -> String;",
              "docs": "Compute the deterministic ceremony_id for `(subject_did,\ninitiated_at_height)`.\n\nReturns a 32-character hex string (16 bytes of BLAKE3 output). Two\nceremonies for the same subject MUST land at different block heights;\nthe per-block tx ordering enforces this in practice.",
              "attributes": "",
              "line": 280
            },
            {
              "name": "recovery::validate_recovery_config",
              "kind": "function_item",
              "signature": "pub fn validate_recovery_config(config: &RecoveryConfig) -> Result<(), CoreError>;",
              "docs": "Validate a `RecoveryConfig`'s structural invariants before commit.\n\nUsed both at `RegisterRecovery` time and as a defensive check before\nany state mutation. Returns `Ok(())` if valid; otherwise `Err`.",
              "attributes": "",
              "line": 296
            }
          ],
          "parseErrors": false
        },
        {
          "module": "serde_helpers",
          "source": "sigil/node/sigil-core/src/serde_helpers.rs",
          "sha256": "fc6ba0f5c3d82c53c6bcfac185b52fafe9285532e30b7bb7da9165e57f4f237e",
          "attributes": "",
          "items": [
            {
              "name": "serde_helpers::string_u128",
              "kind": "module",
              "signature": "pub mod string_u128;",
              "docs": "Serde helpers for types that require special JSON wire encoding.\n\n## `string_u128`\n\nJavaScript's `Number` type is an IEEE-754 double, which can only\nrepresent integers exactly up to 2^53 \u2212 1.  A `u128` field serialized as\na bare JSON number therefore loses precision for any value \u2265 2^53.\nFurthermore, `serde_json` (without the `arbitrary_precision` feature) does\nnot support bare `u128` values at all \u2014 callers receive a hard error.\n\nThe `string_u128` module solves both problems by encoding `u128` as a\ndecimal string on the wire (e.g. `\"340282366920938463463374607431768211455\"`).\nDeserialization accepts the canonical string form **or** a bare JSON number\n(for backward compatibility with Rust callers that serialize natively).\n\n## `string_u128_option`\n\nThe same encoding for `Option<u128>` fields.  `Some(n)` serializes as a\nquoted decimal string; `None` serializes as JSON `null`.  Deserialization\naccepts the canonical string form, a bare JSON number, or `null` / missing\nfield (treated as `None`).\n\n### Usage\n\n```rust,ignore\nuse serde::{Deserialize, Serialize};\nuse sigil_core::serde_helpers;\n\n#[derive(Serialize, Deserialize)]\nstruct Foo {\n    #[serde(with = \"serde_helpers::string_u128\")]\n    pub token_id: u128,\n\n    #[serde(\n        with = \"serde_helpers::string_u128_option\",\n        default,\n        skip_serializing_if = \"Option::is_none\"\n    )]\n    pub max_supply: Option<u128>,\n}\n```\nSerialize a `u128` as a decimal string; deserialize from a decimal string\n**or** a bare JSON number (u64 / u128 fallback for Rust callers).",
              "attributes": "",
              "line": 45
            },
            {
              "name": "serde_helpers::string_u128::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S: Serializer>(value: &u128, s: S) -> Result<S::Ok, S::Error>;",
              "docs": "Serialize `value` as a quoted decimal string.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "serde_helpers::string_u128::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<u128, D::Error>;",
              "docs": "Deserialize a `u128` from a quoted decimal string or a bare JSON number.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "serde_helpers::string_u128_option",
              "kind": "module",
              "signature": "pub mod string_u128_option;",
              "docs": "Serialize an `Option<u128>` as a quoted decimal string (`Some`) or JSON\n`null` (`None`); deserialize from a quoted decimal string, a bare JSON\nnumber, or `null` / missing field.\n\nUse together with `#[serde(default, skip_serializing_if = \"Option::is_none\")]`\nso that absent fields round-trip correctly.",
              "attributes": "",
              "line": 94
            },
            {
              "name": "serde_helpers::string_u128_option::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S: Serializer>(value: &Option<u128>, s: S) -> Result<S::Ok, S::Error>;",
              "docs": "Serialize `Some(n)` as a quoted decimal string; `None` as JSON `null`.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "serde_helpers::string_u128_option::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<u128>, D::Error>;",
              "docs": "Deserialize an `Option<u128>` from a quoted decimal string, a bare JSON\nnumber, or JSON `null` / a missing field.",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sns",
          "source": "sigil/node/sigil-core/src/sns.rs",
          "sha256": "27792c4c3d4f633ff4e07ce7482cab6f432fda7b657499c8bfe51a7dcf959f2f",
          "attributes": "",
          "items": [
            {
              "name": "sns::SNS_NAMEHASH_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_NAMEHASH_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "sns::SNS_TX_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_TX_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "sns::SNS_EVENT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_EVENT_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "sns::SNS_REGISTRATION_COMMITMENT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_REGISTRATION_COMMITMENT_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "sns::SNS_SEALED_BID_COMMITMENT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_SEALED_BID_COMMITMENT_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "sns::SNS_AUCTION_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const SNS_AUCTION_ID_DOMAIN: &str;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "sns::SNS_REGISTRATION_PRICE_PER_YEAR",
              "kind": "const_item",
              "signature": "pub const SNS_REGISTRATION_PRICE_PER_YEAR: u128;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "sns::normalize_sigil_name",
              "kind": "function_item",
              "signature": "pub fn normalize_sigil_name(input: &str) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "sns::namehash",
              "kind": "function_item",
              "signature": "pub fn namehash(name: &str) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "sns::auction_id",
              "kind": "function_item",
              "signature": "pub fn auction_id(name: &str) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "sns::name_registration_commitment",
              "kind": "function_item",
              "signature": "pub fn name_registration_commitment(\n    chain_id: &str,\n    name: &str,\n    owner_did: &str,\n    salt: &str,\n    reveal_nonce: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "sns::sealed_name_bid_commitment",
              "kind": "function_item",
              "signature": "pub fn sealed_name_bid_commitment(\n    chain_id: &str,\n    auction_id: &str,\n    name: &str,\n    bidder_did: &str,\n    bid_amount: u128,\n    salt: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 124
            },
            {
              "name": "sns::NameStatus",
              "kind": "enum_item",
              "signature": "pub enum NameStatus {\n    Active,\n    ExpiredGrace,\n    Reclaimable,\n    Revoked,\n    Disputed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 156
            },
            {
              "name": "sns::SnsNameRecord",
              "kind": "struct_item",
              "signature": "pub struct SnsNameRecord {\npub name_hash: String,\npub canonical_name: String,\npub parent_hash: Option<String>,\npub label: String,\npub owner_did: String,\npub admin_did: Option<String>,\npub registered_at_height: u64,\npub expires_at_height: Option<u64>,\npub status: NameStatus,\npub username_compat: Option<String>,\npub resolver_revision: u64,\npub transfer_nonce: u64,\npub is_reserved: bool,\npub is_disputed: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 165
            },
            {
              "name": "sns::NameRecordKind",
              "kind": "enum_item",
              "signature": "pub enum NameRecordKind {\n    WalletAddress,\n    Did,\n    PublicKey,\n    Mailbox,\n    MailService,\n    WeaveMailboxRef,\n    Website,\n    WeaveDrive,\n    ServiceEndpoint,\n    Avatar,\n    Text,\n    SubdomainDelegation,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 184
            },
            {
              "name": "sns::SnsResolverRecord",
              "kind": "struct_item",
              "signature": "pub struct SnsResolverRecord {\npub name_hash: String,\npub kind: NameRecordKind,\npub value: String,\npub ttl_hint_blocks: Option<u64>,\npub revision: u64,\npub controller_did: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 200
            },
            {
              "name": "sns::SnsResolverRecord::validate_public_shape",
              "kind": "function_item",
              "signature": "pub fn validate_public_shape(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 210
            },
            {
              "name": "sns::NamePermissionScope",
              "kind": "enum_item",
              "signature": "pub enum NamePermissionScope {\n    ManageRecords,\n    ManageMailRecords,\n    ManageWebsiteRecords,\n    DelegateSubdomains,\n    RenewName,\n    TransferName,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 247
            },
            {
              "name": "sns::NameDelegation",
              "kind": "struct_item",
              "signature": "pub struct NameDelegation {\npub grant_id: String,\npub name_hash: String,\npub delegate_did: String,\npub scopes: Vec<NamePermissionScope>,\npub valid_until_height: Option<u64>,\npub revoked_at_height: Option<u64>,\npub revision: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 257
            },
            {
              "name": "sns::RegisterNameData",
              "kind": "struct_item",
              "signature": "pub struct RegisterNameData {\npub name: String,\npub owner_did: String,\npub years: u8,\npub salt: String,\npub reveal_nonce: String,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 268
            },
            {
              "name": "sns::RenewNameData",
              "kind": "struct_item",
              "signature": "pub struct RenewNameData {\npub name: String,\npub years: u8,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 278
            },
            {
              "name": "sns::SetNameRecordsData",
              "kind": "struct_item",
              "signature": "pub struct SetNameRecordsData {\npub name: String,\npub records: Vec<SnsResolverRecord>,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 286
            },
            {
              "name": "sns::DeleteNameRecordsData",
              "kind": "struct_item",
              "signature": "pub struct DeleteNameRecordsData {\npub name: String,\npub kinds: Vec<NameRecordKind>,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 294
            },
            {
              "name": "sns::DelegateSubdomainData",
              "kind": "struct_item",
              "signature": "pub struct DelegateSubdomainData {\npub name: String,\npub subdomain: String,\npub delegate_did: String,\npub scopes: Vec<NamePermissionScope>,\npub valid_until_height: Option<u64>,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 302
            },
            {
              "name": "sns::RevokeDelegationData",
              "kind": "struct_item",
              "signature": "pub struct RevokeDelegationData {\npub name: String,\npub grant_id: String,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 313
            },
            {
              "name": "sns::SetPrimaryNameData",
              "kind": "struct_item",
              "signature": "pub struct SetPrimaryNameData {\npub subject_did: String,\npub name: String,\npub expected_revision: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 321
            },
            {
              "name": "sns::SnsCommitmentStatus",
              "kind": "enum_item",
              "signature": "pub enum SnsCommitmentStatus {\n    Committed,\n    Revealed,\n    Expired,\n    Forfeited,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 330
            },
            {
              "name": "sns::SnsNameRegistrationCommitment",
              "kind": "struct_item",
              "signature": "pub struct SnsNameRegistrationCommitment {\npub commitment: String,\npub bidder_did: String,\npub deposit: u128,\npub reveal_after_height: u64,\npub expires_at_height: u64,\npub committed_at_height: u64,\npub status: SnsCommitmentStatus,\npub revealed_name_hash: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 338
            },
            {
              "name": "sns::SnsSealedBidStatus",
              "kind": "enum_item",
              "signature": "pub enum SnsSealedBidStatus {\n    Committed,\n    Revealed,\n    Refunded,\n    Settled,\n    Forfeited,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 351
            },
            {
              "name": "sns::SnsSealedBidCommitment",
              "kind": "struct_item",
              "signature": "pub struct SnsSealedBidCommitment {\npub auction_id: String,\npub commitment: String,\npub bidder_did: String,\npub deposit: u128,\npub committed_at_height: u64,\npub status: SnsSealedBidStatus,\npub revealed_name_hash: Option<String>,\npub revealed_bid_amount: Option<u128>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 360
            },
            {
              "name": "sns::SnsAuctionStatus",
              "kind": "enum_item",
              "signature": "pub enum SnsAuctionStatus {\n    Open,\n    Finalized,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 373
            },
            {
              "name": "sns::SnsAuctionRecord",
              "kind": "struct_item",
              "signature": "pub struct SnsAuctionRecord {\npub auction_id: String,\npub name_hash: String,\npub canonical_name: String,\npub highest_bid: Option<u128>,\npub highest_bidder: Option<String>,\npub highest_commitment: Option<String>,\npub revealed_count: u64,\npub finalized_at_height: Option<u64>,\npub status: SnsAuctionStatus\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 379
            },
            {
              "name": "sns::CommitNameRegistrationData",
              "kind": "struct_item",
              "signature": "pub struct CommitNameRegistrationData {\npub commitment: String,\npub bidder_did: String,\npub deposit: u128,\npub reveal_after_height: u64,\npub expires_at_height: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 392
            },
            {
              "name": "sns::CommitSealedNameBidData",
              "kind": "struct_item",
              "signature": "pub struct CommitSealedNameBidData {\npub auction_id: String,\npub commitment: String,\npub bidder_did: String,\npub deposit: u128,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 402
            },
            {
              "name": "sns::RevealSealedNameBidData",
              "kind": "struct_item",
              "signature": "pub struct RevealSealedNameBidData {\npub auction_id: String,\npub name: String,\npub bid_amount: u128,\npub salt: String,\npub bidder_did: String,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 411
            },
            {
              "name": "sns::FinalizeSealedNameAuctionData",
              "kind": "struct_item",
              "signature": "pub struct FinalizeSealedNameAuctionData {\npub auction_id: String,\npub name: String,\npub winner_did: String,\npub expected_bid: u128,\npub years: u8,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 421
            }
          ],
          "parseErrors": false
        },
        {
          "module": "storage_market",
          "source": "sigil/node/sigil-core/src/storage_market.rs",
          "sha256": "423eedc2098d3b9bda69c29223e375497766d4b7a0645e7732989979cb49d601",
          "attributes": "",
          "items": [
            {
              "name": "storage_market::STORAGE_PROVIDER_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_PROVIDER_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "storage_market::STORAGE_PIN_REQUEST_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_PIN_REQUEST_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "storage_market::STORAGE_CONTRACT_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_CONTRACT_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "storage_market::STORAGE_RECEIPT_HASH_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_RECEIPT_HASH_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "storage_market::STORAGE_CHALLENGE_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_CHALLENGE_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "storage_market::STORAGE_EVENT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const STORAGE_EVENT_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "storage_market::storage_pin_request_id",
              "kind": "function_item",
              "signature": "pub fn storage_pin_request_id(\n    chain_id: &str,\n    owner_did: &str,\n    artifact: &ArtifactCommitment,\n    duration_epochs: u64,\n    replication_factor: u16,\n    client_nonce: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "storage_market::storage_contract_id",
              "kind": "function_item",
              "signature": "pub fn storage_contract_id(\n    chain_id: &str,\n    request_id: &str,\n    provider_did: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "storage_market::storage_challenge_id",
              "kind": "function_item",
              "signature": "pub fn storage_challenge_id(\n    chain_id: &str,\n    contract_id: &str,\n    opened_at_height: u64,\n    client_nonce: &str,\n) -> Result<String, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 101
            },
            {
              "name": "storage_market::StorageProviderStatus",
              "kind": "enum_item",
              "signature": "pub enum StorageProviderStatus {\n    Active,\n    Suspended,\n    Exiting,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 127
            },
            {
              "name": "storage_market::StoragePinStatus",
              "kind": "enum_item",
              "signature": "pub enum StoragePinStatus {\n    Open,\n    Accepted,\n    Pinned,\n    Settled,\n    Cancelled,\n    Expired,\n    Challenged,\n    Slashed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 135
            },
            {
              "name": "storage_market::StorageChallengeStatus",
              "kind": "enum_item",
              "signature": "pub enum StorageChallengeStatus {\n    Open,\n    Proved,\n    Failed,\n    Dismissed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 148
            },
            {
              "name": "storage_market::StorageProviderRecord",
              "kind": "struct_item",
              "signature": "pub struct StorageProviderRecord {\npub provider_did: String,\npub capacity_gib: u64,\npub regions: Vec<String>,\npub price_per_gib_epoch: u64,\npub retrieval_price_per_gib: u64,\npub replication_guarantee: u16,\npub stake: u64,\npub provider_pubkey: Vec<u8>,\npub status: StorageProviderStatus,\npub registered_at_height: u64,\npub updated_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 156
            },
            {
              "name": "storage_market::StorageProviderRecord::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 171
            },
            {
              "name": "storage_market::StoragePinRequest",
              "kind": "struct_item",
              "signature": "pub struct StoragePinRequest {\npub request_id: String,\npub owner_did: String,\npub artifact: ArtifactCommitment,\npub duration_epochs: u64,\npub replication_factor: u16,\npub max_price_per_gib_epoch: u64,\npub escrowed_amount: u64,\npub accepted_contracts: Vec<String>,\npub status: StoragePinStatus,\npub created_at_height: u64,\npub expires_at_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 198
            },
            {
              "name": "storage_market::StoragePinRequest::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 213
            },
            {
              "name": "storage_market::StoragePinContract",
              "kind": "struct_item",
              "signature": "pub struct StoragePinContract {\npub contract_id: String,\npub request_id: String,\npub provider_did: String,\npub owner_did: String,\npub artifact: ArtifactCommitment,\npub duration_epochs: u64,\npub replication_factor: u16,\npub accepted_price_per_gib_epoch: u64,\npub escrowed_amount: u64,\npub paid_amount: u64,\npub status: StoragePinStatus,\npub accepted_at_height: u64,\npub settled_at_epoch: Option<u64>,\npub challenge_window_until_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 236
            },
            {
              "name": "storage_market::StorageProofPosition",
              "kind": "enum_item",
              "signature": "pub enum StorageProofPosition {\n    Left,\n    Right,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 255
            },
            {
              "name": "storage_market::StorageProofSibling",
              "kind": "struct_item",
              "signature": "pub struct StorageProofSibling {\npub position: StorageProofPosition,\npub hash: SigilHash\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 261
            },
            {
              "name": "storage_market::StorageChunkProof",
              "kind": "struct_item",
              "signature": "pub struct StorageChunkProof {\npub sample_index: u64,\npub leaf_hash: SigilHash,\npub siblings: Vec<StorageProofSibling>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 267
            },
            {
              "name": "storage_market::StorageChallengeProof",
              "kind": "struct_item",
              "signature": "pub struct StorageChallengeProof {\npub challenge_nonce: SigilHash,\npub chunk_proofs: Vec<StorageChunkProof>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 274
            },
            {
              "name": "storage_market::StorageChallengeProof::verify_against_weft",
              "kind": "function_item",
              "signature": "pub fn verify_against_weft(&self, artifact: &ArtifactCommitment) -> Result<bool, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 280
            },
            {
              "name": "storage_market::verify_weft_chunk_proof",
              "kind": "function_item",
              "signature": "pub fn verify_weft_chunk_proof(\n    root: SigilHash,\n    leaf: SigilHash,\n    leaf_index: u64,\n    leaf_count: u64,\n    siblings: &[StorageProofSibling],\n) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 317
            },
            {
              "name": "storage_market::StoragePinReceipt",
              "kind": "struct_item",
              "signature": "pub struct StoragePinReceipt {\npub receipt_id: String,\npub contract_id: String,\npub provider_did: String,\npub artifact: ArtifactCommitment,\npub pinned_root_cid: String,\npub settled_epoch: u64,\npub price_paid: u64,\npub proof: StorageChallengeProof,\npub receipt_hash: SigilHash,\npub provider_signature: Vec<u8>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub signer_pubkey: Option<Vec<u8>>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 360
            },
            {
              "name": "storage_market::StoragePinReceipt::compute_receipt_hash",
              "kind": "function_item",
              "signature": "pub fn compute_receipt_hash(&self) -> SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 376
            },
            {
              "name": "storage_market::StoragePinReceipt::verify_hash",
              "kind": "function_item",
              "signature": "pub fn verify_hash(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 395
            },
            {
              "name": "storage_market::StorageChallengeRecord",
              "kind": "struct_item",
              "signature": "pub struct StorageChallengeRecord {\npub challenge_id: String,\npub contract_id: String,\npub challenger_did: String,\npub provider_did: String,\npub challenge_nonce: SigilHash,\npub sample_indices: Vec<u64>,\npub status: StorageChallengeStatus,\npub opened_at_height: u64,\npub response_due_height: u64,\npub resolved_at_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 401
            },
            {
              "name": "storage_market::StorageProviderRegisterData",
              "kind": "struct_item",
              "signature": "pub struct StorageProviderRegisterData {\npub provider_did: String,\npub capacity_gib: u64,\npub regions: Vec<String>,\npub price_per_gib_epoch: u64,\npub retrieval_price_per_gib: u64,\npub replication_guarantee: u16,\npub stake: u64,\npub provider_pubkey: Vec<u8>,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 415
            },
            {
              "name": "storage_market::StorageProviderUpdateData",
              "kind": "struct_item",
              "signature": "pub struct StorageProviderUpdateData {\npub provider_did: String,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub capacity_gib: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub regions: Option<Vec<String>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub price_per_gib_epoch: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub retrieval_price_per_gib: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub replication_guarantee: Option<u16>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub provider_pubkey: Option<Vec<u8>>,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 428
            },
            {
              "name": "storage_market::StorageProviderExitData",
              "kind": "struct_item",
              "signature": "pub struct StorageProviderExitData {\npub provider_did: String,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 446
            },
            {
              "name": "storage_market::StoragePinRequestData",
              "kind": "struct_item",
              "signature": "pub struct StoragePinRequestData {\npub owner_did: String,\npub artifact: ArtifactCommitment,\npub duration_epochs: u64,\npub replication_factor: u16,\npub max_price_per_gib_epoch: u64,\npub escrowed_amount: u64,\npub expires_at_height: Option<u64>,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 452
            },
            {
              "name": "storage_market::StoragePinAcceptData",
              "kind": "struct_item",
              "signature": "pub struct StoragePinAcceptData {\npub request_id: String,\npub provider_did: String,\npub accepted_price_per_gib_epoch: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 464
            },
            {
              "name": "storage_market::StorageReceiptSettleData",
              "kind": "struct_item",
              "signature": "pub struct StorageReceiptSettleData {\npub receipt: StoragePinReceipt\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 472
            },
            {
              "name": "storage_market::StorageChallengeData",
              "kind": "struct_item",
              "signature": "pub struct StorageChallengeData {\npub contract_id: String,\npub challenger_did: String,\npub sample_indices: Vec<u64>,\npub response_window_blocks: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 477
            },
            {
              "name": "storage_market::StorageChallengeResolveData",
              "kind": "struct_item",
              "signature": "pub struct StorageChallengeResolveData {\npub challenge_id: String,\npub proof: StorageChallengeProof\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 486
            }
          ],
          "parseErrors": false
        },
        {
          "module": "system_contracts",
          "source": "sigil/node/sigil-core/src/system_contracts.rs",
          "sha256": "53d3a878cc747ec7963c4546e228629644a0c73068bdfcbec8211f034222fb4c",
          "attributes": "",
          "items": [
            {
              "name": "system_contracts::SYSTEM_CONTRACT_REGISTRY_JSON",
              "kind": "const_item",
              "signature": "pub const SYSTEM_CONTRACT_REGISTRY_JSON: &str;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "system_contracts::SystemContractRegistry",
              "kind": "struct_item",
              "signature": "pub struct SystemContractRegistry {\npub version: u32,\n#[serde(rename = \"defaultController\")]\npub default_controller: String,\npub contracts: Vec<SystemContract>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 9
            },
            {
              "name": "system_contracts::SystemContract",
              "kind": "struct_item",
              "signature": "pub struct SystemContract {\npub id: String,\npub name: String,\npub version: String,\n#[serde(rename = \"contractDid\")]\npub contract_did: String,\n#[serde(rename = \"controllerDid\")]\npub controller_did: String,\npub runtime: String,\npub deployment: String,\npub wasm: SystemContractWasm,\npub abi: SystemContractAbi,\n#[serde(rename = \"nativeKernel\")]\npub native_kernel: Vec<String>,\n#[serde(rename = \"ricardianClauses\")]\npub ricardian_clauses: Vec<SystemContractRicardianClause>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 17
            },
            {
              "name": "system_contracts::SystemContractWasm",
              "kind": "struct_item",
              "signature": "pub struct SystemContractWasm {\npub source: String,\n#[serde(rename = \"codeHash\")]\npub code_hash: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 36
            },
            {
              "name": "system_contracts::SystemContractAbi",
              "kind": "struct_item",
              "signature": "pub struct SystemContractAbi {\npub actions: Vec<SystemContractAction>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 43
            },
            {
              "name": "system_contracts::SystemContractAction",
              "kind": "struct_item",
              "signature": "pub struct SystemContractAction {\npub name: String,\npub mutability: String,\npub args: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 48
            },
            {
              "name": "system_contracts::SystemContractRicardianClause",
              "kind": "struct_item",
              "signature": "pub struct SystemContractRicardianClause {\npub title: String,\npub text: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 55
            },
            {
              "name": "system_contracts::system_contract_registry",
              "kind": "function_item",
              "signature": "pub fn system_contract_registry() -> Result<SystemContractRegistry, serde_json::Error>;",
              "docs": "",
              "attributes": "",
              "line": 60
            }
          ],
          "parseErrors": false
        },
        {
          "module": "transaction",
          "source": "sigil/node/sigil-core/src/transaction.rs",
          "sha256": "6c978af06eae1ef7a19fecf3eba14adcb799b7c96a35d908f0bd509d676d0bba",
          "attributes": "",
          "items": [
            {
              "name": "transaction::TX_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const TX_DOMAIN_TAG: &[u8];",
              "docs": "Domain separation tag for Sigil transaction signatures.\n\nDistinct from all CZAC tags (`b\"sigil/czac/handshake/v1\\n\"` and\n`b\"sigil/czac/envelope/v1\\n\"`) to prevent cross-context signature reuse.\n\nThe signed transcript is:\n```text\nTX_DOMAIN_TAG || serde_json::to_vec(&transaction)\n```\nand the Ed25519 signing primitive receives `BLAKE3(transcript)` as its\n32-byte message.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "transaction::SPONSORED_SETUP_SUBJECT_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const SPONSORED_SETUP_SUBJECT_DOMAIN_TAG: &[u8];",
              "docs": "Domain separation tag for subject consent inside sponsored setup envelopes.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "transaction::DEFAULT_SIGNATURE_BATCH_SIZE",
              "kind": "const_item",
              "signature": "pub const DEFAULT_SIGNATURE_BATCH_SIZE: usize;",
              "docs": "Default transaction signature batch size for validator block admission.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "transaction::SignedTransaction",
              "kind": "struct_item",
              "signature": "pub struct SignedTransaction {\n/// The transaction payload.\n\npub tx: Transaction,\n/// Ed25519 signature over the domain-separated transaction transcript.\n\npub signature: Vec<u8>,\n/// Compressed Ed25519 public key of the signer (32 bytes).\n\npub signer_public_key: Vec<u8>\n}",
              "docs": "A signed transaction ready for inclusion in a block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 94
            },
            {
              "name": "transaction::SignedTransaction::tx_hash",
              "kind": "function_item",
              "signature": "pub fn tx_hash(&self) -> Result<SigilHash, CoreError>;",
              "docs": "Compute the transaction hash (BLAKE3 of serialized tx).\n\nReturns an error if the transaction cannot be serialized.",
              "attributes": "",
              "line": 107
            },
            {
              "name": "transaction::SignedTransaction::canonical_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_signing_bytes(tx: &Transaction) -> Result<Vec<u8>, CoreError>;",
              "docs": "Build the domain-separated signing transcript for a transaction.\n\n`transcript = TX_DOMAIN_TAG || serde_json::to_vec(tx)`\n\nThe 32-byte `BLAKE3(transcript)` is what Ed25519 signs and verifies.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "transaction::SignedTransaction::sign",
              "kind": "function_item",
              "signature": "pub fn sign(tx: Transaction, signing_key: &SigningKey) -> Result<Self, CoreError>;",
              "docs": "Sign a transaction with an Ed25519 signing key.\n\nComputes `BLAKE3(TX_DOMAIN_TAG || serde_json::to_vec(tx))` and signs the\nresulting 32-byte digest.  Stores the 64-byte signature and the\ncorresponding compressed verifying key (32 bytes) in the returned\n[`SignedTransaction`].\n\n# Errors\n\nReturns [`CoreError::SerializationError`] if the transaction cannot be\nserialized.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "transaction::SignedTransaction::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self) -> Result<(), CoreError>;",
              "docs": "Verify the Ed25519 signature on this transaction.\n\nReconstructs `BLAKE3(TX_DOMAIN_TAG || serde_json::to_vec(&self.tx))`\nand verifies the stored 64-byte signature against it using the stored\n32-byte compressed verifying key.\n\nReturns `Ok(())` on success.  Any failure \u2014 empty signature, wrong size,\nkey parse failure, or cryptographic mismatch \u2014 returns\n[`CoreError::InvalidSignature`] with a generic message that does **not\ndistinguish between key and signature errors to prevent oracle attacks.\n\n# Errors\n\nReturns [`CoreError::InvalidSignature`] if verification fails for any\nreason.  Returns [`CoreError::SerializationError`] if the transaction\npayload cannot be serialized.",
              "attributes": "",
              "line": 166
            },
            {
              "name": "transaction::SignedTransaction::verify_batch",
              "kind": "function_item",
              "signature": "pub fn verify_batch(txs: &[SignedTransaction], batch_size: usize) -> Result<(), CoreError>;",
              "docs": "Verify transaction signatures in deterministic fixed-size batches.\n\nBatch verification uses ed25519-dalek's deterministic batch verifier:\nall random scalars are derived from the batch transcript, so validator\noutcomes are bit-identical for the same ordered transaction list.\n\n`batch_size == 0` is treated as [`DEFAULT_SIGNATURE_BATCH_SIZE`].",
              "attributes": "",
              "line": 220
            },
            {
              "name": "transaction::SignedTransaction::verify_batch_report_first_failure",
              "kind": "function_item",
              "signature": "pub fn verify_batch_report_first_failure(\n        txs: &[SignedTransaction],\n        batch_size: usize,\n    ) -> Result<(), (usize, CoreError)>;",
              "docs": "Verify a batch and report the first failing index on any rejection.\n\ned25519 batch verification deliberately returns only a batch-level\nfailure. Sigil falls back to single verification when the batch rejects\nso consensus and execution can emit a stable tx index without accepting\npartial batches.",
              "attributes": "",
              "line": 230
            },
            {
              "name": "transaction::SignedTransaction::batch_signature_hardware_hint",
              "kind": "function_item",
              "signature": "pub fn batch_signature_hardware_hint() -> &'static str;",
              "docs": "Return the strongest local SIMD capability visible to the process.\n\nThe actual verifier stays deterministic; this value is for startup logs,\nmetrics labels, and benchmark reports.",
              "attributes": "",
              "line": 278
            },
            {
              "name": "transaction::Transaction",
              "kind": "struct_item",
              "signature": "pub struct Transaction {\n/// Chain ID to prevent replay across networks.\n\npub chain_id: String,\n/// Sender's OAS DID.\n\npub sender_did: String,\n/// Monotonically increasing nonce (per sender).\n\npub nonce: u64,\n/// Gas limit for this transaction.\n\npub gas_limit: u64,\n/// Gas price in SIGIL (smallest unit).\n\npub gas_price: u64,\n/// Transaction payload.\n\npub tx_type: TransactionType,\n/// Timestamp (ISO 8601).\n\npub timestamp: chrono::DateTime<chrono::Utc>\n}",
              "docs": "A Sigil blockchain transaction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 306
            },
            {
              "name": "transaction::SponsoredSetupScope",
              "kind": "enum_item",
              "signature": "pub enum SponsoredSetupScope {\n    HmrAnchor,\n    EnrAnchor,\n    MhrAnchor,\n    LineageAnchor,\n    RecoveryRegistration,\n    InitialDeviceAnchor,\n}",
              "docs": "Strict setup-only scope for sponsored onboarding.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 326
            },
            {
              "name": "transaction::SponsoredSetupScope::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 336
            },
            {
              "name": "transaction::SponsoredSetupData",
              "kind": "struct_item",
              "signature": "pub struct SponsoredSetupData {\npub sponsor_did: String,\npub subject_did: String,\npub setup_scope: SponsoredSetupScope,\npub idempotency_key: String,\npub setup_tx_type: Box<TransactionType>,\npub subject_public_key: Vec<u8>,\npub subject_signature: Vec<u8>\n}",
              "docs": "Setup-only sponsored transaction envelope.\n\nThe outer [`Transaction`] sender is still the sponsor, so normal sponsor\nnonce, signature, and fee debiting rules remain intact. The subject proves\ncontrol by signing a domain-separated transcript of the sponsored setup\nfields and inner setup action.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 355
            },
            {
              "name": "transaction::InitialDeviceAnchorData",
              "kind": "struct_item",
              "signature": "pub struct InitialDeviceAnchorData {\npub subject_did: String,\npub device_id: String,\npub device_public_key: Vec<u8>,\npub device_commitment: String,\npub attestation_commitment: Option<String>,\npub display_name_commitment: Option<String>,\npub sequence: u64,\npub anchored_at_block: u64\n}",
              "docs": "Initial device binding for setup-only onboarding.\n\nThis records a public device key/commitment for a subject DID without\ngranting value-transfer capability. It is intended to be used through\n`SponsoredSetup(InitialDeviceAnchor)` during first-run wallet onboarding.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 371
            },
            {
              "name": "transaction::SponsoredSetupData::subject_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn subject_signing_bytes(&self, chain_id: &str) -> Result<Vec<u8>, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 393
            },
            {
              "name": "transaction::SponsoredSetupData::subject_signing_digest",
              "kind": "function_item",
              "signature": "pub fn subject_signing_digest(&self, chain_id: &str) -> Result<[u8; 32], CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 414
            },
            {
              "name": "transaction::Transaction::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> Result<SigilHash, CoreError>;",
              "docs": "Compute the hash of this transaction.\n\nReturns an error if the transaction cannot be serialized.",
              "attributes": "",
              "line": 424
            },
            {
              "name": "transaction::Transaction::category",
              "kind": "function_item",
              "signature": "pub fn category(&self) -> TransactionCategory;",
              "docs": "Returns the category of this transaction.",
              "attributes": "",
              "line": 431
            },
            {
              "name": "transaction::Transaction::declared_access_set",
              "kind": "function_item",
              "signature": "pub fn declared_access_set(&self) -> TransactionAccessSet;",
              "docs": "Deterministic read/write declaration for optimistic execution and\naccount-local fee markets.",
              "attributes": "",
              "line": 437
            },
            {
              "name": "transaction::TransactionCategory",
              "kind": "enum_item",
              "signature": "pub enum TransactionCategory {\n    Identity,\n    Custody,\n    Mars,\n    Economics,\n    Tokens,\n    Contracts,\n    Apps,\n    Governance,\n    Execution,\n    Compute,\n    /// Autonomous Organization / DAO transactions.\n    Dao,\n    /// Bidirectional Labor Market transactions (jobs, bids, contracts,\n    /// milestones, attestations, reviews, disputes, reputation, revenue\n    /// shares, royalties).\n    Labor,\n    /// Sigil Mail transactions: mailbox capability records, aliases, receive\n    /// policy, public keys, delivery commitments, abuse, and delegations.\n    Mail,\n    /// Sigil Name System transactions extending the username registry into\n    /// `.sigil` resolver records for mail, websites, wallets, and services.\n    Sns,\n    /// L1-coordinated distributed training commitments and reward pools.\n    Crucible,\n    /// Tower validator coordination chain transactions.\n    #[cfg(feature = \"tower\")]\n    Tower,\n    /// Cross-Zone Agent Communication protocol transactions.\n    #[cfg(feature = \"czac\")]\n    Czac,\n    /// Global Anchor Layer (MARS-S sharding) transactions.\n    #[cfg(feature = \"tower\")]\n    Gal,\n    /// Nova metaverse world state transactions.\n    #[cfg(feature = \"nova\")]\n    Nova,\n    /// Native non-fungible token (NFT) transactions.\n    Nft,\n    /// On-chain `@username` registry: register, transfer, release, metadata,\n    /// reverse-lookup. See `docs/specs/USERNAMES.md`.\n    Username,\n    /// Event-driven autonomous contract subscriptions and deliveries.\n    Vigils,\n    /// First-class Weave/Weft storage pinning marketplace contracts,\n    /// receipts, challenges, slashing, and rewards.\n    Storage,\n    /// Native constant-product DEX pools, swaps, and LP positions.\n    Dex,\n    /// Evidence anchoring: content-addressed digest commitments (harness\n    /// archives, audit evidence). Hash-commitment anchoring, not ZK.\n    Evidence,\n}",
              "docs": "Transaction category for routing to semantic validators.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 444
            },
            {
              "name": "transaction::StateAccess",
              "kind": "struct_item",
              "signature": "pub struct StateAccess {\npub partition: String,\npub key: String\n}",
              "docs": "A deterministic state key touched by a transaction.\n\n`partition` is a stable logical namespace; `key` is the canonical string\nkey within that namespace. String keys intentionally avoid host-endian or\nstruct-layout dependencies in the execution scheduler.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]",
              "line": 504
            },
            {
              "name": "transaction::StateAccess::new",
              "kind": "function_item",
              "signature": "pub fn new(partition: impl Into<String>, key: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 510
            },
            {
              "name": "transaction::StateAccess::account_balance",
              "kind": "function_item",
              "signature": "pub fn account_balance(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 517
            },
            {
              "name": "transaction::StateAccess::account_nonce",
              "kind": "function_item",
              "signature": "pub fn account_nonce(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 521
            },
            {
              "name": "transaction::StateAccess::fee_market_account",
              "kind": "function_item",
              "signature": "pub fn fee_market_account(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 525
            },
            {
              "name": "transaction::StateAccess::identity",
              "kind": "function_item",
              "signature": "pub fn identity(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 529
            },
            {
              "name": "transaction::StateAccess::validator",
              "kind": "function_item",
              "signature": "pub fn validator(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 533
            },
            {
              "name": "transaction::StateAccess::delegation",
              "kind": "function_item",
              "signature": "pub fn delegation(delegator: impl AsRef<str>, validator: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 537
            },
            {
              "name": "transaction::StateAccess::proposal",
              "kind": "function_item",
              "signature": "pub fn proposal(id: impl ToString) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 544
            },
            {
              "name": "transaction::StateAccess::vote",
              "kind": "function_item",
              "signature": "pub fn vote(proposal_id: impl ToString, voter: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 548
            },
            {
              "name": "transaction::StateAccess::contract",
              "kind": "function_item",
              "signature": "pub fn contract(did: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 555
            },
            {
              "name": "transaction::StateAccess::contract_code",
              "kind": "function_item",
              "signature": "pub fn contract_code(hash: impl ToString) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 559
            },
            {
              "name": "transaction::StateAccess::contract_state",
              "kind": "function_item",
              "signature": "pub fn contract_state(contract_did: impl AsRef<str>, key: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 563
            },
            {
              "name": "transaction::StateAccess::contract_state_prefix",
              "kind": "function_item",
              "signature": "pub fn contract_state_prefix(contract_did: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 570
            },
            {
              "name": "transaction::StateAccess::zone",
              "kind": "function_item",
              "signature": "pub fn zone(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 574
            },
            {
              "name": "transaction::StateAccess::zone_queue",
              "kind": "function_item",
              "signature": "pub fn zone_queue(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 578
            },
            {
              "name": "transaction::StateAccess::nft_collection",
              "kind": "function_item",
              "signature": "pub fn nft_collection(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 582
            },
            {
              "name": "transaction::StateAccess::nft_token",
              "kind": "function_item",
              "signature": "pub fn nft_token(collection_id: impl AsRef<str>, token_id: u128) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 586
            },
            {
              "name": "transaction::StateAccess::dex_pool",
              "kind": "function_item",
              "signature": "pub fn dex_pool(pool_id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 593
            },
            {
              "name": "transaction::StateAccess::dex_position",
              "kind": "function_item",
              "signature": "pub fn dex_position(pool_id: impl AsRef<str>, owner_did: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 597
            },
            {
              "name": "transaction::StateAccess::dex_asset_balance",
              "kind": "function_item",
              "signature": "pub fn dex_asset_balance(asset_id: impl AsRef<str>, owner_did: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 604
            },
            {
              "name": "transaction::StateAccess::dex_asset_balance_owner_prefix",
              "kind": "function_item",
              "signature": "pub fn dex_asset_balance_owner_prefix(owner_did: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 611
            },
            {
              "name": "transaction::StateAccess::dao",
              "kind": "function_item",
              "signature": "pub fn dao(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 615
            },
            {
              "name": "transaction::StateAccess::mandate",
              "kind": "function_item",
              "signature": "pub fn mandate(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 619
            },
            {
              "name": "transaction::StateAccess::labor_job",
              "kind": "function_item",
              "signature": "pub fn labor_job(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 623
            },
            {
              "name": "transaction::StateAccess::labor_bid",
              "kind": "function_item",
              "signature": "pub fn labor_bid(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 627
            },
            {
              "name": "transaction::StateAccess::labor_contract",
              "kind": "function_item",
              "signature": "pub fn labor_contract(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 631
            },
            {
              "name": "transaction::StateAccess::labor_offer",
              "kind": "function_item",
              "signature": "pub fn labor_offer(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 635
            },
            {
              "name": "transaction::StateAccess::labor_claim",
              "kind": "function_item",
              "signature": "pub fn labor_claim(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 639
            },
            {
              "name": "transaction::StateAccess::training_run",
              "kind": "function_item",
              "signature": "pub fn training_run(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 643
            },
            {
              "name": "transaction::StateAccess::training_reward_pool",
              "kind": "function_item",
              "signature": "pub fn training_reward_pool(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 647
            },
            {
              "name": "transaction::StateAccess::training_rollout_batch",
              "kind": "function_item",
              "signature": "pub fn training_rollout_batch(run_id: impl AsRef<str>, batch_id: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 651
            },
            {
              "name": "transaction::StateAccess::training_weights",
              "kind": "function_item",
              "signature": "pub fn training_weights(run_id: impl AsRef<str>, model_root: impl ToString) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 658
            },
            {
              "name": "transaction::StateAccess::training_reward_attestation",
              "kind": "function_item",
              "signature": "pub fn training_reward_attestation(\n        run_id: impl AsRef<str>,\n        attestation_id: impl AsRef<str>,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 665
            },
            {
              "name": "transaction::StateAccess::training_slash",
              "kind": "function_item",
              "signature": "pub fn training_slash(run_id: impl AsRef<str>, slash_id: impl AsRef<str>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 675
            },
            {
              "name": "transaction::StateAccess::compute_provider",
              "kind": "function_item",
              "signature": "pub fn compute_provider(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 683
            },
            {
              "name": "transaction::StateAccess::compute_escrow",
              "kind": "function_item",
              "signature": "pub fn compute_escrow(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 688
            },
            {
              "name": "transaction::StateAccess::compute_receipt",
              "kind": "function_item",
              "signature": "pub fn compute_receipt(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 693
            },
            {
              "name": "transaction::StateAccess::compute_challenge",
              "kind": "function_item",
              "signature": "pub fn compute_challenge(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 698
            },
            {
              "name": "transaction::StateAccess::storage_provider",
              "kind": "function_item",
              "signature": "pub fn storage_provider(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 702
            },
            {
              "name": "transaction::StateAccess::storage_request",
              "kind": "function_item",
              "signature": "pub fn storage_request(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 706
            },
            {
              "name": "transaction::StateAccess::storage_contract",
              "kind": "function_item",
              "signature": "pub fn storage_contract(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 710
            },
            {
              "name": "transaction::StateAccess::storage_receipt",
              "kind": "function_item",
              "signature": "pub fn storage_receipt(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 714
            },
            {
              "name": "transaction::StateAccess::storage_challenge",
              "kind": "function_item",
              "signature": "pub fn storage_challenge(id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 718
            },
            {
              "name": "transaction::StateAccess::global",
              "kind": "function_item",
              "signature": "pub fn global(key: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 722
            },
            {
              "name": "transaction::TransactionAccessSet",
              "kind": "struct_item",
              "signature": "pub struct TransactionAccessSet {\npub reads: BTreeSet<StateAccess>,\npub writes: BTreeSet<StateAccess>\n}",
              "docs": "Deterministic transaction-level read/write declaration.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 729
            },
            {
              "name": "transaction::TransactionAccessSet::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 735
            },
            {
              "name": "transaction::TransactionAccessSet::for_sender",
              "kind": "function_item",
              "signature": "pub fn for_sender(sender_did: &str) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 742
            },
            {
              "name": "transaction::TransactionAccessSet::read",
              "kind": "function_item",
              "signature": "pub fn read(&mut self, key: StateAccess);",
              "docs": "",
              "attributes": "",
              "line": 750
            },
            {
              "name": "transaction::TransactionAccessSet::write",
              "kind": "function_item",
              "signature": "pub fn write(&mut self, key: StateAccess);",
              "docs": "",
              "attributes": "",
              "line": 754
            },
            {
              "name": "transaction::TransactionAccessSet::read_write",
              "kind": "function_item",
              "signature": "pub fn read_write(&mut self, key: StateAccess);",
              "docs": "",
              "attributes": "",
              "line": 758
            },
            {
              "name": "transaction::TransactionAccessSet::conflicts_with",
              "kind": "function_item",
              "signature": "pub fn conflicts_with(&self, other: &Self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 763
            },
            {
              "name": "transaction::TransactionAccessSet::local_fee_accounts",
              "kind": "function_item",
              "signature": "pub fn local_fee_accounts(&self) -> BTreeSet<String>;",
              "docs": "",
              "attributes": "",
              "line": 819
            },
            {
              "name": "transaction::TransactionType",
              "kind": "enum_item",
              "signature": "pub enum TransactionType {\n    // ---- Identity (5) ----\n    /// Register a new OAS identity on-chain.\n    IdentityRegister(IdentityRegisterData),\n    /// Update an existing OAS identity document.\n    IdentityUpdate(IdentityUpdateData),\n    /// Revoke an OAS identity (irreversible).\n    IdentityRevoke(IdentityRevokeData),\n    /// Delegate control of an identity to another DID.\n    IdentityDelegate(IdentityDelegateData),\n    /// Recover an identity via recovery key or social recovery.\n    /// Deprecated single-step placeholder \u2014 use the `*Recovery` flow below\n    /// for production. Retained for backward compatibility with pre-launch\n    /// SDKs; the executor still treats it as fee-only fallthrough.\n    IdentityRecover(IdentityRecoverData),\n    /// Register or replace a recovery group (guardians + threshold +\n    /// timelock + panic-abort key) for the sender DID.\n    RegisterRecovery(RegisterRecoveryData),\n    /// Initiate a recovery ceremony for `subject_did`. Permissionless\n    /// (the gas payer need not be the subject).\n    InitiateRecovery(InitiateRecoveryData),\n    /// Add one guardian's authorization to an open recovery ceremony.\n    AddRecoveryAuthorization(AddRecoveryAuthorizationData),\n    /// Abort an open recovery ceremony with the panic-abort key or the\n    /// subject's current pre-rotation key.\n    AbortRecovery(AbortRecoveryData),\n    /// Finalize a Ready recovery ceremony \u2014 rotates the on-chain pubkey.\n    FinalizeRecovery(FinalizeRecoveryData),\n    /// Setup-only sponsored onboarding envelope. The outer sender pays fees;\n    /// the embedded action is allowlisted at executor time.\n    SponsoredSetup(SponsoredSetupData),\n    /// Setup-only initial device anchor for a subject DID.\n    InitialDeviceAnchor(InitialDeviceAnchorData),\n\n    // ---- Agent-native custody ----\n    /// Register a first-class root identity.\n    RegisterRoot(RegisterRootData),\n    /// Rotate active keys for a root identity.\n    RotateRootKey(RotateRootKeyData),\n    /// Revoke a root identity.\n    RevokeRoot(RevokeRootData),\n    /// Create an HMR/MHR/ENR-backed root group.\n    CreateRootGroup(CreateRootGroupData),\n    /// Update a root group policy.\n    UpdateRootGroupPolicy(UpdateRootGroupPolicyData),\n    /// Issue an agent under a root or root group.\n    IssueAgent(IssueAgentData),\n    /// Rotate an agent signing key.\n    RotateAgentKey(RotateAgentKeyData),\n    /// Revoke an agent.\n    RevokeAgent(RevokeAgentData),\n    /// Delegate permissions from a controller to an agent/app.\n    DelegatePermission(DelegatePermissionData),\n    /// Revoke delegated permissions.\n    RevokePermission(RevokePermissionData),\n\n    // ---- MARS (5) ----\n    /// Anchor a new MARS registry entry on-chain.\n    MarsAnchorRegister(MarsAnchorData),\n    /// Anchor a MARS entry update on-chain.\n    MarsAnchorUpdate(MarsAnchorData),\n    /// Anchor a MARS entry revocation on-chain.\n    MarsAnchorRevoke(MarsAnchorRevokeData),\n    /// Anchor a MARS entry transfer on-chain.\n    MarsAnchorTransfer(MarsAnchorTransferData),\n    /// Anchor a MARS attestation on-chain.\n    MarsAnchorAttest(MarsAnchorAttestData),\n\n    // ---- Economics (4) ----\n    /// Stake MINT to become a validator.\n    Stake(StakeData),\n    /// Unstake MINT (begins unbonding period).\n    Unstake(UnstakeData),\n    /// Delegate stake to another validator.\n    DelegateStake(DelegateStakeData),\n    /// Redeem delegation pool shares from another validator.\n    UndelegateStake(UndelegateStakeData),\n    /// Claim accumulated rewards.\n    ClaimRewards(ClaimRewardsData),\n    /// Transfer MINT to another account.\n    Transfer(TransferData),\n\n    // ---- Agent-native treasuries ----\n    /// Create a policy-controlled treasury.\n    CreateTreasury(CreateTreasuryData),\n    /// Deposit native MINT/SIGIL into a treasury.\n    DepositTreasury(DepositTreasuryData),\n    /// Withdraw from a policy-controlled treasury.\n    WithdrawTreasury(WithdrawTreasuryData),\n    /// Set treasury revenue distribution policy.\n    SetDistributionPolicy(SetDistributionPolicyData),\n    /// Distribute treasury revenue according to policy.\n    DistributeRevenue(DistributeRevenueData),\n\n    // ---- Agent-native tokens ----\n    /// Create a custom token class.\n    CreateTokenClass(CreateTokenClassData),\n    /// Mint a custom token.\n    MintToken(MintTokenData),\n    /// Burn a custom token.\n    BurnToken(BurnTokenData),\n    /// Transfer a custom token.\n    TransferToken(TransferTokenData),\n    /// Update token policy.\n    SetTokenPolicy(SetTokenPolicyData),\n\n    // ---- Agent-native contracts ----\n    /// Register content-addressed smart-contract bytecode for later deploy.\n    RegisterContractCode(RegisterContractCodeData),\n    /// Deploy a smart contract account.\n    DeployContract(DeployContractData),\n    /// Call a smart contract.\n    CallContract(CallContractData),\n    /// Upgrade contract code.\n    UpgradeContract(UpgradeContractData),\n    /// Update contract policy.\n    SetContractPolicy(SetContractPolicyData),\n\n    // ---- Agent-native apps ----\n    /// Register an app agent.\n    RegisterAppAgent(RegisterAppAgentData),\n    /// Grant app permissions.\n    GrantAppPermission(GrantAppPermissionData),\n    /// Revoke app permissions.\n    RevokeAppPermission(RevokeAppPermissionData),\n    /// Upgrade app metadata or policy.\n    UpgradeAppAgent(UpgradeAppAgentData),\n\n    // ---- Agent-native DAO / Autonomous Organization ----\n    /// Register a DAO / Autonomous Organization on-chain.\n    RegisterDao(RegisterDaoData),\n    /// Update controller / governance / hiring policy on a DAO.\n    UpdateDaoPolicy(UpdateDaoPolicyData),\n\n    // ---- Mandates ----\n    /// Issue a mandate authorizing an actor to spend or hire under bounds.\n    IssueMandate(IssueMandateData),\n    /// Update budget, scope, or status of a mandate.\n    UpdateMandate(UpdateMandateData),\n    /// Revoke a mandate.\n    RevokeMandate(RevokeMandateData),\n    /// Record a spend against a mandate (emitted alongside the actual\n    /// payment transaction so spend accounting stays atomic).\n    RecordMandateSpend(RecordMandateSpendData),\n\n    // ---- Labor market ----\n    /// Post a labor job advertisement.\n    PostLaborJob(PostLaborJobData),\n    /// Cancel a labor job.\n    CancelLaborJob(CancelLaborJobData),\n    /// Submit a bid for a labor job.\n    SubmitLaborBid(SubmitLaborBidData),\n    /// Withdraw a previously submitted bid.\n    WithdrawLaborBid(WithdrawLaborBidData),\n    /// Accept a bid (selects the worker).\n    AcceptLaborBid(AcceptLaborBidData),\n    /// Create a labor contract from an accepted bid.\n    CreateLaborContract(CreateLaborContractData),\n    /// Fund a contract escrow.\n    FundLaborEscrow(FundLaborEscrowData),\n    /// Open and fund an open bounty offer.\n    LaborOpenOffer(LaborOpenOfferData),\n    /// Submit a claim against an open bounty offer.\n    LaborSubmitClaim(LaborSubmitClaimData),\n    /// Attest an open bounty claim.\n    LaborAttestClaim(LaborAttestClaimData),\n    /// Cancel or close an open bounty offer and refund available escrow.\n    LaborCancelOffer(LaborCancelOfferData),\n    /// Submit a deliverable for a contract milestone.\n    SubmitDeliverable(SubmitDeliverableData),\n    /// Attest milestone completion.\n    AttestMilestone(AttestMilestoneData),\n    /// Release escrowed payment for an attested milestone.\n    ReleaseMilestonePayment(ReleaseMilestonePaymentData),\n    /// Raise a dispute against a labor contract.\n    RaiseLaborDispute(RaiseLaborDisputeData),\n    /// Resolve an open dispute.\n    ResolveLaborDispute(ResolveLaborDisputeData),\n    /// Submit a post-completion review.\n    SubmitLaborReview(SubmitLaborReviewData),\n\n    // ---- Crucible training coordination ----\n    /// Open an L1-coordinated training run and reserve its reward pool.\n    TrainOpen(TrainOpenData),\n    /// Commit a batch of off-chain rollouts by artifact/root commitment.\n    TrainRolloutBatchCommit(TrainRolloutBatchCommitData),\n    /// Attest reward distribution for a committed rollout batch.\n    TrainRewardBatchAttest(TrainRewardBatchAttestData),\n    /// Publish a model checkpoint root and artifact commitment.\n    TrainWeightsPublish(TrainWeightsPublishData),\n    /// Slash a verifier, coordinator, or publisher with off-chain evidence.\n    TrainSlash(TrainSlashData),\n    /// Close or cancel a training run.\n    TrainClose(TrainCloseData),\n\n    // ---- Governance (5) ----\n    /// Submit a governance proposal.\n    GovernancePropose(GovernanceProposeData),\n    /// Vote on a governance proposal.\n    GovernanceVote(GovernanceVoteData),\n    /// Execute an approved proposal after timelock.\n    GovernanceExecute(GovernanceExecuteData),\n    /// Cancel a pending proposal (proposer only).\n    GovernanceCancel(GovernanceCancelData),\n    /// Emergency action (requires supermajority).\n    #[cfg(feature = \"governance\")]\n    GovernanceEmergency(GovernanceEmergencyData),\n\n    // ---- Execution (7) ----\n    /// Deploy a new Organization Zone.\n    DeployZone(DeployZoneData),\n    /// Invoke a function in an Organization Zone.\n    InvokeZone(InvokeZoneData),\n    /// Commit state changes from zone execution.\n    CommitState(CommitStateData),\n    /// Send a cross-zone message.\n    CrossZoneMessage(CrossZoneMessageData),\n    /// Upgrade a WASI module in a zone.\n    UpgradeModule(UpgradeModuleData),\n    /// Register a semantic validation WASI module.\n    RegisterWasiValidator(RegisterWasiValidatorData),\n    /// Remove a semantic validation WASI module.\n    RemoveWasiValidator(RemoveWasiValidatorData),\n\n    // ---- Compute (8) ----\n    /// Register as a compute provider.\n    #[cfg(feature = \"compute\")]\n    ComputeProviderRegister(ComputeProviderRegisterData),\n    /// Update compute provider metadata.\n    #[cfg(feature = \"compute\")]\n    ComputeProviderUpdate(ComputeProviderUpdateData),\n    /// Authorize a relayer DID to submit compute receipts for a provider.\n    #[cfg(feature = \"compute\")]\n    ComputeProviderRelayerRegister(ComputeProviderRelayerData),\n    /// Revoke a relayer DID from a compute provider.\n    #[cfg(feature = \"compute\")]\n    ComputeProviderRelayerRevoke(ComputeProviderRelayerData),\n    /// Exit as a compute provider (begins cooldown).\n    #[cfg(feature = \"compute\")]\n    ComputeProviderExit(ComputeProviderExitData),\n    /// Fund a compute escrow account.\n    #[cfg(feature = \"compute\")]\n    ComputeEscrowFund(ComputeEscrowFundData),\n    /// Withdraw from compute escrow.\n    #[cfg(feature = \"compute\")]\n    ComputeEscrowWithdraw(ComputeEscrowWithdrawData),\n    /// Settle a compute receipt (pay provider).\n    #[cfg(feature = \"compute\")]\n    ComputeReceiptSettle(ComputeReceiptSettleData),\n    /// Challenge a compute receipt.\n    #[cfg(feature = \"compute\")]\n    ComputeChallenge(ComputeChallengeData),\n    /// Resolve a compute challenge.\n    #[cfg(feature = \"compute\")]\n    ComputeChallengeResolve(ComputeChallengeResolveData),\n\n    // ---- MACA epoch / quorum (5, Phase 12) ----\n    /// Register an agent that participates in MACA consensus\n    /// (Validator / Auditor / Sentinel / Proposer / Beacon).\n    #[cfg(feature = \"compute\")]\n    MacaRegisterValidatorAgent(MacaRegisterValidatorAgentData),\n    /// Beacon agent publishes randomness for an epoch.\n    #[cfg(feature = \"compute\")]\n    MacaPublishBeacon(MacaPublishBeaconData),\n    /// Proposer rolls open work claims into a new epoch.\n    #[cfg(feature = \"compute\")]\n    MacaProposeEpoch(MacaProposeEpochData),\n    /// Validator/auditor submits an attestation against a work claim\n    /// included in an open MACA epoch.\n    #[cfg(feature = \"compute\")]\n    MacaSubmitAttestation(MacaSubmitAttestationData),\n    /// Finalize an open MACA epoch: aggregate validator attestations\n    /// into per-work `MacaQuorumProof`s.\n    #[cfg(feature = \"compute\")]\n    MacaFinalizeEpoch(MacaFinalizeEpochData),\n\n    // ---- Tower (7) ----\n    /// Register a new validator on the Tower coordination chain.\n    #[cfg(feature = \"tower\")]\n    TowerRegisterValidator(TowerRegisterValidatorData),\n    /// Update an existing Tower validator's metadata.\n    #[cfg(feature = \"tower\")]\n    TowerUpdateValidator(TowerUpdateValidatorData),\n    /// Exit as a Tower validator (begins cooldown).\n    #[cfg(feature = \"tower\")]\n    TowerExitValidator(TowerExitValidatorData),\n    /// Submit slashing evidence to the Tower Committee.\n    #[cfg(feature = \"tower\")]\n    TowerSubmitEvidence(TowerSubmitEvidenceData),\n    /// Cast a Casper FFG finality vote.\n    #[cfg(feature = \"tower\")]\n    TowerFinalityVote(TowerFinalityVoteData),\n    /// Delegate stake via the Tower coordination chain.\n    #[cfg(feature = \"tower\")]\n    TowerDelegateStake(TowerDelegateStakeData),\n    /// Claim Tower validator rewards.\n    #[cfg(feature = \"tower\")]\n    TowerClaimRewards(TowerClaimRewardsData),\n\n    // ---- CZAC (4) ----\n    /// Open a CZAC cross-zone communication channel.\n    #[cfg(feature = \"czac\")]\n    CzacChannelOpen(CzacChannelOpenData),\n    /// Close a CZAC channel cooperatively.\n    #[cfg(feature = \"czac\")]\n    CzacChannelClose(CzacChannelCloseData),\n    /// Settle a closed CZAC channel on-consensus.\n    #[cfg(feature = \"czac\")]\n    CzacChannelSettle(CzacChannelSettleData),\n    /// Dispute a CZAC payment channel with a newer balance proof.\n    #[cfg(feature = \"czac\")]\n    CzacPaymentChannelDispute(CzacPaymentChannelDisputeData),\n\n    // ---- GAL \u2014 Global Anchor Layer (5 generic, deprecated) ----\n    /// Anchor a new entry in the Global Anchor Layer (MARS-S).\n    ///\n    /// Deprecated in favor of the typed `GalAnchorHmr` / `GalAnchorMhr` /\n    /// `GalAnchorEnr` variants below. Retained for backward compatibility.\n    #[cfg(feature = \"tower\")]\n    GalAnchorEntry(GalAnchorEntryData),\n    /// Update an existing GAL entry. Deprecated: use the typed update\n    /// variants for HMR / MHR / ENR / org lineage roots instead.\n    #[cfg(feature = \"tower\")]\n    GalUpdateEntry(GalUpdateEntryData),\n    /// Revoke a GAL entry. Deprecated: use `GalRecordRevocation` instead.\n    #[cfg(feature = \"tower\")]\n    GalRevokeEntry(GalRevokeEntryData),\n    /// Assign an entry to a specific shard. Deprecated: use\n    /// `GalAssignShardTyped` instead.\n    #[cfg(feature = \"tower\")]\n    GalAssignShard(GalAssignShardData),\n    /// Update the shard topology map. Deprecated: use `GalApplyTopology`\n    /// instead.\n    #[cfg(feature = \"tower\")]\n    GalUpdateTopology(GalUpdateTopologyData),\n\n    // ---- GAL \u2014 Global Anchor Layer (typed) ----\n    /// Anchor an HMR (single-human root) on the GAL.\n    #[cfg(feature = \"tower\")]\n    GalAnchorHmr(crate::gal::HmrAnchor),\n    /// Anchor an MHR (threshold-controlled multi-party root) on the GAL.\n    #[cfg(feature = \"tower\")]\n    GalAnchorMhr(crate::gal::MhrAnchor),\n    /// Anchor an ENR (enterprise root) on the GAL.\n    #[cfg(feature = \"tower\")]\n    GalAnchorEnr(crate::gal::EnrAnchor),\n    /// Update an org lineage Merkle root.\n    #[cfg(feature = \"tower\")]\n    GalUpdateOrgLineageRoot(crate::gal::OrgLineageRoot),\n    /// Assign a single subject to a shard (typed counterpart of\n    /// `GalAssignShard`).\n    #[cfg(feature = \"tower\")]\n    GalAssignShardTyped(crate::gal::ShardAssignment),\n    /// Record a revocation. Cascade kinds (`CascadeRoot`, `CascadeOrg`)\n    /// require `parent_root_did` to be set so cascade chains are\n    /// reconstructible from on-chain state.\n    #[cfg(feature = \"tower\")]\n    GalRecordRevocation(crate::gal::RevocationRecord),\n    /// Apply a shard-topology change.\n    #[cfg(feature = \"tower\")]\n    GalApplyTopology(crate::gal::ShardTopologyEntry),\n\n    // ---- Nova (10) ----\n    /// Claim a land parcel in the Nova metaverse.\n    #[cfg(feature = \"nova\")]\n    NovaClaimParcel(NovaClaimParcelData),\n    /// Transfer a land parcel to another owner.\n    #[cfg(feature = \"nova\")]\n    NovaTransferParcel(NovaTransferParcelData),\n    /// Deploy a building on a Nova parcel.\n    #[cfg(feature = \"nova\")]\n    NovaDeployBuilding(NovaDeployBuildingData),\n    /// Remove a building from a Nova parcel.\n    #[cfg(feature = \"nova\")]\n    NovaRemoveBuilding(NovaRemoveBuildingData),\n    /// Update avatar state (position, animation, presence).\n    #[cfg(feature = \"nova\")]\n    NovaUpdateAvatar(NovaUpdateAvatarData),\n    /// Create a new Nova world instance.\n    #[cfg(feature = \"nova\")]\n    NovaCreateWorld(NovaCreateWorldData),\n    /// Open a seller-owned parcel auction.\n    #[cfg(feature = \"nova\")]\n    NovaCreateAuction(NovaCreateAuctionData),\n    /// Place a bid on a Nova land auction.\n    #[cfg(feature = \"nova\")]\n    NovaAuctionBid(NovaAuctionBidData),\n    /// Settle a closed Nova land auction.\n    #[cfg(feature = \"nova\")]\n    NovaSettleAuction(NovaSettleAuctionData),\n    /// Set permissions on a Nova spatial zone.\n    #[cfg(feature = \"nova\")]\n    NovaSetZonePermissions(NovaSetZonePermissionsData),\n\n    // ---- Native NFT (6) ----\n    /// Create a new NFT collection (standard or identity).\n    CreateNftCollection(CreateNftCollectionData),\n    /// Mint a new NFT into an existing collection.\n    MintNft(MintNftData),\n    /// Transfer an NFT from one owner to another.\n    TransferNft(TransferNftData),\n    /// Burn (destroy) an NFT.\n    BurnNft(BurnNftData),\n    /// Update the metadata URI and/or hash of an NFT (ERC-4906).\n    SetNftMetadata(SetNftMetadataData),\n    /// Advance the verification level on an identity NFT.\n    VerifyIdentityNft(VerifyIdentityNftData),\n\n    // ---- Username (5) ----\n    /// Register an `@username` and bind it to a DID for `years` years.\n    RegisterUsername(RegisterUsernameData),\n    /// Transfer ownership of a username to a new DID.\n    TransferUsername(TransferUsernameData),\n    /// Release a username (current owner gives it up; or anyone after expiry).\n    ReleaseUsername(ReleaseUsernameData),\n    /// Set or clear the off-chain metadata content hash for a username.\n    SetUsernameMetadata(SetUsernameMetadataData),\n    /// Designate the primary `@username` for reverse lookups on a DID.\n    SetReverseUsername(SetReverseUsernameData),\n    /// Submit a bid against an open premium-name auction.\n    SubmitUsernameAuctionBid(UsernameAuctionBidData),\n    /// Finalize a premium-name auction whose anti-snipe window has elapsed.\n    FinalizeUsernameAuction(UsernameAuctionFinalizeData),\n    /// File a UDRP-equivalent dispute against a registered username.\n    RaiseUsernameDispute(RaiseUsernameDisputeData),\n    /// Resolve a previously-filed dispute (carries multisig signatures over\n    /// the resolution payload).\n    ResolveUsernameDispute(ResolveUsernameDisputeData),\n\n    // ---- Sigil Mail (19) ----\n    MailCreateMailbox(MailCreateMailboxData),\n    MailAddAlias(MailAddAliasData),\n    MailRemoveAlias(MailRemoveAliasData),\n    MailSetPrimaryAlias(MailSetPrimaryAliasData),\n    MailLockMailbox(MailLockMailboxData),\n    MailUnlockMailbox(MailUnlockMailboxData),\n    MailDeactivateMailbox(MailDeactivateMailboxData),\n    MailRecoverMailbox(MailRecoverMailboxData),\n    MailUpdateReceivePolicy(MailUpdateReceivePolicyData),\n    MailRevokeReceivePolicy(MailRevokeReceivePolicyData),\n    MailPublishKey(MailPublishKeyData),\n    MailRotateKey(MailRotateKeyData),\n    MailRevokeKey(MailRevokeKeyData),\n    MailExpireKeys(MailExpireKeysData),\n    MailPublishDeliveryCommitment(MailPublishDeliveryCommitmentData),\n    MailReportAbuse(MailReportAbuseData),\n    MailResolveAbuse(MailResolveAbuseData),\n    MailGrantPermission(MailGrantPermissionData),\n    MailRevokePermission(MailRevokePermissionData),\n\n    // ---- Sigil Name System (10) ----\n    RegisterName(RegisterNameData),\n    RenewName(RenewNameData),\n    SetNameRecords(SetNameRecordsData),\n    DeleteNameRecords(DeleteNameRecordsData),\n    DelegateSubdomain(DelegateSubdomainData),\n    RevokeDelegation(RevokeDelegationData),\n    SetPrimaryName(SetPrimaryNameData),\n    CommitNameRegistration(CommitNameRegistrationData),\n    CommitSealedNameBid(CommitSealedNameBidData),\n    RevealSealedNameBid(RevealSealedNameBidData),\n    FinalizeSealedNameAuction(FinalizeSealedNameAuctionData),\n\n    // ---- Vigils (10) ----\n    /// Register a Vigil subscription for a contract callback.\n    RegisterVigilSubscription(crate::vigil::RegisterVigilSubscriptionData),\n    /// Update mutable controls on an existing Vigil subscription.\n    UpdateVigilSubscription(crate::vigil::UpdateVigilSubscriptionData),\n    /// Cancel a Vigil subscription.\n    CancelVigilSubscription(crate::vigil::CancelVigilSubscriptionData),\n    /// Deposit autonomous-callback gas into a subscription gas tank.\n    DepositVigilGas(crate::vigil::DepositVigilGasData),\n    /// Withdraw unused autonomous-callback gas from a subscription gas tank.\n    WithdrawVigilGas(crate::vigil::WithdrawVigilGasData),\n    /// Deliver a verified event for deterministic callback scheduling.\n    EventDelivery(crate::vigil::EventDeliveryData),\n    /// Slash an ingestor for proven false delivery.\n    SlashIngestor(crate::vigil::SlashIngestorData),\n    /// Register an OAS-rooted ingestor.\n    RegisterIngestor(crate::vigil::RegisterIngestorData),\n    /// Update ingestor bond or supported source set.\n    UpdateIngestorStake(crate::vigil::UpdateIngestorStakeData),\n    /// Deregister an ingestor.\n    DeregisterIngestor(crate::vigil::DeregisterIngestorData),\n\n    // ---- Storage Pinning Marketplace (8) ----\n    /// Register a Weave/Weft storage provider with capacity, pricing, and bond.\n    StorageProviderRegister(StorageProviderRegisterData),\n    /// Update provider capacity, regions, pricing, or signing key.\n    StorageProviderUpdate(StorageProviderUpdateData),\n    /// Begin provider exit from the storage marketplace.\n    StorageProviderExit(StorageProviderExitData),\n    /// Request replicated pinning for an artifact/Weft root commitment.\n    StoragePinRequest(StoragePinRequestData),\n    /// Accept a pin request as a provider.\n    StoragePinAccept(StoragePinAcceptData),\n    /// Settle a provider's signed pin receipt after deterministic proof checks.\n    StorageReceiptSettle(StorageReceiptSettleData),\n    /// Open a deterministic proof-of-possession challenge against a pin contract.\n    StorageChallenge(StorageChallengeData),\n    /// Resolve a storage challenge by proving or failing sampled Weft chunks.\n    StorageChallengeResolve(StorageChallengeResolveData),\n\n    // ---- DEX (5) ----\n    /// Create a deterministic constant-product pool with initial liquidity.\n    DexCreatePool(DexCreatePoolData),\n    /// Add proportional liquidity to an existing pool.\n    DexAddLiquidity(DexAddLiquidityData),\n    /// Remove liquidity by burning LP shares.\n    DexRemoveLiquidity(DexRemoveLiquidityData),\n    /// Swap an exact input amount with minimum-output protection.\n    DexSwapExactIn(DexSwapExactInData),\n    /// Swap for an exact output amount with maximum-input protection.\n    DexSwapExactOut(DexSwapExactOutData),\n\n    // ---- Evidence anchoring (1) ----\n    /// Anchor a content digest (e.g. a ONE harness archive BLAKE3 digest)\n    /// on-chain with bounded metadata. Hash-commitment anchoring \u2014 not ZK.\n    EvidenceAnchor(EvidenceAnchorData),\n}",
              "docs": "All 34 transaction types.",
              "attributes": "#[allow(clippy::large_enum_variant)]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", content = \"data\")]",
              "line": 846
            },
            {
              "name": "transaction::TransactionType::category",
              "kind": "function_item",
              "signature": "pub fn category(&self) -> TransactionCategory;",
              "docs": "Returns the category of this transaction type.",
              "attributes": "",
              "line": 1369
            },
            {
              "name": "transaction::TransactionType::declared_access_set",
              "kind": "function_item",
              "signature": "pub fn declared_access_set(&self, sender_did: &str) -> TransactionAccessSet;",
              "docs": "Deterministic read/write declaration used by optimistic execution and\nlocal fee markets. Every `TransactionType` arm is explicit; adding a\nvariant without a precise declaration breaks compilation.",
              "attributes": "",
              "line": 1619
            },
            {
              "name": "transaction::TransactionType::name",
              "kind": "function_item",
              "signature": "pub fn name(&self) -> &'static str;",
              "docs": "Returns a human-readable name.",
              "attributes": "",
              "line": 2958
            },
            {
              "name": "transaction::IdentityRegisterData",
              "kind": "struct_item",
              "signature": "pub struct IdentityRegisterData {\n/// The OAS DID to register.\n\npub did: String,\n/// The full OAS document (serialized JSON).\n\npub document: serde_json::Value,\n/// Initial conformance level.\n\npub conformance_level: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3240
            },
            {
              "name": "transaction::IdentityUpdateData",
              "kind": "struct_item",
              "signature": "pub struct IdentityUpdateData {\npub did: String,\npub document: serde_json::Value,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3250
            },
            {
              "name": "transaction::IdentityRevokeData",
              "kind": "struct_item",
              "signature": "pub struct IdentityRevokeData {\npub did: String,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3257
            },
            {
              "name": "transaction::IdentityDelegateData",
              "kind": "struct_item",
              "signature": "pub struct IdentityDelegateData {\npub did: String,\npub delegate_did: String,\npub scopes: Vec<String>,\npub expires_at: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3263
            },
            {
              "name": "transaction::IdentityRecoverData",
              "kind": "struct_item",
              "signature": "pub struct IdentityRecoverData {\npub did: String,\npub recovery_proof: serde_json::Value,\npub new_document: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3271
            },
            {
              "name": "transaction::RegisterRootData",
              "kind": "struct_item",
              "signature": "pub struct RegisterRootData {\npub root_did: String,\npub kind: RootKind,\npub public_keys: Vec<String>,\npub recovery_policy: Option<ControlPolicy>,\npub metadata_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3282
            },
            {
              "name": "transaction::RotateRootKeyData",
              "kind": "struct_item",
              "signature": "pub struct RotateRootKeyData {\npub root_did: String,\npub new_public_keys: Vec<String>,\npub effective_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3291
            },
            {
              "name": "transaction::RevokeRootData",
              "kind": "struct_item",
              "signature": "pub struct RevokeRootData {\npub root_did: String,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3298
            },
            {
              "name": "transaction::CreateRootGroupData",
              "kind": "struct_item",
              "signature": "pub struct CreateRootGroupData {\npub group_did: String,\npub kind: RootKind,\npub policy: ThresholdPolicy,\npub profit_shares: Vec<crate::authority::ProfitShare>,\npub metadata_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3304
            },
            {
              "name": "transaction::UpdateRootGroupPolicyData",
              "kind": "struct_item",
              "signature": "pub struct UpdateRootGroupPolicyData {\npub group_did: String,\npub new_policy: ThresholdPolicy,\npub reason: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3313
            },
            {
              "name": "transaction::IssueAgentData",
              "kind": "struct_item",
              "signature": "pub struct IssueAgentData {\npub agent_did: String,\npub controller_did: String,\npub agent_kind: AgentKind,\npub public_keys: Vec<String>,\npub permissions: Vec<Permission>,\npub revenue_account: Option<String>,\npub metadata_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3320
            },
            {
              "name": "transaction::RotateAgentKeyData",
              "kind": "struct_item",
              "signature": "pub struct RotateAgentKeyData {\npub agent_did: String,\npub new_public_keys: Vec<String>,\npub effective_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3331
            },
            {
              "name": "transaction::RevokeAgentData",
              "kind": "struct_item",
              "signature": "pub struct RevokeAgentData {\npub agent_did: String,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3338
            },
            {
              "name": "transaction::DelegatePermissionData",
              "kind": "struct_item",
              "signature": "pub struct DelegatePermissionData {\npub controller_did: String,\npub delegate_did: String,\npub permissions: Vec<Permission>,\npub expires_at_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3344
            },
            {
              "name": "transaction::RevokePermissionData",
              "kind": "struct_item",
              "signature": "pub struct RevokePermissionData {\npub controller_did: String,\npub delegate_did: String,\npub permissions: Vec<Permission>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3352
            },
            {
              "name": "transaction::MarsAnchorData",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorData {\npub entry_did: String,\npub item_data_hash: String,\npub publisher_did: String,\npub version: String,\npub bond_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3363
            },
            {
              "name": "transaction::WeftRootCommitment::to_mars_anchor_data",
              "kind": "function_item",
              "signature": "pub fn to_mars_anchor_data(\n        &self,\n        entry_did: impl Into<String>,\n        publisher_did: impl Into<String>,\n        version: impl Into<String>,\n        bond_id: Option<String>,\n    ) -> MarsAnchorData;",
              "docs": "Convert this Weft root into the typed MARS anchor payload shape.\n\nMARS anchor execution is release-gated in `sigil-node` today; this\nhelper is the deterministic transaction payload boundary consumers can\nuse once `MarsAnchorRegister` is made live.",
              "attributes": "",
              "line": 3377
            },
            {
              "name": "transaction::MarsAnchorRevokeData",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorRevokeData {\npub entry_did: String,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3395
            },
            {
              "name": "transaction::MarsAnchorTransferData",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorTransferData {\npub entry_did: String,\npub from_publisher_did: String,\npub to_publisher_did: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3401
            },
            {
              "name": "transaction::MarsAnchorAttestData",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorAttestData {\npub entry_did: String,\npub attestation_hash: String,\npub attester_did: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3408
            },
            {
              "name": "transaction::StakeData",
              "kind": "struct_item",
              "signature": "pub struct StakeData {\n/// Amount to stake in smallest SIGIL unit.\n\npub amount: u64,\n/// Validator mode: \"producer\" (10K min) or \"validator\" (1K min).\n\npub mode: ValidatorMode\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3419
            },
            {
              "name": "transaction::ValidatorMode",
              "kind": "enum_item",
              "signature": "pub enum ValidatorMode {\n    /// Block Producer \u2014 executes + proves. Min 10,000 MINT.\n    BlockProducer,\n    /// Block Validator \u2014 verifies proofs only. Min 1,000 MINT.\n    BlockValidator,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 3427
            },
            {
              "name": "transaction::ValidatorMode::min_stake",
              "kind": "function_item",
              "signature": "pub fn min_stake(&self) -> u64;",
              "docs": "Minimum stake for this mode.",
              "attributes": "",
              "line": 3436
            },
            {
              "name": "transaction::UnstakeData",
              "kind": "struct_item",
              "signature": "pub struct UnstakeData {\n/// Amount to unstake. Subject to 14-day unbonding period.\n\npub amount: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3445
            },
            {
              "name": "transaction::DelegateStakeData",
              "kind": "struct_item",
              "signature": "pub struct DelegateStakeData {\npub validator_did: String,\npub amount: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3451
            },
            {
              "name": "transaction::UndelegateStakeData",
              "kind": "struct_item",
              "signature": "pub struct UndelegateStakeData {\npub validator_did: String,\npub shares: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3457
            },
            {
              "name": "transaction::ClaimRewardsData",
              "kind": "struct_item",
              "signature": "pub struct ClaimRewardsData {\n/// Optional: claim from a specific epoch range.\n\npub from_epoch: Option<u64>,\npub to_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3463
            },
            {
              "name": "transaction::TransferData",
              "kind": "struct_item",
              "signature": "pub struct TransferData {\n/// Recipient's OAS DID.\n\npub recipient_did: String,\n/// Amount in micro-MINT.\n\npub amount: u64,\n/// Optional memo/reference.\n\npub memo: Option<String>\n}",
              "docs": "Basic MINT transfer between accounts.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3471
            },
            {
              "name": "transaction::DexCreatePoolData",
              "kind": "struct_item",
              "signature": "pub struct DexCreatePoolData {\npub asset_a: DexPoolAsset,\npub asset_b: DexPoolAsset,\npub amount_a_desired: u64,\npub amount_b_desired: u64,\npub fee_bps: u16,\npub min_lp_shares: u64,\npub expiration_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3485
            },
            {
              "name": "transaction::DexAddLiquidityData",
              "kind": "struct_item",
              "signature": "pub struct DexAddLiquidityData {\npub pool_id: String,\npub amount_a_desired: u64,\npub amount_b_desired: u64,\npub amount_a_min: u64,\npub amount_b_min: u64,\npub min_lp_shares: u64,\npub expiration_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3496
            },
            {
              "name": "transaction::DexRemoveLiquidityData",
              "kind": "struct_item",
              "signature": "pub struct DexRemoveLiquidityData {\npub pool_id: String,\npub lp_shares: u64,\npub amount_a_min: u64,\npub amount_b_min: u64,\npub recipient_did: String,\npub expiration_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3507
            },
            {
              "name": "transaction::DexSwapExactInData",
              "kind": "struct_item",
              "signature": "pub struct DexSwapExactInData {\npub pool_id: String,\npub asset_in: DexPoolAsset,\npub amount_in: u64,\npub min_amount_out: u64,\npub recipient_did: String,\npub expiration_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3517
            },
            {
              "name": "transaction::DexSwapExactOutData",
              "kind": "struct_item",
              "signature": "pub struct DexSwapExactOutData {\npub pool_id: String,\npub asset_out: DexPoolAsset,\npub amount_out: u64,\npub max_amount_in: u64,\npub recipient_did: String,\npub expiration_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3527
            },
            {
              "name": "transaction::CreateTreasuryData",
              "kind": "struct_item",
              "signature": "pub struct CreateTreasuryData {\npub treasury_did: String,\npub controller_did: String,\npub accepted_token_ids: Vec<String>,\npub withdrawal_policy: ControlPolicy,\npub distribution_policy: Option<DistributionPolicy>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3541
            },
            {
              "name": "transaction::DepositTreasuryData",
              "kind": "struct_item",
              "signature": "pub struct DepositTreasuryData {\npub treasury_did: String,\npub token_id: Option<String>,\npub amount: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3550
            },
            {
              "name": "transaction::WithdrawTreasuryData",
              "kind": "struct_item",
              "signature": "pub struct WithdrawTreasuryData {\npub treasury_did: String,\npub token_id: Option<String>,\npub recipient_did: String,\npub amount: u128,\npub memo: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3557
            },
            {
              "name": "transaction::SetDistributionPolicyData",
              "kind": "struct_item",
              "signature": "pub struct SetDistributionPolicyData {\npub treasury_did: String,\npub distribution_policy: DistributionPolicy\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3566
            },
            {
              "name": "transaction::DistributeRevenueData",
              "kind": "struct_item",
              "signature": "pub struct DistributeRevenueData {\npub treasury_did: String,\npub token_id: Option<String>,\npub amount: Option<u128>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3572
            },
            {
              "name": "transaction::CreateTokenClassData",
              "kind": "struct_item",
              "signature": "pub struct CreateTokenClassData {\npub token_id: String,\npub ticker: String,\npub decimals: u8,\npub issuer_did: String,\npub controller_did: String,\npub supply_policy: SupplyPolicy,\npub transfer_policy: Option<ControlPolicy>,\npub metadata_uri: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3579
            },
            {
              "name": "transaction::MintTokenData",
              "kind": "struct_item",
              "signature": "pub struct MintTokenData {\npub token_id: String,\npub recipient_did: String,\npub amount: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3591
            },
            {
              "name": "transaction::BurnTokenData",
              "kind": "struct_item",
              "signature": "pub struct BurnTokenData {\npub token_id: String,\npub owner_did: String,\npub amount: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3598
            },
            {
              "name": "transaction::TransferTokenData",
              "kind": "struct_item",
              "signature": "pub struct TransferTokenData {\npub token_id: String,\npub recipient_did: String,\npub amount: u128,\npub memo: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3605
            },
            {
              "name": "transaction::SetTokenPolicyData",
              "kind": "struct_item",
              "signature": "pub struct SetTokenPolicyData {\npub token_id: String,\npub supply_policy: Option<SupplyPolicy>,\npub transfer_policy: Option<ControlPolicy>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3613
            },
            {
              "name": "transaction::CreateNftCollectionData",
              "kind": "struct_item",
              "signature": "pub struct CreateNftCollectionData {\n/// Unique identifier for the new collection.\n\npub collection_id: String,\n/// Human-readable collection name.\n\npub name: String,\n/// Short symbol (ticker) for the collection (e.g. \"BADGE\").\n\npub symbol: String,\n/// Whether this collection holds standard or identity NFTs.\n\npub kind: crate::nft::NftKind,\n/// DID of the issuing party.\n\npub issuer_did: String,\n/// DID of the controlling party (may update policy).\n\npub controller_did: String,\n/// Governance policy for this collection.\n\npub policy: crate::nft::CollectionPolicy,\n/// Optional collection-level metadata URI.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>\n}",
              "docs": "Data for creating a new NFT collection.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3625
            },
            {
              "name": "transaction::MintNftData",
              "kind": "struct_item",
              "signature": "pub struct MintNftData {\n/// Target collection identifier.\n\npub collection_id: String,\n/// Token ID to assign (must be unique within the collection).\n\n///\n\n/// Serialized as a decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(with = \"serde_helpers::string_u128\")]\npub token_id: u128,\n/// DID of the initial token owner.\n\npub recipient_did: String,\n/// Optional per-token metadata URI.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// Optional BLAKE3 hash of the canonical metadata document.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<crate::hash::SigilHash>,\n/// Override the collection's `default_locked` setting for this token.\n\n/// `None` inherits the collection default.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub locked: Option<bool>,\n/// Override the collection's `default_burn_auth` for this token.\n\n/// `None` inherits the collection default.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub burn_auth: Option<crate::nft::BurnAuth>,\n/// Identity binding \u2014 required when minting into an identity collection.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub identity: Option<crate::nft::IdentityBinding>\n}",
              "docs": "Data for minting a new NFT into a collection.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3647
            },
            {
              "name": "transaction::TransferNftData",
              "kind": "struct_item",
              "signature": "pub struct TransferNftData {\n/// Collection containing the token.\n\npub collection_id: String,\n/// Token to transfer.\n\n///\n\n/// Serialized as a decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(with = \"serde_helpers::string_u128\")]\npub token_id: u128,\n/// DID of the current owner (sender).\n\npub from_did: String,\n/// DID of the new owner (recipient).\n\npub to_did: String\n}",
              "docs": "Data for transferring an NFT between owners.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3679
            },
            {
              "name": "transaction::BurnNftData",
              "kind": "struct_item",
              "signature": "pub struct BurnNftData {\n/// Collection containing the token.\n\npub collection_id: String,\n/// Token to burn.\n\n///\n\n/// Serialized as a decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(with = \"serde_helpers::string_u128\")]\npub token_id: u128,\n/// DID of the party authorizing the burn (must satisfy `burn_auth`).\n\npub authorized_by: String\n}",
              "docs": "Data for burning (destroying) an NFT.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3696
            },
            {
              "name": "transaction::SetNftMetadataData",
              "kind": "struct_item",
              "signature": "pub struct SetNftMetadataData {\n/// Collection containing the token.\n\npub collection_id: String,\n/// Token whose metadata is being updated.\n\n///\n\n/// Serialized as a decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(with = \"serde_helpers::string_u128\")]\npub token_id: u128,\n/// New metadata URI, or `None` to leave unchanged.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// New metadata hash, or `None` to leave unchanged.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<crate::hash::SigilHash>\n}",
              "docs": "Data for updating the metadata URI and/or hash of an NFT (ERC-4906).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3711
            },
            {
              "name": "transaction::VerifyIdentityNftData",
              "kind": "struct_item",
              "signature": "pub struct VerifyIdentityNftData {\n/// Collection containing the identity token.\n\npub collection_id: String,\n/// Token to verify.\n\n///\n\n/// Serialized as a decimal string on the JSON wire for cross-language\n\n/// safety (JavaScript's Number type cannot represent u128 exactly).\n\n#[serde(with = \"serde_helpers::string_u128\")]\npub token_id: u128,\n/// DID of the party performing verification (must be an authorized\n\n/// verifier).\n\npub verifier_did: String,\n/// New verification level to set (must be >= current level).\n\npub new_verification_level: u8,\n/// Optional human-readable note describing the verification.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub note: Option<String>\n}",
              "docs": "Data for advancing the verification level on an identity NFT.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3730
            },
            {
              "name": "transaction::ContractKind",
              "kind": "enum_item",
              "signature": "pub enum ContractKind {\n    /// Standalone agent contract (no parent org zone).\n    #[default]\n    Standalone,\n    /// Module within an organization zone.\n    OrgModule,\n    /// Service contract exposed to other contracts.\n    Service,\n    /// Governance contract (proposal/voting policy).\n    Governance,\n    /// Treasury policy contract (controls org funds).\n    TreasuryPolicy,\n    /// Compute buyer contract (purchases compute via marketplace).\n    ComputeBuyer,\n    /// Model manager contract (owns/updates a model artifact).\n    ModelManager,\n}",
              "docs": "Agent contract kind. Identifies the role a deployed contract plays in\nan Organization Zone.",
              "attributes": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 3753
            },
            {
              "name": "transaction::ContractLicenseMetadata",
              "kind": "struct_item",
              "signature": "pub struct ContractLicenseMetadata {\n/// SPDX license expression or launch-governance approved custom label.\n\npub license: String,\n/// Optional source artifact URI (IPFS, HTTPS, git tag, etc.).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub source_uri: Option<String>,\n/// Optional BLAKE3 hash of the source artifact or source bundle.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub source_hash: Option<SigilHash>,\n/// Optional audit report URI.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub audit_uri: Option<String>,\n/// Deterministic JSON metadata. Must not contain environment-derived data.\n\n#[serde(default)]\npub metadata: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3772
            },
            {
              "name": "transaction::RegisterContractCodeData",
              "kind": "struct_item",
              "signature": "pub struct RegisterContractCodeData {\n/// BLAKE3/Sigil hash of `code`.\n\npub code_hash: SigilHash,\n/// WASM bytecode bytes.\n\npub code: Vec<u8>,\n/// License/source/audit metadata persisted alongside the code hash.\n\npub license_metadata: ContractLicenseMetadata\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3790
            },
            {
              "name": "transaction::DeployContractData",
              "kind": "struct_item",
              "signature": "pub struct DeployContractData {\npub contract_did: String,\npub controller_did: String,\npub runtime: ContractRuntime,\npub code_hash: String,\npub init_args: serde_json::Value,\npub upgrade_policy: ControlPolicy,\npub revenue_account: Option<String>,\n/// Optional Organization Zone the contract is deployed into. When\n\n/// `None`, the contract is treated as standalone (its own implicit\n\n/// zone keyed by `contract_did`).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub zone_id: Option<String>,\n/// Optional initial call-policy. When `None`, the upgrade_policy\n\n/// also gates calls until `SetContractPolicy` adjusts it.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub call_policy: Option<ControlPolicy>,\n/// Set of ANVIL host functions this contract is permitted to call.\n\n/// `None` means \"deploy-time-default\", which is the conservative set\n\n/// (state_get/set/delete + log + emit_event only). Capability-bearing\n\n/// host fns (`dispatch_compute`, `record_mandate_spend`,\n\n/// `send_zone_message`) must be explicitly listed.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub allowed_host_functions: Option<Vec<String>>,\n/// Contract kind tag (used by indexer/RPC). Defaults to `Standalone`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub contract_kind: Option<ContractKind>,\n/// Opt-in flag required before a contract can be targeted by Vigils.\n\n#[serde(default)]\npub accepts_vigil_callbacks: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3800
            },
            {
              "name": "transaction::CallContractData",
              "kind": "struct_item",
              "signature": "pub struct CallContractData {\npub contract_did: String,\npub function: String,\npub args: serde_json::Value,\npub app_did: Option<String>,\npub gas_budget: u64,\n/// Optional mandate id under which the call charges spend. Required\n\n/// for calls that invoke `dispatch_compute` or `record_mandate_spend`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mandate_id: Option<String>,\n/// Declared state reads for deterministic optimistic execution.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub read_set: Vec<StateAccess>,\n/// Declared state writes for deterministic optimistic execution.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub write_set: Vec<StateAccess>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3833
            },
            {
              "name": "transaction::UpgradeContractData",
              "kind": "struct_item",
              "signature": "pub struct UpgradeContractData {\npub contract_did: String,\npub new_code_hash: String,\npub migration_args: serde_json::Value,\n/// Optional model-artifact upgrade \u2014 when present, must reference a\n\n/// settled `ComputeReceipt` whose model_commitment matches\n\n/// `new_model_commitment`. Enforced at executor.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub model_receipt_id: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub new_model_commitment: Option<SigilHash>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3852
            },
            {
              "name": "transaction::SetContractPolicyData",
              "kind": "struct_item",
              "signature": "pub struct SetContractPolicyData {\npub contract_did: String,\npub upgrade_policy: Option<ControlPolicy>,\npub call_policy: Option<ControlPolicy>,\n/// Optional update to the host-function allowlist. Only the\n\n/// controller can set this; reducing capabilities is always\n\n/// permitted, expanding requires upgrade_policy authorization.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub allowed_host_functions: Option<Vec<String>>,\n/// Optional update to the Vigils callback opt-in flag.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub accepts_vigil_callbacks: Option<bool>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3866
            },
            {
              "name": "transaction::RegisterAppAgentData",
              "kind": "struct_item",
              "signature": "pub struct RegisterAppAgentData {\npub app_did: String,\npub controller_did: String,\npub public_keys: Vec<String>,\npub requested_permissions: Vec<Permission>,\npub allowed_contracts: Vec<String>,\npub allowed_token_ids: Vec<String>,\npub revenue_account: Option<String>,\npub metadata_uri: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3881
            },
            {
              "name": "transaction::GrantAppPermissionData",
              "kind": "struct_item",
              "signature": "pub struct GrantAppPermissionData {\npub app_did: String,\npub permissions: Vec<Permission>,\npub expires_at_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3893
            },
            {
              "name": "transaction::RevokeAppPermissionData",
              "kind": "struct_item",
              "signature": "pub struct RevokeAppPermissionData {\npub app_did: String,\npub permissions: Vec<Permission>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3900
            },
            {
              "name": "transaction::UpgradeAppAgentData",
              "kind": "struct_item",
              "signature": "pub struct UpgradeAppAgentData {\npub app_did: String,\npub metadata_uri: Option<String>,\npub requested_permissions: Option<Vec<Permission>>,\npub allowed_contracts: Option<Vec<String>>,\npub allowed_token_ids: Option<Vec<String>>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3906
            },
            {
              "name": "transaction::ProposalType",
              "kind": "enum_item",
              "signature": "pub enum ProposalType {\n    ParameterChange,\n    WasiModuleUpgrade,\n    TreasurySpend,\n    ValidatorSlashing,\n    EmergencyAction,\n}",
              "docs": "Proposal types per spec.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 3920
            },
            {
              "name": "transaction::ProposalType::threshold_pct",
              "kind": "function_item",
              "signature": "pub fn threshold_pct(&self) -> u8;",
              "docs": "Approval threshold for this proposal type.",
              "attributes": "",
              "line": 3930
            },
            {
              "name": "transaction::GovernanceProposeData",
              "kind": "struct_item",
              "signature": "pub struct GovernanceProposeData {\npub proposal_type: ProposalType,\npub title: String,\npub description: String,\npub payload: serde_json::Value,\npub deposit: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3942
            },
            {
              "name": "transaction::GovernanceVoteData",
              "kind": "struct_item",
              "signature": "pub struct GovernanceVoteData {\npub proposal_id: String,\npub vote: VoteChoice\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3951
            },
            {
              "name": "transaction::VoteChoice",
              "kind": "enum_item",
              "signature": "pub enum VoteChoice {\n    Yes,\n    No,\n    Abstain,\n    NoWithVeto,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 3957
            },
            {
              "name": "transaction::GovernanceExecuteData",
              "kind": "struct_item",
              "signature": "pub struct GovernanceExecuteData {\npub proposal_id: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3965
            },
            {
              "name": "transaction::GovernanceCancelData",
              "kind": "struct_item",
              "signature": "pub struct GovernanceCancelData {\npub proposal_id: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3970
            },
            {
              "name": "transaction::GovernanceEmergencyData",
              "kind": "struct_item",
              "signature": "pub struct GovernanceEmergencyData {\npub action: String,\npub justification: String,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"governance\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3976
            },
            {
              "name": "transaction::DeployZoneData",
              "kind": "struct_item",
              "signature": "pub struct DeployZoneData {\n/// Organization DID that owns the zone.\n\npub org_did: String,\n/// WASM module hash to deploy.\n\npub module_hash: String,\n/// Zone configuration.\n\npub config: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 3987
            },
            {
              "name": "transaction::InvokeZoneData",
              "kind": "struct_item",
              "signature": "pub struct InvokeZoneData {\npub zone_id: String,\npub function: String,\npub args: serde_json::Value,\npub gas_budget: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 3997
            },
            {
              "name": "transaction::CommitStateData",
              "kind": "struct_item",
              "signature": "pub struct CommitStateData {\npub zone_id: String,\npub state_root: String,\npub state_changes: Vec<StateChange>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4005
            },
            {
              "name": "transaction::StateChange",
              "kind": "struct_item",
              "signature": "pub struct StateChange {\npub key: Vec<u8>,\npub value: Option<Vec<u8>>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4012
            },
            {
              "name": "transaction::CrossZoneMessageData",
              "kind": "struct_item",
              "signature": "pub struct CrossZoneMessageData {\npub source_zone: String,\npub target_zone: String,\npub message: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4018
            },
            {
              "name": "transaction::UpgradeModuleData",
              "kind": "struct_item",
              "signature": "pub struct UpgradeModuleData {\npub zone_id: String,\npub new_module_hash: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4025
            },
            {
              "name": "transaction::RegisterWasiValidatorData",
              "kind": "struct_item",
              "signature": "pub struct RegisterWasiValidatorData {\n/// Validator name (e.g. \"oas-verify\", \"attestation-verify\").\n\npub name: String,\n/// WASM module hash.\n\npub module_hash: String,\n/// Which transaction categories this validator handles.\n\npub categories: Vec<TransactionCategory>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4031
            },
            {
              "name": "transaction::RemoveWasiValidatorData",
              "kind": "struct_item",
              "signature": "pub struct RemoveWasiValidatorData {\npub name: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4041
            },
            {
              "name": "transaction::ComputeProviderRegisterData",
              "kind": "struct_item",
              "signature": "pub struct ComputeProviderRegisterData {\n/// Provider's OAS DID.\n\npub provider_did: String,\n/// Stake amount. Tiers: Consumer 500, Professional 2K, Enterprise 5K, Cluster 10K.\n\npub stake_amount: u64,\n/// Hardware attestation VC.\n\npub hardware_attestation: serde_json::Value,\n/// Supported model types.\n\npub supported_models: Vec<String>,\n/// Pricing (tokens_in, tokens_out per token).\n\npub pricing: ComputePricing,\n/// Optional human-root DID (HMR) anchoring this provider's lineage.\n\n/// Used for T2 redundant verification's distinct-root requirement.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub human_root_did: Option<String>,\n/// Optional ARISE / dispatch endpoint URL (gRPC or HTTPS).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub endpoint_url: Option<String>,\n/// Verification tiers this provider declares support for (T1/T2/T3).\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub verification_tiers: Vec<ComputeVerificationTier>,\n/// Free-form capability flags / hardware metadata (model families, GPU type, \u2026).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub capabilities: Option<serde_json::Value>,\n/// Optional Ed25519 public key the provider uses to sign receipts.\n\n/// Required for settlement; providers without a registered key cannot\n\n/// settle receipts.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub provider_pubkey: Option<Vec<u8>>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4051
            },
            {
              "name": "transaction::ComputePricing",
              "kind": "struct_item",
              "signature": "pub struct ComputePricing {\npub price_per_input_token: f64,\npub price_per_output_token: f64,\npub currency: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4084
            },
            {
              "name": "transaction::ComputeProviderUpdateData",
              "kind": "struct_item",
              "signature": "pub struct ComputeProviderUpdateData {\npub provider_did: String,\npub pricing: Option<ComputePricing>,\npub supported_models: Option<Vec<String>>,\npub hardware_attestation: Option<serde_json::Value>,\n/// Replace the dispatch endpoint URL.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub endpoint_url: Option<String>,\n/// Replace declared verification tiers.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub verification_tiers: Option<Vec<ComputeVerificationTier>>,\n/// Replace capability metadata.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub capabilities: Option<serde_json::Value>,\n/// Rotate the provider's signing pubkey.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub provider_pubkey: Option<Vec<u8>>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4092
            },
            {
              "name": "transaction::ComputeProviderRelayerData",
              "kind": "struct_item",
              "signature": "pub struct ComputeProviderRelayerData {\npub provider_did: String,\npub relayer_did: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4113
            },
            {
              "name": "transaction::ComputeProviderExitData",
              "kind": "struct_item",
              "signature": "pub struct ComputeProviderExitData {\npub provider_did: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4120
            },
            {
              "name": "transaction::ComputeEscrowFundData",
              "kind": "struct_item",
              "signature": "pub struct ComputeEscrowFundData {\n/// Organization / agent / consumer DID owning the escrow.\n\npub org_did: String,\n/// Amount to fund (micro-MINT).\n\npub amount: u64,\n/// Optional mandate this escrow operates under (DAO / treasury policy).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mandate_id: Option<String>,\n/// Optional budget cap (micro-MINT); enforced per-mandate or per-agent.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub budget_limit: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4126
            },
            {
              "name": "transaction::ComputeEscrowWithdrawData",
              "kind": "struct_item",
              "signature": "pub struct ComputeEscrowWithdrawData {\npub org_did: String,\npub amount: u64,\n/// Optional mandate scope.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mandate_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4141
            },
            {
              "name": "transaction::ComputeReceiptSettleData",
              "kind": "struct_item",
              "signature": "pub struct ComputeReceiptSettleData {\n/// The compute receipt to settle.\n\npub receipt: ComputeReceipt\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4151
            },
            {
              "name": "transaction::ComputeVerificationTier",
              "kind": "enum_item",
              "signature": "pub enum ComputeVerificationTier {\n    /// Optimistic: trust the provider receipt; rely on challenge window.\n    T1Optimistic,\n    /// Lumen: provider attaches a signed locality-sensitive inference\n    /// commitment over sampled top-k hidden-state values.\n    T15Lumen,\n    /// Redundant: dispatch to `n_providers`; majority output wins.\n    T2Redundant {\n        /// Number of providers required to produce matching output.\n        n_providers: u32,\n    },\n    /// TEE: provider attaches a hardware attestation report.\n    T3Tee,\n}",
              "docs": "Verification tier requested by a consumer or declared by a provider.\n\nWire format mirrors `sigil_compute::VerificationTier` so the on-chain\ntransaction surface and the off-chain dispatch types stay aligned.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(tag = \"tier\", rename_all = \"snake_case\")]",
              "line": 4163
            },
            {
              "name": "transaction::ComputeEvidenceCommitment",
              "kind": "struct_item",
              "signature": "pub struct ComputeEvidenceCommitment {\n/// BLAKE3 hash of the input payload.\n\npub input_commitment: SigilHash,\n/// BLAKE3 hash of the output payload.\n\npub output_commitment: SigilHash,\n/// Optional commitment to runtime image / container digest.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub runtime_commitment: Option<SigilHash>,\n/// Optional commitment to executed code (script / binary digest).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub code_commitment: Option<SigilHash>,\n/// Optional commitment to the model used (weights digest / model ID hash).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub model_commitment: Option<SigilHash>,\n/// Optional commitment to the agent's tool-call trace.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tool_trace_commitment: Option<SigilHash>\n}",
              "docs": "Structurally validated commitments contained in a `ComputeReceipt`.\n\nAt minimum a receipt commits to its input and output payload. All other\nfields are optional and used to support proof-of-compute over different\nruntimes (deterministic compute \u2192 hash comparison; AI/LLM \u2192 tool-trace +\nmodel commitments; high-value compute \u2192 TEE attestation).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4186
            },
            {
              "name": "transaction::TeeAttestation",
              "kind": "struct_item",
              "signature": "pub struct TeeAttestation {\n/// Vendor identifier (\"intel-sgx-dcap\", \"amd-sev-snp\", \"intel-tdx\", \u2026).\n\npub vendor: String,\n/// Vendor-specific format version.\n\npub version: String,\n/// Hex-encoded measurement / quote payload.\n\npub measurement: String,\n/// Vendor-specific signature blob (verified by future iterations).\n\npub signature: Vec<u8>,\n/// Optional certificate chain for the attestation.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub cert_chain: Vec<Vec<u8>>,\n/// Phase 14a-2 \u2014 chain epoch when the report was harvested by the\n\n/// operator. Required by the SEV-SNP freshness check when\n\n/// `policy.sev_snp_trust_anchors.max_attestation_age_epochs` is set.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub generated_at_epoch: Option<u64>,\n/// Phase 14a-2 \u2014 opaque 64-byte nonce that must match the report's\n\n/// REPORT_DATA field. Used by SEV-SNP to bind a report to a specific\n\n/// receipt (replay defence). Hex-encoded for wire form when present.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub binding_nonce: Option<String>\n}",
              "docs": "TEE attestation report metadata. Vendor-specific cryptographic verification\nis performed by `tee_verify` in `sigil-node` when the matching feature is\nenabled; in production builds without that feature, T3 settlement is\nrejected unconditionally.\n\nPhase 14a-2 added two optional, **additive** fields used by the SEV-SNP\nproduction-hardening path:\n\n  - `generated_at_epoch`: chain epoch when the operator harvested the\n    attestation report (SEV-SNP reports do not carry a timestamp). The\n    verifier compares this against `now_epoch` and policy\n    `max_attestation_age_epochs` for freshness.\n  - `binding_nonce`: optional verifier-supplied nonce that must match\n    bytes `[0x50..0x90]` (REPORT_DATA, 64 bytes) inside a SEV-SNP\n    report. The receipt-binding check (Phase 14a-2) compares this\n    against a canonical 64-byte derivation of the receipt being\n    settled.\n\nBoth are `Option`-typed and `skip_serializing_if = Option::is_none`, so\nolder clients that do not set them remain wire-compatible.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4227
            },
            {
              "name": "transaction::LumenTopKSample",
              "kind": "struct_item",
              "signature": "pub struct LumenTopKSample {\npub token_index: u32,\npub quantized_topk: Vec<i64>\n}",
              "docs": "Quantized top-k values sampled from a model hidden-state/token window.\n\nLumen keeps this intentionally quantized and integer-only so validators can\nreplay commitment checks deterministically across hardware and OS targets.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4257
            },
            {
              "name": "transaction::LumenAttestation",
              "kind": "struct_item",
              "signature": "pub struct LumenAttestation {\npub version: u16,\npub job_id: String,\npub model_id: String,\npub prompt_hash: SigilHash,\npub output_hash: SigilHash,\npub seed: u64,\npub precision: String,\npub sample_start_token: u32,\npub token_count: u32,\npub top_k: u16,\npub samples: Vec<LumenTopKSample>,\npub polynomial_digest: SigilHash,\npub provider_pubkey: Vec<u8>,\npub provider_signature: Vec<u8>\n}",
              "docs": "Lumen inference attestation embedded in a compute receipt.\n\nThe attestation binds job, model, prompt, output, sampled hidden-state\nvalues, declared precision, and provider authorship. Validators verify the\ndigest and Ed25519 signature before settling a `T15Lumen` receipt.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4269
            },
            {
              "name": "transaction::ComputeReceipt",
              "kind": "struct_item",
              "signature": "pub struct ComputeReceipt {\npub receipt_id: String,\npub job_id: String,\n/// Optional sub-task identifier when a job is split into tasks.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub task_id: Option<String>,\npub provider_did: String,\npub consumer_did: String,\n/// Optional consumer-side agent identity (when an autonomous agent buys).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub agent_did: Option<String>,\npub model_id: String,\npub tokens_in: u64,\npub tokens_out: u64,\n/// GPU-seconds consumed (0.0 for non-GPU jobs).\n\n#[serde(default)]\npub gpu_seconds: f64,\n/// Cost in micro-MINT.\n\npub cost: u64,\npub latency_ms: u64,\n/// ISO 8601 start timestamp.\n\npub started_at: String,\n/// ISO 8601 completion timestamp.\n\npub completed_at: String,\n/// Verification tier this receipt is settled under.\n\npub verification_tier: ComputeVerificationTier,\n/// Evidence commitments (input / output / runtime / code / model / tools).\n\npub commitments: ComputeEvidenceCommitment,\n/// Optional TEE attestation (required when `verification_tier == T3Tee`).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tee_attestation: Option<TeeAttestation>,\n/// Optional Lumen attestation (required when `verification_tier == T15Lumen`).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub lumen_attestation: Option<LumenAttestation>,\n/// Optional ACT / lineage authority context (JSON envelope).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub authority_context: Option<serde_json::Value>,\n/// Optional reference into the off-chain ARISE network (e.g. arise receipt id).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub arise_receipt_ref: Option<String>,\n/// BLAKE3 hash over all receipt fields except the signature itself.\n\npub receipt_hash: SigilHash,\n/// Ed25519 signature over `receipt_hash`.\n\npub receipt_signature: Vec<u8>,\n/// Public key matching `receipt_signature`. If absent, the executor falls\n\n/// back to the registered provider's pubkey.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub signer_pubkey: Option<Vec<u8>>,\n/// Challenge window in epochs at settlement time. If `None`, the executor\n\n/// applies `ComputeParams.challenge_window_epochs`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub challenge_window_epochs: Option<u32>,\n/// Optional DAO context.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub dao_did: Option<String>,\n/// Optional mandate id.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mandate_id: Option<String>\n}",
              "docs": "On-chain compute receipt. Replaces the previous shallow form with\nproof-of-compute commitments and MACA-grade fields.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4290
            },
            {
              "name": "transaction::ComputeReceipt::compute_receipt_hash",
              "kind": "function_item",
              "signature": "pub fn compute_receipt_hash(&self) -> SigilHash;",
              "docs": "Compute the canonical BLAKE3 hash over all fields except\n`receipt_hash` and `receipt_signature`.\n\nField order is fixed and **must** match between provider and verifier.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 4356
            },
            {
              "name": "transaction::ComputeReceipt::verify_hash",
              "kind": "function_item",
              "signature": "pub fn verify_hash(&self) -> bool;",
              "docs": "Returns true when the stored hash matches a recomputed hash.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 4425
            },
            {
              "name": "transaction::ComputeChallengeData",
              "kind": "struct_item",
              "signature": "pub struct ComputeChallengeData {\npub receipt_id: String,\npub challenger_did: String,\npub evidence: serde_json::Value,\n/// Optional explicit challenger deposit override (micro-MINT).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub deposit: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4432
            },
            {
              "name": "transaction::ComputeChallengeResolveData",
              "kind": "struct_item",
              "signature": "pub struct ComputeChallengeResolveData {\npub challenge_id: String,\npub resolution: ChallengeResolution,\npub arbitration_evidence: serde_json::Value,\n/// Optional reward share overrides; when absent the genesis policy applies.\n\n/// Must satisfy `0.0 <= each <= 1.0` and sum to `1.0` (validated semantically).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub reward_shares: Option<ChallengeRewardShares>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4443
            },
            {
              "name": "transaction::ChallengeRewardShares",
              "kind": "struct_item",
              "signature": "pub struct ChallengeRewardShares {\npub challenger: f64,\npub arbitrators: f64,\npub treasury: f64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]",
              "line": 4455
            },
            {
              "name": "transaction::ChallengeResolution",
              "kind": "enum_item",
              "signature": "pub enum ChallengeResolution {\n    /// Challenge upheld \u2014 provider is slashed by `provider_slash` micro-MINT.\n    ChallengeUpheld { provider_slash: u64 },\n    /// Challenge dismissed \u2014 challenger forfeits the configured deposit.\n    ChallengeDismissed { challenger_forfeit: u64 },\n    /// Provider at fault \u2014 provider slashed and consumer refunded.\n    ProviderFault {\n        provider_slash: u64,\n        consumer_refund: u64,\n    },\n    /// Consumer at fault \u2014 challenger forfeits deposit and provider keeps payment.\n    ConsumerFault { challenger_forfeit: u64 },\n    /// Inconclusive \u2014 partial refunds allowed.\n    Inconclusive {\n        refund_consumer: u64,\n        return_challenger_deposit: bool,\n    },\n}",
              "docs": "Resolution outcome for a compute challenge. Replaces the earlier 2-variant\nenum with the resolution outcomes the design requires.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"outcome\", rename_all = \"snake_case\")]",
              "line": 4466
            },
            {
              "name": "transaction::AgentVerificationAttestation",
              "kind": "struct_item",
              "signature": "pub struct AgentVerificationAttestation {\n/// `SigilHash::digest((work_id, validator_did))`.\n\npub validation_id: SigilHash,\n/// Identifier of the work claim this attestation refers to.\n\npub work_id: SigilHash,\n/// Validator agent's DID.\n\npub validator_did: String,\n/// Validator role.\n\npub validator_role: ValidatorRole,\n/// Validator outcome.\n\npub outcome: ValidationOutcome,\n/// Optional independently produced output hash (T2 redundancy).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub output_hash: Option<SigilHash>,\n/// Free-form evidence payload.\n\n#[serde(default)]\npub evidence: serde_json::Value,\npub attested_at_epoch: u64,\n/// Ed25519 signature over the canonical encoding of the validation record.\n\npub validator_signature: Vec<u8>,\npub validator_pubkey: Vec<u8>\n}",
              "docs": "Agent-attested verification record for a `MacaWorkClaim`.\n\nA validator agent signs an attestation that is anchored on chain. Multiple\nvalidators may attest about the same work claim subject to the uniqueness\nrules in the MACA design (per `(work_id, validator_did)`; T2 also requires\ndistinct provider DIDs and distinct human roots when known).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4497
            },
            {
              "name": "transaction::ValidatorRole",
              "kind": "enum_item",
              "signature": "pub enum ValidatorRole {\n    Validator,\n    Auditor,\n    Sentinel,\n    /// Phase 12: assembles open work claims into MACA epochs and finalises\n    /// them once a quorum threshold of validator attestations is met.\n    Proposer,\n    /// Phase 12: publishes randomness used to seed proposer rotation /\n    /// validator-set sampling for an epoch.\n    Beacon,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 4523
            },
            {
              "name": "transaction::ValidationOutcome",
              "kind": "enum_item",
              "signature": "pub enum ValidationOutcome {\n    Agree,\n    Disagree { reason: String },\n    Indeterminate { reason: String },\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"outcome\", rename_all = \"snake_case\")]",
              "line": 4538
            },
            {
              "name": "transaction::StorageProofMetadata",
              "kind": "struct_item",
              "signature": "pub struct StorageProofMetadata {\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub data_root: Option<SigilHash>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub shard_root: Option<SigilHash>,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub merkle_proof: Vec<u8>,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub challenge_nonce: Vec<u8>,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub challenge_response: Vec<u8>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub storage_duration_epochs: Option<u64>,\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub retrieval_proof: Vec<u8>\n}",
              "docs": "Reserved fields for proof-of-storage. The current marketplace slice does\nnot produce these via transactions; they are present so future\n`StorageReceiptSettle` / storage challenge transactions can be added\nwithout breaking existing consumers.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]",
              "line": 4550
            },
            {
              "name": "transaction::MacaEpochState",
              "kind": "enum_item",
              "signature": "pub enum MacaEpochState {\n    Open,\n    Sealed,\n    Finalized,\n}",
              "docs": "Lifecycle state of a MACA epoch.\n\nOpen  \u2014 proposer has anchored the epoch + included work claims; validators\n        and auditors may submit attestations.\nSealed \u2014 proposer has stopped accepting new attestations (via the\n         `MacaFinalizeEpoch` tx in this slice; in future this may be a\n         time/height boundary). Quorum proofs are being aggregated.\nFinalized \u2014 quorum proofs persisted; epoch is immutable.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 4582
            },
            {
              "name": "transaction::QuorumOutcome",
              "kind": "enum_item",
              "signature": "pub enum QuorumOutcome {\n    /// `agreeing.len()` validators agreed on `output_hash`. The\n    /// `agreeing` count must be `>= quorum_threshold`.\n    Confirmed { output_hash: SigilHash },\n    /// Quorum disagreed (no single output hash reached the threshold) or\n    /// every attestation explicitly disagreed.\n    Rejected,\n    /// Threshold not reached and no clear majority. Distinguished from\n    /// Rejected so DAO/governance can choose between re-running and\n    /// abandoning.\n    Inconclusive,\n}",
              "docs": "Outcome of a MACA quorum proof \u2014 what the validator quorum agreed on\nfor a single `MacaWorkClaim`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"outcome\", rename_all = \"snake_case\")]",
              "line": 4593
            },
            {
              "name": "transaction::MacaRegisterValidatorAgentData",
              "kind": "struct_item",
              "signature": "pub struct MacaRegisterValidatorAgentData {\npub agent_did: String,\npub role: ValidatorRole,\n/// Optional human root the agent's lineage anchors to.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub human_root_did: Option<String>,\n/// Ed25519 verifying key the agent uses to sign attestations or\n\n/// epoch / beacon submissions.\n\npub agent_pubkey: Vec<u8>,\n/// Free-form capability metadata (model families, hardware, etc.).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub capabilities: Option<serde_json::Value>\n}",
              "docs": "Register an agent that participates in MACA consensus. The agent's role\ngates which transactions it can submit (`Proposer` for `MacaProposeEpoch`\n/ `MacaFinalizeEpoch`, `Beacon` for `MacaPublishBeacon`,\n`Validator`/`Auditor`/`Sentinel` for `MacaSubmitAttestation`).\n\nThe `ComputePolicy` `proposer_dids` and `beacon_dids` allowlists are the\nfinal authority gate; this registration is the on-chain claim that an\nagent intends to operate in the named role.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4616
            },
            {
              "name": "transaction::MacaPublishBeaconData",
              "kind": "struct_item",
              "signature": "pub struct MacaPublishBeaconData {\npub epoch_id: u64,\npub beacon_did: String,\n/// 32-byte randomness output (e.g. VRF, hash of source block).\n\npub beacon_value: SigilHash,\n/// Ed25519 signature over `(epoch_id || beacon_value)`.\n\npub beacon_signature: Vec<u8>\n}",
              "docs": "A beacon agent publishes a randomness value for a specific MACA epoch.\nThe value seeds proposer rotation and validator-set sampling. Beacon\npublication must be deterministic given the epoch; replays are\nidempotent on the `(epoch_id, beacon_did)` pair.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4636
            },
            {
              "name": "transaction::MacaProposeEpochData",
              "kind": "struct_item",
              "signature": "pub struct MacaProposeEpochData {\npub epoch_id: u64,\npub proposer_did: String,\n/// Work claims (by `work_id`) included in this epoch. Must be unique\n\n/// and non-empty. The executor verifies each `work_id` references an\n\n/// existing settled receipt.\n\npub included_work_ids: Vec<SigilHash>,\n/// Block-height range the epoch covers (informational; replay-safe\n\n/// hashing folds these into the canonical epoch hash).\n\npub start_block_height: u64,\npub end_block_height: u64,\n/// Optional reference to the beacon value the proposer is committing\n\n/// against. If unset, the executor reads the latest beacon for the\n\n/// epoch (or fails if none exists).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub beacon_value: Option<SigilHash>,\n/// Ed25519 signature over the canonical epoch hash.\n\npub proposer_signature: Vec<u8>\n}",
              "docs": "A proposer rolls open `MacaWorkClaim`s into a new epoch.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4648
            },
            {
              "name": "transaction::MacaSubmitAttestationData",
              "kind": "struct_item",
              "signature": "pub struct MacaSubmitAttestationData {\npub epoch_id: u64,\npub attestation: AgentVerificationAttestation\n}",
              "docs": "A validator/auditor submits an attestation against a `MacaWorkClaim`\nincluded in an open epoch. The attestation carries the same shape as\nthe off-chain `AgentVerificationAttestation` so existing tooling can be\nreused, plus an `epoch_id` so the executor can dedupe and aggregate\nper-epoch.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4675
            },
            {
              "name": "transaction::MacaFinalizeEpochData",
              "kind": "struct_item",
              "signature": "pub struct MacaFinalizeEpochData {\npub epoch_id: u64,\npub finalizer_did: String,\n/// Optional override of the policy quorum threshold for this epoch.\n\n/// Only honoured when the override is `>= policy.validator_quorum_threshold`\n\n/// (cannot weaken the policy).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub quorum_threshold_override: Option<u32>\n}",
              "docs": "Finalize an open MACA epoch: aggregate per-work attestations into\n`MacaQuorumProof` records and seal the epoch.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4684
            },
            {
              "name": "transaction::TowerRegisterValidatorData",
              "kind": "struct_item",
              "signature": "pub struct TowerRegisterValidatorData {\n/// Validator's OAS DID.\n\npub validator_did: String,\n/// Validator mode (BlockProducer or BlockValidator).\n\npub mode: ValidatorMode,\n/// Initial stake amount.\n\npub stake_amount: u64,\n/// Geographic region code (ISO 3166-1 alpha-2).\n\npub geographic_region: String,\n/// Human root DID that this validator is lineage-derived from.\n\npub human_root_did: Option<String>,\n/// Ed25519 public key for Tower consensus signing.\n\npub consensus_public_key: Vec<u8>\n}",
              "docs": "Register a new validator on the Tower coordination chain.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4697
            },
            {
              "name": "transaction::TowerUpdateValidatorData",
              "kind": "struct_item",
              "signature": "pub struct TowerUpdateValidatorData {\npub validator_did: String,\npub geographic_region: Option<String>,\npub consensus_public_key: Option<Vec<u8>>\n}",
              "docs": "Update Tower validator metadata (region, key rotation, etc.).",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4715
            },
            {
              "name": "transaction::TowerExitValidatorData",
              "kind": "struct_item",
              "signature": "pub struct TowerExitValidatorData {\npub validator_did: String\n}",
              "docs": "Exit as a Tower validator (begins unbonding/cooldown).",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4724
            },
            {
              "name": "transaction::TowerSubmitEvidenceData",
              "kind": "struct_item",
              "signature": "pub struct TowerSubmitEvidenceData {\n/// The type of evidence (e.g. \"double_sign\", \"downtime\", \"invalid_block\").\n\npub evidence_type: String,\n/// The accused validator's DID.\n\npub accused_validator_did: String,\n/// Serialized evidence payload (varies by type).\n\npub evidence: serde_json::Value,\n/// Slot at which the alleged offense occurred.\n\npub offense_slot: u64,\n/// Validator witness signatures over the canonical evidence hash.\n\n#[serde(default)]\npub witness_signatures: Vec<(String, Vec<u8>)>\n}",
              "docs": "Submit slashing evidence to the Tower Committee for adjudication.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4731
            },
            {
              "name": "transaction::TowerFinalityVoteData",
              "kind": "struct_item",
              "signature": "pub struct TowerFinalityVoteData {\n/// Source epoch (previously justified).\n\npub source_epoch: u64,\n/// Target epoch (being voted to justify).\n\npub target_epoch: u64,\n/// Block hash at the target epoch boundary.\n\npub target_block_hash: String,\n/// Ed25519 signature over (source_epoch || target_epoch || target_block_hash).\n\npub signature: Vec<u8>\n}",
              "docs": "Cast a Casper FFG finality vote.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4748
            },
            {
              "name": "transaction::TowerDelegateStakeData",
              "kind": "struct_item",
              "signature": "pub struct TowerDelegateStakeData {\npub validator_did: String,\npub amount: u64\n}",
              "docs": "Delegate stake to a Tower validator.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4762
            },
            {
              "name": "transaction::TowerClaimRewardsData",
              "kind": "struct_item",
              "signature": "pub struct TowerClaimRewardsData {\npub from_epoch: Option<u64>,\npub to_epoch: Option<u64>\n}",
              "docs": "Claim Tower-specific validator rewards.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4770
            },
            {
              "name": "transaction::CzacChannelOpenData",
              "kind": "struct_item",
              "signature": "pub struct CzacChannelOpenData {\n/// Unique channel identifier.\n\npub channel_id: String,\n/// Initiator's OAS DID.\n\npub initiator_did: String,\n/// Counterparty's OAS DID.\n\npub counterparty_did: String,\n/// Channel type: \"ephemeral\", \"persistent\", \"broadcast\", \"payment\".\n\npub channel_type: String,\n/// Escrow amount for payment channels (0 for non-payment).\n\npub escrow_amount: u64,\n/// Zone routing metadata.\n\npub source_zone: String,\n/// Target zone.\n\npub target_zone: String\n}",
              "docs": "Open a CZAC cross-zone communication channel on-consensus.",
              "attributes": "#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4782
            },
            {
              "name": "transaction::CzacChannelCloseData",
              "kind": "struct_item",
              "signature": "pub struct CzacChannelCloseData {\npub channel_id: String,\n/// Final balance for the initiator (payment channels only).\n\npub initiator_balance: u64,\n/// Final balance for the counterparty (payment channels only).\n\npub counterparty_balance: u64,\n/// Cooperative close signature from both parties.\n\npub close_signature: Vec<u8>\n}",
              "docs": "Close a CZAC channel cooperatively.",
              "attributes": "#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4802
            },
            {
              "name": "transaction::CzacChannelSettleData",
              "kind": "struct_item",
              "signature": "pub struct CzacChannelSettleData {\npub channel_id: String,\n/// Sequence number of the latest balance proof.\n\npub sequence: u64,\n/// Final settlement amounts.\n\npub initiator_gets: u64,\npub counterparty_gets: u64\n}",
              "docs": "Settle a closed CZAC channel on-consensus.",
              "attributes": "#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4815
            },
            {
              "name": "transaction::CzacPaymentChannelDisputeData",
              "kind": "struct_item",
              "signature": "pub struct CzacPaymentChannelDisputeData {\npub channel_id: String,\n/// The disputer's DID.\n\npub disputer_did: String,\n/// The sequence number of the newer balance proof.\n\npub proof_sequence: u64,\n/// Balance proof: initiator balance.\n\npub initiator_balance: u64,\n/// Balance proof: counterparty balance.\n\npub counterparty_balance: u64,\n/// Signatures from both parties on this balance proof.\n\npub proof_signatures: Vec<Vec<u8>>\n}",
              "docs": "Dispute a CZAC payment channel by submitting a newer balance proof.",
              "attributes": "#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4827
            },
            {
              "name": "transaction::GalAnchorEntryData",
              "kind": "struct_item",
              "signature": "pub struct GalAnchorEntryData {\n/// The GAL entry type (e.g. \"hmr_anchor\", \"mhr_anchor\", \"org_lineage_root\").\n\npub entry_type: String,\n/// The DID being anchored.\n\npub subject_did: String,\n/// Content hash of the full entry data.\n\npub content_hash: String,\n/// Shard assignment for this entry.\n\npub shard_id: Option<String>\n}",
              "docs": "Anchor a new entry in the Global Anchor Layer (MARS-S sharding).",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4848
            },
            {
              "name": "transaction::GalUpdateEntryData",
              "kind": "struct_item",
              "signature": "pub struct GalUpdateEntryData {\npub subject_did: String,\npub new_content_hash: String,\npub sequence: u64\n}",
              "docs": "Update an existing GAL entry.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4862
            },
            {
              "name": "transaction::GalRevokeEntryData",
              "kind": "struct_item",
              "signature": "pub struct GalRevokeEntryData {\npub subject_did: String,\npub reason: String\n}",
              "docs": "Revoke a GAL entry (marks as revoked in the Global Anchor Layer).",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4871
            },
            {
              "name": "transaction::GalAssignShardData",
              "kind": "struct_item",
              "signature": "pub struct GalAssignShardData {\npub entry_did: String,\npub shard_id: String,\npub affinity_type: String\n}",
              "docs": "Assign an entry to a specific shard in the MARS-S topology.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4879
            },
            {
              "name": "transaction::GalUpdateTopologyData",
              "kind": "struct_item",
              "signature": "pub struct GalUpdateTopologyData {\npub shard_id: String,\n/// Operation: \"add\", \"remove\", \"split\", \"merge\", \"migrate\".\n\npub operation: String,\n/// Topology change payload (varies by operation).\n\npub payload: serde_json::Value\n}",
              "docs": "Update the shard topology map on-consensus.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4888
            },
            {
              "name": "transaction::NovaClaimParcelData",
              "kind": "struct_item",
              "signature": "pub struct NovaClaimParcelData {\n/// World ID.\n\npub world_id: String,\n/// Parcel coordinates (region_x, region_z, local_x, local_z).\n\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16,\n/// Parcel type: \"residential\", \"commercial\", \"public\".\n\npub parcel_type: String\n}",
              "docs": "Claim a land parcel in the Nova metaverse.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4903
            },
            {
              "name": "transaction::NovaTransferParcelData",
              "kind": "struct_item",
              "signature": "pub struct NovaTransferParcelData {\npub world_id: String,\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16,\n/// Recipient DID.\n\npub to_did: String\n}",
              "docs": "Transfer a Nova land parcel to a new owner.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4918
            },
            {
              "name": "transaction::NovaDeployBuildingData",
              "kind": "struct_item",
              "signature": "pub struct NovaDeployBuildingData {\n/// Unique building ID.\n\npub building_id: String,\n/// MARS DID of the 3D asset (GLTF model bundle).\n\npub asset_did: String,\n/// Parcel on which to deploy.\n\npub world_id: String,\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16,\n/// Polygon count (for fee calculation).\n\npub polycount: u32\n}",
              "docs": "Deploy a building on a Nova parcel.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4931
            },
            {
              "name": "transaction::NovaRemoveBuildingData",
              "kind": "struct_item",
              "signature": "pub struct NovaRemoveBuildingData {\npub building_id: String\n}",
              "docs": "Remove a building from a Nova parcel.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4949
            },
            {
              "name": "transaction::NovaUpdateAvatarData",
              "kind": "struct_item",
              "signature": "pub struct NovaUpdateAvatarData {\npub world_id: String,\n/// Position as (x, y, z).\n\npub position: [f64; 3],\n/// Rotation as (yaw, pitch, roll) in radians.\n\npub rotation: [f32; 3],\n/// Animation state: \"idle\", \"walking\", \"running\", \"sitting\", etc.\n\npub animation_state: String,\n/// Presence: \"online\", \"away\", \"busy\", \"offline\".\n\npub presence: String\n}",
              "docs": "Update avatar state in the Nova world.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4956
            },
            {
              "name": "transaction::NovaCreateWorldData",
              "kind": "struct_item",
              "signature": "pub struct NovaCreateWorldData {\npub name: String,\n/// World configuration as JSON.\n\npub config: serde_json::Value\n}",
              "docs": "Create a new Nova world instance.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 4971
            },
            {
              "name": "transaction::NovaCreateAuctionData",
              "kind": "struct_item",
              "signature": "pub struct NovaCreateAuctionData {\npub world_id: String,\npub region_x: i32,\npub region_z: i32,\npub local_x: u16,\npub local_z: u16,\npub reserve_amount: u64,\npub closes_at_height: u64\n}",
              "docs": "Open a seller-owned Nova land auction.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4980
            },
            {
              "name": "transaction::NovaAuctionBidData",
              "kind": "struct_item",
              "signature": "pub struct NovaAuctionBidData {\n/// Auction ID.\n\npub auction_id: String,\n/// Bid amount in SIGIL.\n\npub amount: u64\n}",
              "docs": "Place a bid on a Nova land auction.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 4993
            },
            {
              "name": "transaction::NovaSettleAuctionData",
              "kind": "struct_item",
              "signature": "pub struct NovaSettleAuctionData {\npub auction_id: String\n}",
              "docs": "Settle a closed Nova land auction.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5003
            },
            {
              "name": "transaction::NovaSetZonePermissionsData",
              "kind": "struct_item",
              "signature": "pub struct NovaSetZonePermissionsData {\npub zone_id: String,\n/// Access level for entry: \"public\", \"members\", \"owner\", \"deny\".\n\npub enter: String,\n/// Access level for interaction.\n\npub interact: String,\n/// Access level for building.\n\npub build: String\n}",
              "docs": "Set permissions on a Nova spatial zone.",
              "attributes": "#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5010
            },
            {
              "name": "transaction::RegisterDaoData",
              "kind": "struct_item",
              "signature": "pub struct RegisterDaoData {\npub dao_did: String,\npub controller_policy: ControlPolicy,\npub governance_policy: GovernancePolicy,\npub treasuries: Vec<TreasuryRef>,\npub default_token_id: Option<String>,\npub hiring_policy: HiringPolicy,\npub metadata_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5025
            },
            {
              "name": "transaction::UpdateDaoPolicyData",
              "kind": "struct_item",
              "signature": "pub struct UpdateDaoPolicyData {\npub dao_did: String,\npub new_controller_policy: Option<ControlPolicy>,\npub new_governance_policy: Option<GovernancePolicy>,\npub new_hiring_policy: Option<HiringPolicy>,\npub reason: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5036
            },
            {
              "name": "transaction::IssueMandateData",
              "kind": "struct_item",
              "signature": "pub struct IssueMandateData {\npub mandate_id: String,\npub issuer_did: String,\npub authorized_actor_did: String,\npub scope: MandateScope,\npub budget: MandateBudget,\npub token_id: String,\npub spend_limits: SpendLimits,\npub allowed_counterparties: AllowedCounterparties,\npub milestone_policy: MilestonePolicy,\npub approval_policy: ApprovalPolicy,\npub dispute_policy: DisputePolicy,\npub revocation_policy: RevocationPolicy,\npub reputation_impact: ReputationImpactPolicy,\npub revenue_share: Option<DistributionPolicy>,\npub delegation_policy: DelegationPolicy,\npub expires_at_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5049
            },
            {
              "name": "transaction::UpdateMandateData",
              "kind": "struct_item",
              "signature": "pub struct UpdateMandateData {\npub mandate_id: String,\npub new_budget_total: Option<u128>,\npub new_scope: Option<MandateScope>,\npub new_spend_limits: Option<SpendLimits>,\npub new_expires_at_epoch: Option<u64>,\npub new_allowed_counterparties: Option<AllowedCounterparties>,\npub reason: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5069
            },
            {
              "name": "transaction::RevokeMandateData",
              "kind": "struct_item",
              "signature": "pub struct RevokeMandateData {\npub mandate_id: String,\npub reason: String,\n/// Block height after which the revocation takes effect (None = immediate).\n\npub effective_block: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5080
            },
            {
              "name": "transaction::RecordMandateSpendData",
              "kind": "struct_item",
              "signature": "pub struct RecordMandateSpendData {\npub mandate_id: String,\npub spent_amount: u128,\npub spend_nonce: u64,\npub linked_transaction_hash: String,\npub epoch: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5088
            },
            {
              "name": "transaction::PostLaborJobData",
              "kind": "struct_item",
              "signature": "pub struct PostLaborJobData {\npub job_id: String,\npub poster_did: String,\npub posting_mandate_id: Option<String>,\npub title_commitment: String,\npub description_commitment: String,\npub category: String,\npub required_skills: Vec<String>,\npub required_attestations: Vec<String>,\npub budget_token_id: String,\npub budget_amount: u128,\npub milestone_plan: MilestonePlan,\npub escrow_policy: EscrowPolicy,\npub counterparty_filter: CounterpartyFilter,\npub deadline_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5101
            },
            {
              "name": "transaction::CancelLaborJobData",
              "kind": "struct_item",
              "signature": "pub struct CancelLaborJobData {\npub job_id: String,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5119
            },
            {
              "name": "transaction::SubmitLaborBidData",
              "kind": "struct_item",
              "signature": "pub struct SubmitLaborBidData {\npub bid_id: String,\npub job_id: String,\npub bidder_did: String,\npub bidder_kind: BidderKind,\npub proposed_price: u128,\npub proposed_token_id: String,\npub estimated_duration_seconds: u64,\npub mandate_id_for_work: Option<String>,\npub capabilities_proof_commitment: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5125
            },
            {
              "name": "transaction::WithdrawLaborBidData",
              "kind": "struct_item",
              "signature": "pub struct WithdrawLaborBidData {\npub bid_id: String,\npub reason: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5138
            },
            {
              "name": "transaction::AcceptLaborBidData",
              "kind": "struct_item",
              "signature": "pub struct AcceptLaborBidData {\npub bid_id: String,\npub job_id: String,\npub accepting_mandate_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5144
            },
            {
              "name": "transaction::CreateLaborContractData",
              "kind": "struct_item",
              "signature": "pub struct CreateLaborContractData {\npub contract_id: String,\npub job_id: String,\npub bid_id: String,\npub employer_did: String,\npub worker_did: String,\npub employer_mandate_id: Option<String>,\npub worker_mandate_id: Option<String>,\npub token_id: String,\npub total_amount: u128,\npub escrow_account_did: String,\npub milestones: Vec<Milestone>,\npub milestone_policy: MilestonePolicy,\npub attestation_policy: AttestationPolicy,\npub dispute_policy: DisputePolicy,\npub reputation_impact: ReputationImpactPolicy,\npub revenue_share: Option<DistributionPolicy>,\npub royalty_recipients: Vec<RoyaltyRecipient>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5151
            },
            {
              "name": "transaction::FundLaborEscrowData",
              "kind": "struct_item",
              "signature": "pub struct FundLaborEscrowData {\npub contract_id: String,\npub funding_treasury_did: String,\npub funding_mandate_id: Option<String>,\npub amount: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5172
            },
            {
              "name": "transaction::LaborOpenOfferData",
              "kind": "struct_item",
              "signature": "pub struct LaborOpenOfferData {\npub offer_id: String,\npub sponsor_did: String,\npub posting_mandate_id: Option<String>,\npub title_commitment: String,\npub description_commitment: String,\npub category: String,\npub capability_spec: CapabilitySpec,\npub token_id: String,\npub total_funding: u128,\npub per_claim_payout_cap: u128,\npub claim_bond: u128,\npub spam_fee: u128,\npub max_claims: u32,\npub claim_window_start_block: u64,\npub claim_window_end_block: u64,\npub claim_timeout_blocks: u64,\npub verification_mode: VerificationMode,\npub escrow_account_did: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5180
            },
            {
              "name": "transaction::LaborSubmitClaimData",
              "kind": "struct_item",
              "signature": "pub struct LaborSubmitClaimData {\npub claim_id: String,\npub offer_id: String,\npub claimant_did: String,\npub deliverable_hash: String,\npub evidence_hashes: Vec<String>,\npub requested_payout: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5202
            },
            {
              "name": "transaction::LaborAttestClaimData",
              "kind": "struct_item",
              "signature": "pub struct LaborAttestClaimData {\npub attestation_id: String,\npub claim_id: String,\npub offer_id: String,\npub attester_did: String,\npub verdict: AttestationVerdict,\npub reason_commitment: Option<String>,\n/// Required when the offer verification mode is `LumenAttested`.\n\n///\n\n/// The executor verifies this against the submitted claim's\n\n/// `deliverable_hash`, the offer's Lumen registry/model id, and the\n\n/// attestation's provider signature before any payout can settle.\n\n#[cfg(feature = \"compute\")]\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub lumen_attestation: Option<LumenAttestation>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5212
            },
            {
              "name": "transaction::LaborCancelOfferData",
              "kind": "struct_item",
              "signature": "pub struct LaborCancelOfferData {\npub offer_id: String,\npub sponsor_did: String,\npub reason: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5230
            },
            {
              "name": "transaction::SubmitDeliverableData",
              "kind": "struct_item",
              "signature": "pub struct SubmitDeliverableData {\npub deliverable_id: String,\npub contract_id: String,\npub milestone_index: u32,\npub payload_hash: String,\npub submitted_by_did: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5237
            },
            {
              "name": "transaction::AttestMilestoneData",
              "kind": "struct_item",
              "signature": "pub struct AttestMilestoneData {\npub attestation_id: String,\npub contract_id: String,\npub milestone_index: u32,\npub attester_did: String,\npub attester_kind: AttesterKind,\npub verdict: AttestationVerdict,\npub reason_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5246
            },
            {
              "name": "transaction::ReleaseMilestonePaymentData",
              "kind": "struct_item",
              "signature": "pub struct ReleaseMilestonePaymentData {\npub contract_id: String,\npub milestone_index: u32,\npub releasing_mandate_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5257
            },
            {
              "name": "transaction::RaiseLaborDisputeData",
              "kind": "struct_item",
              "signature": "pub struct RaiseLaborDisputeData {\npub dispute_id: String,\npub contract_id: String,\npub raiser_did: String,\npub cause: DisputeCause,\npub evidence_hashes: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5264
            },
            {
              "name": "transaction::ResolveLaborDisputeData",
              "kind": "struct_item",
              "signature": "pub struct ResolveLaborDisputeData {\npub dispute_id: String,\npub resolver_did: String,\npub resolution: DisputeResolution,\npub reason_commitment: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5273
            },
            {
              "name": "transaction::SubmitLaborReviewData",
              "kind": "struct_item",
              "signature": "pub struct SubmitLaborReviewData {\npub review_id: String,\npub contract_id: String,\npub reviewer_did: String,\npub subject_did: String,\npub score: u8,\npub commentary_hash: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5281
            },
            {
              "name": "transaction::TrainVerifierMode",
              "kind": "enum_item",
              "signature": "pub enum TrainVerifierMode {\n    CoordinatorSigned,\n    CommitmentOnly,\n    Redundant,\n    Tee,\n    Zk,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 5296
            },
            {
              "name": "transaction::TrainRolloutPolicyData",
              "kind": "struct_item",
              "signature": "pub struct TrainRolloutPolicyData {\npub version: u32,\npub verifier_mode: TrainVerifierMode,\npub max_staleness_epochs: u64,\npub min_verifier_attestations: u32,\npub allow_commitment_only: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5305
            },
            {
              "name": "transaction::TrainOpenData",
              "kind": "struct_item",
              "signature": "pub struct TrainOpenData {\npub run_id: String,\npub coordinator_did: String,\npub reward_token_id: String,\npub reward_pool: u64,\npub model_family: String,\npub objective_commitment: ArtifactCommitment,\npub policy: TrainRolloutPolicyData,\n#[serde(default)]\npub eligible_verifier_dids: Vec<String>,\n#[serde(default)]\npub authorized_publishers: Vec<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub deadline_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5314
            },
            {
              "name": "transaction::TrainRolloutBatchMetadataData",
              "kind": "struct_item",
              "signature": "pub struct TrainRolloutBatchMetadataData {\npub environment_commitment: ArtifactCommitment,\npub policy_digest: SigilHash,\npub rollout_root: SigilHash,\npub metrics_root: SigilHash\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5331
            },
            {
              "name": "transaction::TrainRolloutBatchCommitData",
              "kind": "struct_item",
              "signature": "pub struct TrainRolloutBatchCommitData {\npub run_id: String,\npub batch_id: String,\npub policy_version: u32,\npub artifact: ArtifactCommitment,\npub sample_count: u64,\npub total_reward: u64,\npub committed_by_did: String,\npub committed_at_epoch: u64,\npub verifier_mode: TrainVerifierMode,\npub metadata: TrainRolloutBatchMetadataData\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5339
            },
            {
              "name": "transaction::TrainRewardPayoutData",
              "kind": "struct_item",
              "signature": "pub struct TrainRewardPayoutData {\npub recipient_did: String,\npub amount: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub generation: Option<u32>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub lineage_parent_did: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5353
            },
            {
              "name": "transaction::TrainRewardBatchAttestData",
              "kind": "struct_item",
              "signature": "pub struct TrainRewardBatchAttestData {\npub attestation_id: String,\npub run_id: String,\npub rollout_batch_id: String,\npub verifier_did: String,\npub policy_version: u32,\n#[serde(default)]\npub payouts: Vec<TrainRewardPayoutData>,\npub artifact: ArtifactCommitment,\npub attested_at_epoch: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5363
            },
            {
              "name": "transaction::TrainWeightsPublishData",
              "kind": "struct_item",
              "signature": "pub struct TrainWeightsPublishData {\npub run_id: String,\npub model_root: SigilHash,\npub artifact: ArtifactCommitment,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub previous_root: Option<SigilHash>,\npub publisher_did: String,\npub published_at_epoch: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub rollout_batch_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5376
            },
            {
              "name": "transaction::TrainSlashReason",
              "kind": "enum_item",
              "signature": "pub enum TrainSlashReason {\n    InvalidCommitment,\n    StaleRollout,\n    PolicyViolation,\n    Equivocation,\n    InvalidWeights,\n    FalseAttestation,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 5390
            },
            {
              "name": "transaction::TrainSlashData",
              "kind": "struct_item",
              "signature": "pub struct TrainSlashData {\npub slash_id: String,\npub run_id: String,\npub offender_did: String,\npub reporter_did: String,\npub reason: TrainSlashReason,\npub evidence: ArtifactCommitment,\npub amount: u64,\npub slashed_at_epoch: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5400
            },
            {
              "name": "transaction::TrainCloseReason",
              "kind": "enum_item",
              "signature": "pub enum TrainCloseReason {\n    Completed,\n    Expired,\n    Cancelled,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 5413
            },
            {
              "name": "transaction::TrainCloseData",
              "kind": "struct_item",
              "signature": "pub struct TrainCloseData {\npub run_id: String,\npub reason: TrainCloseReason\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 5420
            }
          ],
          "parseErrors": false
        },
        {
          "module": "username",
          "source": "sigil/node/sigil-core/src/username.rs",
          "sha256": "4eca3b9cc5d5053b105d7df8f518f077856eeffe91e6b604dddb8b726f4fab60",
          "attributes": "",
          "items": [
            {
              "name": "username::USERNAME_MAX_LEN",
              "kind": "const_item",
              "signature": "pub const USERNAME_MAX_LEN: usize;",
              "docs": "Maximum length of a username.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "username::USERNAME_MIN_LEN",
              "kind": "const_item",
              "signature": "pub const USERNAME_MIN_LEN: usize;",
              "docs": "Minimum length of a username (charset rejects shorter strings entirely).",
              "attributes": "",
              "line": 22
            },
            {
              "name": "username::RESERVED_GENESIS_USERNAMES",
              "kind": "const_item",
              "signature": "pub const RESERVED_GENESIS_USERNAMES: &[&str];",
              "docs": "Reserved short genesis handles assigned by the signed recipient manifest.\n\nThese names remain invalid for ordinary public registration; they can only\nappear in genesis/import paths that explicitly call `validate_genesis_username`.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "username::USERNAME_MAX_LEASE_YEARS",
              "kind": "const_item",
              "signature": "pub const USERNAME_MAX_LEASE_YEARS: u32;",
              "docs": "Maximum lease duration (years) at registration / renewal.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "username::DEFAULT_PRICE_3_CHAR",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PRICE_3_CHAR: u128;",
              "docs": "Default per-tier annual lease price (in MINT for mainnet, BITS for canary).\n\nGovernance can adjust the global multiplier (`price_multiplier_bps`); see\n`UsernameParams::price_multiplier_bps`.",
              "attributes": "",
              "line": 36
            },
            {
              "name": "username::DEFAULT_PRICE_4_CHAR",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PRICE_4_CHAR: u128;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "username::DEFAULT_PRICE_5_CHAR",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PRICE_5_CHAR: u128;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "username::DEFAULT_PRICE_6_PLUS_CHAR",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PRICE_6_PLUS_CHAR: u128;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "username::UsernameRecord",
              "kind": "struct_item",
              "signature": "pub struct UsernameRecord {\n/// Canonical (lowercased, ASCII-validated) username.\n\npub name: String,\n/// DID of the current owner.\n\npub owner_did: String,\n/// Block height at registration.\n\npub registered_at_height: u64,\n/// Block height at which the lease expires.\n\npub expires_at_height: u64,\n/// Optional content hash of off-chain metadata (avatar, profile).\n\npub metadata_cid: Option<SigilHash>,\n/// Set if this name is in the genesis-pinned reserved list.\n\npub is_reserved: bool,\n/// Set while a `RaiseUsernameDispute` is pending resolution.\n\npub is_disputed: bool\n}",
              "docs": "On-chain record for a registered username.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 43
            },
            {
              "name": "username::ReverseUsernameRecord",
              "kind": "struct_item",
              "signature": "pub struct ReverseUsernameRecord {\npub did: String,\npub primary: String\n}",
              "docs": "Reverse-lookup index entry: DID -> primary username.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "username::UsernameParams",
              "kind": "struct_item",
              "signature": "pub struct UsernameParams {\n/// Whether the username feature is enabled at genesis.\n\npub enabled: bool,\n/// Approximate blocks per year (used for lease term computation).\n\npub blocks_per_year: u64,\n/// Per-length-tier annual lease price in base units.\n\npub price_3_char: u128,\npub price_4_char: u128,\npub price_5_char: u128,\npub price_6_plus_char: u128,\n/// Global price multiplier in basis points (10000 = 1.0x).\n\n/// Governance-adjustable with a 90-day timelock.\n\npub price_multiplier_bps: u32,\n/// Maximum lease duration in years.\n\npub max_lease_years: u32,\n/// Reserved list (cannot be registered without governance).\n\npub reserved: Vec<String>,\n/// DID of the dispute-resolver multisig.\n\npub dispute_multisig_did: String,\n/// DID of the appellate dispute multisig.\n\npub appeal_multisig_did: String,\n/// Filing fee for raising a dispute (in base units).\n\npub dispute_filing_fee: u128,\n/// Filing fee for appealing a dispute (in base units).\n\npub dispute_appeal_fee: u128,\n/// Members of the primary dispute multisig (DID + Ed25519 pubkey).\n\n/// Empty list disables dispute resolution (fail-closed).\n\n#[serde(default)]\npub dispute_multisig_signers: Vec<DisputeSignerEntry>,\n/// Number of valid signatures required to resolve a dispute.\n\n/// `dispute_multisig_signers.len() >= dispute_multisig_threshold` MUST\n\n/// hold for genesis to be valid.\n\n#[serde(default)]\npub dispute_multisig_threshold: u32\n}",
              "docs": "Genesis-time username system parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 69
            },
            {
              "name": "username::DisputeSignerEntry",
              "kind": "struct_item",
              "signature": "pub struct DisputeSignerEntry {\npub signer_did: String,\n/// 32-byte Ed25519 public key, hex-encoded (no `0x` prefix).\n\npub public_key_hex: String\n}",
              "docs": "One member of the dispute multisig.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 107
            },
            {
              "name": "username::validate_username",
              "kind": "function_item",
              "signature": "pub fn validate_username(input: &str) -> Result<String, CoreError>;",
              "docs": "Validate a username against the v1 charset and length rules.\n\nReturns `Ok(canonicalized)` (lowercased copy) if valid, or an error.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "username::validate_genesis_username",
              "kind": "function_item",
              "signature": "pub fn validate_genesis_username(input: &str) -> Result<String, CoreError>;",
              "docs": "Validate a username for a signed genesis/import bundle.\n\nOrdinary registration still uses `validate_username` and rejects names\nshorter than `USERNAME_MIN_LEN`. This function admits only the explicit\nlaunch-reserved exceptions from `RESERVED_GENESIS_USERNAMES`.",
              "attributes": "",
              "line": 165
            },
            {
              "name": "username::compute_lease_price",
              "kind": "function_item",
              "signature": "pub fn compute_lease_price(\n    canonical_name: &str,\n    years: u32,\n    params: &UsernameParams,\n) -> Result<u128, CoreError>;",
              "docs": "Compute the lease price in base units for a given username and\nnumber of years.\n\nReturns an error if the username is invalid or the year count is\nout of range. Multiplies the per-year tier price by `years`, then by\n`price_multiplier_bps / 10000`. Saturates on overflow (the chain\nwill not silently roll over).",
              "attributes": "",
              "line": 186
            },
            {
              "name": "username::RegisterUsernameData",
              "kind": "struct_item",
              "signature": "pub struct RegisterUsernameData {\n/// Username (will be canonicalized at executor time).\n\npub name: String,\n/// DID of the new owner.\n\npub owner_did: String,\n/// Number of years to prepay (1..=`max_lease_years`).\n\npub years: u32,\n/// Optional metadata content hash to set at registration.\n\npub metadata_cid: Option<SigilHash>\n}",
              "docs": "Register a new username for `years` years.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 220
            },
            {
              "name": "username::TransferUsernameData",
              "kind": "struct_item",
              "signature": "pub struct TransferUsernameData {\npub name: String,\npub new_owner_did: String\n}",
              "docs": "Transfer ownership of a username to a new DID.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 233
            },
            {
              "name": "username::ReleaseUsernameData",
              "kind": "struct_item",
              "signature": "pub struct ReleaseUsernameData {\npub name: String\n}",
              "docs": "Release a username (current owner gives it up before lease expiry, or\nanyone after expiry for non-reserved names).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 241
            },
            {
              "name": "username::SetUsernameMetadataData",
              "kind": "struct_item",
              "signature": "pub struct SetUsernameMetadataData {\npub name: String,\npub metadata_cid: Option<SigilHash>\n}",
              "docs": "Set or clear the off-chain metadata content hash for a username.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 247
            },
            {
              "name": "username::SetReverseUsernameData",
              "kind": "struct_item",
              "signature": "pub struct SetReverseUsernameData {\npub did: String,\npub primary: String\n}",
              "docs": "Designate which of an owner's usernames is the primary reverse-lookup target.\n\nA DID may own many usernames; only one is \"primary\" for `sigil_lookupUsername(did)`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 256
            },
            {
              "name": "username::AuctionStatus",
              "kind": "enum_item",
              "signature": "pub enum AuctionStatus {\n    /// Bidding is still open. The auction will close after\n    /// `auction_anti_snipe_blocks` of silence past `closes_at_height`.\n    Open,\n    /// A winner has been determined; escrow has been settled and the\n    /// username has been registered to the winning bidder.\n    Settled,\n}",
              "docs": "Status of a `UsernameAuction`.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 274
            },
            {
              "name": "username::UsernameAuction",
              "kind": "struct_item",
              "signature": "pub struct UsernameAuction {\n/// Canonical name being auctioned (lower-cased ASCII).\n\npub name: String,\n/// Block at which bidding opened.\n\npub opened_at_height: u64,\n/// Earliest block at which the auction may finalize. Pushed forward by\n\n/// `auction_anti_snipe_blocks` whenever a new bid lands within the\n\n/// anti-snipe window.\n\npub closes_at_height: u64,\n/// Current high bid in base units (None if no bid yet).\n\npub current_bid: Option<u128>,\n/// DID of the current high bidder (None if no bid yet).\n\npub current_bidder: Option<String>,\n/// Total number of bids received. Used for the per-DID anti-collusion\n\n/// cap and for explorer display.\n\npub bid_count: u64,\n/// Status (`Open` or `Settled`).\n\npub status: AuctionStatus\n}",
              "docs": "On-chain record for a single premium-name auction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 285
            },
            {
              "name": "username::UsernameAuction::open",
              "kind": "function_item",
              "signature": "pub fn open(name: String, opened_at_height: u64, closes_at_height: u64) -> Self;",
              "docs": "Open a new auction. Caller is responsible for charset validation.",
              "attributes": "",
              "line": 307
            },
            {
              "name": "username::UsernameAuction::finalizable_at",
              "kind": "function_item",
              "signature": "pub fn finalizable_at(&self, current_height: u64) -> bool;",
              "docs": "True if the auction can be finalized at `current_height`. Auctions\nfinalize when:\n  - status is still `Open`, AND\n  - `current_height >= closes_at_height`, AND\n  - at least one bid has been recorded.",
              "attributes": "",
              "line": 324
            },
            {
              "name": "username::UsernameAuctionBidData",
              "kind": "struct_item",
              "signature": "pub struct UsernameAuctionBidData {\n/// Username being bid on (canonical lowercase).\n\npub name: String,\n/// Bidder DID.\n\npub bidder_did: String,\n/// Bid amount in base units (must be \u2265 `current_bid + min_increment`,\n\n/// or \u2265 opening price if no current bid).\n\npub bid_amount: u128\n}",
              "docs": "Submit a bid against an open auction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 333
            },
            {
              "name": "username::UsernameAuctionFinalizeData",
              "kind": "struct_item",
              "signature": "pub struct UsernameAuctionFinalizeData {\npub name: String\n}",
              "docs": "Finalize an auction whose anti-snipe window has elapsed.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 345
            },
            {
              "name": "username::DisputeStatus",
              "kind": "enum_item",
              "signature": "pub enum DisputeStatus {\n    /// A dispute has been filed; the username is locked from transfer.\n    Filed,\n    /// The multisig has resolved the dispute; outcome was applied.\n    Resolved,\n}",
              "docs": "Status of a `UsernameDispute`.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 362
            },
            {
              "name": "username::DisputeOutcome",
              "kind": "enum_item",
              "signature": "pub enum DisputeOutcome {\n    /// Transfer the username to `claimant_did` (e.g. legitimate trademark\n    /// holder). The original lease is retained; only the owner DID rotates.\n    TransferTo { claimant_did: String },\n    /// The current owner keeps the name; claimant's filing fee is forfeited\n    /// to the treasury.\n    RetainCurrent,\n    /// The username is released and goes into a 1-year cooldown before it\n    /// can be re-registered.\n    Forfeit,\n}",
              "docs": "Possible outcomes of a username dispute. Mirrors `USERNAMES.md` \u00a75.4.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 371
            },
            {
              "name": "username::UsernameDispute",
              "kind": "struct_item",
              "signature": "pub struct UsernameDispute {\n/// Unique dispute ID. Composed by the executor as\n\n/// `BLAKE3(name || claimant_did || filed_at_height)` truncated to 16\n\n/// bytes (hex-encoded). Provides a deterministic, collision-resistant\n\n/// reference for cross-tx state lookup.\n\npub dispute_id: String,\n/// Username being disputed (canonical lower-cased).\n\npub name: String,\n/// DID of the party that filed the dispute (the claimant).\n\npub claimant_did: String,\n/// DID of the username's owner at filing time.\n\npub respondent_did: String,\n/// Block height at which the dispute was filed.\n\npub filed_at_height: u64,\n/// Optional content hash of off-chain evidence (filing brief, screenshots,\n\n/// trademark certificate, etc.).\n\npub evidence_cid: Option<crate::hash::SigilHash>,\n/// Filing fee paid by the claimant, escrowed pending resolution.\n\npub filing_fee: u64,\n/// Current status (`Filed` or `Resolved`).\n\npub status: DisputeStatus,\n/// Resolution outcome (set when `status == Resolved`).\n\npub outcome: Option<DisputeOutcome>\n}",
              "docs": "On-chain record for a single open or resolved dispute.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 385
            },
            {
              "name": "username::RaiseUsernameDisputeData",
              "kind": "struct_item",
              "signature": "pub struct RaiseUsernameDisputeData {\n/// Username being disputed (canonical lower-case).\n\npub name: String,\n/// DID of the claimant (the party filing the dispute). Must equal the\n\n/// transaction sender DID.\n\npub claimant_did: String,\n/// Optional content hash of the off-chain evidence package.\n\npub evidence_cid: Option<crate::hash::SigilHash>\n}",
              "docs": "Submit a UDRP-style dispute against a registered username.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 412
            },
            {
              "name": "username::DisputeMultisigSignature",
              "kind": "struct_item",
              "signature": "pub struct DisputeMultisigSignature {\n/// DID of the signing multisig member.\n\npub signer_did: String,\n/// Ed25519 public key of the signer (32 bytes, hex).\n\npub public_key_hex: String,\n/// Ed25519 signature over the resolution payload (64 bytes, hex).\n\npub signature_hex: String\n}",
              "docs": "One signer's contribution to a multisig resolution. The signature is\nover `BLAKE3(canonical_resolve_message)` where the canonical message is\n`dispute_id || serde_json(outcome)`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 426
            },
            {
              "name": "username::ResolveUsernameDisputeData",
              "kind": "struct_item",
              "signature": "pub struct ResolveUsernameDisputeData {\npub dispute_id: String,\npub name: String,\npub outcome: DisputeOutcome,\n/// Multisig signatures over the canonical resolution payload.\n\npub signatures: Vec<DisputeMultisigSignature>\n}",
              "docs": "Resolve a previously-filed dispute. Permissionless to submit (the gas\npayer can be anyone), but the executor verifies that the included\nmultisig signatures meet the threshold and originate from genesis-pinned\nmultisig members.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 440
            },
            {
              "name": "username::dispute_resolve_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn dispute_resolve_signing_bytes(dispute_id: &str, outcome: &DisputeOutcome) -> Vec<u8>;",
              "docs": "Build the canonical bytes that the multisig signs for a resolve. Mirror\nthe same construction in the executor to keep the verification side\nhonest.",
              "attributes": "",
              "line": 451
            },
            {
              "name": "username::compute_dispute_id",
              "kind": "function_item",
              "signature": "pub fn compute_dispute_id(name: &str, claimant_did: &str, filed_at_height: u64) -> String;",
              "docs": "Compute a deterministic dispute ID for a (name, claimant, height) triple.",
              "attributes": "",
              "line": 461
            },
            {
              "name": "username::compute_auction_opening_price",
              "kind": "function_item",
              "signature": "pub fn compute_auction_opening_price(\n    canonical_name: &str,\n    params: &UsernameParams,\n    auction_initial_bid_multiplier: u32,\n) -> Result<u128, CoreError>;",
              "docs": "Compute the opening price for a premium-name auction.\n\nPer the spec, the opening price = `tier_price \u00d7 auction_initial_bid_multiplier`.",
              "attributes": "",
              "line": 477
            },
            {
              "name": "username::compute_min_next_bid",
              "kind": "function_item",
              "signature": "pub fn compute_min_next_bid(\n    current_bid: Option<u128>,\n    opening_price: u128,\n    min_increment_bps: u32,\n) -> u128;",
              "docs": "Compute the minimum next bid given the current high bid (if any) and the\nminimum increment percentage in basis points (default 500 = 5%).",
              "attributes": "",
              "line": 503
            }
          ],
          "parseErrors": false
        },
        {
          "module": "velocity",
          "source": "sigil/node/sigil-core/src/velocity.rs",
          "sha256": "13489dea1fc8c80ffaa3d5049a0af91d7d3cd6c8303cefc9fecd46e9edc56856",
          "attributes": "",
          "items": [
            {
              "name": "velocity::LaneId",
              "kind": "type_item",
              "signature": "pub type LaneId = u32;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "velocity::SlotId",
              "kind": "type_item",
              "signature": "pub type SlotId = u64;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "velocity::VelocityAccessMode",
              "kind": "enum_item",
              "signature": "pub enum VelocityAccessMode {\n    Read,\n    Write,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 20
            },
            {
              "name": "velocity::VelocityAccess",
              "kind": "struct_item",
              "signature": "pub struct VelocityAccess {\npub partition: String,\npub key: String,\npub mode: VelocityAccessMode\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "velocity::VelocityAccess::write",
              "kind": "function_item",
              "signature": "pub fn write(partition: impl Into<String>, key: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "velocity::VelocityTxKind",
              "kind": "enum_item",
              "signature": "pub enum VelocityTxKind {\n    Transfer {\n        recipient_did: String,\n        amount: u128,\n    },\n    Event {\n        topic: String,\n        payload_hash: SigilHash,\n        sequence: u64,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"type\", content = \"data\")]",
              "line": 44
            },
            {
              "name": "velocity::VelocityTransaction",
              "kind": "struct_item",
              "signature": "pub struct VelocityTransaction {\npub chain_id: String,\npub lane_id: LaneId,\npub slot_id: SlotId,\npub sender_did: String,\npub nonce: u64,\npub timestamp_ns: u64,\npub kind: VelocityTxKind,\npub access: Vec<VelocityAccess>,\npub signer_public_key: Vec<u8>,\npub signature: Vec<u8>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "velocity::VelocityTransaction::signed_transfer",
              "kind": "function_item",
              "signature": "pub fn signed_transfer(\n        chain_id: impl Into<String>,\n        lane_id: LaneId,\n        slot_id: SlotId,\n        sender_did: impl Into<String>,\n        recipient_did: impl Into<String>,\n        amount: u128,\n        nonce: u64,\n        timestamp_ns: u64,\n        signing_key: &SigningKey,\n    ) -> Result<Self, CoreError>;",
              "docs": "",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 72
            },
            {
              "name": "velocity::VelocityTransaction::verify_signature",
              "kind": "function_item",
              "signature": "pub fn verify_signature(&self) -> Result<(), CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "velocity::VelocityTransaction::tx_hash",
              "kind": "function_item",
              "signature": "pub fn tx_hash(&self) -> SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 141
            },
            {
              "name": "velocity::VelocityLaneConfig",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneConfig {\npub chain_id: String,\npub lane_id: LaneId,\npub slot_id: SlotId,\npub parent_lane_hash: SigilHash,\npub slot_start_ns: u64,\npub slot_end_ns: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 168
            },
            {
              "name": "velocity::VelocityLaneHeader",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneHeader {\npub chain_id: String,\npub lane_id: LaneId,\npub slot_id: SlotId,\npub parent_lane_hash: SigilHash,\npub tx_root: SigilHash,\npub receipt_root: SigilHash,\npub state_delta_root: SigilHash,\npub post_state_root: SigilHash,\npub slot_start_ns: u64,\npub slot_end_ns: u64,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 178
            },
            {
              "name": "velocity::VelocityLaneHeader::block_hash",
              "kind": "function_item",
              "signature": "pub fn block_hash(&self) -> SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 196
            },
            {
              "name": "velocity::VelocityReceiptStatus",
              "kind": "enum_item",
              "signature": "pub enum VelocityReceiptStatus {\n    Committed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 219
            },
            {
              "name": "velocity::VelocityStateDelta",
              "kind": "struct_item",
              "signature": "pub struct VelocityStateDelta {\npub partition: String,\npub key: String,\npub old_value: Vec<u8>,\npub new_value: Vec<u8>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 224
            },
            {
              "name": "velocity::VelocityReceipt",
              "kind": "struct_item",
              "signature": "pub struct VelocityReceipt {\npub tx_hash: SigilHash,\npub status: VelocityReceiptStatus,\npub lane_id: LaneId,\npub slot_id: SlotId,\npub state_deltas: Vec<VelocityStateDelta>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 232
            },
            {
              "name": "velocity::VelocityDroppedTx",
              "kind": "struct_item",
              "signature": "pub struct VelocityDroppedTx {\npub tx_hash: SigilHash,\npub reason: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 241
            },
            {
              "name": "velocity::VelocityLaneBlock",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneBlock {\npub header: VelocityLaneHeader,\npub transactions: Vec<VelocityTransaction>,\npub receipts: Vec<VelocityReceipt>,\npub dropped: Vec<VelocityDroppedTx>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 247
            },
            {
              "name": "velocity::VelocityLaneBlock::verify_roots",
              "kind": "function_item",
              "signature": "pub fn verify_roots(&self) -> Result<bool, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 255
            },
            {
              "name": "velocity::VelocityExecutionOutcome",
              "kind": "struct_item",
              "signature": "pub struct VelocityExecutionOutcome {\npub block: VelocityLaneBlock,\npub post_state: VelocityAccountState,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 268
            },
            {
              "name": "velocity::VelocityExecutionOutcome::committed_tx_count",
              "kind": "function_item",
              "signature": "pub fn committed_tx_count(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "velocity::VelocityAccount",
              "kind": "struct_item",
              "signature": "pub struct VelocityAccount {\npub balance: u128,\npub nonce: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 284
            },
            {
              "name": "velocity::VelocityAccountState",
              "kind": "struct_item",
              "signature": "pub struct VelocityAccountState {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 290
            },
            {
              "name": "velocity::VelocityAccountState::with_account",
              "kind": "function_item",
              "signature": "pub fn with_account(mut self, did: impl Into<String>, balance: u128, nonce: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 295
            },
            {
              "name": "velocity::VelocityAccountState::set_account",
              "kind": "function_item",
              "signature": "pub fn set_account(&mut self, did: impl Into<String>, balance: u128, nonce: u64);",
              "docs": "",
              "attributes": "",
              "line": 300
            },
            {
              "name": "velocity::VelocityAccountState::balance",
              "kind": "function_item",
              "signature": "pub fn balance(&self, did: &str) -> u128;",
              "docs": "",
              "attributes": "",
              "line": 305
            },
            {
              "name": "velocity::VelocityAccountState::nonce",
              "kind": "function_item",
              "signature": "pub fn nonce(&self, did: &str) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 312
            },
            {
              "name": "velocity::VelocityAccountState::state_root",
              "kind": "function_item",
              "signature": "pub fn state_root(&self) -> SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 356
            },
            {
              "name": "velocity::VelocityLaneCommitment",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneCommitment {\npub lane_id: LaneId,\npub slot_id: SlotId,\npub lane_block_hash: SigilHash,\npub tx_root: SigilHash,\npub receipt_root: SigilHash,\npub state_delta_root: SigilHash,\npub post_state_root: SigilHash,\npub committed_tx_count: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 371
            },
            {
              "name": "velocity::VelocityRootCommitment",
              "kind": "struct_item",
              "signature": "pub struct VelocityRootCommitment {\npub chain_id: String,\npub root_height: u64,\npub committed_at_ns: u64,\npub lane_commitment_root: SigilHash,\npub committed_tx_count: u64,\npub lane_commitments: Vec<VelocityLaneCommitment>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 383
            },
            {
              "name": "velocity::VelocityRootCommitment::from_lane_blocks",
              "kind": "function_item",
              "signature": "pub fn from_lane_blocks(\n        chain_id: impl Into<String>,\n        root_height: u64,\n        committed_at_ns: u64,\n        lane_blocks: &[VelocityLaneBlock],\n    ) -> Result<Self, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 393
            },
            {
              "name": "velocity::VelocityRootCommitment::verify_against_lane_blocks",
              "kind": "function_item",
              "signature": "pub fn verify_against_lane_blocks(\n        &self,\n        lane_blocks: &[VelocityLaneBlock],\n    ) -> Result<bool, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 428
            },
            {
              "name": "velocity::VelocityLaneCommitteeMember",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneCommitteeMember {\npub operator_id: String,\npub validator_did: String,\npub stake: u128,\npub provider: String,\npub asn: u32,\npub region: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 443
            },
            {
              "name": "velocity::VelocityLaneCommitteeAssignment",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneCommitteeAssignment {\npub lane_id: LaneId,\npub rotation_epoch: u64,\npub rotation_interval_slots: u64,\npub randomness_seed: SigilHash,\npub members: Vec<VelocityLaneCommitteeMember>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 453
            },
            {
              "name": "velocity::VelocityLaneDemotionPolicy",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneDemotionPolicy {\npub max_p95_latency_ns: u64,\npub max_missed_slots: u64,\npub max_invalid_roots: u64,\npub max_missing_artifacts: u64,\npub slash_on_equivocation: bool,\npub slash_on_invalid_root: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 462
            },
            {
              "name": "velocity::VelocityLaneSloSample",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneSloSample {\npub lane_id: LaneId,\npub slot_id: SlotId,\npub p95_latency_ns: u64,\npub missed_slots: u64,\npub invalid_roots: u64,\npub missing_artifacts: u64,\npub equivocations: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 472
            },
            {
              "name": "velocity::VelocityLaneDemotionDecision",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneDemotionDecision {\npub lane_id: LaneId,\npub slot_id: SlotId,\npub demote: bool,\npub slash: bool,\npub reasons: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 483
            },
            {
              "name": "velocity::assign_velocity_lane_committee",
              "kind": "function_item",
              "signature": "pub fn assign_velocity_lane_committee(\n    lane_id: LaneId,\n    slot_id: SlotId,\n    rotation_interval_slots: u64,\n    committee_size: usize,\n    candidates: &[VelocityLaneCommitteeMember],\n    randomness_seed: SigilHash,\n) -> Result<VelocityLaneCommitteeAssignment, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 491
            },
            {
              "name": "velocity::evaluate_velocity_lane_demotion",
              "kind": "function_item",
              "signature": "pub fn evaluate_velocity_lane_demotion(\n    sample: &VelocityLaneSloSample,\n    policy: &VelocityLaneDemotionPolicy,\n) -> VelocityLaneDemotionDecision;",
              "docs": "",
              "attributes": "",
              "line": 552
            },
            {
              "name": "velocity::lane_for_account",
              "kind": "function_item",
              "signature": "pub fn lane_for_account(account_did: &str, lane_count: LaneId) -> Result<LaneId, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 598
            },
            {
              "name": "velocity::execute_velocity_lane_block",
              "kind": "function_item",
              "signature": "pub fn execute_velocity_lane_block(\n    config: VelocityLaneConfig,\n    initial_state: VelocityAccountState,\n    raw_txs: Vec<VelocityTransaction>,\n) -> Result<VelocityExecutionOutcome, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 627
            },
            {
              "name": "velocity::replay_velocity_lane_block",
              "kind": "function_item",
              "signature": "pub fn replay_velocity_lane_block(\n    block: &VelocityLaneBlock,\n    initial_state: VelocityAccountState,\n) -> Result<VelocityExecutionOutcome, CoreError>;",
              "docs": "",
              "attributes": "",
              "line": 696
            }
          ],
          "parseErrors": false
        },
        {
          "module": "vigil",
          "source": "sigil/node/sigil-core/src/vigil.rs",
          "sha256": "b055f1fc1e203d3a3fbb683a404eef612d7d10ace35129cd710ca494921a37d4",
          "attributes": "",
          "items": [
            {
              "name": "vigil::VIGIL_EVENT_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const VIGIL_EVENT_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "vigil::VIGIL_SUBSCRIPTION_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const VIGIL_SUBSCRIPTION_ID_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "vigil::VIGIL_FILTER_HASH_DOMAIN",
              "kind": "const_item",
              "signature": "pub const VIGIL_FILTER_HASH_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "vigil::MIN_VIGIL_BOND",
              "kind": "const_item",
              "signature": "pub const MIN_VIGIL_BOND: u128;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "vigil::MIN_INGESTOR_BOND",
              "kind": "const_item",
              "signature": "pub const MIN_INGESTOR_BOND: u128;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "vigil::MAX_FILTER_DEPTH",
              "kind": "const_item",
              "signature": "pub const MAX_FILTER_DEPTH: usize;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "vigil::MAX_FILTER_ARRAY_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_FILTER_ARRAY_LEN: usize;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "vigil::MAX_FIELD_PATH_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_FIELD_PATH_LEN: usize;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "vigil::MAX_EVENT_PAYLOAD_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_EVENT_PAYLOAD_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "vigil::MAX_EVENT_PROOF_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_EVENT_PROOF_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "vigil::DEFAULT_MAX_CALLBACK_GAS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_CALLBACK_GAS: u64;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "vigil::OasDid",
              "kind": "type_item",
              "signature": "pub type OasDid = String;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "vigil::ContractAddress",
              "kind": "type_item",
              "signature": "pub type ContractAddress = String;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "vigil::AccountAddress",
              "kind": "type_item",
              "signature": "pub type AccountAddress = String;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "vigil::MethodSelector",
              "kind": "type_item",
              "signature": "pub type MethodSelector = String;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "vigil::ZoneId",
              "kind": "type_item",
              "signature": "pub type ZoneId = String;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "vigil::TopicId",
              "kind": "type_item",
              "signature": "pub type TopicId = String;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "vigil::ExternalChainId",
              "kind": "type_item",
              "signature": "pub type ExternalChainId = String;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "vigil::ExternalAddress",
              "kind": "type_item",
              "signature": "pub type ExternalAddress = String;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "vigil::ExternalTopicId",
              "kind": "type_item",
              "signature": "pub type ExternalTopicId = String;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "vigil::OracleFeedId",
              "kind": "type_item",
              "signature": "pub type OracleFeedId = String;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "vigil::AriseRequestId",
              "kind": "type_item",
              "signature": "pub type AriseRequestId = String;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "vigil::ContentHash",
              "kind": "type_item",
              "signature": "pub type ContentHash = SigilHash;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "vigil::VigilError",
              "kind": "enum_item",
              "signature": "pub enum VigilError {\n    #[error(\"vigil filter depth {depth} exceeds max {max}\")]\n    FilterTooDeep { depth: usize, max: usize },\n    #[error(\"vigil filter array length {len} exceeds max {max}\")]\n    FilterTooWide { len: usize, max: usize },\n    #[error(\"vigil filter field path length {len} exceeds max {max}\")]\n    FieldPathTooLong { len: usize, max: usize },\n    #[error(\"vigil field path segment must not be empty\")]\n    EmptyFieldPathSegment,\n    #[error(\"vigil callback contract must not be empty\")]\n    EmptyCallbackContract,\n    #[error(\"vigil callback method must not be empty\")]\n    EmptyCallbackMethod,\n    #[error(\"vigil gas tank account must not be empty\")]\n    EmptyGasTank,\n    #[error(\"vigil subscriber DID must not be empty\")]\n    EmptySubscriberDid,\n    #[error(\"vigil ingestor DID must not be empty\")]\n    EmptyIngestorDid,\n    #[error(\"vigil bond {amount} below minimum {minimum}\")]\n    BondBelowMinimum { amount: u128, minimum: u128 },\n    #[error(\"vigil max_callback_gas must be greater than zero\")]\n    ZeroCallbackGas,\n    #[error(\"vigil max_deliveries_per_epoch must be greater than zero\")]\n    ZeroDeliveryLimit,\n    #[error(\"vigil source does not match subscription\")]\n    SourceMismatch,\n    #[error(\"vigil source kind {kind:?} requires a proof\")]\n    ProofRequired { kind: EventSourceKind },\n    #[error(\"vigil proof kind does not match source kind {kind:?}\")]\n    ProofSourceMismatch { kind: EventSourceKind },\n    #[error(\"vigil event payload is {len} bytes; max is {max}\")]\n    PayloadTooLarge { len: usize, max: usize },\n    #[error(\"vigil proof is {len} bytes; max is {max}\")]\n    ProofTooLarge { len: usize, max: usize },\n    #[error(\"vigil canonical encoding failed: {0}\")]\n    Encoding(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 38
            },
            {
              "name": "vigil::EventSourceKind",
              "kind": "enum_item",
              "signature": "pub enum EventSourceKind {\n    InZone,\n    CrossZone,\n    ExternalChain,\n    Oracle,\n    ComputeCompletion,\n    TimeTrigger,\n    TeeAttested,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 79
            },
            {
              "name": "vigil::TimeKind",
              "kind": "enum_item",
              "signature": "pub enum TimeKind {\n    BlockHeight,\n    AttestedWallClock,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 91
            },
            {
              "name": "vigil::RecurrenceSpec",
              "kind": "enum_item",
              "signature": "pub enum RecurrenceSpec {\n    EveryBlocks { interval: u64 },\n    EveryAttestedSeconds { interval: u64 },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 98
            },
            {
              "name": "vigil::OracleThreshold",
              "kind": "struct_item",
              "signature": "pub struct OracleThreshold {\npub committee_id: String,\npub min_signatures: u16\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 104
            },
            {
              "name": "vigil::ProviderClass",
              "kind": "enum_item",
              "signature": "pub enum ProviderClass {\n    Any,\n    TeeBacked,\n    Redundant,\n    Deterministic,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 111
            },
            {
              "name": "vigil::TeeClass",
              "kind": "enum_item",
              "signature": "pub enum TeeClass {\n    SgxDcap,\n    SevSnp,\n    Tdx,\n    ArmCca,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 120
            },
            {
              "name": "vigil::EventSource",
              "kind": "enum_item",
              "signature": "pub enum EventSource {\n    InZone {\n        zone_id: ZoneId,\n        emitter: ContractAddress,\n        topic: TopicId,\n    },\n    CrossZone {\n        source_zone: ZoneId,\n        emitter: ContractAddress,\n        topic: TopicId,\n    },\n    ExternalChain {\n        chain_id: ExternalChainId,\n        emitter: ExternalAddress,\n        topic: ExternalTopicId,\n    },\n    Oracle {\n        feed_id: OracleFeedId,\n        threshold: OracleThreshold,\n    },\n    ComputeCompletion {\n        arise_request_id: AriseRequestId,\n        provider_class: ProviderClass,\n    },\n    TimeTrigger {\n        kind: TimeKind,\n        target: u64,\n        recurrence: Option<RecurrenceSpec>,\n    },\n    TeeAttested {\n        model_or_payload_id: ContentHash,\n        attestation_class: TeeClass,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(tag = \"source_kind\", rename_all = \"snake_case\")]",
              "line": 129
            },
            {
              "name": "vigil::EventSource::kind",
              "kind": "function_item",
              "signature": "pub fn kind(&self) -> EventSourceKind;",
              "docs": "",
              "attributes": "",
              "line": 165
            },
            {
              "name": "vigil::EventSource::matches_kind",
              "kind": "function_item",
              "signature": "pub fn matches_kind(&self, kind: EventSourceKind) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "vigil::EventSource::matches_subscription",
              "kind": "function_item",
              "signature": "pub fn matches_subscription(&self, subscription_source: &Self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "vigil::CanonicalValue",
              "kind": "enum_item",
              "signature": "pub enum CanonicalValue {\n    String(String),\n    Bytes(Vec<u8>),\n    U64(u64),\n    I64(i64),\n    Bool(bool),\n    Hash(SigilHash),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"type\", content = \"value\", rename_all = \"snake_case\")]",
              "line": 188
            },
            {
              "name": "vigil::EventFilter",
              "kind": "enum_item",
              "signature": "pub enum EventFilter {\n    Any,\n    TopicEquals(TopicId),\n    PayloadFieldEquals {\n        path: Vec<String>,\n        value: CanonicalValue,\n    },\n    PayloadFieldRange {\n        path: Vec<String>,\n        min: CanonicalValue,\n        max: CanonicalValue,\n    },\n    All(Vec<EventFilter>),\n    #[serde(alias = \"Any2\")]\n    AnyOf(Vec<EventFilter>),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"op\", content = \"args\", rename_all = \"snake_case\")]",
              "line": 236
            },
            {
              "name": "vigil::EventFilter::validate_bounds",
              "kind": "function_item",
              "signature": "pub fn validate_bounds(&self) -> Result<(), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 254
            },
            {
              "name": "vigil::EventFilter::evaluate",
              "kind": "function_item",
              "signature": "pub fn evaluate(&self, payload: &serde_json::Value) -> Result<bool, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 285
            },
            {
              "name": "vigil::EventFilter::filter_hash",
              "kind": "function_item",
              "signature": "pub fn filter_hash(&self) -> Result<SigilHash, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 322
            },
            {
              "name": "vigil::Event",
              "kind": "struct_item",
              "signature": "pub struct Event {\npub source: EventSource,\npub payload: serde_json::Value,\npub source_finality_anchor: SigilHash\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 332
            },
            {
              "name": "vigil::Event::validate_size",
              "kind": "function_item",
              "signature": "pub fn validate_size(&self) -> Result<(), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 339
            },
            {
              "name": "vigil::EventProof",
              "kind": "enum_item",
              "signature": "pub enum EventProof {\n    None,\n    CrossZone {\n        proof_hash: SigilHash,\n        encoded_proof: Vec<u8>,\n    },\n    ExternalChain {\n        client_id: String,\n        proof_hash: SigilHash,\n        encoded_proof: Vec<u8>,\n    },\n    Oracle {\n        committee_id: String,\n        signature_bundle: Vec<u8>,\n    },\n    ComputeReceipt {\n        receipt_id: String,\n        receipt_hash: SigilHash,\n        provider_signature: Vec<u8>,\n    },\n    TeeQuote {\n        quote_hash: SigilHash,\n        quote: Vec<u8>,\n        material_hash: SigilHash,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"snake_case\")]",
              "line": 353
            },
            {
              "name": "vigil::EventProof::encoded_len",
              "kind": "function_item",
              "signature": "pub fn encoded_len(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 381
            },
            {
              "name": "vigil::EventProof::validate_size",
              "kind": "function_item",
              "signature": "pub fn validate_size(&self) -> Result<(), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 397
            },
            {
              "name": "vigil::EventProof::matches_source",
              "kind": "function_item",
              "signature": "pub fn matches_source(&self, source: &EventSource) -> Result<bool, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 408
            },
            {
              "name": "vigil::SubscriptionStatus",
              "kind": "enum_item",
              "signature": "pub enum SubscriptionStatus {\n    Active,\n    Paused,\n    Slashed,\n    Expired,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 439
            },
            {
              "name": "vigil::IngestorStatus",
              "kind": "enum_item",
              "signature": "pub enum IngestorStatus {\n    Active,\n    Paused,\n    Slashed,\n    Deregistered,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 448
            },
            {
              "name": "vigil::VigilSubscription",
              "kind": "struct_item",
              "signature": "pub struct VigilSubscription {\npub subscription_id: SigilHash,\npub subscriber_did: OasDid,\npub callback_contract: ContractAddress,\npub callback_method: MethodSelector,\npub event_source: EventSource,\npub event_filter: EventFilter,\npub gas_tank: AccountAddress,\npub bond_amount: u128,\npub max_callback_gas: u64,\npub max_deliveries_per_epoch: u32,\npub created_at_height: u64,\npub expires_at_height: Option<u64>,\npub status: SubscriptionStatus,\npub deliveries_this_epoch: u32,\npub epoch_window_start: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 456
            },
            {
              "name": "vigil::VigilSubscription::is_active_at",
              "kind": "function_item",
              "signature": "pub fn is_active_at(&self, height: u64) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 475
            },
            {
              "name": "vigil::VigilSubscription::source_filter_key",
              "kind": "function_item",
              "signature": "pub fn source_filter_key(&self) -> Result<(EventSourceKind, SigilHash), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 482
            },
            {
              "name": "vigil::Ingestor",
              "kind": "struct_item",
              "signature": "pub struct Ingestor {\npub ingestor_did: OasDid,\npub bond: u128,\npub supported_sources: Vec<EventSourceKind>,\npub fee_per_delivery: u64,\npub reputation: u32,\npub registered_at_height: u64,\npub status: IngestorStatus\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 488
            },
            {
              "name": "vigil::Ingestor::supports",
              "kind": "function_item",
              "signature": "pub fn supports(&self, source: EventSourceKind) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 499
            },
            {
              "name": "vigil::Ingestor::validate_registration",
              "kind": "function_item",
              "signature": "pub fn validate_registration(&self) -> Result<(), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 503
            },
            {
              "name": "vigil::RegisterVigilSubscriptionData",
              "kind": "struct_item",
              "signature": "pub struct RegisterVigilSubscriptionData {\npub callback_contract: ContractAddress,\npub callback_method: MethodSelector,\npub event_source: EventSource,\npub event_filter: EventFilter,\npub gas_tank: AccountAddress,\npub bond_amount: u128,\npub max_callback_gas: u64,\npub max_deliveries_per_epoch: u32,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub expires_at_height: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 518
            },
            {
              "name": "vigil::RegisterVigilSubscriptionData::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 532
            },
            {
              "name": "vigil::RegisterVigilSubscriptionData::subscription_id_for",
              "kind": "function_item",
              "signature": "pub fn subscription_id_for(&self, subscriber_did: &str) -> Result<SigilHash, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 557
            },
            {
              "name": "vigil::RegisterVigilSubscriptionData::into_record",
              "kind": "function_item",
              "signature": "pub fn into_record(\n        &self,\n        subscriber_did: impl Into<String>,\n        created_at_height: u64,\n        epoch_window_start: u64,\n    ) -> Result<VigilSubscription, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 569
            },
            {
              "name": "vigil::UpdateVigilSubscriptionData",
              "kind": "struct_item",
              "signature": "pub struct UpdateVigilSubscriptionData {\npub subscription_id: SigilHash,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub event_filter: Option<EventFilter>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub callback_method: Option<MethodSelector>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_callback_gas: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_deliveries_per_epoch: Option<u32>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub expires_at_height: Option<Option<u64>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub status: Option<SubscriptionStatus>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 598
            },
            {
              "name": "vigil::CancelVigilSubscriptionData",
              "kind": "struct_item",
              "signature": "pub struct CancelVigilSubscriptionData {\npub subscription_id: SigilHash\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 615
            },
            {
              "name": "vigil::DepositVigilGasData",
              "kind": "struct_item",
              "signature": "pub struct DepositVigilGasData {\npub subscription_id: SigilHash,\npub amount: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 620
            },
            {
              "name": "vigil::WithdrawVigilGasData",
              "kind": "struct_item",
              "signature": "pub struct WithdrawVigilGasData {\npub subscription_id: SigilHash,\npub amount: u64,\npub recipient_did: OasDid\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 626
            },
            {
              "name": "vigil::EventDeliveryData",
              "kind": "struct_item",
              "signature": "pub struct EventDeliveryData {\npub subscription_id: SigilHash,\npub event: Event,\npub proof: EventProof,\npub ingestor_did: OasDid\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 633
            },
            {
              "name": "vigil::EventDeliveryData::event_id",
              "kind": "function_item",
              "signature": "pub fn event_id(&self) -> Result<SigilHash, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 641
            },
            {
              "name": "vigil::SlashIngestorData",
              "kind": "struct_item",
              "signature": "pub struct SlashIngestorData {\npub ingestor_did: OasDid,\npub evidence_hash: SigilHash,\npub slash_amount: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 647
            },
            {
              "name": "vigil::RegisterIngestorData",
              "kind": "struct_item",
              "signature": "pub struct RegisterIngestorData {\npub ingestor_did: OasDid,\npub bond: u128,\npub supported_sources: Vec<EventSourceKind>,\npub fee_per_delivery: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 654
            },
            {
              "name": "vigil::UpdateIngestorStakeData",
              "kind": "struct_item",
              "signature": "pub struct UpdateIngestorStakeData {\npub ingestor_did: OasDid,\npub bond_delta: i128,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub supported_sources: Option<Vec<EventSourceKind>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub fee_per_delivery: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 662
            },
            {
              "name": "vigil::DeregisterIngestorData",
              "kind": "struct_item",
              "signature": "pub struct DeregisterIngestorData {\npub ingestor_did: OasDid\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 672
            },
            {
              "name": "vigil::VigilDeliveryStatus",
              "kind": "enum_item",
              "signature": "pub enum VigilDeliveryStatus {\n    Scheduled,\n    Delivered,\n    Reverted,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 678
            },
            {
              "name": "vigil::VigilDeliveryRecord",
              "kind": "struct_item",
              "signature": "pub struct VigilDeliveryRecord {\npub subscription_id: SigilHash,\npub event_id: SigilHash,\npub ingestor_did: OasDid,\npub delivered_at_height: u64,\npub status: VigilDeliveryStatus,\npub proof_hash: SigilHash\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 685
            },
            {
              "name": "vigil::ScheduledVigilCallback",
              "kind": "struct_item",
              "signature": "pub struct ScheduledVigilCallback {\npub subscription_id: SigilHash,\npub event_id: SigilHash,\npub subscriber_did: OasDid,\npub callback_contract: ContractAddress,\npub callback_method: MethodSelector,\npub payload: serde_json::Value,\npub gas_tank: AccountAddress,\npub gas_limit: u64,\npub scheduled_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 695
            },
            {
              "name": "vigil::canonical_event_id",
              "kind": "function_item",
              "signature": "pub fn canonical_event_id(event: &Event) -> Result<SigilHash, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 707
            },
            {
              "name": "vigil::canonical_proof_hash",
              "kind": "function_item",
              "signature": "pub fn canonical_proof_hash(proof: &EventProof) -> Result<SigilHash, VigilError>;",
              "docs": "",
              "attributes": "",
              "line": 719
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-consensus",
      "version": "0.1.0",
      "source": "sigil/node/sigil-consensus",
      "manifestSha256": "050cc5a684a55851180be2483a38724529a47956e2b99fe67b7f4775176e9fee",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "contracts": [
          "compute"
        ],
        "governance": [
          "sigil-core/governance"
        ],
        "tower": [
          "sigil-core/tower"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-consensus",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-consensus/src/lib.rs",
          "sha256": "9eaf77d76b624d831b9dcd2a807035c60430967960eeff26ce407f15142536a3",
          "attributes": "",
          "items": [
            {
              "name": "election",
              "kind": "module",
              "signature": "pub mod election;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "epoch",
              "kind": "module",
              "signature": "pub mod epoch;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "round",
              "kind": "module",
              "signature": "pub mod round;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "semantic",
              "kind": "module",
              "signature": "pub mod semantic;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "signing",
              "kind": "module",
              "signature": "pub mod signing;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "validator",
              "kind": "module",
              "signature": "pub mod validator;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "view_change",
              "kind": "module",
              "signature": "pub mod view_change;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "pub use election::{compute_score, elect_proposer, ElectionConfig, ElectionWeights};",
              "kind": "use_declaration",
              "signature": "pub use election::{compute_score, elect_proposer, ElectionConfig, ElectionWeights};",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "pub use epoch::{epoch_for_height, genesis_epoch, is_epoch_boundary, transition_epoch, EpochInfo};",
              "kind": "use_declaration",
              "signature": "pub use epoch::{epoch_for_height, genesis_epoch, is_epoch_boundary, transition_epoch, EpochInfo};",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "pub use error::{ConsensusError, ConsensusPhase};",
              "kind": "use_declaration",
              "signature": "pub use error::{ConsensusError, ConsensusPhase};",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "pub use round::{ConsensusDecision, ConsensusMessage, ConsensusRound, PreCommit, PreVote};",
              "kind": "use_declaration",
              "signature": "pub use round::{ConsensusDecision, ConsensusMessage, ConsensusRound, PreCommit, PreVote};",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "pub use semantic::{SemanticValidationError, SemanticValidator, SemanticValidatorRegistry};",
              "kind": "use_declaration",
              "signature": "pub use semantic::{SemanticValidationError, SemanticValidator, SemanticValidatorRegistry};",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "pub use validator::{Validator, ValidatorSet};",
              "kind": "use_declaration",
              "signature": "pub use validator::{Validator, ValidatorSet};",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "pub use view_change::{\n    next_proposer_after_view_change, NewViewMessage, ViewChangeCertificate, ViewChangeMessage,\n    ViewChangeReason, ViewChangeTracker,\n};",
              "kind": "use_declaration",
              "signature": "pub use view_change::{\n    next_proposer_after_view_change, NewViewMessage, ViewChangeCertificate, ViewChangeMessage,\n    ViewChangeReason, ViewChangeTracker,\n};",
              "docs": "",
              "attributes": "",
              "line": 32
            }
          ],
          "parseErrors": false
        },
        {
          "module": "election",
          "source": "sigil/node/sigil-consensus/src/election.rs",
          "sha256": "8f5217b41cc4646c8307f84f489ec66817ef2c1a2e5bf94c902ed55de3574abe",
          "attributes": "",
          "items": [
            {
              "name": "election::ElectionWeights",
              "kind": "struct_item",
              "signature": "pub struct ElectionWeights {\n/// Weight for normalized stake component.\n\npub stake: f64,\n/// Weight for uptime component.\n\npub uptime: f64,\n/// Weight for OATS trust score component.\n\npub trust_score: f64,\n/// Weight for hardware performance component.\n\npub hw_performance: f64,\n/// Weight for participation component.\n\npub participation: f64\n}",
              "docs": "Weights for the composite election score formula.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "election::ElectionConfig",
              "kind": "struct_item",
              "signature": "pub struct ElectionConfig {\n/// The weights for each score component.\n\npub weights: ElectionWeights,\n/// Alpha parameter for the concentration penalty.\n\n/// Higher values penalize stake concentration more heavily.\n\npub concentration_alpha: f64,\n/// Maximum allowed stake fraction before the concentration penalty\n\n/// begins to apply significantly. Validators holding more than this\n\n/// fraction of total stake receive a logarithmic penalty.\n\npub max_stake_fraction: f64\n}",
              "docs": "Configuration for the proposer election algorithm.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 47
            },
            {
              "name": "election::compute_score",
              "kind": "function_item",
              "signature": "pub fn compute_score(validator: &Validator, config: &ElectionConfig, total_stake: u64) -> f64;",
              "docs": "Compute the composite election score for a single validator.\n\nThe formula is:\n```text\nScore = w1*(stake/total_stake) + w2*uptime + w3*trust_score\n      + w4*hw_performance + w5*participation - alpha * ln(CP)\n```\nwhere CP = (stake / total_stake) / max_stake_fraction.\n\nThe concentration penalty uses the natural logarithm of the ratio between\nthe validator's stake fraction and the configured maximum. When the validator's\nfraction is at or below the maximum, the penalty is zero or negative (i.e., a\nslight benefit). When it exceeds the maximum, the penalty grows logarithmically.",
              "attributes": "",
              "line": 82
            },
            {
              "name": "election::elect_proposer",
              "kind": "function_item",
              "signature": "pub fn elect_proposer(\n    validator_set: &ValidatorSet,\n    config: &ElectionConfig,\n    height: u64,\n    epoch_seed: &SigilHash,\n) -> String;",
              "docs": "Elect the proposer for a given block height from the validator set.\n\nOnly Block Producers are eligible to propose blocks. The selection uses a\ndeterministic VRF-like mechanism: hash(epoch_seed || height) produces a seed\nthat is combined with each candidate's score to deterministically select\nthe proposer.\n\nReturns the DID of the elected proposer, or an empty string if no Block\nProducers are available.",
              "attributes": "",
              "line": 119
            }
          ],
          "parseErrors": false
        },
        {
          "module": "epoch",
          "source": "sigil/node/sigil-consensus/src/epoch.rs",
          "sha256": "c9c4786c017569df296bfb09580bfb349458ce50254b7ec11c78079ef6c5bc8a",
          "attributes": "",
          "items": [
            {
              "name": "epoch::EpochInfo",
              "kind": "struct_item",
              "signature": "pub struct EpochInfo {\n/// Epoch number (0-indexed).\n\npub epoch: u64,\n/// First block height in this epoch (inclusive).\n\npub start_height: u64,\n/// Last block height in this epoch (inclusive).\n\npub end_height: u64,\n/// The active validator set for this epoch.\n\npub validator_set: ValidatorSet,\n/// Randomness beacon seed for proposer election and other protocol randomness.\n\npub epoch_seed: SigilHash\n}",
              "docs": "Information about a specific epoch.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "epoch::epoch_for_height",
              "kind": "function_item",
              "signature": "pub fn epoch_for_height(height: u64) -> u64;",
              "docs": "Returns the epoch number for a given block height.\n\nUses the constant `BLOCKS_PER_EPOCH` from `sigil_core`.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "epoch::start_height_for_epoch",
              "kind": "function_item",
              "signature": "pub fn start_height_for_epoch(epoch: u64) -> u64;",
              "docs": "Returns the first block height for a given epoch.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "epoch::end_height_for_epoch",
              "kind": "function_item",
              "signature": "pub fn end_height_for_epoch(epoch: u64) -> u64;",
              "docs": "Returns the last block height for a given epoch (inclusive).",
              "attributes": "",
              "line": 42
            },
            {
              "name": "epoch::is_epoch_boundary",
              "kind": "function_item",
              "signature": "pub fn is_epoch_boundary(height: u64) -> bool;",
              "docs": "Returns true if the given height is the first block of a new epoch.\n\nHeight 0 (genesis) is always an epoch boundary.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "epoch::transition_epoch",
              "kind": "function_item",
              "signature": "pub fn transition_epoch(\n    current: &EpochInfo,\n    new_validators: ValidatorSet,\n) -> Result<EpochInfo, ConsensusError>;",
              "docs": "Transition to a new epoch.\n\nDerives a new epoch seed by hashing the current seed with the transition\nheight, and creates a new `EpochInfo` with the provided validator set.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "epoch::genesis_epoch",
              "kind": "function_item",
              "signature": "pub fn genesis_epoch(validator_set: ValidatorSet, genesis_seed: SigilHash) -> EpochInfo;",
              "docs": "Create the genesis epoch (epoch 0).",
              "attributes": "",
              "line": 88
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-consensus/src/error.rs",
          "sha256": "9eb0f1f601109ee559977aef680da78d8667ca8be59caec6ff223b645d363cfe",
          "attributes": "",
          "items": [
            {
              "name": "error::ConsensusError",
              "kind": "enum_item",
              "signature": "pub enum ConsensusError {\n    /// The proposed block comes from an invalid proposer.\n    #[error(\"invalid proposer: {0}\")]\n    InvalidProposer(String),\n\n    /// The proposed block is structurally or semantically invalid.\n    #[error(\"invalid block: {0}\")]\n    InvalidBlock(String),\n\n    /// A signature failed verification.\n    #[error(\"invalid signature: {0}\")]\n    InvalidSignature(String),\n\n    /// Not enough stake has voted to reach quorum.\n    #[error(\"quorum not reached: received {received}, required {required}\")]\n    QuorumNotReached {\n        /// Stake that has voted so far.\n        received: u64,\n        /// Stake required for quorum (2/3 + 1).\n        required: u64,\n    },\n\n    /// A validator has already cast a vote in this phase.\n    #[error(\"duplicate vote from validator: {validator_did}\")]\n    DuplicateVote {\n        /// The DID of the validator that voted twice.\n        validator_did: String,\n    },\n\n    /// The validator is not in the current active validator set.\n    #[error(\"not in validator set: {0}\")]\n    NotInValidatorSet(String),\n\n    /// The consensus round is in an unexpected phase.\n    #[error(\"wrong phase: expected {expected}, actual {actual}\")]\n    WrongPhase {\n        /// The expected phase.\n        expected: ConsensusPhase,\n        /// The actual current phase.\n        actual: ConsensusPhase,\n    },\n\n    /// A view change is currently in progress; normal operations are paused.\n    #[error(\"view change in progress\")]\n    ViewChangeInProgress,\n\n    /// An error occurred during epoch transition.\n    #[error(\"epoch transition error: {0}\")]\n    EpochTransitionError(String),\n\n    /// A semantic validation module rejected the transaction.\n    #[error(\"semantic validation failed in module '{module}': {reason}\")]\n    SemanticValidationFailed {\n        /// The name of the semantic validator module.\n        module: String,\n        /// The reason for rejection.\n        reason: String,\n    },\n\n    /// A phase timeout has expired without quorum.\n    #[error(\"timeout expired\")]\n    TimeoutExpired,\n}",
              "docs": "Errors that can occur during consensus operations.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 7
            },
            {
              "name": "error::ConsensusPhase",
              "kind": "enum_item",
              "signature": "pub enum ConsensusPhase {\n    /// Leader proposes a block.\n    Propose,\n    /// Validators issue pre-votes on the proposed block.\n    PreVote,\n    /// Validators issue pre-commits after seeing 2/3+ pre-votes.\n    PreCommit,\n    /// The block is finalized after 2/3+ pre-commits.\n    Finalize,\n}",
              "docs": "The four phases of the MACA BFT consensus protocol.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]",
              "line": 73
            },
            {
              "name": "error::ConsensusPhase::next",
              "kind": "function_item",
              "signature": "pub fn next(self) -> Option<Self>;",
              "docs": "Returns the next phase in the round progression.\n\nReturns `None` if the current phase is `Finalize` (terminal).",
              "attributes": "",
              "line": 99
            }
          ],
          "parseErrors": false
        },
        {
          "module": "round",
          "source": "sigil/node/sigil-consensus/src/round.rs",
          "sha256": "c6e695ad63cdafbfbc838e987d55667a21aa9a104c8478e15e1371b7156df8c9",
          "attributes": "",
          "items": [
            {
              "name": "round::PreVote",
              "kind": "struct_item",
              "signature": "pub struct PreVote {\n/// DID of the voting validator.\n\npub validator_did: String,\n/// Hash of the block being voted on.\n\npub block_hash: SigilHash,\n/// Block height this vote applies to.\n\npub height: u64,\n/// Consensus view this vote applies to.\n\npub view: u64,\n/// Ed25519 signature over (block_hash || height || epoch || view || \"prevote\").\n\npub signature: Vec<u8>\n}",
              "docs": "A pre-vote message from a validator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "round::PreCommit",
              "kind": "struct_item",
              "signature": "pub struct PreCommit {\n/// DID of the committing validator.\n\npub validator_did: String,\n/// Hash of the block being committed to.\n\npub block_hash: SigilHash,\n/// Block height this commit applies to.\n\npub height: u64,\n/// Consensus view this commit applies to.\n\npub view: u64,\n/// Ed25519 signature over (block_hash || height || epoch || view || \"precommit\").\n\npub signature: Vec<u8>\n}",
              "docs": "A pre-commit message from a validator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 35
            },
            {
              "name": "round::ConsensusMessage",
              "kind": "enum_item",
              "signature": "pub enum ConsensusMessage {\n    /// A block proposal from the elected proposer.\n    Propose {\n        /// The proposed block (boxed to reduce enum size).\n        block: Box<Block>,\n        /// DID of the proposer.\n        proposer_did: String,\n        /// Round view number (increments on view change).\n        view: u64,\n    },\n    /// A pre-vote for a proposed block.\n    PreVote(PreVote),\n    /// A pre-commit for a proposed block.\n    PreCommit(PreCommit),\n    /// A finalize notification (informational, not a vote).\n    Finalize {\n        /// Hash of the finalized block.\n        block_hash: SigilHash,\n        /// Block height.\n        height: u64,\n    },\n}",
              "docs": "Messages exchanged during consensus rounds.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "round::ProposalValidation",
              "kind": "enum_item",
              "signature": "pub enum ProposalValidation {\n    /// The outer node verified the full proposal validity checklist.\n    Passed,\n    /// The proposal failed validation and must not receive a prevote.\n    Rejected {\n        /// Structured or human-readable rejection reason from the outer node.\n        reason: String,\n    },\n}",
              "docs": "Result of external proposal validation before the round may enter PreVote.\n\n`sigil-consensus` is a pure state-machine crate, so it cannot re-execute\nblocks or read the node's state snapshot itself. The node/coordinator must\nvalidate chain ID, parent hash, proposer authority/signature, every\ntransaction signature and chain ID, transaction/receipt roots, execution\nstate root, non-zero roots for non-empty blocks, and gas limits before\nconstructing `Passed`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "round::ProposalValidation::passed",
              "kind": "function_item",
              "signature": "pub fn passed() -> Self;",
              "docs": "Convenience constructor for successful outer validation.",
              "attributes": "",
              "line": 94
            },
            {
              "name": "round::ProposalValidation::rejected",
              "kind": "function_item",
              "signature": "pub fn rejected(reason: impl Into<String>) -> Self;",
              "docs": "Convenience constructor for rejected outer validation.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "round::ConsensusDecision",
              "kind": "struct_item",
              "signature": "pub struct ConsensusDecision {\n/// The finalized block.\n\npub block: Block,\n/// Block hash.\n\npub block_hash: SigilHash,\n/// Block height.\n\npub height: u64,\n/// Epoch this block belongs to.\n\npub epoch: u64,\n/// Collected pre-commits that formed quorum.\n\npub commits: Vec<PreCommit>\n}",
              "docs": "The final decision from a consensus round.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 117
            },
            {
              "name": "round::ConsensusRound",
              "kind": "struct_item",
              "signature": "pub struct ConsensusRound {\n/// Block height for this round.\n\npub height: u64,\n/// Epoch number.\n\npub epoch: u64,\n/// Current phase of the round.\n\npub phase: ConsensusPhase,\n/// DID of the elected proposer for this height.\n\npub proposer_did: String,\n/// The proposed block, if one has been received.\n\npub proposed_block: Option<Block>,\n/// Accumulated pre-votes: validator_did -> PreVote.\n\npub prevotes: HashMap<String, PreVote>,\n/// Accumulated pre-commits: validator_did -> PreCommit.\n\npub precommits: HashMap<String, PreCommit>,\n/// View number (increments on view changes).\n\npub view: u64,\n/// When this round started.\n\npub start_time: Instant\n}",
              "docs": "A consensus round for a specific block height.\n\nThis is the core state machine. It tracks the current phase, the proposed\nblock, accumulated votes, and determines when thresholds are met.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "round::ConsensusRound::new",
              "kind": "function_item",
              "signature": "pub fn new(height: u64, epoch: u64, proposer_did: String, validator_set: ValidatorSet) -> Self;",
              "docs": "Create a new consensus round for the given height.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "round::ConsensusRound::is_quorum",
              "kind": "function_item",
              "signature": "pub fn is_quorum(votes_stake: u64, total_stake: u64) -> bool;",
              "docs": "Returns true if the given stake amount meets or exceeds the quorum threshold.\n\nUses u128 intermediate to prevent overflow when `total_stake > u64::MAX / 2`.",
              "attributes": "",
              "line": 177
            },
            {
              "name": "round::ConsensusRound::receive_proposal",
              "kind": "function_item",
              "signature": "pub fn receive_proposal(\n        &mut self,\n        block: Block,\n        proposer_did: &str,\n        signature: &[u8],\n        validation: ProposalValidation,\n    ) -> Result<(), ConsensusError>;",
              "docs": "Handle a block proposal.\n\nValidates that:\n- The round is in the Propose phase\n- The proposal comes from the elected proposer\n- Basic block structure is valid (height, epoch)\n- The proposer's Ed25519 signature is valid",
              "attributes": "",
              "line": 193
            },
            {
              "name": "round::ConsensusRound::can_prevote",
              "kind": "function_item",
              "signature": "pub fn can_prevote(&self) -> bool;",
              "docs": "Check whether we can transition to the pre-vote phase.\n\nReturns true if:\n- A block has been proposed\n- The proposer is valid (is the elected proposer and in the validator set)",
              "attributes": "",
              "line": 263
            },
            {
              "name": "round::ConsensusRound::add_prevote",
              "kind": "function_item",
              "signature": "pub fn add_prevote(&mut self, vote: PreVote) -> Result<bool, ConsensusError>;",
              "docs": "Add a pre-vote from a validator.\n\nValidates that:\n- The round is in the PreVote phase\n- The validator is in the active set\n- The validator has not already voted\n- The Ed25519 signature is valid\n\nReturns `true` if quorum has been reached after adding this vote.",
              "attributes": "",
              "line": 280
            },
            {
              "name": "round::ConsensusRound::can_precommit",
              "kind": "function_item",
              "signature": "pub fn can_precommit(&self) -> bool;",
              "docs": "Check whether the pre-vote quorum has been reached and we can transition\nto the PreCommit phase.",
              "attributes": "",
              "line": 338
            },
            {
              "name": "round::ConsensusRound::advance_to_precommit",
              "kind": "function_item",
              "signature": "pub fn advance_to_precommit(&mut self) -> Result<(), ConsensusError>;",
              "docs": "Advance from PreVote to PreCommit phase.\n\nShould be called once `can_precommit()` returns true.",
              "attributes": "",
              "line": 346
            },
            {
              "name": "round::ConsensusRound::add_precommit",
              "kind": "function_item",
              "signature": "pub fn add_precommit(&mut self, commit: PreCommit) -> Result<bool, ConsensusError>;",
              "docs": "Add a pre-commit from a validator.\n\nValidates that:\n- The round is in the PreCommit phase\n- The validator is in the active set\n- The validator has not already committed\n- The Ed25519 signature is valid\n\nReturns `true` if quorum has been reached after adding this commit.",
              "attributes": "",
              "line": 382
            },
            {
              "name": "round::ConsensusRound::try_finalize",
              "kind": "function_item",
              "signature": "pub fn try_finalize(&mut self) -> Result<Option<ConsensusDecision>, ConsensusError>;",
              "docs": "Attempt to finalize the round.\n\nIf 2/3+ of stake has pre-committed, produces a `ConsensusDecision`\nand transitions to the Finalize phase.",
              "attributes": "",
              "line": 442
            },
            {
              "name": "round::ConsensusRound::validator_set",
              "kind": "function_item",
              "signature": "pub fn validator_set(&self) -> &ValidatorSet;",
              "docs": "Returns a reference to the validator set.",
              "attributes": "",
              "line": 499
            },
            {
              "name": "round::ConsensusRound::elapsed",
              "kind": "function_item",
              "signature": "pub fn elapsed(&self) -> std::time::Duration;",
              "docs": "Returns the elapsed time since the round started.",
              "attributes": "",
              "line": 504
            }
          ],
          "parseErrors": false
        },
        {
          "module": "semantic",
          "source": "sigil/node/sigil-consensus/src/semantic.rs",
          "sha256": "b0ecc4ada3f75fdc6082d3ddfb716d9cc8e60714dfe828e85401d096da006b85",
          "attributes": "",
          "items": [
            {
              "name": "semantic::SemanticValidationError",
              "kind": "enum_item",
              "signature": "pub enum SemanticValidationError {\n    /// The transaction type does not match what this module handles.\n    #[error(\"wrong transaction category: expected {expected:?}, got {actual:?}\")]\n    WrongCategory {\n        expected: TransactionCategory,\n        actual: TransactionCategory,\n    },\n\n    /// A domain-specific validation rule was violated.\n    #[error(\"validation failed: {0}\")]\n    ValidationFailed(String),\n\n    /// The validator module encountered an internal error.\n    #[error(\"internal error: {0}\")]\n    InternalError(String),\n}",
              "docs": "Error type for semantic validation failures.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 15
            },
            {
              "name": "semantic::SemanticValidator",
              "kind": "trait_item",
              "signature": "pub trait SemanticValidator: Send + Sync {\n    /// Returns the human-readable name of this validator module.\n    fn name(&self) -> &str;\n\n    /// Returns the transaction category this module handles.\n    fn category(&self) -> TransactionCategory;\n\n    /// Validate a signed transaction against domain-specific rules.\n    ///\n    /// Returns `Ok(())` if the transaction passes validation, or a\n    /// `SemanticValidationError` describing why it was rejected.\n    fn validate(&self, tx: &SignedTransaction) -> Result<(), SemanticValidationError>;\n}",
              "docs": "A semantic validation module that checks domain-specific rules on transactions.\n\nEach module handles a specific transaction category and applies rules that\ngo beyond structural validation (e.g., lineage checks for identity transactions,\nbond verification for MARS transactions).",
              "attributes": "",
              "line": 37
            },
            {
              "name": "semantic::SemanticValidatorRegistry",
              "kind": "struct_item",
              "signature": "pub struct SemanticValidatorRegistry {\n\n}",
              "docs": "Registry that routes transactions to the appropriate semantic validator modules.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "semantic::SemanticValidatorRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty registry.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "semantic::SemanticValidatorRegistry::with_defaults",
              "kind": "function_item",
              "signature": "pub fn with_defaults() -> Self;",
              "docs": "Create a registry pre-populated with validators that enforce at least\nstate-independent production checks. Unsupported categories fail closed.",
              "attributes": "",
              "line": 66
            },
            {
              "name": "semantic::SemanticValidatorRegistry::with_economics_state",
              "kind": "function_item",
              "signature": "pub fn with_economics_state(state: Arc<dyn EconomicsState>) -> Self;",
              "docs": "Create a default registry with economics checks backed by live state.\n\nConsensus/node production paths should prefer this constructor whenever\nan execution-state snapshot is available; the plain default registry\nkeeps economics fail-closed because balance and nonce checks require\nstate access.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "semantic::SemanticValidatorRegistry::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, validator: Box<dyn SemanticValidator>);",
              "docs": "Register a new semantic validator module.",
              "attributes": "",
              "line": 105
            },
            {
              "name": "semantic::SemanticValidatorRegistry::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, tx: &SignedTransaction) -> Result<(), ConsensusError>;",
              "docs": "Validate a transaction by routing it to all matching validator modules.\n\nA module matches if its category equals the transaction's category.\nAll matching modules must pass for the transaction to be considered valid.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "semantic::SemanticValidatorRegistry::has_validator_for_category",
              "kind": "function_item",
              "signature": "pub fn has_validator_for_category(&self, category: TransactionCategory) -> bool;",
              "docs": "Returns true if this registry has at least one validator for `category`.",
              "attributes": "",
              "line": 145
            },
            {
              "name": "semantic::SemanticValidatorRegistry::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Returns the number of registered validator modules.",
              "attributes": "",
              "line": 150
            },
            {
              "name": "semantic::SemanticValidatorRegistry::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns true if no validator modules are registered.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "semantic::SemanticValidatorRegistry::module_names",
              "kind": "function_item",
              "signature": "pub fn module_names(&self) -> Vec<&str>;",
              "docs": "Returns the names of all registered modules.",
              "attributes": "",
              "line": 160
            },
            {
              "name": "semantic::OasVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct OasVerifyModule;",
              "docs": "Validates OAS identity transactions (lineage checks, DID format, etc.).",
              "attributes": "",
              "line": 194
            },
            {
              "name": "semantic::AttestationVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct AttestationVerifyModule;",
              "docs": "Validates attestation and verifiable credential transactions.",
              "attributes": "",
              "line": 281
            },
            {
              "name": "semantic::GovernanceVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct GovernanceVerifyModule;",
              "docs": "Validates governance proposals and votes.",
              "attributes": "",
              "line": 310
            },
            {
              "name": "semantic::EconomicsState",
              "kind": "trait_item",
              "signature": "pub trait EconomicsState: Send + Sync {\n    fn get_balance(&self, did: &str) -> Result<u64, String>;\n    fn get_nonce(&self, did: &str) -> Result<u64, String>;\n}",
              "docs": "Trait for balance/nonce state lookups needed by economics validation.",
              "attributes": "",
              "line": 366
            },
            {
              "name": "semantic::EconomicsVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct EconomicsVerifyModule {\n\n}",
              "docs": "Validates staking, unstaking, delegation, and reward transactions.",
              "attributes": "",
              "line": 372
            },
            {
              "name": "semantic::EconomicsVerifyModule::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create with no state. State-independent checks still run, but\nstate-dependent economics admission fails closed.",
              "attributes": "",
              "line": 385
            },
            {
              "name": "semantic::EconomicsVerifyModule::with_state",
              "kind": "function_item",
              "signature": "pub fn with_state(state: Arc<dyn EconomicsState>) -> Self;",
              "docs": "Create with a state backend for real validation.",
              "attributes": "",
              "line": 390
            },
            {
              "name": "semantic::MarsVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct MarsVerifyModule;",
              "docs": "Validates MARS registry anchoring transactions.",
              "attributes": "",
              "line": 531
            },
            {
              "name": "semantic::GalVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct GalVerifyModule;",
              "docs": "Validates typed Global Anchor Layer transactions.",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 590
            },
            {
              "name": "semantic::ComputeVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct ComputeVerifyModule;",
              "docs": "Validates compute marketplace transactions (feature-gated).\n\nState-independent rules only \u2014 provider existence, escrow balance, and\ndouble-settle prevention live in the executor.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 817
            },
            {
              "name": "semantic::VigilsVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct VigilsVerifyModule;",
              "docs": "Validates Vigils transactions for state-independent consensus invariants.\n\nState-dependent checks (subscription existence, replay protection, gas tank\nsolvency, source activation, callback scheduling, and cryptographic proof\nverification) live in the executor because they require the block-height\nand execution-state snapshot.",
              "attributes": "",
              "line": 1247
            },
            {
              "name": "semantic::ContractsVerifyModule",
              "kind": "struct_item",
              "signature": "pub struct ContractsVerifyModule;",
              "docs": "Validates `DeployContract`, `CallContract`, `UpgradeContract`, and\n`SetContractPolicy` for *state-independent* properties only.\nState-dependent checks (controller authorization, code-blob presence,\nzone status, mandate / budget) live in the executor.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 1426
            },
            {
              "name": "semantic::ContractsVerifyModule::MAX_CALL_ARGS_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_CALL_ARGS_BYTES: usize;",
              "docs": "Maximum size of a single CallContract `args` JSON value, in bytes.\nHard limit \u2014 large inputs go through cross-zone messaging.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 1432
            },
            {
              "name": "semantic::ContractsVerifyModule::MAX_FUNCTION_NAME_LEN",
              "kind": "const_item",
              "signature": "pub const MAX_FUNCTION_NAME_LEN: usize;",
              "docs": "Maximum length of a contract function name.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 1434
            },
            {
              "name": "semantic::ContractsVerifyModule::MAX_GAS_BUDGET",
              "kind": "const_item",
              "signature": "pub const MAX_GAS_BUDGET: u64;",
              "docs": "Hard upper bound on per-call gas budget (also bounded by tx\n`gas_limit` upstream).",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 1437
            }
          ],
          "parseErrors": false
        },
        {
          "module": "signing",
          "source": "sigil/node/sigil-consensus/src/signing.rs",
          "sha256": "542eebed93668c09a2127566f9b65e0e375574b546ac087e0cf53eee0d111b02",
          "attributes": "",
          "items": [
            {
              "name": "signing::prevote_signing_payload",
              "kind": "function_item",
              "signature": "pub fn prevote_signing_payload(block_hash: &[u8], height: u64, epoch: u64, round: u64) -> Vec<u8>;",
              "docs": "Build canonical payload for prevote signing: prefix || H || height || epoch || round.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "signing::precommit_signing_payload",
              "kind": "function_item",
              "signature": "pub fn precommit_signing_payload(\n    block_hash: &[u8],\n    height: u64,\n    epoch: u64,\n    round: u64,\n) -> Vec<u8>;",
              "docs": "Build canonical payload for precommit signing: prefix || H || height || epoch || round.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "signing::proposal_signing_payload",
              "kind": "function_item",
              "signature": "pub fn proposal_signing_payload(block_hash: &[u8], height: u64, epoch: u64, view: u64) -> Vec<u8>;",
              "docs": "Build canonical payload for proposal signing: prefix || H || height || epoch || view.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "signing::view_change_signing_payload",
              "kind": "function_item",
              "signature": "pub fn view_change_signing_payload(\n    height: u64,\n    epoch: u64,\n    from_view: u64,\n    new_view: u64,\n    reason: &[u8],\n) -> Vec<u8>;",
              "docs": "Build canonical payload for view-change signing:\nprefix || height || epoch || from_view || new_view || reason.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "signing::new_view_signing_payload",
              "kind": "function_item",
              "signature": "pub fn new_view_signing_payload(\n    height: u64,\n    epoch: u64,\n    new_view: u64,\n    certificate_hash: &[u8],\n) -> Vec<u8>;",
              "docs": "Build canonical payload for new-view signing:\nprefix || height || epoch || new_view || view_change_certificate_hash.",
              "attributes": "",
              "line": 70
            },
            {
              "name": "signing::verify_signature",
              "kind": "function_item",
              "signature": "pub fn verify_signature(\n    pubkey_bytes: &[u8],\n    payload: &[u8],\n    signature_bytes: &[u8],\n) -> Result<(), ConsensusError>;",
              "docs": "Verify an Ed25519 signature against a public key and payload.\n\n# Errors\n\nReturns `ConsensusError::InvalidSignature` if:\n- The public key is not exactly 32 bytes or is an invalid Ed25519 point\n- The signature is not exactly 64 bytes\n- The signature does not verify against the payload and public key",
              "attributes": "",
              "line": 93
            }
          ],
          "parseErrors": false
        },
        {
          "module": "validator",
          "source": "sigil/node/sigil-consensus/src/validator.rs",
          "sha256": "99e8d2349bcc96bc6c2a7bcdb790403f6d6e8f1d9358bb15bee8b1c3438b2c2a",
          "attributes": "",
          "items": [
            {
              "name": "validator::Validator",
              "kind": "struct_item",
              "signature": "pub struct Validator {\n/// OAS DID of the validator entity.\n\npub did: String,\n/// Human root DID in the lineage chain (OAS lineage requirement).\n\npub human_root_did: String,\n/// Generation distance from human root.\n\npub generation: u32,\n/// Staked amount in micro-MINT.\n\npub stake: u64,\n/// Whether this validator is a Block Producer or Block Validator.\n\npub mode: ValidatorMode,\n/// Uptime ratio (0.0 to 1.0) measured over the recent window.\n\npub uptime: f64,\n/// OATS composite trust score (0.0 to 1.0).\n\npub trust_score: f64,\n/// Hardware performance metric (0.0 to 1.0).\n\npub hw_performance: f64,\n/// Recent consensus participation rate (0.0 to 1.0).\n\npub participation: f64,\n/// Ed25519 consensus public key bytes.\n\npub consensus_pubkey: Vec<u8>\n}",
              "docs": "A validator in the active consensus set.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "validator::ValidatorSet",
              "kind": "struct_item",
              "signature": "pub struct ValidatorSet {\n\n}",
              "docs": "The active validator set for an epoch.\n\nContains all validators that are eligible to participate in consensus\nduring the current epoch. The total stake is cached for efficient\nquorum threshold calculations.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 40
            },
            {
              "name": "validator::ValidatorSet::new",
              "kind": "function_item",
              "signature": "pub fn new(validators: Vec<Validator>) -> Self;",
              "docs": "Create a new validator set from a list of validators.\n\nComputes the total stake from all validators.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "validator::ValidatorSet::total_stake",
              "kind": "function_item",
              "signature": "pub fn total_stake(&self) -> u64;",
              "docs": "Returns the total stake across all validators.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "validator::ValidatorSet::quorum_threshold",
              "kind": "function_item",
              "signature": "pub fn quorum_threshold(&self) -> u64;",
              "docs": "Returns the quorum threshold: the minimum stake required for 2/3 + 1.\n\nFor Byzantine fault tolerance, we need strictly more than 2/3 of the\ntotal stake. Uses u128 intermediate to prevent overflow when\n`total_stake > u64::MAX / 2`.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "validator::ValidatorSet::get_validator",
              "kind": "function_item",
              "signature": "pub fn get_validator(&self, did: &str) -> Option<&Validator>;",
              "docs": "Look up a validator by DID.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "validator::ValidatorSet::stake_of",
              "kind": "function_item",
              "signature": "pub fn stake_of(&self, did: &str) -> u64;",
              "docs": "Returns the stake of a specific validator, or 0 if not found.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "validator::ValidatorSet::is_block_producer",
              "kind": "function_item",
              "signature": "pub fn is_block_producer(&self, did: &str) -> bool;",
              "docs": "Returns true if the given DID is a Block Producer.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "validator::ValidatorSet::block_producers",
              "kind": "function_item",
              "signature": "pub fn block_producers(&self) -> impl Iterator<Item = &Validator>;",
              "docs": "Returns an iterator over Block Producers.",
              "attributes": "",
              "line": 94
            },
            {
              "name": "validator::ValidatorSet::block_validators",
              "kind": "function_item",
              "signature": "pub fn block_validators(&self) -> impl Iterator<Item = &Validator>;",
              "docs": "Returns an iterator over Block Validators.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "validator::ValidatorSet::contains",
              "kind": "function_item",
              "signature": "pub fn contains(&self, did: &str) -> bool;",
              "docs": "Returns true if the validator set contains the given DID.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "validator::ValidatorSet::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Returns the number of validators in the set.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "validator::ValidatorSet::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns true if the validator set is empty.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "validator::ValidatorSet::iter",
              "kind": "function_item",
              "signature": "pub fn iter(&self) -> impl Iterator<Item = &Validator>;",
              "docs": "Returns an iterator over all validators.",
              "attributes": "",
              "line": 123
            },
            {
              "name": "validator::ValidatorSet::validators",
              "kind": "function_item",
              "signature": "pub fn validators(&self) -> &[Validator];",
              "docs": "Returns a slice of all validators.",
              "attributes": "",
              "line": 128
            }
          ],
          "parseErrors": false
        },
        {
          "module": "view_change",
          "source": "sigil/node/sigil-consensus/src/view_change.rs",
          "sha256": "ea54a867db540ae019df8243ecd5ff5acf7a831003827ea0c9784f14b2eff447",
          "attributes": "",
          "items": [
            {
              "name": "view_change::ViewChangeReason",
              "kind": "enum_item",
              "signature": "pub enum ViewChangeReason {\n    /// The proposer did not produce a block within the timeout.\n    Timeout,\n    /// The proposed block was invalid.\n    InvalidBlock,\n    /// The expected proposer is offline or unreachable.\n    MissingProposer,\n}",
              "docs": "Reason for requesting a view change.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "view_change::ViewChangeReason::signing_tag",
              "kind": "function_item",
              "signature": "pub fn signing_tag(self) -> &'static [u8];",
              "docs": "Stable protocol tag included in signed view-change payloads.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "view_change::ViewChangeMessage",
              "kind": "struct_item",
              "signature": "pub struct ViewChangeMessage {\n/// DID of the requesting validator.\n\npub validator_did: String,\n/// Block height where the view change is requested.\n\npub height: u64,\n/// View this validator is leaving.\n\npub from_view: u64,\n/// New view number being requested.\n\npub view: u64,\n/// Why this validator is requesting a view change.\n\npub reason: ViewChangeReason,\n/// Ed25519 signature over (height || epoch || from_view || view || reason).\n\npub signature: Vec<u8>\n}",
              "docs": "A view change request from a validator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "view_change::ViewChangeCertificate",
              "kind": "struct_item",
              "signature": "pub struct ViewChangeCertificate {\n/// Block height where the view change is requested.\n\npub height: u64,\n/// Epoch for signature payloads.\n\npub epoch: u64,\n/// New view certified by the messages.\n\npub view: u64,\n/// Signed view-change messages forming the quorum certificate.\n\npub messages: Vec<ViewChangeMessage>\n}",
              "docs": "Quorum certificate proving 2/3+ stake requested the same new view.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "view_change::ViewChangeCertificate::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> [u8; 32];",
              "docs": "Hash the certificate into a stable byte string for new-view signing.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "view_change::ViewChangeCertificate::verify",
              "kind": "function_item",
              "signature": "pub fn verify(\n        &self,\n        current_view: u64,\n        validator_set: &ValidatorSet,\n    ) -> Result<(), ConsensusError>;",
              "docs": "Verify every signed view-change message and that the certificate has quorum.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "view_change::NewViewMessage",
              "kind": "struct_item",
              "signature": "pub struct NewViewMessage {\n/// DID of the proposer for the certified new view.\n\npub proposer_did: String,\n/// Block height where the view change applies.\n\npub height: u64,\n/// Certified view number.\n\npub view: u64,\n/// Quorum certificate authorizing the view change.\n\npub certificate: ViewChangeCertificate,\n/// Ed25519 signature over the new-view envelope and certificate digest.\n\npub signature: Vec<u8>\n}",
              "docs": "New-view message from the elected proposer for a certified view.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 173
            },
            {
              "name": "view_change::ViewChangeTracker",
              "kind": "struct_item",
              "signature": "pub struct ViewChangeTracker {\n\n}",
              "docs": "Tracks view change messages and determines when a view change should occur.",
              "attributes": "",
              "line": 187
            },
            {
              "name": "view_change::ViewChangeTracker::new",
              "kind": "function_item",
              "signature": "pub fn new(height: u64, epoch: u64, current_view: u64, validator_set: ValidatorSet) -> Self;",
              "docs": "Create a new view change tracker.",
              "attributes": "",
              "line": 202
            },
            {
              "name": "view_change::ViewChangeTracker::add_view_change",
              "kind": "function_item",
              "signature": "pub fn add_view_change(&mut self, msg: ViewChangeMessage) -> Result<bool, ConsensusError>;",
              "docs": "Add a view change message from a validator.\n\nValidates that:\n- The message is for the current height\n- The message requests a higher view than the current view\n- The validator is in the active set\n- The validator has not already submitted a view change message\n- The Ed25519 signature is valid\n\nReturns `true` if the view change threshold has been reached.",
              "attributes": "",
              "line": 222
            },
            {
              "name": "view_change::ViewChangeTracker::should_change_view",
              "kind": "function_item",
              "signature": "pub fn should_change_view(&self) -> bool;",
              "docs": "Check if the view change threshold has been reached.\n\nA view change occurs when 2/3+ of the total stake has submitted\nview change messages.",
              "attributes": "",
              "line": 290
            },
            {
              "name": "view_change::ViewChangeTracker::ready_view",
              "kind": "function_item",
              "signature": "pub fn ready_view(&self) -> Option<u64>;",
              "docs": "Returns the highest target view with a quorum certificate ready.\n\nIf a lower target view is certified but its elected proposer never\nbroadcasts `NewView`, validators must still be able to certify a later\ntarget view and make progress.",
              "attributes": "",
              "line": 299
            },
            {
              "name": "view_change::ViewChangeTracker::view_change_certificate",
              "kind": "function_item",
              "signature": "pub fn view_change_certificate(&self) -> Option<ViewChangeCertificate>;",
              "docs": "Returns a quorum certificate for the highest ready target view.",
              "attributes": "",
              "line": 318
            },
            {
              "name": "view_change::ViewChangeTracker::current_view",
              "kind": "function_item",
              "signature": "pub fn current_view(&self) -> u64;",
              "docs": "Returns the current view number.",
              "attributes": "",
              "line": 335
            },
            {
              "name": "view_change::ViewChangeTracker::message_count",
              "kind": "function_item",
              "signature": "pub fn message_count(&self) -> usize;",
              "docs": "Returns the number of view change messages received.",
              "attributes": "",
              "line": 340
            },
            {
              "name": "view_change::ViewChangeTracker::view_change_stake",
              "kind": "function_item",
              "signature": "pub fn view_change_stake(&self) -> u64;",
              "docs": "Returns the total stake of validators that have requested a view change.",
              "attributes": "",
              "line": 348
            },
            {
              "name": "view_change::ViewChangeTracker::view_change_stake_for_view",
              "kind": "function_item",
              "signature": "pub fn view_change_stake_for_view(&self, view: u64) -> Option<u64>;",
              "docs": "Returns the total stake requesting a specific target view.",
              "attributes": "",
              "line": 357
            },
            {
              "name": "view_change::ViewChangeTracker::advance_view",
              "kind": "function_item",
              "signature": "pub fn advance_view(&mut self);",
              "docs": "Advance to the next view. Clears accumulated messages.",
              "attributes": "",
              "line": 367
            },
            {
              "name": "view_change::ViewChangeTracker::advance_to_view",
              "kind": "function_item",
              "signature": "pub fn advance_to_view(&mut self, new_view: u64);",
              "docs": "Advance to a certified view. Clears accumulated messages.",
              "attributes": "",
              "line": 372
            },
            {
              "name": "view_change::ViewChangeTracker::reset",
              "kind": "function_item",
              "signature": "pub fn reset(&mut self, new_height: u64, new_epoch: u64);",
              "docs": "Reset the tracker for a new height.",
              "attributes": "",
              "line": 383
            },
            {
              "name": "view_change::next_proposer_after_view_change",
              "kind": "function_item",
              "signature": "pub fn next_proposer_after_view_change(\n    validator_set: &ValidatorSet,\n    config: &ElectionConfig,\n    height: u64,\n    new_view: u64,\n    epoch_seed: &SigilHash,\n) -> String;",
              "docs": "Determine the next proposer after a view change.\n\nThe proposer for view N+1 is elected using the same deterministic algorithm\nbut with a modified seed that incorporates the new view number.",
              "attributes": "",
              "line": 395
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-network",
      "version": "0.1.0",
      "source": "sigil/node/sigil-network",
      "manifestSha256": "9fa7eff7f8b3f989786b39528cbe24788f5ce68dcdf9fe1590159a80095efff4",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-network",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-network/src/lib.rs",
          "sha256": "577aa794089cafe4e91b20e9e6c33d54f71dbab2c6973d038424c3b322790595",
          "attributes": "",
          "items": [
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "ingress",
              "kind": "module",
              "signature": "pub mod ingress;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "message",
              "kind": "module",
              "signature": "pub mod message;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "peer",
              "kind": "module",
              "signature": "pub mod peer;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "propagation",
              "kind": "module",
              "signature": "pub mod propagation;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "scoring",
              "kind": "module",
              "signature": "pub mod scoring;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "topic",
              "kind": "module",
              "signature": "pub mod topic;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "pub use config::{GossipsubConfig, NatConfig, NetworkConfig, NetworkConfigError, TopicConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{GossipsubConfig, NatConfig, NetworkConfig, NetworkConfigError, TopicConfig};",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "pub use error::{NetworkError, NetworkResult};",
              "kind": "use_declaration",
              "signature": "pub use error::{NetworkError, NetworkResult};",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "pub use ingress::{\n    IngressConfigError, StakeWeightedIngressConfig, DEFAULT_MAX_SENDER_QUOTA_PER_WINDOW,\n    DEFAULT_STAKE_QUOTA_PER_UNIT, DEFAULT_STAKE_QUOTA_UNIT,\n};",
              "kind": "use_declaration",
              "signature": "pub use ingress::{\n    IngressConfigError, StakeWeightedIngressConfig, DEFAULT_MAX_SENDER_QUOTA_PER_WINDOW,\n    DEFAULT_STAKE_QUOTA_PER_UNIT, DEFAULT_STAKE_QUOTA_UNIT,\n};",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use message::{\n    BlockAnnouncement, BlockShardAnnouncement, BlockSyncRequest, BlockSyncResponse, MessagePayload,\n    NetworkMessage, PeerInfoRequest, PeerInfoResponse, PreCommitMessage, PreVoteMessage,\n    StateSyncRequest, StateSyncResponse, TransactionAnnouncement,\n};",
              "kind": "use_declaration",
              "signature": "pub use message::{\n    BlockAnnouncement, BlockShardAnnouncement, BlockSyncRequest, BlockSyncResponse, MessagePayload,\n    NetworkMessage, PeerInfoRequest, PeerInfoResponse, PreCommitMessage, PreVoteMessage,\n    StateSyncRequest, StateSyncResponse, TransactionAnnouncement,\n};",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "pub use peer::{\n    ConnectionState, PeerAdmission, PeerDiversity, PeerInfo, PeerRegistry, PeerSecurityConfig,\n};",
              "kind": "use_declaration",
              "signature": "pub use peer::{\n    ConnectionState, PeerAdmission, PeerDiversity, PeerInfo, PeerRegistry, PeerSecurityConfig,\n};",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "pub use propagation::{\n    plan_block_propagation, recover_payload_from_shards, BlockPropagationConfig,\n    BlockPropagationPlan, BlockPropagationShard, PeerShardAssignment, PropagationConfigError,\n    PropagationPeer, QuicIngressConfig, DEFAULT_BLOCK_SHARD_BYTES, DEFAULT_MAX_BLOCK_PAYLOAD_BYTES,\n    DEFAULT_PARITY_SHARDS, DEFAULT_PROPAGATION_FANOUT,\n};",
              "kind": "use_declaration",
              "signature": "pub use propagation::{\n    plan_block_propagation, recover_payload_from_shards, BlockPropagationConfig,\n    BlockPropagationPlan, BlockPropagationShard, PeerShardAssignment, PropagationConfigError,\n    PropagationPeer, QuicIngressConfig, DEFAULT_BLOCK_SHARD_BYTES, DEFAULT_MAX_BLOCK_PAYLOAD_BYTES,\n    DEFAULT_PARITY_SHARDS, DEFAULT_PROPAGATION_FANOUT,\n};",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use scoring::{GossipRateLimitConfig, GossipRateLimiter, PeerScoring};",
              "kind": "use_declaration",
              "signature": "pub use scoring::{GossipRateLimitConfig, GossipRateLimiter, PeerScoring};",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use topic::GossipTopic;",
              "kind": "use_declaration",
              "signature": "pub use topic::GossipTopic;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use message::ComputeReceiptMessage;",
              "kind": "use_declaration",
              "signature": "pub use message::ComputeReceiptMessage;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 43
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/node/sigil-network/src/config.rs",
          "sha256": "e13b53ac23e6afcda0fe0e70da55f3912733308aa6a36c1b44ba2eed3b6cedcb",
          "attributes": "",
          "items": [
            {
              "name": "config::NetworkConfig",
              "kind": "struct_item",
              "signature": "pub struct NetworkConfig {\n/// P2P listen address (e.g. \"0.0.0.0:26656\").\n\npub listen_addr: String,\n/// External address advertised to peers (e.g. \"1.2.3.4:26656\").\n\n/// If `None`, the node will attempt to auto-detect its external address.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub external_addr: Option<String>,\n/// Seed node addresses for initial peer discovery.\n\npub seed_nodes: Vec<String>,\n/// Persistent peer addresses that should always be connected.\n\n#[serde(default)]\npub persistent_peers: Vec<String>,\n/// Maximum number of inbound connections.\n\npub max_inbound: u32,\n/// Maximum number of outbound connections.\n\npub max_outbound: u32,\n/// NAT traversal configuration.\n\npub nat: NatConfig,\n/// Gossipsub protocol parameters.\n\npub gossipsub: GossipsubConfig,\n/// QUIC transaction ingress parameters.\n\n#[serde(default)]\npub quic_ingress: QuicIngressConfig,\n/// Stake-weighted sender quota parameters.\n\n#[serde(default)]\npub stake_weighted_ingress: StakeWeightedIngressConfig,\n/// Erasure-sharded block propagation parameters.\n\n#[serde(default)]\npub block_propagation: BlockPropagationConfig,\n/// Connection timeout in seconds.\n\npub connection_timeout_secs: u64,\n/// Dial-back interval in seconds for persistent peers.\n\npub dial_back_interval_secs: u64,\n/// Enable Kademlia DHT for peer discovery.\n\npub enable_dht: bool,\n/// Protocol identifier prefix (e.g. \"/sigil/testnet-1\").\n\npub protocol_prefix: String\n}",
              "docs": "Complete network configuration for a Sigil node.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "config::NetworkConfig::testnet_default",
              "kind": "function_item",
              "signature": "pub fn testnet_default() -> Self;",
              "docs": "Create a testnet network configuration with sensible defaults.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "config::NetworkConfig::max_peers",
              "kind": "function_item",
              "signature": "pub fn max_peers(&self) -> u32;",
              "docs": "Total maximum peer count (inbound + outbound).",
              "attributes": "",
              "line": 98
            },
            {
              "name": "config::NetworkConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), NetworkConfigError>;",
              "docs": "Validate the network configuration.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "config::NatConfig",
              "kind": "struct_item",
              "signature": "pub struct NatConfig {\n/// Enable UPnP port mapping.\n\npub enable_upnp: bool,\n/// Enable NAT-PMP port mapping.\n\npub enable_nat_pmp: bool,\n/// Enable relay circuit for nodes behind restrictive NATs.\n\npub enable_relay: bool,\n/// Enable hole punching for direct connections through NAT.\n\npub enable_hole_punching: bool\n}",
              "docs": "NAT traversal configuration.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 129
            },
            {
              "name": "config::GossipsubConfig",
              "kind": "struct_item",
              "signature": "pub struct GossipsubConfig {\n/// Target number of peers in the mesh for each topic.\n\npub mesh_n: u32,\n/// Minimum number of peers in the mesh before requesting more.\n\npub mesh_n_low: u32,\n/// Maximum number of peers in the mesh before pruning excess.\n\npub mesh_n_high: u32,\n/// Number of lazy (gossip-only) peers per topic.\n\npub gossip_lazy: u32,\n/// Heartbeat interval in milliseconds.\n\npub heartbeat_interval_ms: u64,\n/// Maximum message size in bytes.\n\npub max_message_size: u32,\n/// Time-to-live for seen message deduplication cache (seconds).\n\npub seen_messages_ttl_secs: u64,\n/// Maximum number of messages in the deduplication cache.\n\npub seen_messages_capacity: u32,\n/// Per-topic overrides.\n\n#[serde(default)]\npub topic_overrides: Vec<TopicConfig>\n}",
              "docs": "Gossipsub protocol parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 153
            },
            {
              "name": "config::GossipsubConfig::testnet_default",
              "kind": "function_item",
              "signature": "pub fn testnet_default() -> Self;",
              "docs": "Testnet gossipsub defaults with smaller mesh and faster heartbeat.",
              "attributes": "",
              "line": 193
            },
            {
              "name": "config::GossipsubConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), NetworkConfigError>;",
              "docs": "Validate gossipsub parameters.",
              "attributes": "",
              "line": 223
            },
            {
              "name": "config::TopicConfig",
              "kind": "struct_item",
              "signature": "pub struct TopicConfig {\n/// Which gossip topic this override applies to.\n\npub topic: GossipTopic,\n/// Override mesh_n for this topic.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mesh_n: Option<u32>,\n/// Override mesh_n_low for this topic.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mesh_n_low: Option<u32>,\n/// Override mesh_n_high for this topic.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub mesh_n_high: Option<u32>,\n/// Override max_message_size for this topic.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_message_size: Option<u32>\n}",
              "docs": "Per-topic gossipsub parameter overrides.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 250
            },
            {
              "name": "config::NetworkConfigError",
              "kind": "enum_item",
              "signature": "pub enum NetworkConfigError {\n    #[error(\"invalid address: {0}\")]\n    InvalidAddress(String),\n\n    #[error(\"invalid peer limits: {0}\")]\n    InvalidPeerLimits(String),\n\n    #[error(\"invalid timeout: {0}\")]\n    InvalidTimeout(String),\n\n    #[error(\"invalid gossipsub config: {0}\")]\n    InvalidGossipsub(String),\n\n    #[error(\"invalid ingress config: {0}\")]\n    InvalidIngress(String),\n\n    #[error(\"invalid propagation config: {0}\")]\n    InvalidPropagation(String),\n}",
              "docs": "Errors in network configuration.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 269
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-network/src/error.rs",
          "sha256": "3822616f803d441187535a75e0f15c6a7bc26c263283b557a834b0e7cea6eef6",
          "attributes": "",
          "items": [
            {
              "name": "error::NetworkError",
              "kind": "enum_item",
              "signature": "pub enum NetworkError {\n    /// The specified peer was not found in the registry.\n    #[error(\"peer not found: {0}\")]\n    PeerNotFound(String),\n\n    /// The specified peer has been banned and cannot communicate.\n    #[error(\"peer banned: {0}\")]\n    PeerBanned(String),\n\n    /// The peer registry has reached its maximum capacity.\n    #[error(\"maximum peer count reached\")]\n    MaxPeersReached,\n\n    /// A received message failed validation.\n    #[error(\"invalid message: {0}\")]\n    InvalidMessage(String),\n\n    /// Peer information failed validation.\n    #[error(\"invalid peer info: {0}\")]\n    InvalidPeerInfo(String),\n\n    /// Peer admission failed a Sybil or eclipse-resistance gate.\n    #[error(\"peer admission rejected: {0}\")]\n    PeerAdmissionRejected(String),\n\n    /// A peer exceeded a bounded per-peer or per-topic message rate.\n    #[error(\"peer rate limited: {peer_id} on {topic}\")]\n    RateLimited {\n        /// Peer ID being rate limited.\n        peer_id: String,\n        /// Gossip topic label.\n        topic: String,\n    },\n\n    /// The remote peer is running an incompatible protocol version.\n    #[error(\"protocol mismatch: expected {expected}, got {got}\")]\n    ProtocolMismatch {\n        /// The version this node expects.\n        expected: String,\n        /// The version the remote peer advertised.\n        got: String,\n    },\n\n    /// The remote peer is on a different chain.\n    #[error(\"chain mismatch: expected {expected}, got {got}\")]\n    ChainMismatch {\n        /// The chain ID this node expects.\n        expected: String,\n        /// The chain ID the remote peer advertised.\n        got: String,\n    },\n\n    /// A connection attempt to a peer failed.\n    #[error(\"connection failed: {0}\")]\n    ConnectionFailed(String),\n\n    /// An operation timed out.\n    #[error(\"operation timed out\")]\n    Timeout,\n\n    /// Serialization or deserialization failure.\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n}",
              "docs": "Network-layer errors for the Sigil P2P subsystem.\nErrors that can occur in the Sigil networking layer.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 5
            },
            {
              "name": "error::NetworkResult",
              "kind": "type_item",
              "signature": "pub type NetworkResult<T> = Result<T, NetworkError>;",
              "docs": "Convenience alias for network results.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "error::NetworkError::is_peer_fault",
              "kind": "function_item",
              "signature": "pub fn is_peer_fault(&self) -> bool;",
              "docs": "Returns `true` if this error indicates the peer should be penalized.",
              "attributes": "",
              "line": 75
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ingress",
          "source": "sigil/node/sigil-network/src/ingress.rs",
          "sha256": "1ebca49b39bbb7b401e4f17fae75bab73a61dc8c3ff04533f256cdabca204d56",
          "attributes": "",
          "items": [
            {
              "name": "ingress::DEFAULT_STAKE_QUOTA_UNIT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_STAKE_QUOTA_UNIT: u64;",
              "docs": "Default stake unit for one additional ingress quota step.",
              "attributes": "",
              "line": 10
            },
            {
              "name": "ingress::DEFAULT_STAKE_QUOTA_PER_UNIT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_STAKE_QUOTA_PER_UNIT: u32;",
              "docs": "Default additional transactions per window per stake unit.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "ingress::DEFAULT_MAX_SENDER_QUOTA_PER_WINDOW",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_SENDER_QUOTA_PER_WINDOW: u32;",
              "docs": "Default hard cap for one sender in a single ingress window.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "ingress::StakeWeightedIngressConfig",
              "kind": "struct_item",
              "signature": "pub struct StakeWeightedIngressConfig {\n/// Enable stake-weighted sender quotas.\n\npub enabled: bool,\n/// micro-MINT stake needed for one quota increment.\n\npub stake_quota_unit: u64,\n/// Extra accepted txs per window per quota unit.\n\npub quota_per_unit: u32,\n/// Hard cap for one sender in a single window.\n\npub max_sender_quota_per_window: u32\n}",
              "docs": "Deterministic stake-weighted ingress parameters.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "ingress::StakeWeightedIngressConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), IngressConfigError>;",
              "docs": "Validate arithmetic and quota bounds.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "ingress::StakeWeightedIngressConfig::quota_for_stake",
              "kind": "function_item",
              "signature": "pub fn quota_for_stake(&self, base_unstaked_quota: u32, stake_micro_mint: u64) -> u32;",
              "docs": "Compute the sender quota for the current admission window.\n\n`base_unstaked_quota` is supplied by the caller because the node scales\nit with target block time. Stake adds priority without ever reducing the\nlegacy unstaked floor.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "ingress::IngressConfigError",
              "kind": "enum_item",
              "signature": "pub enum IngressConfigError {\n    #[error(\"stake_quota_unit must be > 0 when stake-weighted ingress is enabled\")]\n    InvalidStakeUnit,\n    #[error(\"max_sender_quota_per_window must be > 0 when stake-weighted ingress is enabled\")]\n    InvalidMaxQuota,\n}",
              "docs": "Error returned by ingress policy validation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 73
            }
          ],
          "parseErrors": false
        },
        {
          "module": "message",
          "source": "sigil/node/sigil-network/src/message.rs",
          "sha256": "f75df282b65e8b7d797e48432369556a86e755b1d864a4a5b0d142c74c204677",
          "attributes": "",
          "items": [
            {
              "name": "message::NetworkMessage",
              "kind": "struct_item",
              "signature": "pub struct NetworkMessage {\n/// Unique message identifier (UUID v4 recommended).\n\npub id: String,\n/// OAS DID of the sender.\n\npub sender_did: String,\n/// Unix timestamp (seconds) when the message was created.\n\npub timestamp: u64,\n/// The type-tagged payload.\n\npub payload: MessagePayload\n}",
              "docs": "Top-level network message envelope.\n\nEvery message on the Sigil P2P network is wrapped in this struct,\nwhich carries sender identity, a unique ID, and a timestamp for\ndeduplication and ordering.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "message::NetworkMessage::content_hash",
              "kind": "function_item",
              "signature": "pub fn content_hash(&self) -> Result<SigilHash, serde_json::Error>;",
              "docs": "Compute a content hash of this message for deduplication.",
              "attributes": "",
              "line": 31
            },
            {
              "name": "message::MessagePayload",
              "kind": "enum_item",
              "signature": "pub enum MessagePayload {\n    // -- Gossipsub ----------------------------------------------------------\n    /// A newly produced block announcement.\n    NewBlock(BlockAnnouncement),\n    /// One erasure shard of a newly produced block.\n    BlockShard(BlockShardAnnouncement),\n    /// A new transaction entering the mempool.\n    NewTransaction(TransactionAnnouncement),\n    /// A pre-vote from the consensus layer.\n    PreVote(PreVoteMessage),\n    /// A pre-commit from the consensus layer.\n    PreCommit(PreCommitMessage),\n    /// A compute receipt announcement (feature-gated).\n    #[cfg(feature = \"compute\")]\n    ComputeReceipt(ComputeReceiptMessage),\n\n    // -- Request / Response -------------------------------------------------\n    /// Request a range of blocks for sync.\n    BlockRequest(BlockSyncRequest),\n    /// Response containing a batch of blocks.\n    BlockResponse(BlockSyncResponse),\n    /// Request a slice of the state trie.\n    StateRequest(StateSyncRequest),\n    /// Response containing state key-value pairs.\n    StateResponse(StateSyncResponse),\n    /// Request peer metadata.\n    PeerInfoRequest(PeerInfoRequest),\n    /// Response with peer metadata.\n    PeerInfoResponse(PeerInfoResponse),\n\n    // -- Tower Coordination -------------------------------------------------\n    /// A newly produced Tower block announcement.\n    TowerBlock(TowerBlockAnnouncement),\n    /// A Tower Committee vote on a proposal (slashing, param change, etc.).\n    TowerCommitteeVote(TowerCommitteeVoteMessage),\n    /// Slashing evidence submitted to the Tower chain.\n    TowerSlashingEvidence(TowerSlashingEvidenceMessage),\n    /// A Casper FFG finality vote.\n    TowerFinalityVote(TowerFinalityVoteMessage),\n    /// A Tower Casper FFG attestation from an execution-chain validator.\n    ///\n    /// Broadcast on [`GossipTopic::TowerAttestations`] at every epoch\n    /// boundary by any validator that is a member of the Tower committee.\n    /// Recipients verify the signature, persist the vote via\n    /// `commit_tower_tx`, and apply the Casper FFG rules to advance\n    /// [`sigil_tower::finality::FinalityState`].\n    TowerAttestation(TowerAttestationMessage),\n\n    // -- CZAC Cross-Zone Communication --------------------------------------\n    /// CZAC channel operation message (open, close, heartbeat).\n    CzacChannelOp(CzacChannelOpMessage),\n}",
              "docs": "Message payloads organized by gossipsub topic or request/response pair.",
              "attributes": "#[allow(clippy::large_enum_variant)]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", content = \"data\")]",
              "line": 45
            },
            {
              "name": "message::BlockAnnouncement",
              "kind": "struct_item",
              "signature": "pub struct BlockAnnouncement {\n/// The full block.\n\npub block: Block,\n/// Ed25519 signature of the block hash by the proposer.\n\npub proposer_signature: Vec<u8>\n}",
              "docs": "Announces a newly produced block along with the proposer's signature.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 104
            },
            {
              "name": "message::BlockShardAnnouncement",
              "kind": "struct_item",
              "signature": "pub struct BlockShardAnnouncement {\n/// Shard metadata and bytes.\n\npub shard: BlockPropagationShard,\n/// Ed25519 signature of `(block_hash || shard_index || payload_hash)` by\n\n/// the proposer. Signature verification is transport-layer specific.\n\npub proposer_signature: Vec<u8>\n}",
              "docs": "Announces one erasure shard for stake-weighted block propagation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 113
            },
            {
              "name": "message::TransactionAnnouncement",
              "kind": "struct_item",
              "signature": "pub struct TransactionAnnouncement {\n/// The signed transaction.\n\npub tx: SignedTransaction\n}",
              "docs": "Announces a new signed transaction entering the mempool.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 123
            },
            {
              "name": "message::PreVoteMessage",
              "kind": "struct_item",
              "signature": "pub struct PreVoteMessage {\n/// The block height being voted on.\n\npub height: u64,\n/// Hash of the block being voted for.\n\npub block_hash: SigilHash,\n/// OAS DID of the voter.\n\npub voter_did: String,\n/// Ed25519 signature of (height || block_hash).\n\npub signature: Vec<u8>\n}",
              "docs": "A pre-vote message from the MACA consensus protocol.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 130
            },
            {
              "name": "message::PreCommitMessage",
              "kind": "struct_item",
              "signature": "pub struct PreCommitMessage {\n/// The block height being committed.\n\npub height: u64,\n/// Hash of the block being committed.\n\npub block_hash: SigilHash,\n/// OAS DID of the voter.\n\npub voter_did: String,\n/// Ed25519 signature of (height || block_hash).\n\npub signature: Vec<u8>\n}",
              "docs": "A pre-commit message from the MACA consensus protocol.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 143
            },
            {
              "name": "message::ComputeReceiptMessage",
              "kind": "struct_item",
              "signature": "pub struct ComputeReceiptMessage {\n/// Hash of the full receipt.\n\npub receipt_hash: SigilHash,\n/// OAS DID of the compute provider.\n\npub provider_did: String,\n/// OAS DID of the compute consumer.\n\npub consumer_did: String\n}",
              "docs": "Announces a compute receipt for the decentralized compute marketplace.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 157
            },
            {
              "name": "message::BlockSyncRequest",
              "kind": "struct_item",
              "signature": "pub struct BlockSyncRequest {\n/// First block height to fetch (inclusive).\n\npub start_height: u64,\n/// Maximum number of blocks to return.\n\npub max_blocks: u32\n}",
              "docs": "Request a contiguous range of blocks starting at `start_height`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 172
            },
            {
              "name": "message::BlockSyncResponse",
              "kind": "struct_item",
              "signature": "pub struct BlockSyncResponse {\n/// The requested blocks in ascending height order.\n\npub blocks: Vec<Block>\n}",
              "docs": "Response containing a batch of blocks for sync.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 181
            },
            {
              "name": "message::StateSyncRequest",
              "kind": "struct_item",
              "signature": "pub struct StateSyncRequest {\n/// State partition identifier (e.g. \"accounts\", \"zones\").\n\npub partition: String,\n/// Key to start scanning from (lexicographic order).\n\npub start_key: Vec<u8>,\n/// Maximum number of entries to return.\n\npub limit: u32\n}",
              "docs": "Request a slice of the state trie within a partition.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 188
            },
            {
              "name": "message::StateSyncResponse",
              "kind": "struct_item",
              "signature": "pub struct StateSyncResponse {\n/// Key-value pairs from the state trie.\n\npub entries: Vec<(Vec<u8>, Vec<u8>)>,\n/// `true` if there are more entries beyond this batch.\n\npub has_more: bool\n}",
              "docs": "Response containing state key-value pairs.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 199
            },
            {
              "name": "message::PeerInfoRequest",
              "kind": "struct_item",
              "signature": "pub struct PeerInfoRequest {\n\n}",
              "docs": "Request basic information about a peer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 208
            },
            {
              "name": "message::PeerInfoResponse",
              "kind": "struct_item",
              "signature": "pub struct PeerInfoResponse {\n/// The peer's unique identifier.\n\npub peer_id: String,\n/// Chain ID the peer is on.\n\npub chain_id: String,\n/// The peer's current block height.\n\npub current_height: u64,\n/// The peer's current epoch.\n\npub current_epoch: u64,\n/// OAS DID if the peer is a registered validator.\n\npub validator_did: Option<String>,\n/// Protocol version the peer is running.\n\npub protocol_version: String\n}",
              "docs": "Response with peer metadata used during handshake and sync decisions.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 212
            },
            {
              "name": "message::TowerBlockAnnouncement",
              "kind": "struct_item",
              "signature": "pub struct TowerBlockAnnouncement {\n/// Tower slot number.\n\npub slot: u64,\n/// Tower epoch.\n\npub epoch: u64,\n/// Block hash.\n\npub block_hash: SigilHash,\n/// Proposer's OAS DID.\n\npub proposer_did: String,\n/// Ed25519 signature by the proposer.\n\npub proposer_signature: Vec<u8>\n}",
              "docs": "Announces a newly produced Tower block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 233
            },
            {
              "name": "message::TowerCommitteeVoteMessage",
              "kind": "struct_item",
              "signature": "pub struct TowerCommitteeVoteMessage {\n/// Proposal ID being voted on.\n\npub proposal_id: String,\n/// Voter's OAS DID (must be Tower Committee member).\n\npub voter_did: String,\n/// Approve or reject.\n\npub approve: bool,\n/// Ed25519 signature.\n\npub signature: Vec<u8>\n}",
              "docs": "A vote from a Tower Committee member.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 248
            },
            {
              "name": "message::TowerSlashingEvidenceMessage",
              "kind": "struct_item",
              "signature": "pub struct TowerSlashingEvidenceMessage {\n/// Evidence type: \"double_sign\", \"downtime\", \"invalid_block\", \"invalid_vote\".\n\npub evidence_type: String,\n/// Accused validator DID.\n\npub accused_did: String,\n/// Slot of the alleged offense.\n\npub offense_slot: u64,\n/// Hash of the serialized evidence payload.\n\npub evidence_hash: SigilHash,\n/// Submitter's DID.\n\npub submitter_did: String\n}",
              "docs": "Slashing evidence broadcast.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 261
            },
            {
              "name": "message::TowerFinalityVoteMessage",
              "kind": "struct_item",
              "signature": "pub struct TowerFinalityVoteMessage {\n/// Source epoch (previously justified).\n\npub source_epoch: u64,\n/// Target epoch.\n\npub target_epoch: u64,\n/// Block hash at target epoch boundary.\n\npub target_block_hash: SigilHash,\n/// Voter's OAS DID.\n\npub voter_did: String,\n/// Ed25519 signature over (source_epoch || target_epoch || target_block_hash).\n\npub signature: Vec<u8>\n}",
              "docs": "A Casper FFG finality vote broadcast.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 276
            },
            {
              "name": "message::TowerAttestationMessage",
              "kind": "struct_item",
              "signature": "pub struct TowerAttestationMessage {\n/// Source epoch (must be a justified checkpoint).\n\npub source_epoch: u64,\n/// Target epoch being attested (must be source_epoch + 1 for finalization).\n\npub target_epoch: u64,\n/// Hash of the execution block at the target epoch boundary.\n\npub target_block_hash: SigilHash,\n/// Stake weight of this attestation (micro-MINT).\n\npub stake: u64,\n/// OAS DID of the attesting validator.\n\npub validator_did: String,\n/// Ed25519 signature over `source_epoch_be8 || target_epoch_be8 || target_block_hash_bytes`.\n\npub signature: Vec<u8>\n}",
              "docs": "A Tower Casper FFG attestation broadcast by an execution-chain validator.\n\nValidators that are Tower committee members emit this message at every\nepoch boundary. The `source_epoch` must be the currently justified epoch;\n`target_epoch` is the new epoch. `signature` covers the canonical\nattestation bytes: `source_epoch || target_epoch || target_block_hash`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 296
            },
            {
              "name": "message::CzacChannelOpMessage",
              "kind": "struct_item",
              "signature": "pub struct CzacChannelOpMessage {\n/// Channel ID.\n\npub channel_id: String,\n/// Operation type: \"open\", \"close\", \"heartbeat\", \"dispute\".\n\npub operation: String,\n/// Sender's OAS DID.\n\npub sender_did: String,\n/// Target zone.\n\npub target_zone: String,\n/// Sequence number for ordering.\n\npub sequence: u64,\n/// Optional payload hash.\n\npub payload_hash: Option<SigilHash>\n}",
              "docs": "CZAC channel operation broadcast.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 317
            }
          ],
          "parseErrors": false
        },
        {
          "module": "peer",
          "source": "sigil/node/sigil-network/src/peer.rs",
          "sha256": "aa93cbb6f94e66934fc17b6b8ddf663a2c8ae134bda4b776ebe821ab233d89bf",
          "attributes": "",
          "items": [
            {
              "name": "peer::PeerInfo",
              "kind": "struct_item",
              "signature": "pub struct PeerInfo {\n/// Unique peer identifier (e.g. libp2p PeerId).\n\npub peer_id: String,\n/// OAS DID of the peer, if known.\n\npub did: Option<String>,\n/// Chain ID the peer is operating on.\n\npub chain_id: String,\n/// The peer's latest reported block height.\n\npub current_height: u64,\n/// The peer's latest reported epoch.\n\npub current_epoch: u64,\n/// Protocol version the peer advertised.\n\npub protocol_version: String,\n/// Whether this peer is a registered validator.\n\npub is_validator: bool,\n/// Reputation score in `[0.0, 1.0]`.\n\npub reputation_score: f64,\n/// Unix timestamp of last successful communication.\n\npub last_seen: u64,\n/// Current connection state.\n\npub connection_state: ConnectionState\n}",
              "docs": "Metadata and state for a single known peer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "peer::ConnectionState",
              "kind": "enum_item",
              "signature": "pub enum ConnectionState {\n    /// Actively connected and exchanging messages.\n    Connected,\n    /// Not currently connected.\n    Disconnected,\n    /// Connection attempt in progress.\n    Connecting,\n    /// Peer has been banned due to misbehaviour.\n    Banned,\n}",
              "docs": "Connection state of a peer.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "peer::ConnectionState::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Returns `true` if the peer is in a live connection state.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "peer::PeerAdmission",
              "kind": "enum_item",
              "signature": "pub enum PeerAdmission {\n    /// Staked validator DID with a recent chain attestation.\n    StakedValidator { did: String, attested_epoch: u64 },\n    /// Operator allowlisted by launch/bootstrap configuration.\n    AllowlistedBootstrap { operator_id: String },\n    /// Unstaked peer proof-of-work nonce.\n    ProofOfWork { nonce: u64 },\n}",
              "docs": "Proof class a peer presents at admission time.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "peer::PeerDiversity",
              "kind": "struct_item",
              "signature": "pub struct PeerDiversity {\npub asn: u32,\npub geo_region: String,\npub cloud_provider: String,\npub lineage_group: String\n}",
              "docs": "Eclipse-resistance metadata for a peer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 79
            },
            {
              "name": "peer::PeerSecurityConfig",
              "kind": "struct_item",
              "signature": "pub struct PeerSecurityConfig {\n/// Enforce Sybil proof checks in [`PeerRegistry::add_peer_with_admission`].\n\npub enforce_admission: bool,\n/// Current epoch for freshness checks.\n\npub current_epoch: u64,\n/// Maximum age for validator attestations.\n\npub max_attestation_age_epochs: u64,\n/// Minimum leading-zero PoW bits for unstaked peers.\n\npub min_pow_leading_zero_bits: u32,\n/// Allowlisted bootstrap operator identifiers.\n\npub allowlisted_bootstrap_operators: HashSet<String>,\n/// Enforce ASN/region/cloud diversity once enough peers are present.\n\npub enforce_diversity: bool,\n/// Minimum distinct ASNs in the connected set.\n\npub min_asns: usize,\n/// Minimum distinct geo regions in the connected set.\n\npub min_geo_regions: usize,\n/// Minimum distinct cloud providers in the connected set.\n\npub min_cloud_providers: usize,\n/// Maximum fraction of peers sharing one lineage group.\n\npub max_lineage_fraction: f64\n}",
              "docs": "Peer admission and diversity policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 88
            },
            {
              "name": "peer::PeerRegistry",
              "kind": "struct_item",
              "signature": "pub struct PeerRegistry {\n\n}",
              "docs": "Registry managing known peers and their metadata.\n\nThe registry enforces a maximum peer count and provides query methods\nfor sync target selection and validator discovery.",
              "attributes": "#[derive(Debug)]",
              "line": 212
            },
            {
              "name": "peer::PeerRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new(max_peers: usize) -> Self;",
              "docs": "Create a new registry with the given maximum peer count.",
              "attributes": "",
              "line": 233
            },
            {
              "name": "peer::PeerRegistry::with_security",
              "kind": "function_item",
              "signature": "pub fn with_security(max_peers: usize, security: PeerSecurityConfig) -> Self;",
              "docs": "Create a new registry with explicit security policy.",
              "attributes": "",
              "line": 238
            },
            {
              "name": "peer::PeerRegistry::peer_count",
              "kind": "function_item",
              "signature": "pub fn peer_count(&self) -> usize;",
              "docs": "Number of peers currently in the registry.",
              "attributes": "",
              "line": 249
            },
            {
              "name": "peer::PeerRegistry::add_peer",
              "kind": "function_item",
              "signature": "pub fn add_peer(&mut self, info: PeerInfo) -> NetworkResult<()>;",
              "docs": "Add a new peer to the registry.\n\nReturns an error if the registry is full or if a peer with the\nsame ID already exists (use [`update_peer`](Self::update_peer) to\nmodify existing peers).",
              "attributes": "",
              "line": 258
            },
            {
              "name": "peer::PeerRegistry::add_peer_with_admission",
              "kind": "function_item",
              "signature": "pub fn add_peer_with_admission(\n        &mut self,\n        info: PeerInfo,\n        admission: PeerAdmission,\n        diversity: Option<PeerDiversity>,\n    ) -> NetworkResult<()>;",
              "docs": "Add a peer after validating its admission proof and diversity metadata.",
              "attributes": "",
              "line": 263
            },
            {
              "name": "peer::PeerRegistry::remove_peer",
              "kind": "function_item",
              "signature": "pub fn remove_peer(&mut self, peer_id: &str) -> NetworkResult<PeerInfo>;",
              "docs": "Remove a peer from the registry by ID.\n\nReturns the removed [`PeerInfo`] or an error if not found.",
              "attributes": "",
              "line": 357
            },
            {
              "name": "peer::PeerRegistry::get_peer",
              "kind": "function_item",
              "signature": "pub fn get_peer(&self, peer_id: &str) -> Option<&PeerInfo>;",
              "docs": "Look up a peer by ID.",
              "attributes": "",
              "line": 366
            },
            {
              "name": "peer::PeerRegistry::get_peer_mut",
              "kind": "function_item",
              "signature": "pub fn get_peer_mut(&mut self, peer_id: &str) -> Option<&mut PeerInfo>;",
              "docs": "Get mutable access to a peer's info.",
              "attributes": "",
              "line": 371
            },
            {
              "name": "peer::PeerRegistry::get_scoring",
              "kind": "function_item",
              "signature": "pub fn get_scoring(&self, peer_id: &str) -> Option<&PeerScoring>;",
              "docs": "Get a peer's scoring state.",
              "attributes": "",
              "line": 376
            },
            {
              "name": "peer::PeerRegistry::get_scoring_mut",
              "kind": "function_item",
              "signature": "pub fn get_scoring_mut(&mut self, peer_id: &str) -> Option<&mut PeerScoring>;",
              "docs": "Get mutable access to a peer's scoring state.",
              "attributes": "",
              "line": 381
            },
            {
              "name": "peer::PeerRegistry::update_peer",
              "kind": "function_item",
              "signature": "pub fn update_peer<F>(&mut self, peer_id: &str, updater: F) -> NetworkResult<()>\n    where\n        F: FnOnce(&mut PeerInfo),;",
              "docs": "Update an existing peer's metadata.\n\nThe `updater` closure receives a mutable reference to the peer info.\nReturns an error if the peer is not found.",
              "attributes": "",
              "line": 389
            },
            {
              "name": "peer::PeerRegistry::connected_peers",
              "kind": "function_item",
              "signature": "pub fn connected_peers(&self) -> impl Iterator<Item = &PeerInfo>;",
              "docs": "Iterate over all currently connected peers.",
              "attributes": "",
              "line": 402
            },
            {
              "name": "peer::PeerRegistry::validator_peers",
              "kind": "function_item",
              "signature": "pub fn validator_peers(&self) -> impl Iterator<Item = &PeerInfo>;",
              "docs": "Iterate over all peers that are registered validators.",
              "attributes": "",
              "line": 409
            },
            {
              "name": "peer::PeerRegistry::best_peers_for_sync",
              "kind": "function_item",
              "signature": "pub fn best_peers_for_sync(&self) -> Vec<&PeerInfo>;",
              "docs": "Return peers sorted by height (descending), suitable for block sync.\n\nOnly connected peers with a non-banned state are returned.",
              "attributes": "",
              "line": 416
            },
            {
              "name": "peer::PeerRegistry::should_ban",
              "kind": "function_item",
              "signature": "pub fn should_ban(&self, peer_id: &str) -> bool;",
              "docs": "Determine whether a peer should be banned based on reputation and\nscoring state.",
              "attributes": "",
              "line": 431
            },
            {
              "name": "peer::PeerRegistry::ban_peer",
              "kind": "function_item",
              "signature": "pub fn ban_peer(&mut self, peer_id: &str) -> NetworkResult<()>;",
              "docs": "Ban a peer, setting its connection state to [`ConnectionState::Banned`].",
              "attributes": "",
              "line": 448
            },
            {
              "name": "peer::PeerRegistry::peer_ids",
              "kind": "function_item",
              "signature": "pub fn peer_ids(&self) -> Vec<String>;",
              "docs": "Returns all peer IDs currently in the registry.",
              "attributes": "",
              "line": 455
            },
            {
              "name": "peer::PeerRegistry::decay_all_scores",
              "kind": "function_item",
              "signature": "pub fn decay_all_scores(&mut self, factor: f64);",
              "docs": "Apply score decay across all peers.",
              "attributes": "",
              "line": 460
            }
          ],
          "parseErrors": false
        },
        {
          "module": "propagation",
          "source": "sigil/node/sigil-network/src/propagation.rs",
          "sha256": "8dac13c5581f4e2aef5e7d0031392e4a4cfde473b23b72339e91595bc1554cc7",
          "attributes": "",
          "items": [
            {
              "name": "propagation::DEFAULT_BLOCK_SHARD_BYTES",
              "kind": "const_item",
              "signature": "pub const DEFAULT_BLOCK_SHARD_BYTES: usize;",
              "docs": "Default block shard payload size.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "propagation::DEFAULT_PROPAGATION_FANOUT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PROPAGATION_FANOUT: usize;",
              "docs": "Default number of peers each shard is initially forwarded to.",
              "attributes": "",
              "line": 13
            },
            {
              "name": "propagation::DEFAULT_PARITY_SHARDS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PARITY_SHARDS: usize;",
              "docs": "Default parity shard count. One XOR parity shard recovers any one missing\ndata shard in a propagation group.",
              "attributes": "",
              "line": 16
            },
            {
              "name": "propagation::DEFAULT_MAX_BLOCK_PAYLOAD_BYTES",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_BLOCK_PAYLOAD_BYTES: usize;",
              "docs": "Default maximum serialized block payload accepted by the propagation layer.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "propagation::QuicIngressConfig",
              "kind": "struct_item",
              "signature": "pub struct QuicIngressConfig {\n/// Enable QUIC listener startup in the transport layer.\n\npub enabled: bool,\n/// UDP socket address for QUIC ingress.\n\npub listen_addr: String,\n/// Maximum concurrently handshaking or established ingress streams.\n\npub max_concurrent_streams: u32,\n/// Maximum bytes accepted for a single transaction envelope.\n\npub max_transaction_bytes: u32\n}",
              "docs": "QUIC ingress transport settings.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "propagation::BlockPropagationConfig",
              "kind": "struct_item",
              "signature": "pub struct BlockPropagationConfig {\n/// Enable sharded block propagation.\n\npub enabled: bool,\n/// Payload bytes per data shard.\n\npub shard_bytes: usize,\n/// Number of parity shards emitted per block.\n\npub parity_shards: usize,\n/// Initial peer fanout per shard.\n\npub fanout: usize,\n/// Maximum serialized block payload accepted for propagation.\n\npub max_payload_bytes: usize\n}",
              "docs": "Block propagation parameters for the Turbine-equivalent fanout path.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "propagation::QuicIngressConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), PropagationConfigError>;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "propagation::BlockPropagationConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), PropagationConfigError>;",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "propagation::PropagationConfigError",
              "kind": "enum_item",
              "signature": "pub enum PropagationConfigError {\n    #[error(\"invalid QUIC ingress config: {0}\")]\n    InvalidQuicIngress(String),\n    #[error(\"invalid block propagation config: {0}\")]\n    InvalidBlockPropagation(String),\n    #[error(\"serialized block payload too large: {actual} bytes exceeds {max} bytes\")]\n    PayloadTooLarge { actual: usize, max: usize },\n    #[error(\"block serialization failed: {0}\")]\n    Serialization(String),\n    #[error(\"not enough shards to recover payload\")]\n    NotEnoughShards,\n}",
              "docs": "Errors raised by ingress/propagation policy validation or planning.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 115
            },
            {
              "name": "propagation::PropagationPeer",
              "kind": "struct_item",
              "signature": "pub struct PropagationPeer {\npub peer_id: String,\npub did: Option<String>,\npub stake: u64\n}",
              "docs": "Peer metadata used for deterministic propagation fanout.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 130
            },
            {
              "name": "propagation::BlockPropagationShard",
              "kind": "struct_item",
              "signature": "pub struct BlockPropagationShard {\npub block_hash: SigilHash,\npub block_height: u64,\npub shard_index: usize,\npub data_shards: usize,\npub parity_shards: usize,\npub original_payload_len: usize,\npub payload_hash: SigilHash,\npub bytes: Vec<u8>,\npub parity: bool\n}",
              "docs": "One data or parity shard of a serialized block payload.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 138
            },
            {
              "name": "propagation::PeerShardAssignment",
              "kind": "struct_item",
              "signature": "pub struct PeerShardAssignment {\npub peer_id: String,\npub shard_index: usize,\npub parity: bool\n}",
              "docs": "Deterministic assignment of one shard to one peer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 152
            },
            {
              "name": "propagation::BlockPropagationPlan",
              "kind": "struct_item",
              "signature": "pub struct BlockPropagationPlan {\npub block_hash: SigilHash,\npub block_height: u64,\npub payload_hash: SigilHash,\npub shards: Vec<BlockPropagationShard>,\npub assignments: Vec<PeerShardAssignment>\n}",
              "docs": "Complete transport-independent propagation plan.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 160
            },
            {
              "name": "propagation::plan_block_propagation",
              "kind": "function_item",
              "signature": "pub fn plan_block_propagation(\n    block: &Block,\n    peers: &[PropagationPeer],\n    config: &BlockPropagationConfig,\n) -> Result<BlockPropagationPlan, PropagationConfigError>;",
              "docs": "Build deterministic shards and peer assignments for a block.",
              "attributes": "",
              "line": 169
            },
            {
              "name": "propagation::recover_payload_from_shards",
              "kind": "function_item",
              "signature": "pub fn recover_payload_from_shards(\n    shards: &[BlockPropagationShard],\n) -> Result<Vec<u8>, PropagationConfigError>;",
              "docs": "Recover the original serialized block payload from data shards and, if one\ndata shard is missing, one XOR parity shard.",
              "attributes": "",
              "line": 269
            }
          ],
          "parseErrors": false
        },
        {
          "module": "scoring",
          "source": "sigil/node/sigil-network/src/scoring.rs",
          "sha256": "bc855b75485303729177aa3d046d562b905c3eaa5456c5556812b05b744ce16d",
          "attributes": "",
          "items": [
            {
              "name": "scoring::PeerScoring",
              "kind": "struct_item",
              "signature": "pub struct PeerScoring {\n/// Base score that all peers start with.\n\npub base_score: f64,\n/// Accumulated score from delivering valid messages.\n\npub message_delivery_score: f64,\n/// Accumulated score from being the first to deliver messages.\n\npub first_delivery_score: f64,\n/// Accumulated penalty for delivering invalid messages.\n\npub invalid_message_penalty: f64,\n/// Bonus score derived from the peer's OATS reputation.\n\npub oats_reputation_bonus: f64\n}",
              "docs": "Peer scoring state combining gossipsub behaviour and OATS reputation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 30
            },
            {
              "name": "scoring::GossipRateLimitConfig",
              "kind": "struct_item",
              "signature": "pub struct GossipRateLimitConfig {\n/// Max messages per peer per one-second window.\n\npub per_peer_per_sec: u32,\n/// Max messages per source IP per one-second window.\n\npub per_ip_per_sec: u32,\n/// Max messages per `(peer, topic)` per one-second window.\n\npub per_topic_per_sec: u32\n}",
              "docs": "Message-rate limits applied before forwarding or processing gossip.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "scoring::GossipRateLimiter",
              "kind": "struct_item",
              "signature": "pub struct GossipRateLimiter {\n\n}",
              "docs": "Deterministic per-peer and per-topic gossip flood limiter.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 87
            },
            {
              "name": "scoring::GossipRateLimiter::new",
              "kind": "function_item",
              "signature": "pub fn new(config: GossipRateLimitConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 95
            },
            {
              "name": "scoring::GossipRateLimiter::record",
              "kind": "function_item",
              "signature": "pub fn record(\n        &mut self,\n        peer_id: &str,\n        topic: GossipTopic,\n        now_unix_secs: u64,\n    ) -> NetworkResult<()>;",
              "docs": "Record one inbound message and return an error if it exceeds a cap.\n\n`now_unix_secs` is supplied by the caller to keep tests deterministic\nand avoid binding this crate to a specific async runtime clock.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "scoring::GossipRateLimiter::record_from_ip",
              "kind": "function_item",
              "signature": "pub fn record_from_ip(\n        &mut self,\n        peer_id: &str,\n        source_ip: Option<&str>,\n        topic: GossipTopic,\n        now_unix_secs: u64,\n    ) -> NetworkResult<()>;",
              "docs": "Record one inbound message and rate-limit by both peer ID and source IP.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "scoring::PeerScoring::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new scoring instance with default base score.",
              "attributes": "",
              "line": 181
            },
            {
              "name": "scoring::PeerScoring::with_base_score",
              "kind": "function_item",
              "signature": "pub fn with_base_score(base_score: f64) -> Self;",
              "docs": "Create a scoring instance with a custom base score.",
              "attributes": "",
              "line": 186
            },
            {
              "name": "scoring::PeerScoring::compute_score",
              "kind": "function_item",
              "signature": "pub fn compute_score(&self) -> f64;",
              "docs": "Compute the aggregate score for this peer.\n\nThe formula is:\n`base + delivery + first_delivery - invalid_penalty + oats_bonus`",
              "attributes": "",
              "line": 197
            },
            {
              "name": "scoring::PeerScoring::record_valid_message",
              "kind": "function_item",
              "signature": "pub fn record_valid_message(&mut self);",
              "docs": "Record that this peer delivered a valid message.",
              "attributes": "",
              "line": 204
            },
            {
              "name": "scoring::PeerScoring::record_invalid_message",
              "kind": "function_item",
              "signature": "pub fn record_invalid_message(&mut self);",
              "docs": "Record that this peer delivered an invalid message (penalize).",
              "attributes": "",
              "line": 209
            },
            {
              "name": "scoring::PeerScoring::record_first_delivery",
              "kind": "function_item",
              "signature": "pub fn record_first_delivery(&mut self);",
              "docs": "Record that this peer was the first to deliver a message.",
              "attributes": "",
              "line": 214
            },
            {
              "name": "scoring::PeerScoring::set_oats_reputation",
              "kind": "function_item",
              "signature": "pub fn set_oats_reputation(&mut self, score: f64);",
              "docs": "Update the OATS reputation bonus from the on-chain reputation score.\n\nThe `score` parameter should be in the range `[0.0, 1.0]` and is\nscaled to a bonus range of `[0.0, 50.0]`.",
              "attributes": "",
              "line": 222
            },
            {
              "name": "scoring::PeerScoring::decay",
              "kind": "function_item",
              "signature": "pub fn decay(&mut self, factor: f64);",
              "docs": "Apply time-based decay to volatile score components.\n\n`factor` should be in `(0.0, 1.0)` \u2014 e.g. `0.95` preserves 95% of\naccumulated scores per decay tick.",
              "attributes": "",
              "line": 230
            },
            {
              "name": "scoring::PeerScoring::should_ban",
              "kind": "function_item",
              "signature": "pub fn should_ban(&self) -> bool;",
              "docs": "Returns `true` if this peer's score is below the ban threshold.",
              "attributes": "",
              "line": 239
            }
          ],
          "parseErrors": false
        },
        {
          "module": "topic",
          "source": "sigil/node/sigil-network/src/topic.rs",
          "sha256": "627bd4b7635aaf1b69487be3b07ce08acf1465c4957325fdc68980e7288420a0",
          "attributes": "",
          "items": [
            {
              "name": "topic::GossipTopic",
              "kind": "enum_item",
              "signature": "pub enum GossipTopic {\n    /// New finalized blocks.\n    Blocks,\n    /// Pre-vote messages from the consensus layer.\n    PreVotes,\n    /// Pre-commit messages from the consensus layer.\n    PreCommits,\n    /// New unconfirmed transactions (mempool).\n    Transactions,\n    /// Compute receipt announcements (requires `compute` feature).\n    ComputeReceipts,\n    /// Tower coordination chain block announcements.\n    TowerBlocks,\n    /// Tower Committee vote messages.\n    TowerCommitteeVotes,\n    /// Tower slashing evidence submissions.\n    TowerSlashingEvidence,\n    /// Tower Casper FFG finality votes.\n    TowerFinalityVotes,\n    /// Tower Casper FFG attestations from execution-chain validators.\n    ///\n    /// Distinct from [`TowerFinalityVotes`] (Tower chain governance votes):\n    /// these are signed attestations broadcast by execution-chain validators\n    /// at each epoch boundary. The Tower runtime uses them to compute\n    /// justification and finalization via the Casper FFG rules.\n    TowerAttestations,\n    /// CZAC cross-zone channel operation messages.\n    CzacMessages,\n}",
              "docs": "Gossipsub topics for the Sigil network.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "topic::GossipTopic::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "The canonical topic string used on the wire.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "topic::GossipTopic::from_topic_str",
              "kind": "function_item",
              "signature": "pub fn from_topic_str(s: &str) -> Option<Self>;",
              "docs": "Parse a topic string back into a [`GossipTopic`].\n\nReturns `None` if the string does not match any known topic.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "topic::GossipTopic::all",
              "kind": "function_item",
              "signature": "pub fn all() -> Vec<Self>;",
              "docs": "All defined gossipsub topics.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "topic::GossipTopic::validator_topics",
              "kind": "function_item",
              "signature": "pub fn validator_topics() -> Vec<Self>;",
              "docs": "Topics that every execution-chain validator must subscribe to.",
              "attributes": "",
              "line": 97
            },
            {
              "name": "topic::GossipTopic::tower_topics",
              "kind": "function_item",
              "signature": "pub fn tower_topics() -> Vec<Self>;",
              "docs": "Topics for Tower coordination chain validators.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "topic::GossipTopic::light_topics",
              "kind": "function_item",
              "signature": "pub fn light_topics() -> Vec<Self>;",
              "docs": "The minimal topic set for light/observer nodes.",
              "attributes": "",
              "line": 119
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-economics",
      "version": "0.1.0",
      "source": "sigil/node/sigil-economics",
      "manifestSha256": "5b0fe36092a3d4a30054ea24c1b73286e2d9c14bda8e95259342417d1a7fd335",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "czac": [
          "sigil-core/czac"
        ],
        "nova": [
          "sigil-core/nova"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-economics",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-economics/src/lib.rs",
          "sha256": "a45e66ee186fb62b9128fd548255f709d5238e5b756d3667fcda75b6589dd458",
          "attributes": "",
          "items": [
            {
              "name": "bonds",
              "kind": "module",
              "signature": "pub mod bonds;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "rewards",
              "kind": "module",
              "signature": "pub mod rewards;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "slashing",
              "kind": "module",
              "signature": "pub mod slashing;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "staking",
              "kind": "module",
              "signature": "pub mod staking;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "escrow",
              "kind": "module",
              "signature": "pub mod escrow;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 12
            },
            {
              "name": "pub use bonds::{BondRecord, BondSlashDistribution, BondStatus};",
              "kind": "use_declaration",
              "signature": "pub use bonds::{BondRecord, BondSlashDistribution, BondStatus};",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "pub use error::EconomicsError;",
              "kind": "use_declaration",
              "signature": "pub use error::EconomicsError;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "pub use rewards::{DelegatorReward, RewardConfig, RewardDistribution};",
              "kind": "use_declaration",
              "signature": "pub use rewards::{DelegatorReward, RewardConfig, RewardDistribution};",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "pub use slashing::{SlashConfig, SlashOffense, SlashResult};",
              "kind": "use_declaration",
              "signature": "pub use slashing::{SlashConfig, SlashOffense, SlashResult};",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use staking::{\n    Delegation, PendingUndelegation, StakeRecord, StakeStatus, MIN_BP_STAKE, MIN_BV_STAKE,\n    UNBONDING_EPOCHS,\n};",
              "kind": "use_declaration",
              "signature": "pub use staking::{\n    Delegation, PendingUndelegation, StakeRecord, StakeStatus, MIN_BP_STAKE, MIN_BV_STAKE,\n    UNBONDING_EPOCHS,\n};",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "pub use escrow::EscrowAccount;",
              "kind": "use_declaration",
              "signature": "pub use escrow::EscrowAccount;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 24
            },
            {
              "name": "::MICRO_MINT_PER_MINT",
              "kind": "const_item",
              "signature": "pub const MICRO_MINT_PER_MINT: u64;",
              "docs": "1 MINT = 1_000_000 micro-MINT.",
              "attributes": "",
              "line": 27
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bonds",
          "source": "sigil/node/sigil-economics/src/bonds.rs",
          "sha256": "e553b9426004f07453e9b2713121c2c2a74f33e66c9701b825ea73e3606f53f6",
          "attributes": "",
          "items": [
            {
              "name": "bonds::bond_requirement",
              "kind": "function_item",
              "signature": "pub fn bond_requirement(entry_type: &str) -> u64;",
              "docs": "Returns the bond requirement (in micro-MINT) for a given MARS entry type.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "bonds::BondRecord",
              "kind": "struct_item",
              "signature": "pub struct BondRecord {\n/// Unique bond identifier.\n\npub bond_id: String,\n/// OAS DID of the publisher who posted the bond.\n\npub publisher_did: String,\n/// OAS DID of the MARS entry this bond secures.\n\npub entry_did: String,\n/// micro-MINT posted as bond.\n\npub amount: u64,\n/// Current status of the bond.\n\npub status: BondStatus,\n/// Epoch at which the bond was created.\n\npub created_epoch: u64\n}",
              "docs": "A bond posted by a publisher against a MARS registry entry.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 38
            },
            {
              "name": "bonds::BondStatus",
              "kind": "enum_item",
              "signature": "pub enum BondStatus {\n    /// Bond is active and securing the entry.\n    Active,\n    /// A portion of the bond has been slashed.\n    PartiallySlashed,\n    /// The entire bond has been slashed.\n    FullySlashed,\n    /// Bond has been released (entry deregistered or bond returned).\n    Released,\n}",
              "docs": "Lifecycle status of a bond.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 55
            },
            {
              "name": "bonds::BondSlashDistribution",
              "kind": "struct_item",
              "signature": "pub struct BondSlashDistribution {\n/// micro-MINT awarded to the reporter.\n\npub reporter_share: u64,\n/// micro-MINT awarded to the harmed party.\n\npub harmed_share: u64,\n/// micro-MINT sent to the protocol treasury.\n\npub treasury_share: u64\n}",
              "docs": "Distribution of a slashed bond: 30% reporter, 40% harmed party, 30% treasury.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "bonds::create_bond",
              "kind": "function_item",
              "signature": "pub fn create_bond(\n    bond_id: String,\n    publisher_did: String,\n    entry_did: String,\n    entry_type: &str,\n    amount: u64,\n    created_epoch: u64,\n) -> Result<BondRecord, EconomicsError>;",
              "docs": "Create a new bond record.\n\nThe `amount` must be at least the `bond_requirement` for the given\n`entry_type`. If it exceeds the requirement, the full amount is bonded.",
              "attributes": "",
              "line": 85
            },
            {
              "name": "bonds::slash_bond",
              "kind": "function_item",
              "signature": "pub fn slash_bond(\n    bond: &mut BondRecord,\n    total_slash_amount: u64,\n) -> Result<BondSlashDistribution, EconomicsError>;",
              "docs": "Slash a bond by the given `total_slash_amount`.\n\nDistribution: 30% reporter, 40% harmed party, 30% treasury.\n\nIf `total_slash_amount >= bond.amount`, the bond is fully slashed.\nOtherwise it is partially slashed and the bond amount is reduced.",
              "attributes": "",
              "line": 122
            },
            {
              "name": "bonds::release_bond",
              "kind": "function_item",
              "signature": "pub fn release_bond(bond: &mut BondRecord) -> Result<u64, EconomicsError>;",
              "docs": "Release a bond, returning the remaining amount to the publisher.\n\nCan only release an active or partially-slashed bond.\nReturns the freed micro-MINT amount.",
              "attributes": "",
              "line": 167
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-economics/src/error.rs",
          "sha256": "e6f633ac4d318a805fdb366b9ab112205a4df420f14edd9c0305921e81fd73e3",
          "attributes": "",
          "items": [
            {
              "name": "error::EconomicsError",
              "kind": "enum_item",
              "signature": "pub enum EconomicsError {\n    #[error(\"insufficient stake: required {required} micro-MINT, available {available}\")]\n    InsufficientStake { required: u64, available: u64 },\n\n    #[error(\"insufficient balance: required {required} micro-MINT, available {available}\")]\n    InsufficientBalance { required: u64, available: u64 },\n\n    #[error(\"validator not found: {0}\")]\n    ValidatorNotFound(String),\n\n    #[error(\"validator already unbonding: {0}\")]\n    AlreadyUnbonding(String),\n\n    #[error(\"validator not unbonding: {0}\")]\n    NotUnbonding(String),\n\n    #[error(\"unbonding not complete: current epoch {current_epoch}, completion epoch {completion_epoch}\")]\n    UnbondingNotComplete {\n        current_epoch: u64,\n        completion_epoch: u64,\n    },\n\n    #[error(\"bond not found: {0}\")]\n    BondNotFound(String),\n\n    #[error(\"bond already slashed: {0}\")]\n    BondAlreadySlashed(String),\n\n    #[error(\"escrow insufficient: required {required} micro-MINT, available {available}\")]\n    EscrowInsufficient { required: u64, available: u64 },\n\n    #[error(\"agent budget exceeded: agent {agent_did} limit {limit}, requested {requested}\")]\n    AgentBudgetExceeded {\n        agent_did: String,\n        limit: u64,\n        requested: u64,\n    },\n\n    #[error(\"invalid amount: {0}\")]\n    InvalidAmount(String),\n\n    #[error(\"validator is jailed: {0}\")]\n    ValidatorJailed(String),\n}",
              "docs": "Error types for the Sigil economics crate.\nErrors arising from economic operations (staking, rewards, slashing, bonds, escrow).",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 5
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rewards",
          "source": "sigil/node/sigil-economics/src/rewards.rs",
          "sha256": "10143805d37352cd5bec5c00c384d26d794a994dc2e35ca96b1cf9ac528a22e1",
          "attributes": "",
          "items": [
            {
              "name": "rewards::RewardConfig",
              "kind": "struct_item",
              "signature": "pub struct RewardConfig {\n/// Base block reward in micro-MINT (before generation decay).\n\npub base_block_reward: u64,\n/// Generation decay factor (0 < beta <= 1). Typically 0.85.\n\npub generation_decay_beta: f64,\n/// Minimum fraction of the validator portion that goes to the human root.\n\n/// Typically 0.51 (51%).\n\npub min_human_share: f64,\n/// Fraction of the base block reward taken by the treasury.\n\n/// Typically 0.15 (15%).\n\npub treasury_fraction: f64\n}",
              "docs": "Configuration governing block reward computation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "rewards::RewardDistribution",
              "kind": "struct_item",
              "signature": "pub struct RewardDistribution {\n/// Block height this distribution applies to.\n\npub block_height: u64,\n/// OAS DID of the block proposer.\n\npub proposer_did: String,\n/// micro-MINT awarded to the proposer (validator operator).\n\npub proposer_reward: u64,\n/// micro-MINT awarded to the human root.\n\npub human_root_reward: u64,\n/// micro-MINT sent to the protocol treasury.\n\npub treasury_reward: u64,\n/// Per-delegator rewards.\n\npub delegator_rewards: Vec<DelegatorReward>\n}",
              "docs": "The fully computed reward distribution for a single block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 43
            },
            {
              "name": "rewards::DelegatorReward",
              "kind": "struct_item",
              "signature": "pub struct DelegatorReward {\n/// OAS DID of the delegator.\n\npub delegator_did: String,\n/// micro-MINT awarded to this delegator.\n\npub amount: u64\n}",
              "docs": "Reward for a single delegator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 60
            },
            {
              "name": "rewards::compute_block_reward",
              "kind": "function_item",
              "signature": "pub fn compute_block_reward(config: &RewardConfig, generation: u32) -> u64;",
              "docs": "Compute the generation-decayed block reward.\n\n`reward = base_block_reward * beta^generation`\n\nResult is floored to the nearest micro-MINT.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "rewards::distribute_rewards",
              "kind": "function_item",
              "signature": "pub fn distribute_rewards(\n    config: &RewardConfig,\n    block_height: u64,\n    proposer: &StakeRecord,\n    delegations: &[Delegation],\n) -> RewardDistribution;",
              "docs": "Distribute rewards for a single block.\n\nSteps:\n1. Compute treasury share from the base reward.\n2. Compute the generation-decayed reward for the validator portion.\n3. Ensure the human root receives at least `min_human_share` of the\n   validator portion.\n4. Divide the remainder between proposer (self-stake) and delegators\n   (delegated stake) in proportion to their contributions.",
              "attributes": "",
              "line": 87
            }
          ],
          "parseErrors": false
        },
        {
          "module": "slashing",
          "source": "sigil/node/sigil-economics/src/slashing.rs",
          "sha256": "8319d2c50cf009c062c88becbf664540858e94bd99e6a79fd6b000d02f1afd3c",
          "attributes": "",
          "items": [
            {
              "name": "slashing::SlashOffense",
              "kind": "enum_item",
              "signature": "pub enum SlashOffense {\n    /// Signing two different blocks at the same height. Severity 3.0x.\n    DoubleSign,\n    /// Extended validator downtime. Severity 1.0x.\n    Downtime,\n    /// Proposing an invalid block. Severity 2.0x.\n    InvalidBlock,\n    /// Presenting equivocation evidence. Severity 2.5x.\n    EquivocationEvidence,\n    /// Attempting to censor transactions. Severity 2.0x.\n    CensorshipAttempt,\n    /// Committing an invalid state transition. Severity 3.0x.\n    InvalidStateTransition,\n}",
              "docs": "Types of slashable offenses with associated severity multipliers.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "slashing::SlashOffense::severity_multiplier",
              "kind": "function_item",
              "signature": "pub fn severity_multiplier(&self) -> f64;",
              "docs": "The severity multiplier applied to the base slash rate for this offense.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "slashing::SlashOffense::should_jail",
              "kind": "function_item",
              "signature": "pub fn should_jail(&self) -> bool;",
              "docs": "Whether this offense results in jailing the validator.",
              "attributes": "",
              "line": 47
            },
            {
              "name": "slashing::SlashConfig",
              "kind": "struct_item",
              "signature": "pub struct SlashConfig {\n/// Base fraction of total stake to slash (before severity multiplier).\n\n/// For example, 0.05 means 5% base slash.\n\npub base_slash_rate: f64,\n/// How much of the slash propagates to the human root.\n\n/// 1.0 means the human root bears the FULL penalty.\n\npub slashing_delta: f64\n}",
              "docs": "Parameters governing how slashing penalties are computed.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 58
            },
            {
              "name": "slashing::SlashResult",
              "kind": "struct_item",
              "signature": "pub struct SlashResult {\n/// OAS DID of the slashed validator.\n\npub validator_did: String,\n/// OAS DID of the validator's human root.\n\npub human_root_did: String,\n/// The offense that triggered the slash.\n\npub offense: SlashOffense,\n/// Total micro-MINT slashed from the validator.\n\npub amount_slashed: u64,\n/// The severity multiplier that was applied.\n\npub severity_multiplier: f64,\n/// micro-MINT penalty charged to the human root (delta * amount_slashed).\n\npub human_root_penalty: u64,\n/// Whether the validator should be jailed as a result of this offense.\n\npub jail: bool\n}",
              "docs": "The outcome of a slash computation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "slashing::compute_slash",
              "kind": "function_item",
              "signature": "pub fn compute_slash(\n    config: &SlashConfig,\n    stake_record: &StakeRecord,\n    offense: SlashOffense,\n) -> SlashResult;",
              "docs": "Compute the slash amounts for a given offense.\n\n`amount_slashed = total_stake * base_slash_rate * severity_multiplier`\n`human_root_penalty = amount_slashed * slashing_delta`\n\nThe amount is capped at the validator's total stake.",
              "attributes": "",
              "line": 109
            },
            {
              "name": "slashing::apply_slash",
              "kind": "function_item",
              "signature": "pub fn apply_slash(\n    stake_record: &mut StakeRecord,\n    slash_result: &SlashResult,\n) -> Result<(), EconomicsError>;",
              "docs": "Apply a previously computed slash to a validator's stake record.\n\nDeducts `amount_slashed` from self_stake (capped at self_stake), and\noptionally jails the validator.",
              "attributes": "",
              "line": 138
            }
          ],
          "parseErrors": false
        },
        {
          "module": "staking",
          "source": "sigil/node/sigil-economics/src/staking.rs",
          "sha256": "4f07a1633f16d77f266547e9be06b2ff2da63149a988bd46e806c0fc2bcdc605",
          "attributes": "",
          "items": [
            {
              "name": "staking::MIN_BP_STAKE",
              "kind": "const_item",
              "signature": "pub const MIN_BP_STAKE: u64;",
              "docs": "Minimum self-stake for a Block Producer: 10,000 MINT = 10_000_000_000 micro-MINT.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "staking::MIN_BV_STAKE",
              "kind": "const_item",
              "signature": "pub const MIN_BV_STAKE: u64;",
              "docs": "Minimum self-stake for a Block Validator: 1,000 MINT = 1_000_000_000 micro-MINT.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "staking::UNBONDING_EPOCHS",
              "kind": "const_item",
              "signature": "pub const UNBONDING_EPOCHS: u64;",
              "docs": "Number of epochs a validator must wait after initiating unstake.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "staking::StakeRecord",
              "kind": "struct_item",
              "signature": "pub struct StakeRecord {\n/// OAS DID of the validator.\n\npub validator_did: String,\n/// OAS DID of the human root that spawned this validator.\n\npub human_root_did: String,\n/// Lineage generation (0 = human root itself, 1 = direct child, ...).\n\npub generation: u32,\n/// micro-MINT staked by the validator itself.\n\npub self_stake: u64,\n/// micro-MINT delegated to this validator by others.\n\npub delegated_stake: u64,\n/// Whether this validator produces blocks or only validates them.\n\npub mode: ValidatorMode,\n/// Current lifecycle status.\n\npub status: StakeStatus,\n/// Epoch at which unbonding completes (set when unbonding begins).\n\npub unbonding_epoch: Option<u64>\n}",
              "docs": "A validator's stake record.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "staking::StakeRecord::total_stake",
              "kind": "function_item",
              "signature": "pub fn total_stake(&self) -> u64;",
              "docs": "Total stake = self-stake + delegated stake.",
              "attributes": "",
              "line": 46
            },
            {
              "name": "staking::StakeRecord::meets_minimum",
              "kind": "function_item",
              "signature": "pub fn meets_minimum(&self) -> bool;",
              "docs": "Whether the validator's self-stake meets the mode-specific minimum.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "staking::StakeRecord::can_unstake",
              "kind": "function_item",
              "signature": "pub fn can_unstake(&self) -> bool;",
              "docs": "Whether the validator is in a state that allows unstaking.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "staking::StakeStatus",
              "kind": "enum_item",
              "signature": "pub enum StakeStatus {\n    /// Validator is active and participating in consensus.\n    Active,\n    /// Validator has initiated unstake; waiting for unbonding period.\n    Unbonding,\n    /// Unbonding complete; funds are free.\n    Unbonded,\n    /// Validator is jailed (e.g., for double-signing).\n    Jailed,\n}",
              "docs": "Current lifecycle status of a validator.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 64
            },
            {
              "name": "staking::Delegation",
              "kind": "struct_item",
              "signature": "pub struct Delegation {\n/// OAS DID of the delegator.\n\npub delegator_did: String,\n/// OAS DID of the validator receiving delegation.\n\npub validator_did: String,\n/// micro-MINT delegated.\n\npub amount: u64,\n/// Epoch at which this delegation started.\n\npub start_epoch: u64,\n/// If set, the delegator is withdrawing some portion.\n\npub pending_undelegation: Option<PendingUndelegation>\n}",
              "docs": "A delegation from a delegator to a validator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 81
            },
            {
              "name": "staking::PendingUndelegation",
              "kind": "struct_item",
              "signature": "pub struct PendingUndelegation {\n/// micro-MINT being undelegated.\n\npub amount: u64,\n/// Epoch when undelegation completes.\n\npub completion_epoch: u64\n}",
              "docs": "An in-progress undelegation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 96
            },
            {
              "name": "staking::min_stake_for_mode",
              "kind": "function_item",
              "signature": "pub fn min_stake_for_mode(mode: &ValidatorMode) -> u64;",
              "docs": "Returns the minimum self-stake for the given validator mode.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "staking::apply_stake_deposit",
              "kind": "function_item",
              "signature": "pub fn apply_stake_deposit(record: &mut StakeRecord, amount: u64) -> Result<(), EconomicsError>;",
              "docs": "Deposit additional stake into a validator record.\n\nReturns an error if the validator is jailed or unbonding.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "staking::apply_unstake",
              "kind": "function_item",
              "signature": "pub fn apply_unstake(\n    record: &mut StakeRecord,\n    amount: u64,\n    current_epoch: u64,\n) -> Result<(), EconomicsError>;",
              "docs": "Begin the unstaking process for a validator.\n\nReduces self-stake by `amount` and sets status to `Unbonding` if the\nremaining self-stake no longer meets the mode minimum. Otherwise the\nvalidator stays `Active` but the amount is still deducted.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "staking::apply_delegation",
              "kind": "function_item",
              "signature": "pub fn apply_delegation(delegation: &mut Delegation, amount: u64) -> Result<(), EconomicsError>;",
              "docs": "Add delegation to an existing delegation record.",
              "attributes": "",
              "line": 180
            },
            {
              "name": "staking::apply_undelegation",
              "kind": "function_item",
              "signature": "pub fn apply_undelegation(\n    delegation: &mut Delegation,\n    amount: u64,\n    current_epoch: u64,\n) -> Result<(), EconomicsError>;",
              "docs": "Begin undelegation of `amount` from a delegation.\n\nSubtracts `amount` from the delegation's active balance and sets a pending\nundelegation record.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "staking::complete_unbonding",
              "kind": "function_item",
              "signature": "pub fn complete_unbonding(record: &mut StakeRecord, current_epoch: u64) -> Option<u64>;",
              "docs": "Complete unbonding for a validator if the unbonding epoch has passed.\n\nReturns `Some(freed_amount)` if the unbonding is complete and the record\ntransitions to `Unbonded`. Returns `None` if the record is not unbonding\nor the epoch has not yet arrived.",
              "attributes": "",
              "line": 233
            }
          ],
          "parseErrors": false
        },
        {
          "module": "escrow",
          "source": "sigil/node/sigil-economics/src/escrow.rs",
          "sha256": "e933bb2c512391ce8f712f08c0f5303bc6c535626f4a820ea6f392785a7f0ac8",
          "attributes": "#[cfg(feature = \"compute\")]",
          "items": [
            {
              "name": "escrow::EscrowAccount",
              "kind": "struct_item",
              "signature": "pub struct EscrowAccount {\n/// OAS DID of the organization that owns this escrow.\n\npub org_did: String,\n/// Total micro-MINT deposited into this escrow (lifetime).\n\npub total_funded: u64,\n/// micro-MINT currently reserved for active jobs.\n\npub total_reserved: u64,\n/// micro-MINT already settled (paid to providers).\n\npub total_spent: u64,\n/// Per-agent maximum budget (agent_did -> max micro-MINT).\n\npub per_agent_budgets: HashMap<String, u64>,\n/// Reservations by job ID.\n\n#[serde(default)]\npub reservations: HashMap<String, u64>\n}",
              "docs": "An escrow account for an organization's compute spending.\n\nFunds flow: `funded -> reserved -> spent`. Un-used reservations can be\nrefunded back to the free balance.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "escrow::EscrowAccount::new",
              "kind": "function_item",
              "signature": "pub fn new(org_did: String) -> Self;",
              "docs": "Create a new, empty escrow account for the given organization.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 35
            },
            {
              "name": "escrow::EscrowAccount::available_balance",
              "kind": "function_item",
              "signature": "pub fn available_balance(&self) -> u64;",
              "docs": "Available (unreserved, unspent) balance.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 47
            },
            {
              "name": "escrow::fund_escrow",
              "kind": "function_item",
              "signature": "pub fn fund_escrow(account: &mut EscrowAccount, amount: u64) -> Result<(), EconomicsError>;",
              "docs": "Add funds to the escrow account.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 55
            },
            {
              "name": "escrow::reserve_for_job",
              "kind": "function_item",
              "signature": "pub fn reserve_for_job(\n    account: &mut EscrowAccount,\n    job_id: String,\n    amount: u64,\n) -> Result<(), EconomicsError>;",
              "docs": "Reserve funds for a compute job.\n\nThe reserved amount is subtracted from the available balance but not yet\nspent. It is held until the job settles or is refunded.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 72
            },
            {
              "name": "escrow::settle_job",
              "kind": "function_item",
              "signature": "pub fn settle_job(\n    account: &mut EscrowAccount,\n    job_id: &str,\n    actual_cost: u64,\n) -> Result<(), EconomicsError>;",
              "docs": "Settle a completed job, debiting the actual cost from the reservation.\n\nIf `actual_cost < reserved`, the surplus is returned to the free balance\n(by reducing `total_reserved`). `total_spent` increases by `actual_cost`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 101
            },
            {
              "name": "escrow::refund_job",
              "kind": "function_item",
              "signature": "pub fn refund_job(account: &mut EscrowAccount, job_id: &str) -> Result<(), EconomicsError>;",
              "docs": "Refund a job's reservation back to the free balance.\n\nUsed when a job is cancelled before completion.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 133
            },
            {
              "name": "escrow::check_agent_budget",
              "kind": "function_item",
              "signature": "pub fn check_agent_budget(account: &EscrowAccount, agent_did: &str, amount: u64) -> bool;",
              "docs": "Check whether an agent's spending would stay within its budget.\n\nReturns `true` if the agent's budget allows the given amount, or if no\nper-agent budget is set (i.e., unlimited).",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 147
            },
            {
              "name": "escrow::PaymentChannelEscrow",
              "kind": "struct_item",
              "signature": "pub struct PaymentChannelEscrow {\n/// Unique channel identifier.\n\npub channel_id: String,\n/// OAS DID of the channel initiator.\n\npub party_a_did: String,\n/// OAS DID of the channel counterparty.\n\npub party_b_did: String,\n/// micro-MINT funded by party A.\n\npub party_a_deposit: u64,\n/// micro-MINT funded by party B.\n\npub party_b_deposit: u64,\n/// Current balance for party A (per latest signed state).\n\npub balance_a: u64,\n/// Current balance for party B (per latest signed state).\n\npub balance_b: u64,\n/// Monotonically increasing sequence number for the latest signed state.\n\npub sequence: u64,\n/// Block height at which the channel was opened.\n\npub opened_at_height: u64,\n/// Block height at which a dispute was filed (if any).\n\npub dispute_height: Option<u64>,\n/// Channel status.\n\npub status: PaymentChannelStatus\n}",
              "docs": "A payment channel escrow for Lightning-style off-consensus micropayments.\n\nBoth parties fund the channel; updates are signed balance sheets exchanged\noff-chain. Disputes are resolved via the Tower coordination chain.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 164
            },
            {
              "name": "escrow::PaymentChannelStatus",
              "kind": "enum_item",
              "signature": "pub enum PaymentChannelStatus {\n    /// Channel is open and accepting off-chain balance updates.\n    Open,\n    /// A unilateral close has been initiated; in dispute window.\n    Disputed,\n    /// Channel is cooperatively or unilaterally closed and settled.\n    Settled,\n}",
              "docs": "Status of a CZAC payment channel.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 192
            },
            {
              "name": "escrow::PaymentChannelEscrow::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        channel_id: String,\n        party_a_did: String,\n        party_b_did: String,\n        party_a_deposit: u64,\n        party_b_deposit: u64,\n        opened_at_height: u64,\n    ) -> Self;",
              "docs": "Create a new payment channel escrow.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]",
              "line": 204
            },
            {
              "name": "escrow::PaymentChannelEscrow::total_capacity",
              "kind": "function_item",
              "signature": "pub fn total_capacity(&self) -> u64;",
              "docs": "Total channel capacity.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]",
              "line": 228
            },
            {
              "name": "escrow::PaymentChannelEscrow::update_balance",
              "kind": "function_item",
              "signature": "pub fn update_balance(\n        &mut self,\n        balance_a: u64,\n        balance_b: u64,\n        sequence: u64,\n    ) -> Result<(), EconomicsError>;",
              "docs": "Apply a signed balance update. The balances must sum to total capacity.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]",
              "line": 233
            },
            {
              "name": "escrow::PaymentChannelEscrow::cooperative_close",
              "kind": "function_item",
              "signature": "pub fn cooperative_close(&mut self) -> Result<(u64, u64), EconomicsError>;",
              "docs": "Cooperatively close the channel. Returns `(party_a_payout, party_b_payout)`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]",
              "line": 263
            },
            {
              "name": "escrow::PaymentChannelEscrow::initiate_dispute",
              "kind": "function_item",
              "signature": "pub fn initiate_dispute(&mut self, height: u64) -> Result<(), EconomicsError>;",
              "docs": "Initiate a unilateral dispute at the given block height.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"czac\")]",
              "line": 272
            },
            {
              "name": "escrow::LandAuctionEscrow",
              "kind": "struct_item",
              "signature": "pub struct LandAuctionEscrow {\n/// Parcel ID being auctioned.\n\npub parcel_id: String,\n/// OAS DID of the highest bidder.\n\npub bidder_did: String,\n/// Current highest bid in micro-MINT.\n\npub bid_amount: u64,\n/// Block height at which the auction started.\n\npub auction_start_height: u64,\n/// Block height at which the auction ends.\n\npub auction_end_height: u64,\n/// Whether the auction has been finalized.\n\npub finalized: bool\n}",
              "docs": "Escrow for a Nova land auction bid.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 289
            },
            {
              "name": "escrow::LandAuctionEscrow::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        parcel_id: String,\n        bidder_did: String,\n        bid_amount: u64,\n        auction_start_height: u64,\n        auction_duration_blocks: u64,\n    ) -> Self;",
              "docs": "Create a new land auction escrow with the first bid.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 307
            },
            {
              "name": "escrow::LandAuctionEscrow::place_bid",
              "kind": "function_item",
              "signature": "pub fn place_bid(\n        &mut self,\n        bidder_did: String,\n        amount: u64,\n        current_height: u64,\n    ) -> Result<(String, u64), EconomicsError>;",
              "docs": "Place a higher bid. Returns the previous bidder DID and amount for refund.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 325
            },
            {
              "name": "escrow::LandAuctionEscrow::finalize",
              "kind": "function_item",
              "signature": "pub fn finalize(&mut self, current_height: u64) -> Result<(String, u64), EconomicsError>;",
              "docs": "Finalize the auction. Returns the winner DID and winning bid.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 353
            },
            {
              "name": "escrow::RentEscrow",
              "kind": "struct_item",
              "signature": "pub struct RentEscrow {\n/// Parcel ID being rented.\n\npub parcel_id: String,\n/// OAS DID of the tenant.\n\npub tenant_did: String,\n/// OAS DID of the landlord (parcel owner).\n\npub landlord_did: String,\n/// Rent amount per epoch in micro-MINT.\n\npub rent_per_epoch: u64,\n/// Total micro-MINT deposited by the tenant.\n\npub total_deposited: u64,\n/// Total micro-MINT paid to the landlord so far.\n\npub total_paid: u64,\n/// Epoch at which the lease started.\n\npub lease_start_epoch: u64,\n/// Number of epochs the lease is valid for.\n\npub lease_duration_epochs: u64\n}",
              "docs": "Escrow for recurring Nova property rent payments via CZAC payment channels.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 372
            },
            {
              "name": "escrow::RentEscrow::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        parcel_id: String,\n        tenant_did: String,\n        landlord_did: String,\n        rent_per_epoch: u64,\n        deposit: u64,\n        lease_start_epoch: u64,\n        lease_duration_epochs: u64,\n    ) -> Self;",
              "docs": "Create a new rent escrow.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 394
            },
            {
              "name": "escrow::RentEscrow::remaining_deposit",
              "kind": "function_item",
              "signature": "pub fn remaining_deposit(&self) -> u64;",
              "docs": "Remaining deposit available to cover rent.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 416
            },
            {
              "name": "escrow::RentEscrow::pay_epoch",
              "kind": "function_item",
              "signature": "pub fn pay_epoch(&mut self) -> Result<u64, EconomicsError>;",
              "docs": "Process rent payment for one epoch. Returns the amount paid.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 421
            },
            {
              "name": "escrow::RentEscrow::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self, current_epoch: u64) -> bool;",
              "docs": "Check if the lease has expired at the given epoch.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[cfg(feature = \"nova\")]",
              "line": 437
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-governance",
      "version": "0.1.0",
      "source": "sigil/node/sigil-governance",
      "manifestSha256": "b0ad8075d74dd170b933f20f2031e6f175d82542f4a08e2911b043b47ed6af14",
      "features": {
        "default": []
      },
      "publish": true,
      "url": "/reference/rust/sigil-governance",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-governance/src/lib.rs",
          "sha256": "eba33baeb446eee2cd142324cf3ce7b3c4e9d7fdd2d7d5941090cde89a913807",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "execution",
              "kind": "module",
              "signature": "pub mod execution;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "proposal",
              "kind": "module",
              "signature": "pub mod proposal;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "voting",
              "kind": "module",
              "signature": "pub mod voting;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "pub use error::GovernanceError;",
              "kind": "use_declaration",
              "signature": "pub use error::GovernanceError;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "pub use execution::{TimelockEntry, TimelockQueue, TimelockStatus};",
              "kind": "use_declaration",
              "signature": "pub use execution::{TimelockEntry, TimelockQueue, TimelockStatus};",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "pub use proposal::{Proposal, ProposalPayload, ProposalStatus, ProposalType};",
              "kind": "use_declaration",
              "signature": "pub use proposal::{Proposal, ProposalPayload, ProposalStatus, ProposalType};",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "pub use voting::{Vote, VoteChoice, VotingResult, VotingTally};",
              "kind": "use_declaration",
              "signature": "pub use voting::{Vote, VoteChoice, VotingResult, VotingTally};",
              "docs": "",
              "attributes": "",
              "line": 13
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-governance/src/error.rs",
          "sha256": "b86420f84e6522d569701fe8d92930482f253bd147dde8607e5484050b227cca",
          "attributes": "",
          "items": [
            {
              "name": "error::GovernanceError",
              "kind": "enum_item",
              "signature": "pub enum GovernanceError {\n    #[error(\"proposal not found: {0}\")]\n    ProposalNotFound(String),\n\n    #[error(\"invalid proposal transition from {from:?} to {to:?}\")]\n    InvalidProposalTransition {\n        from: ProposalStatus,\n        to: ProposalStatus,\n    },\n\n    #[error(\"insufficient deposit: required {required}, provided {provided}\")]\n    InsufficientDeposit { required: u64, provided: u64 },\n\n    #[error(\"voting not active for proposal: {0}\")]\n    VotingNotActive(String),\n\n    #[error(\"voter {voter_did} already voted on proposal {proposal_id}\")]\n    AlreadyVoted {\n        voter_did: String,\n        proposal_id: String,\n    },\n\n    #[error(\"voter not eligible: {0}\")]\n    NotEligibleToVote(String),\n\n    #[error(\"timelock not ready for proposal {proposal_id}: current epoch {current_epoch}, execution epoch {execution_epoch}\")]\n    TimelockNotReady {\n        proposal_id: String,\n        current_epoch: u64,\n        execution_epoch: u64,\n    },\n\n    #[error(\"proposal expired: {0}\")]\n    ProposalExpired(String),\n\n    #[error(\"invalid payload: {0}\")]\n    InvalidPayload(String),\n\n    #[error(\"emergency action not authorized: {0}\")]\n    EmergencyNotAuthorized(String),\n}",
              "docs": "Errors that can occur during governance operations.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "execution",
          "source": "sigil/node/sigil-governance/src/execution.rs",
          "sha256": "a4d3385a3a3eecb89d597655f6c432c4651e3c8afa71489d09ca445c333422a1",
          "attributes": "",
          "items": [
            {
              "name": "execution::TimelockStatus",
              "kind": "enum_item",
              "signature": "pub enum TimelockStatus {\n    /// Waiting for the execution epoch.\n    Pending,\n    /// Current epoch has reached or passed the execution epoch.\n    Ready,\n    /// Successfully executed.\n    Executed,\n    /// Cancelled before execution.\n    Cancelled,\n}",
              "docs": "Lifecycle of a timelock entry.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "execution::TimelockEntry",
              "kind": "struct_item",
              "signature": "pub struct TimelockEntry {\n/// ID of the passed proposal.\n\npub proposal_id: String,\n/// Proposal type (determines timelock duration).\n\npub proposal_type: ProposalType,\n/// The action to execute.\n\npub payload: ProposalPayload,\n/// Epoch at which this entry becomes executable.\n\npub execution_epoch: u64,\n/// Current status of this entry.\n\npub status: TimelockStatus\n}",
              "docs": "A single entry in the timelock queue representing a passed proposal\nawaiting execution.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "execution::TimelockQueue",
              "kind": "struct_item",
              "signature": "pub struct TimelockQueue {\n\n}",
              "docs": "Ordered collection of timelock entries waiting for execution.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 51
            },
            {
              "name": "execution::TimelockQueue::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty timelock queue.",
              "attributes": "#[must_use]",
              "line": 58
            },
            {
              "name": "execution::TimelockQueue::add",
              "kind": "function_item",
              "signature": "pub fn add(&mut self, entry: TimelockEntry);",
              "docs": "Add an entry to the queue.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "execution::TimelockQueue::ready_entries",
              "kind": "function_item",
              "signature": "pub fn ready_entries(&mut self, current_epoch: u64) -> Vec<&TimelockEntry>;",
              "docs": "Return all entries whose execution epoch has been reached and whose\nstatus is still [`TimelockStatus::Pending`].\n\nThis method also promotes matching entries to [`TimelockStatus::Ready`].",
              "attributes": "",
              "line": 73
            },
            {
              "name": "execution::TimelockQueue::cancel",
              "kind": "function_item",
              "signature": "pub fn cancel(&mut self, proposal_id: &str) -> Result<(), GovernanceError>;",
              "docs": "Cancel a pending or ready entry. Returns an error if the entry is not\nfound or has already been executed/cancelled.",
              "attributes": "",
              "line": 90
            },
            {
              "name": "execution::TimelockQueue::mark_executed",
              "kind": "function_item",
              "signature": "pub fn mark_executed(&mut self, proposal_id: &str) -> Result<(), GovernanceError>;",
              "docs": "Mark an entry as executed. Returns an error if the entry is not found\nor is not in the [`TimelockStatus::Ready`] state.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "execution::TimelockQueue::pending_count",
              "kind": "function_item",
              "signature": "pub fn pending_count(&self) -> usize;",
              "docs": "Number of entries still in [`TimelockStatus::Pending`] state.",
              "attributes": "#[must_use]",
              "line": 133
            },
            {
              "name": "execution::TimelockQueue::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Total number of entries in the queue (all statuses).",
              "attributes": "#[must_use]",
              "line": 142
            },
            {
              "name": "execution::TimelockQueue::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if the queue has no entries.",
              "attributes": "#[must_use]",
              "line": 148
            }
          ],
          "parseErrors": false
        },
        {
          "module": "proposal",
          "source": "sigil/node/sigil-governance/src/proposal.rs",
          "sha256": "b16ff906488a6ec4dad5dcfe077f98fef85bd10faafd22d116ae3c7f0bda96dd",
          "attributes": "",
          "items": [
            {
              "name": "proposal::ProposalType",
              "kind": "enum_item",
              "signature": "pub enum ProposalType {\n    /// Change a chain parameter (60% threshold).\n    ParameterChange,\n    /// Upgrade a WASI module binary (75% threshold).\n    WasiModuleUpgrade,\n    /// Spend funds from the community treasury (67% threshold).\n    TreasurySpend,\n    /// Slash a validator for misbehaviour (67% threshold).\n    ValidatorSlashing,\n    /// Emergency governance action requiring super-majority (80% threshold).\n    EmergencyAction,\n}",
              "docs": "The five governance proposal types, each with different approval thresholds,\nvoting periods, and timelock durations.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "proposal::ProposalType::approval_threshold",
              "kind": "function_item",
              "signature": "pub fn approval_threshold(&self) -> f64;",
              "docs": "Fraction of (yes / (yes + no + veto)) required for approval.",
              "attributes": "#[must_use]",
              "line": 28
            },
            {
              "name": "proposal::ProposalType::veto_threshold",
              "kind": "function_item",
              "signature": "pub fn veto_threshold(&self) -> f64;",
              "docs": "Fraction of (veto / (yes + no + veto)) above which the proposal is vetoed.",
              "attributes": "#[must_use]",
              "line": 40
            },
            {
              "name": "proposal::ProposalType::voting_period_epochs",
              "kind": "function_item",
              "signature": "pub fn voting_period_epochs(&self) -> u64;",
              "docs": "Number of epochs the voting window is open.",
              "attributes": "#[must_use]",
              "line": 46
            },
            {
              "name": "proposal::ProposalType::timelock_epochs",
              "kind": "function_item",
              "signature": "pub fn timelock_epochs(&self) -> u64;",
              "docs": "Number of epochs between passing and earliest execution.",
              "attributes": "#[must_use]",
              "line": 55
            },
            {
              "name": "proposal::ProposalType::min_deposit",
              "kind": "function_item",
              "signature": "pub fn min_deposit(&self) -> u64;",
              "docs": "Minimum deposit in micro-MINT required to submit this proposal type.",
              "attributes": "#[must_use]",
              "line": 64
            },
            {
              "name": "proposal::ProposalPayload",
              "kind": "enum_item",
              "signature": "pub enum ProposalPayload {\n    /// Change a chain parameter from one value to another.\n    ParameterChange {\n        parameter_path: String,\n        old_value: serde_json::Value,\n        new_value: serde_json::Value,\n    },\n    /// Upgrade a WASI module to a new binary.\n    WasiModuleUpgrade {\n        module_name: String,\n        current_hash: String,\n        new_hash: String,\n        new_wasm_size: u64,\n    },\n    /// Transfer funds from the community treasury.\n    TreasurySpend {\n        recipient_did: String,\n        amount: u64,\n        reason: String,\n    },\n    /// Slash a validator for a documented offense.\n    ValidatorSlashing {\n        validator_did: String,\n        offense_description: String,\n        evidence_hashes: Vec<String>,\n    },\n    /// Emergency action with freeform parameters.\n    EmergencyAction {\n        action_type: String,\n        parameters: serde_json::Value,\n    },\n}",
              "docs": "Type-specific data carried by a proposal.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 81
            },
            {
              "name": "proposal::ProposalStatus",
              "kind": "enum_item",
              "signature": "pub enum ProposalStatus {\n    /// Collecting the required deposit.\n    Deposit,\n    /// Active voting period.\n    Voting,\n    /// Passed vote but not yet executed (in timelock).\n    Passed,\n    /// Did not reach the approval threshold.\n    Rejected,\n    /// Successfully executed after timelock.\n    Executed,\n    /// Cancelled by the proposer before execution.\n    Cancelled,\n    /// Rejected via NoWithVeto exceeding the veto threshold.\n    Vetoed,\n    /// Execution was attempted but failed.\n    Failed,\n}",
              "docs": "Lifecycle states of a governance proposal.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 120
            },
            {
              "name": "proposal::ProposalStatus::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(&self) -> bool;",
              "docs": "Returns `true` if the proposal has reached a final state and cannot\ntransition further.",
              "attributes": "#[must_use]",
              "line": 143
            },
            {
              "name": "proposal::Proposal",
              "kind": "struct_item",
              "signature": "pub struct Proposal {\n/// Unique proposal identifier.\n\npub id: String,\n/// DID of the account that submitted the proposal.\n\npub proposer_did: String,\n/// Category of the proposal, determines thresholds and periods.\n\npub proposal_type: ProposalType,\n/// Short human-readable title.\n\npub title: String,\n/// Extended description / rationale.\n\npub description: String,\n/// Type-specific payload data.\n\npub payload: ProposalPayload,\n/// Current lifecycle status.\n\npub status: ProposalStatus,\n/// Epoch at which the proposal was submitted.\n\npub submit_epoch: u64,\n/// Epoch at which voting begins (after deposit is met).\n\npub voting_start_epoch: u64,\n/// Epoch at which voting closes.\n\npub voting_end_epoch: u64,\n/// Epoch at which the proposal may be executed (after timelock).\n\n/// `None` until the proposal passes.\n\npub execution_epoch: Option<u64>,\n/// Deposit amount in micro-MINT.\n\npub deposit: u64\n}",
              "docs": "A governance proposal submitted to the chain.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 157
            },
            {
              "name": "proposal::Proposal::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Determines whether the proposal is in an active, non-terminal state.",
              "attributes": "#[must_use]",
              "line": 188
            },
            {
              "name": "proposal::Proposal::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(&self) -> bool;",
              "docs": "Determines whether the proposal has reached a terminal state.",
              "attributes": "#[must_use]",
              "line": 197
            },
            {
              "name": "proposal::Proposal::can_transition_to",
              "kind": "function_item",
              "signature": "pub fn can_transition_to(&self, new_status: ProposalStatus) -> bool;",
              "docs": "Returns `true` if transitioning from the current status to `new_status`\nis a legal state machine transition.",
              "attributes": "#[must_use]",
              "line": 204
            }
          ],
          "parseErrors": false
        },
        {
          "module": "voting",
          "source": "sigil/node/sigil-governance/src/voting.rs",
          "sha256": "ea9e2356a4fd6467191be7731ecf400c8f552a47e1c915940e1ac90332873fa9",
          "attributes": "",
          "items": [
            {
              "name": "voting::VoteChoice",
              "kind": "enum_item",
              "signature": "pub enum VoteChoice {\n    Yes,\n    No,\n    Abstain,\n    NoWithVeto,\n}",
              "docs": "The four possible vote choices.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "voting::Vote",
              "kind": "struct_item",
              "signature": "pub struct Vote {\n/// DID of the voter.\n\npub voter_did: String,\n/// Proposal being voted on.\n\npub proposal_id: String,\n/// The voter's choice.\n\npub choice: VoteChoice,\n/// Raw staked balance in micro-MINT.\n\npub stake_weight: u64,\n/// Trust factor derived from OATS lineage score (range 0.0 ..= 2.0).\n\npub lineage_trust_factor: f64,\n/// `stake_weight * lineage_trust_factor`, rounded and clamped.\n\npub effective_weight: u64,\n/// Epoch at which the vote was recorded.\n\npub cast_epoch: u64\n}",
              "docs": "A single vote cast by a participant.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "voting::Vote::compute_effective_weight",
              "kind": "function_item",
              "signature": "pub fn compute_effective_weight(stake: u64, trust_factor: f64) -> u64;",
              "docs": "Compute effective voting weight from raw stake and trust factor.\n\nThe trust factor is clamped to `[0.0, 2.0]` and the multiplication is\nperformed in floating-point then rounded, with the result clamped to\n`u64::MAX` to avoid overflow.",
              "attributes": "#[must_use]",
              "line": 52
            },
            {
              "name": "voting::VotingTally",
              "kind": "struct_item",
              "signature": "pub struct VotingTally {\n/// Proposal being tallied.\n\npub proposal_id: String,\n/// Sum of effective weights for Yes votes.\n\npub yes_weight: u64,\n/// Sum of effective weights for No votes.\n\npub no_weight: u64,\n/// Sum of effective weights for Abstain votes.\n\npub abstain_weight: u64,\n/// Sum of effective weights for NoWithVeto votes.\n\npub veto_weight: u64,\n/// Total effective weight that has been cast (all choices).\n\npub total_voted_weight: u64,\n/// Total effective weight eligible to vote (set externally).\n\npub total_eligible_weight: u64,\n/// Number of individual votes cast.\n\npub vote_count: u32\n}",
              "docs": "Accumulated vote totals for a single proposal.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 73
            },
            {
              "name": "voting::VotingTally::new",
              "kind": "function_item",
              "signature": "pub fn new(proposal_id: impl Into<String>) -> Self;",
              "docs": "Create an empty tally for the given proposal.",
              "attributes": "#[must_use]",
              "line": 98
            },
            {
              "name": "voting::VotingTally::add_vote",
              "kind": "function_item",
              "signature": "pub fn add_vote(&mut self, vote: &Vote) -> bool;",
              "docs": "Record a vote, accumulating its effective weight into the correct bucket.\n\nReturns `false` if the voter already has a recorded vote (use\n[`remove_vote`](Self::remove_vote) first to change a vote).",
              "attributes": "",
              "line": 116
            },
            {
              "name": "voting::VotingTally::remove_vote",
              "kind": "function_item",
              "signature": "pub fn remove_vote(&mut self, voter_did: &str) -> bool;",
              "docs": "Remove a previously recorded vote so the voter may cast a new one.\n\nReturns `true` if the vote was found and removed.",
              "attributes": "",
              "line": 131
            },
            {
              "name": "voting::VotingTally::compute_result",
              "kind": "function_item",
              "signature": "pub fn compute_result(&self, proposal_type: ProposalType, total_eligible: u64) -> VotingResult;",
              "docs": "Compute the final result given proposal type and total eligible weight.",
              "attributes": "#[must_use]",
              "line": 143
            },
            {
              "name": "voting::VotingTally::quorum_reached",
              "kind": "function_item",
              "signature": "pub fn quorum_reached(&self, min_participation: f64) -> bool;",
              "docs": "Returns `true` if the participation ratio meets or exceeds the minimum.",
              "attributes": "#[must_use]",
              "line": 179
            },
            {
              "name": "voting::VotingResult",
              "kind": "struct_item",
              "signature": "pub struct VotingResult {\n/// Proposal this result belongs to.\n\npub proposal_id: String,\n/// Whether the proposal passed.\n\npub passed: bool,\n/// Whether the proposal was vetoed.\n\npub vetoed: bool,\n/// yes / (yes + no + veto).\n\npub approval_ratio: f64,\n/// veto / (yes + no + veto).\n\npub veto_ratio: f64,\n/// total_voted / total_eligible.\n\npub participation_ratio: f64,\n/// Underlying tally data.\n\npub tally: VotingTally\n}",
              "docs": "The computed outcome of a vote.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 213
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-execution",
      "version": "0.1.0",
      "source": "sigil/node/sigil-execution",
      "manifestSha256": "148a5bb381fe93b998ed05cfa2ea2627d5dfa1a2ac1ce2670b0357c5a610b1d0",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "czac": [
          "sigil-core/czac"
        ],
        "nova": [
          "sigil-core/nova"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-execution",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-execution/src/lib.rs",
          "sha256": "297694625e326392f827109dbf80248dba66d9240f9794d432559e2c25eaaf06",
          "attributes": "",
          "items": [
            {
              "name": "anvil",
              "kind": "module",
              "signature": "pub mod anvil;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "context",
              "kind": "module",
              "signature": "pub mod context;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "contract",
              "kind": "module",
              "signature": "pub mod contract;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "message",
              "kind": "module",
              "signature": "pub mod message;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "metering",
              "kind": "module",
              "signature": "pub mod metering;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "result",
              "kind": "module",
              "signature": "pub mod result;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "zone",
              "kind": "module",
              "signature": "pub mod zone;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use anvil::{AnvilError, AnvilHostFunction, AnvilResult, LogLevel};",
              "kind": "use_declaration",
              "signature": "pub use anvil::{AnvilError, AnvilHostFunction, AnvilResult, LogLevel};",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use context::{ExecutionContext, LogEntry, StateChange};",
              "kind": "use_declaration",
              "signature": "pub use context::{ExecutionContext, LogEntry, StateChange};",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "pub use contract::{\n    ContractEvent, ContractEventQuery, ContractRecord, ContractStatus,\n    DEFAULT_ALLOWED_HOST_FUNCTIONS,\n};",
              "kind": "use_declaration",
              "signature": "pub use contract::{\n    ContractEvent, ContractEventQuery, ContractRecord, ContractStatus,\n    DEFAULT_ALLOWED_HOST_FUNCTIONS,\n};",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "pub use error::ExecutionError;",
              "kind": "use_declaration",
              "signature": "pub use error::ExecutionError;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "pub use message::{CrossZoneMessage, MessageQueue, MessageStatus};",
              "kind": "use_declaration",
              "signature": "pub use message::{CrossZoneMessage, MessageQueue, MessageStatus};",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "pub use metering::{FuelMeter, GasCosts};",
              "kind": "use_declaration",
              "signature": "pub use metering::{FuelMeter, GasCosts};",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "pub use result::ExecutionResult;",
              "kind": "use_declaration",
              "signature": "pub use result::ExecutionResult;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "pub use zone::{DeployedModule, OrganizationZone, ZoneStatus};",
              "kind": "use_declaration",
              "signature": "pub use zone::{DeployedModule, OrganizationZone, ZoneStatus};",
              "docs": "",
              "attributes": "",
              "line": 31
            }
          ],
          "parseErrors": false
        },
        {
          "module": "anvil",
          "source": "sigil/node/sigil-execution/src/anvil.rs",
          "sha256": "d731bbc4f575e5c1cb4dd03229dfe16898b1f1532e3f3455e16be16aee42b868",
          "attributes": "",
          "items": [
            {
              "name": "anvil::AnvilHostFunction",
              "kind": "enum_item",
              "signature": "pub enum AnvilHostFunction {\n    // -- State access --\n    /// Read a value from the zone's key-value state tree.\n    StateGet {\n        /// Key to read.\n        key: Vec<u8>,\n    },\n\n    /// Write a value to the zone's key-value state tree.\n    StateSet {\n        /// Key to write.\n        key: Vec<u8>,\n        /// Value to store.\n        value: Vec<u8>,\n    },\n\n    /// Delete a key from the zone's state tree.\n    StateDelete {\n        /// Key to remove.\n        key: Vec<u8>,\n    },\n\n    // -- Cross-zone messaging --\n    /// Send a message to another Organization Zone.\n    SendMessage {\n        /// Target zone identifier.\n        target_zone: String,\n        /// Serialized message payload.\n        payload: Vec<u8>,\n    },\n\n    // -- Identity queries --\n    /// Resolve an OAS DID to its document.\n    ResolveIdentity {\n        /// The DID to resolve.\n        did: String,\n    },\n\n    /// Verify the lineage chain of an OAS DID.\n    VerifyLineage {\n        /// The DID whose lineage to verify.\n        did: String,\n    },\n\n    // -- Compute dispatch (feature-gated) --\n    /// Dispatch a compute request to an external provider.\n    #[cfg(feature = \"compute\")]\n    DispatchCompute {\n        /// The compute provider's DID.\n        provider_did: String,\n        /// Serialized compute request.\n        request: Vec<u8>,\n    },\n\n    // -- Logging --\n    /// Emit a log message from the WASM module.\n    Log {\n        /// Log severity level.\n        level: LogLevel,\n        /// Log message content.\n        message: String,\n    },\n}",
              "docs": "ANVIL host function categories \u2014 operations that WASM modules can invoke.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"function\", content = \"params\")]",
              "line": 11
            },
            {
              "name": "anvil::LogLevel",
              "kind": "enum_item",
              "signature": "pub enum LogLevel {\n    /// Detailed debugging information.\n    Debug,\n    /// General informational messages.\n    Info,\n    /// Potentially harmful situations.\n    Warn,\n    /// Error conditions.\n    Error,\n}",
              "docs": "Log severity levels for ANVIL `Log` host function.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 77
            },
            {
              "name": "anvil::AnvilResult",
              "kind": "enum_item",
              "signature": "pub enum AnvilResult {\n    /// A value was returned (e.g., from StateGet or ResolveIdentity).\n    Value(Vec<u8>),\n    /// The operation succeeded but produced no return value.\n    Void,\n    /// The operation failed.\n    Error(AnvilError),\n}",
              "docs": "Result of an ANVIL host function call.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 90
            },
            {
              "name": "anvil::AnvilError",
              "kind": "enum_item",
              "signature": "pub enum AnvilError {\n    /// The requested key does not exist in the zone state.\n    KeyNotFound(String),\n    /// The caller does not have permission for this operation.\n    PermissionDenied(String),\n    /// An argument was malformed or out of range.\n    InvalidArgument(String),\n    /// Gas was exhausted during the host function call.\n    OutOfGas,\n    /// The target zone was not found (for cross-zone messaging).\n    ZoneNotFound(String),\n    /// The cross-zone message queue is full.\n    MessageQueueFull,\n}",
              "docs": "Errors that can occur during an ANVIL host function call.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 101
            }
          ],
          "parseErrors": false
        },
        {
          "module": "context",
          "source": "sigil/node/sigil-execution/src/context.rs",
          "sha256": "0f1843b8437d04ea561f7a3b2729d3a49a8c5ce3a8dd20d135fc74aee8f278b7",
          "attributes": "",
          "items": [
            {
              "name": "context::StateChange",
              "kind": "struct_item",
              "signature": "pub struct StateChange {\n/// Key that was modified.\n\npub key: Vec<u8>,\n/// Previous value (None if the key did not exist).\n\npub old_value: Option<Vec<u8>>,\n/// New value (None if the key was deleted).\n\npub new_value: Option<Vec<u8>>\n}",
              "docs": "A single state mutation recorded during execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "context::LogEntry",
              "kind": "struct_item",
              "signature": "pub struct LogEntry {\n/// Severity level.\n\npub level: LogLevel,\n/// Log message.\n\npub message: String,\n/// Block timestamp at which the log was emitted.\n\npub timestamp: u64\n}",
              "docs": "A log entry emitted during execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "context::ExecutionContext",
              "kind": "struct_item",
              "signature": "pub struct ExecutionContext {\n/// Zone in which the execution is running.\n\npub zone_id: String,\n/// OAS DID of the transaction sender.\n\npub caller_did: String,\n/// Current block height.\n\npub block_height: u64,\n/// Current block timestamp (Unix seconds).\n\npub block_timestamp: u64,\n/// Hash of the transaction being executed.\n\npub tx_hash: SigilHash,\n/// Gas meter for this execution.\n\npub fuel_meter: FuelMeter,\n/// State mutations accumulated during execution.\n\npub state_changes: Vec<StateChange>,\n/// Cross-zone messages emitted during execution.\n\npub messages_sent: Vec<CrossZoneMessage>,\n/// Log entries emitted during execution.\n\npub logs: Vec<LogEntry>\n}",
              "docs": "Context for a single WASM execution, tracking all side effects and gas usage.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 40
            },
            {
              "name": "context::ExecutionContext::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        zone_id: impl Into<String>,\n        caller_did: impl Into<String>,\n        block_height: u64,\n        block_timestamp: u64,\n        tx_hash: SigilHash,\n        gas_limit: u64,\n    ) -> Self;",
              "docs": "Create a new execution context.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "context::ExecutionContext::with_gas_costs",
              "kind": "function_item",
              "signature": "pub fn with_gas_costs(mut self, costs: GasCosts) -> Self;",
              "docs": "Create a new execution context with custom gas costs.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "context::ExecutionContext::record_state_change",
              "kind": "function_item",
              "signature": "pub fn record_state_change(\n        &mut self,\n        key: Vec<u8>,\n        old_value: Option<Vec<u8>>,\n        new_value: Option<Vec<u8>>,\n    );",
              "docs": "Record a state change (key-value mutation).",
              "attributes": "",
              "line": 97
            },
            {
              "name": "context::ExecutionContext::send_message",
              "kind": "function_item",
              "signature": "pub fn send_message(\n        &mut self,\n        target_zone: impl Into<String>,\n        payload: Vec<u8>,\n        gas_forwarded: u64,\n    ) -> Result<(), ExecutionError>;",
              "docs": "Send a cross-zone message, charging gas for the operation.\n\nReturns `Err(ExecutionError::OutOfGas)` if gas is insufficient.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "context::ExecutionContext::log",
              "kind": "function_item",
              "signature": "pub fn log(\n        &mut self,\n        level: LogLevel,\n        message: impl Into<String>,\n    ) -> Result<(), ExecutionError>;",
              "docs": "Emit a log entry, charging gas per byte of the message.\n\nReturns `Err(ExecutionError::OutOfGas)` if gas is insufficient.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "context::ExecutionContext::finalize",
              "kind": "function_item",
              "signature": "pub fn finalize(self, return_value: Option<Vec<u8>>, error: Option<String>) -> ExecutionResult;",
              "docs": "Finalize the execution context into an [`ExecutionResult`].\n\nIf `error` is `Some`, the result is marked as failed.",
              "attributes": "",
              "line": 170
            },
            {
              "name": "context::ExecutionContext::gas_remaining",
              "kind": "function_item",
              "signature": "pub fn gas_remaining(&self) -> u64;",
              "docs": "Returns the remaining gas budget.",
              "attributes": "",
              "line": 186
            },
            {
              "name": "context::ExecutionContext::gas_used",
              "kind": "function_item",
              "signature": "pub fn gas_used(&self) -> u64;",
              "docs": "Returns the gas consumed so far.",
              "attributes": "",
              "line": 191
            }
          ],
          "parseErrors": false
        },
        {
          "module": "contract",
          "source": "sigil/node/sigil-execution/src/contract.rs",
          "sha256": "7defbad9f717653f76cc1a7f43191bbad41f07a9ff416cc10c35bf46c3fd562c",
          "attributes": "",
          "items": [
            {
              "name": "contract::ContractStatus",
              "kind": "enum_item",
              "signature": "pub enum ContractStatus {\n    /// Contract accepts calls.\n    #[default]\n    Active,\n    /// Contract is suspended by governance/controller; calls reject.\n    Suspended,\n    /// Contract is being migrated as part of an upgrade \u2014 no calls.\n    Migrating,\n    /// Contract has been retired and is read-only.\n    Archived,\n}",
              "docs": "Lifecycle status of a deployed contract.",
              "attributes": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 28
            },
            {
              "name": "contract::DEFAULT_ALLOWED_HOST_FUNCTIONS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_ALLOWED_HOST_FUNCTIONS: &[&str];",
              "docs": "Conservative default ANVIL host-function allowlist used when a\ncontract is deployed without an explicit list.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "contract::ContractRecord",
              "kind": "struct_item",
              "signature": "pub struct ContractRecord {\npub contract_did: String,\npub zone_id: String,\npub controller_did: String,\npub runtime: ContractRuntime,\npub code_hash: SigilHash,\npub state_root: SigilHash,\npub upgrade_policy: ControlPolicy,\npub call_policy: ControlPolicy,\npub revenue_account: Option<String>,\npub allowed_host_functions: Vec<String>,\npub kind: ContractKind,\npub status: ContractStatus,\n/// Whether this contract opts in to autonomous Vigils callbacks.\n\n#[serde(default)]\npub accepts_vigil_callbacks: bool,\npub created_height: u64,\npub updated_height: u64,\n/// Optional model-commitment pointer (set by ModelManager-style\n\n/// contracts that point at a verified compute artifact). Updated\n\n/// only via `UpgradeContract { new_model_commitment, model_receipt_id }`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub model_commitment: Option<SigilHash>\n}",
              "docs": "Live, on-chain record of a deployed agent contract.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 54
            },
            {
              "name": "contract::ContractRecord::is_callable",
              "kind": "function_item",
              "signature": "pub fn is_callable(&self) -> bool;",
              "docs": "Returns true when the contract is currently callable.",
              "attributes": "",
              "line": 81
            },
            {
              "name": "contract::ContractRecord::is_upgradable",
              "kind": "function_item",
              "signature": "pub fn is_upgradable(&self) -> bool;",
              "docs": "Returns true when the contract may be upgraded (active or\nmigrating). Archived/suspended cannot be upgraded.",
              "attributes": "",
              "line": 87
            },
            {
              "name": "contract::ContractRecord::allows_host_fn",
              "kind": "function_item",
              "signature": "pub fn allows_host_fn(&self, host_fn: &str) -> bool;",
              "docs": "Returns true if the contract is permitted to invoke `host_fn`.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "contract::ContractEvent",
              "kind": "struct_item",
              "signature": "pub struct ContractEvent {\npub contract_did: String,\npub block_height: u64,\npub seq: u64,\npub topic: String,\n/// Indexed key/value pairs; opaque bytes preserved verbatim.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub indexed: Vec<(String, Vec<u8>)>,\npub data: Vec<u8>\n}",
              "docs": "A persisted contract event (emitted via the ANVIL `emit_event` host\nfunction or by the executor for lifecycle events).",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 105
            },
            {
              "name": "contract::ContractEventQuery",
              "kind": "struct_item",
              "signature": "pub struct ContractEventQuery {\npub contract_did: Option<String>,\npub topic: Option<String>,\npub from_height: Option<u64>,\npub to_height: Option<u64>,\npub limit: Option<u32>\n}",
              "docs": "Filter for `list_contract_events`.",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 118
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-execution/src/error.rs",
          "sha256": "f083c447715aae66ac9effcc598d26399096e60c802f6ea3509fe955dac5a4b3",
          "attributes": "",
          "items": [
            {
              "name": "error::ExecutionError",
              "kind": "enum_item",
              "signature": "pub enum ExecutionError {\n    /// Gas limit exceeded during execution.\n    #[error(\"out of gas: used {used} of {limit}\")]\n    OutOfGas {\n        /// Gas consumed before failure.\n        used: u64,\n        /// Gas limit for this execution.\n        limit: u64,\n    },\n\n    /// WASM runtime trap (e.g., unreachable instruction, division by zero).\n    #[error(\"WASM trap: {0}\")]\n    WasmTrap(String),\n\n    /// Module failed validation or compilation.\n    #[error(\"invalid module: {0}\")]\n    InvalidModule(String),\n\n    /// Referenced zone does not exist.\n    #[error(\"zone not found: {0}\")]\n    ZoneNotFound(String),\n\n    /// Zone is suspended and cannot execute.\n    #[error(\"zone suspended: {0}\")]\n    ZoneSuspended(String),\n\n    /// Referenced module is not deployed in the zone.\n    #[error(\"module not found: {0}\")]\n    ModuleNotFound(String),\n\n    /// Error reading or writing zone state.\n    #[error(\"state error: {0}\")]\n    StateError(String),\n\n    /// Error during cross-zone message delivery.\n    #[error(\"cross-zone error: {0}\")]\n    CrossZoneError(String),\n\n    /// Caller lacks required permissions.\n    #[error(\"permission denied: {0}\")]\n    PermissionDenied(String),\n\n    /// WASM linear memory limit exceeded.\n    #[error(\"memory limit exceeded: requested {requested} bytes, limit {limit} bytes\")]\n    MemoryLimitExceeded {\n        /// Bytes requested.\n        requested: u64,\n        /// Maximum allowed bytes.\n        limit: u64,\n    },\n\n    /// WASM call stack overflow.\n    #[error(\"stack overflow\")]\n    StackOverflow,\n}",
              "docs": "Errors that can occur during WASM execution in an Organization Zone.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error, Serialize, Deserialize)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "message",
          "source": "sigil/node/sigil-execution/src/message.rs",
          "sha256": "460f10f723a2d81a3f2d0f150250dc14b4bc2a7cc6d2ec4c3d4fe7afbf4bdc26",
          "attributes": "",
          "items": [
            {
              "name": "message::MessageStatus",
              "kind": "enum_item",
              "signature": "pub enum MessageStatus {\n    /// Message is waiting to be delivered.\n    Pending,\n    /// Message was successfully delivered to the target zone.\n    Delivered,\n    /// Message delivery failed (e.g., target zone not found or suspended).\n    Failed,\n    /// Message expired before delivery.\n    Expired,\n}",
              "docs": "Status of a cross-zone message.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "message::CrossZoneMessage",
              "kind": "struct_item",
              "signature": "pub struct CrossZoneMessage {\n/// Unique message identifier.\n\npub id: String,\n/// Zone ID of the sender.\n\npub source_zone: String,\n/// Zone ID of the intended recipient.\n\npub target_zone: String,\n/// Serialized message payload.\n\npub payload: Vec<u8>,\n/// Gas forwarded to the target zone for processing this message.\n\npub gas_forwarded: u64,\n/// Block height at which this message was created.\n\npub created_height: u64,\n/// Current delivery status.\n\npub status: MessageStatus\n}",
              "docs": "A cross-zone message sent from one Organization Zone to another.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "message::MessageQueue",
              "kind": "struct_item",
              "signature": "pub struct MessageQueue {\n\n}",
              "docs": "Bounded queue for pending cross-zone messages.\n\nThis queue enforces a maximum size to prevent unbounded resource consumption\nduring heavy cross-zone messaging.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "message::MessageQueue::new",
              "kind": "function_item",
              "signature": "pub fn new(max_pending: usize) -> Self;",
              "docs": "Create a new message queue with the given maximum capacity.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "message::MessageQueue::enqueue",
              "kind": "function_item",
              "signature": "pub fn enqueue(&mut self, msg: CrossZoneMessage) -> Result<(), ExecutionError>;",
              "docs": "Add a message to the queue.\n\nReturns `Err(ExecutionError::CrossZoneError)` if the queue is full.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "message::MessageQueue::dequeue_for_zone",
              "kind": "function_item",
              "signature": "pub fn dequeue_for_zone(&mut self, zone_id: &str) -> Vec<CrossZoneMessage>;",
              "docs": "Drain and return all pending messages destined for the given zone.\n\nReturned messages are removed from the queue.",
              "attributes": "",
              "line": 79
            },
            {
              "name": "message::MessageQueue::pending_count",
              "kind": "function_item",
              "signature": "pub fn pending_count(&self) -> usize;",
              "docs": "Returns the number of messages currently in the queue.",
              "attributes": "",
              "line": 96
            },
            {
              "name": "message::MessageQueue::expire_old",
              "kind": "function_item",
              "signature": "pub fn expire_old(&mut self, current_height: u64, max_age: u64) -> usize;",
              "docs": "Remove messages older than `max_age` blocks, marking them as expired.\n\nReturns the number of messages expired.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "message::MessageQueue::messages",
              "kind": "function_item",
              "signature": "pub fn messages(&self) -> &[CrossZoneMessage];",
              "docs": "Returns a read-only view of all messages in the queue.",
              "attributes": "",
              "line": 122
            },
            {
              "name": "message::MessageQueue::capacity",
              "kind": "function_item",
              "signature": "pub fn capacity(&self) -> usize;",
              "docs": "Returns the maximum capacity of this queue.",
              "attributes": "",
              "line": 127
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metering",
          "source": "sigil/node/sigil-execution/src/metering.rs",
          "sha256": "bc5b1011359964f14ee11f72be63a0635280ec30dfd6a631f25af34d65b6e014",
          "attributes": "",
          "items": [
            {
              "name": "metering::GasCosts",
              "kind": "struct_item",
              "signature": "pub struct GasCosts {\n/// Cost per WASM instruction executed.\n\npub wasm_instruction: u64,\n/// Cost per state read (`StateGet`).\n\npub state_read: u64,\n/// Cost per state write (`StateSet`).\n\npub state_write: u64,\n/// Cost per state deletion (`StateDelete`).\n\npub state_delete: u64,\n/// Cost per cross-zone message (`SendMessage`).\n\npub cross_zone_message: u64,\n/// Cost per DID resolution (`ResolveIdentity`).\n\npub identity_resolve: u64,\n/// Cost per lineage verification (`VerifyLineage`).\n\npub lineage_verify: u64,\n/// Cost per byte of log output (`Log`).\n\npub log_per_byte: u64,\n/// Cost per 64KB memory page allocated.\n\npub memory_page: u64\n}",
              "docs": "Gas costs for different ANVIL host function operations and WASM resources.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "metering::GasCosts::cost_for",
              "kind": "function_item",
              "signature": "pub fn cost_for(&self, op: &AnvilHostFunction) -> u64;",
              "docs": "Compute the gas cost for a specific ANVIL host function call.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "metering::FuelMeter",
              "kind": "struct_item",
              "signature": "pub struct FuelMeter {\n/// Maximum gas allowed for this execution.\n\npub gas_limit: u64,\n/// Gas consumed so far.\n\npub gas_used: u64\n}",
              "docs": "Fuel meter tracking cumulative gas consumption within a single execution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 73
            },
            {
              "name": "metering::FuelMeter::new",
              "kind": "function_item",
              "signature": "pub fn new(gas_limit: u64) -> Self;",
              "docs": "Create a new fuel meter with the given gas limit.",
              "attributes": "",
              "line": 82
            },
            {
              "name": "metering::FuelMeter::consume",
              "kind": "function_item",
              "signature": "pub fn consume(&mut self, amount: u64) -> Result<(), ExecutionError>;",
              "docs": "Consume `amount` gas. Returns `Err(ExecutionError::OutOfGas)` if the\nlimit would be exceeded.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "metering::FuelMeter::remaining",
              "kind": "function_item",
              "signature": "pub fn remaining(&self) -> u64;",
              "docs": "Returns the remaining gas budget.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "metering::FuelMeter::is_exhausted",
              "kind": "function_item",
              "signature": "pub fn is_exhausted(&self) -> bool;",
              "docs": "Returns `true` if the gas budget is fully consumed.",
              "attributes": "",
              "line": 117
            },
            {
              "name": "metering::FuelMeter::charge_operation",
              "kind": "function_item",
              "signature": "pub fn charge_operation(\n        &mut self,\n        costs: &GasCosts,\n        op: &AnvilHostFunction,\n    ) -> Result<(), ExecutionError>;",
              "docs": "Charge gas for a specific ANVIL host function operation using the\nprovided cost table.",
              "attributes": "",
              "line": 123
            }
          ],
          "parseErrors": false
        },
        {
          "module": "result",
          "source": "sigil/node/sigil-execution/src/result.rs",
          "sha256": "55b67483f749967398b9308385ec07e12ba9f188df78746f93621dbb05aa7458",
          "attributes": "",
          "items": [
            {
              "name": "result::ExecutionResult",
              "kind": "struct_item",
              "signature": "pub struct ExecutionResult {\n/// Zone in which the execution occurred.\n\npub zone_id: String,\n/// Hash of the transaction that triggered this execution.\n\npub tx_hash: SigilHash,\n/// Whether the execution completed successfully.\n\npub success: bool,\n/// Total gas consumed during execution.\n\npub gas_used: u64,\n/// Return value from the WASM entry point (if any).\n\npub return_value: Option<Vec<u8>>,\n/// State mutations applied during execution.\n\npub state_changes: Vec<StateChange>,\n/// Cross-zone messages emitted during execution.\n\npub messages: Vec<CrossZoneMessage>,\n/// Log entries emitted during execution.\n\npub logs: Vec<LogEntry>,\n/// Error description if the execution failed.\n\npub error: Option<String>\n}",
              "docs": "The complete result of a single WASM execution within an Organization Zone.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "result::ExecutionResult::is_success",
              "kind": "function_item",
              "signature": "pub fn is_success(&self) -> bool;",
              "docs": "Returns `true` if the execution succeeded (no error).",
              "attributes": "",
              "line": 38
            },
            {
              "name": "result::ExecutionResult::state_change_count",
              "kind": "function_item",
              "signature": "pub fn state_change_count(&self) -> usize;",
              "docs": "Returns the number of state mutations.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "result::ExecutionResult::message_count",
              "kind": "function_item",
              "signature": "pub fn message_count(&self) -> usize;",
              "docs": "Returns the number of cross-zone messages emitted.",
              "attributes": "",
              "line": 48
            }
          ],
          "parseErrors": false
        },
        {
          "module": "zone",
          "source": "sigil/node/sigil-execution/src/zone.rs",
          "sha256": "398f86918f41155452c3c17c31132ec61f0fc8f34bff777a150a01364343aaad",
          "attributes": "",
          "items": [
            {
              "name": "zone::ZoneStatus",
              "kind": "enum_item",
              "signature": "pub enum ZoneStatus {\n    /// Zone is active and accepting transactions.\n    Active,\n    /// Zone is suspended (e.g., by governance action).\n    Suspended,\n    /// Zone is being migrated to a new state root.\n    Migrating,\n    /// Zone has been archived and is read-only.\n    Archived,\n}",
              "docs": "Status of an Organization Zone.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "zone::DeployedModule",
              "kind": "struct_item",
              "signature": "pub struct DeployedModule {\n/// Unique module identifier within the zone.\n\npub module_id: String,\n/// BLAKE3 hash of the WASM bytecode.\n\npub module_hash: SigilHash,\n/// Human-readable module name.\n\npub name: String,\n/// Semantic version string (e.g., \"1.0.0\").\n\npub version: String,\n/// Size of the WASM bytecode in bytes.\n\npub wasm_size: u64,\n/// Block height at which this module was deployed.\n\npub deployed_height: u64,\n/// OAS DID of the entity that deployed this module.\n\npub deployer_did: String\n}",
              "docs": "A WASM module deployed within an Organization Zone.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "zone::OrganizationZone",
              "kind": "struct_item",
              "signature": "pub struct OrganizationZone {\n/// Unique zone identifier (derived from org DID + creation height).\n\npub zone_id: String,\n/// OAS DID of the organization that owns this zone.\n\npub org_did: String,\n/// Current Merkle root of the zone's state tree.\n\npub state_root: SigilHash,\n/// WASM modules currently deployed in this zone.\n\npub deployed_modules: Vec<DeployedModule>,\n/// Current zone status.\n\npub status: ZoneStatus,\n/// Block height at which this zone was created.\n\npub created_height: u64,\n/// Block height of the most recent transaction in this zone.\n\npub last_active_height: u64,\n/// Cumulative gas consumed by all executions in this zone.\n\npub gas_used_total: u64\n}",
              "docs": "An Organization Zone \u2014 independent WASM execution environment for a single\norganization.\n\nEach zone maintains its own Merkle state root, a set of deployed WASM modules,\nand cumulative gas accounting.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 49
            },
            {
              "name": "zone::CzacRouteTarget",
              "kind": "struct_item",
              "signature": "pub struct CzacRouteTarget {\n/// Target zone ID.\n\npub zone_id: String,\n/// OAS DID of the target organization.\n\npub target_org_did: String,\n/// Optional specific module within the zone to handle the message.\n\npub target_module_id: Option<String>,\n/// CZAC channel ID through which the message arrived.\n\npub channel_id: String,\n/// Message sequence number within the channel.\n\npub sequence: u64\n}",
              "docs": "Routing information for a cross-zone CZAC message targeting this zone.\n\nWhen a CZAC envelope arrives at the execution layer, the router resolves\nthe target zone and constructs a `CzacRouteTarget` so the zone executor\nknows which module (if any) should handle the message.",
              "attributes": "#[cfg(feature = \"czac\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 75
            },
            {
              "name": "zone::OrganizationZone::new",
              "kind": "function_item",
              "signature": "pub fn new(org_did: impl Into<String>, height: u64) -> Self;",
              "docs": "Create a new Organization Zone for the given OAS DID at the given block height.\n\nThe zone ID is derived as the BLAKE3 hash of `org_did || height`.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "zone::OrganizationZone::deploy_module",
              "kind": "function_item",
              "signature": "pub fn deploy_module(&mut self, module: DeployedModule) -> Result<(), ExecutionError>;",
              "docs": "Deploy a new WASM module into this zone.\n\nReturns an error if the zone is not active or a module with the same ID\nis already deployed.",
              "attributes": "",
              "line": 115
            },
            {
              "name": "zone::OrganizationZone::remove_module",
              "kind": "function_item",
              "signature": "pub fn remove_module(&mut self, module_id: &str) -> Result<DeployedModule, ExecutionError>;",
              "docs": "Remove a deployed module by ID.\n\nReturns an error if the zone is not active or the module is not found.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "zone::OrganizationZone::find_module",
              "kind": "function_item",
              "signature": "pub fn find_module(&self, module_id: &str) -> Option<&DeployedModule>;",
              "docs": "Find a deployed module by ID.",
              "attributes": "",
              "line": 164
            },
            {
              "name": "zone::OrganizationZone::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Returns `true` if the zone status is `Active`.",
              "attributes": "",
              "line": 171
            },
            {
              "name": "zone::OrganizationZone::update_state_root",
              "kind": "function_item",
              "signature": "pub fn update_state_root(&mut self, new_root: SigilHash);",
              "docs": "Update the zone's Merkle state root.",
              "attributes": "",
              "line": 176
            },
            {
              "name": "zone::OrganizationZone::resolve_czac_route",
              "kind": "function_item",
              "signature": "pub fn resolve_czac_route(\n        &self,\n        channel_id: String,\n        sequence: u64,\n        module_id: Option<String>,\n    ) -> Result<CzacRouteTarget, ExecutionError>;",
              "docs": "Resolve a CZAC message to a route target within this zone.\n\nIf `module_id` is `Some`, validates that the module exists in this zone.\nIf `None`, the zone itself is the target (no specific module).",
              "attributes": "#[cfg(feature = \"czac\")]",
              "line": 185
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-zk",
      "version": "0.1.0",
      "source": "sigil/node/sigil-zk",
      "manifestSha256": "383107671727435835ce2f87f4529f3b875f40a1d7e1f6aabebd96d1735b21c0",
      "features": {
        "default": []
      },
      "publish": true,
      "url": "/reference/rust/sigil-zk",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-zk/src/lib.rs",
          "sha256": "34ded77df384959d671d6e48e7a914cbf9bad9600c5b496465812e88d2650f94",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "fallback",
              "kind": "module",
              "signature": "pub mod fallback;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "lineage_proof",
              "kind": "module",
              "signature": "pub mod lineage_proof;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "metrics",
              "kind": "module",
              "signature": "pub mod metrics;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pipeline",
              "kind": "module",
              "signature": "pub mod pipeline;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "proof",
              "kind": "module",
              "signature": "pub mod proof;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "traits",
              "kind": "module",
              "signature": "pub mod traits;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use error::ZkError;",
              "kind": "use_declaration",
              "signature": "pub use error::ZkError;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use fallback::{HashCommitmentProver, HashCommitmentVerifier};",
              "kind": "use_declaration",
              "signature": "pub use fallback::{HashCommitmentProver, HashCommitmentVerifier};",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use lineage_proof::{\n    verify_structural_chain, LineageError, LineageNode, LineageVerifier, StructuralLineageVerifier,\n};",
              "kind": "use_declaration",
              "signature": "pub use lineage_proof::{\n    verify_structural_chain, LineageError, LineageNode, LineageVerifier, StructuralLineageVerifier,\n};",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "pub use metrics::ZkMetrics;",
              "kind": "use_declaration",
              "signature": "pub use metrics::ZkMetrics;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "pub use pipeline::{PipelineStage, ProofJob, ProofPipeline};",
              "kind": "use_declaration",
              "signature": "pub use pipeline::{PipelineStage, ProofJob, ProofPipeline};",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "pub use proof::{BlockProof, HashCommitmentProof, PublicInputs};",
              "kind": "use_declaration",
              "signature": "pub use proof::{BlockProof, HashCommitmentProof, PublicInputs};",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "pub use traits::{Prover, Verifier};",
              "kind": "use_declaration",
              "signature": "pub use traits::{Prover, Verifier};",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "::TARGET_VERIFY_TIME_MS",
              "kind": "const_item",
              "signature": "pub const TARGET_VERIFY_TIME_MS: u64;",
              "docs": "Target proof verification time in milliseconds.\n\nBlock Validators must verify proofs within this time to maintain throughput.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "::PROVING_SYSTEM_JOLT_V1",
              "kind": "const_item",
              "signature": "pub const PROVING_SYSTEM_JOLT_V1: &str;",
              "docs": "Proving system identifier for Jolt v1 (RISC-V zkSNARK).",
              "attributes": "",
              "line": 56
            },
            {
              "name": "::PROVING_SYSTEM_HASH_COMMIT_V1",
              "kind": "const_item",
              "signature": "pub const PROVING_SYSTEM_HASH_COMMIT_V1: &str;",
              "docs": "Proving system identifier for the hash-commitment fallback.",
              "attributes": "",
              "line": 59
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-zk/src/error.rs",
          "sha256": "94d15c0200b50323ed8fec9f72bd8e923402a8bb7c40ea6d591b44eb590502b2",
          "attributes": "",
          "items": [
            {
              "name": "error::ZkError",
              "kind": "enum_item",
              "signature": "pub enum ZkError {\n    /// Proof generation failed.\n    #[error(\"proof generation failed: {0}\")]\n    ProofGenerationFailed(String),\n\n    /// Proof verification failed.\n    #[error(\"verification failed: {0}\")]\n    VerificationFailed(String),\n\n    /// The proof data is invalid or malformed.\n    #[error(\"invalid proof: {0}\")]\n    InvalidProof(String),\n\n    /// The proving system is not supported by this verifier.\n    #[error(\"unsupported proving system: {0}\")]\n    UnsupportedProvingSystem(String),\n\n    /// The proof pipeline is already processing a job.\n    #[error(\"pipeline is busy\")]\n    PipelineBusy,\n\n    /// No job found with the given ID.\n    #[error(\"job not found: {0}\")]\n    JobNotFound(String),\n\n    /// The public inputs are invalid or inconsistent.\n    #[error(\"invalid public inputs: {0}\")]\n    InvalidPublicInputs(String),\n\n    /// Execution trace collection from the WASM runtime failed.\n    #[error(\"trace collection failed: {0}\")]\n    TraceCollectionFailed(String),\n\n    /// Translation of WASM trace to RISC-V (for Jolt) failed.\n    #[error(\"trace translation failed: {0}\")]\n    TraceTranslationFailed(String),\n\n    /// Serialization or deserialization error.\n    #[error(\"serialization error: {0}\")]\n    SerializationError(String),\n}",
              "docs": "ZK proof pipeline error types.\nErrors that can occur in the ZK proof pipeline.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 5
            },
            {
              "name": "error::ZkError::is_busy",
              "kind": "function_item",
              "signature": "pub fn is_busy(&self) -> bool;",
              "docs": "Returns true if this error indicates the pipeline is busy.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "error::ZkError::is_verification_failure",
              "kind": "function_item",
              "signature": "pub fn is_verification_failure(&self) -> bool;",
              "docs": "Returns true if this error is a verification failure.",
              "attributes": "",
              "line": 54
            }
          ],
          "parseErrors": false
        },
        {
          "module": "fallback",
          "source": "sigil/node/sigil-zk/src/fallback.rs",
          "sha256": "297b18fb1a75e5f56a285e85cdf3be06cc859a64d24a7c1c0fcec18b99972d8a",
          "attributes": "",
          "items": [
            {
              "name": "fallback::HashCommitmentProver",
              "kind": "struct_item",
              "signature": "pub struct HashCommitmentProver {\n/// OAS DID of the prover (Block Producer).\n\npub prover_did: String\n}",
              "docs": "Hash-commitment prover (fallback when full ZK is unavailable).\n\nGenerates [`HashCommitmentProof`] by hashing the execution trace\nand state transition data, then signing the commitment with Ed25519.\nThe prover's DID is included for attribution.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 35
            },
            {
              "name": "fallback::HashCommitmentProver::new",
              "kind": "function_item",
              "signature": "pub fn new(prover_did: String, signing_key: ed25519_dalek::SigningKey) -> Self;",
              "docs": "Create a new hash-commitment prover with the given prover DID and Ed25519 signing key.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "fallback::HashCommitmentProver::generate_commitment",
              "kind": "function_item",
              "signature": "pub fn generate_commitment(\n        &self,\n        block: &Block,\n        pre_state_root: SigilHash,\n        post_state_root: SigilHash,\n    ) -> Result<HashCommitmentProof, ZkError>;",
              "docs": "Generate a hash-commitment \"proof\" for a block.\n\nThis hashes the block body as an execution trace commitment and\ncombines the pre/post state roots with the tx root as a state\ntransition commitment. The resulting hashes are signed with the\nprover's Ed25519 key for cryptographic attribution.\n\nThis is not a ZK proof but provides a verifiable, signed commitment\nto specific execution outcomes.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "fallback::HashCommitmentVerifier",
              "kind": "struct_item",
              "signature": "pub struct HashCommitmentVerifier;",
              "docs": "Hash-commitment verifier.\n\nVerifies that a [`HashCommitmentProof`] is internally consistent with\nthe given block data and state roots, and that the Ed25519 signature is\nvalid. This checks that the hashes were computed correctly and the prover\nsigned them, but does **not** verify that the block was executed correctly\n(that requires a real ZK proof or re-execution).",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 104
            },
            {
              "name": "fallback::HashCommitmentVerifier::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new hash-commitment verifier.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "fallback::HashCommitmentVerifier::verify_commitment",
              "kind": "function_item",
              "signature": "pub fn verify_commitment(\n        &self,\n        proof: &HashCommitmentProof,\n        block: &Block,\n        pre_state_root: SigilHash,\n        post_state_root: SigilHash,\n        verifying_key: &ed25519_dalek::VerifyingKey,\n    ) -> Result<bool, ZkError>;",
              "docs": "Verify a hash commitment against a block.\n\nChecks:\n1. The block height in the proof matches the block.\n2. The execution trace hash matches the serialized block body.\n3. The state transition hash matches (pre_root || post_root || tx_root).\n4. The prover signature is exactly 64 bytes (Ed25519).\n5. The Ed25519 signature verifies against the provided public key.\n\n# Parameters\n- `proof`: The hash commitment proof to verify.\n- `block`: The block to verify against.\n- `pre_state_root`: State root before executing the block.\n- `post_state_root`: State root after executing the block.\n- `verifying_key`: The Ed25519 public key of the claimed prover.\n\n# Returns\n`Ok(true)` if all checks pass, `Ok(false)` if hashes don't match,\nor `Err` if the proof structure is invalid or signature verification fails.",
              "attributes": "",
              "line": 131
            }
          ],
          "parseErrors": false
        },
        {
          "module": "lineage_proof",
          "source": "sigil/node/sigil-zk/src/lineage_proof.rs",
          "sha256": "e05033b0e169cb18c2e314a3401f2cff26ad35fdf5d770677d8b1aa3c033949b",
          "attributes": "",
          "items": [
            {
              "name": "lineage_proof::LineageNode",
              "kind": "struct_item",
              "signature": "pub struct LineageNode {\n/// The subject DID.\n\npub did: String,\n/// One of `\"hmr\"`, `\"mhr\"`, `\"enr\"`, or `\"agent\"` (or any\n\n/// non-root kind tag).\n\npub kind: String,\n/// On-chain status: `\"active\"`, `\"rotating\"`, `\"revoked\"`.\n\npub status: String,\n/// True when GAL `gal_check_revocation` returned `revoked: true` for\n\n/// this DID. Tracked separately from `status` because revocation may\n\n/// cascade independently of status.\n\npub revoked: bool\n}",
              "docs": "Snapshot of the on-chain GAL view of a single DID, used as input to\n[`verify_structural_chain`]. Higher layers populate this from\n`sigil-core::gal` records.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "lineage_proof::LineageNode::is_root",
              "kind": "function_item",
              "signature": "pub fn is_root(&self) -> bool;",
              "docs": "True when this node represents a terminal root anchor.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "lineage_proof::LineageError",
              "kind": "enum_item",
              "signature": "pub enum LineageError {\n    /// Chain is empty.\n    #[error(\"empty lineage chain\")]\n    Empty,\n    /// One of the nodes is revoked on the GAL.\n    #[error(\"node {did} is revoked\")]\n    Revoked {\n        /// The revoked DID.\n        did: String,\n    },\n    /// One of the non-terminal nodes has a non-active status.\n    #[error(\"node {did} has non-active status: {status}\")]\n    NonActive {\n        /// The DID with the non-active status.\n        did: String,\n        /// The reported status.\n        status: String,\n    },\n    /// The terminal node is not a recognized root kind.\n    #[error(\"terminal node {did} has non-root kind {kind:?}\")]\n    TerminalNotRoot {\n        /// The terminal DID.\n        did: String,\n        /// The reported (non-root) kind.\n        kind: String,\n    },\n    /// A non-terminal node was reported as a root kind, which means the\n    /// lineage chain is structurally invalid (a root cannot have a\n    /// parent).\n    #[error(\"non-terminal node {did} is a root kind {kind:?}\")]\n    InternalNodeIsRoot {\n        /// The internal DID.\n        did: String,\n        /// The reported (root) kind.\n        kind: String,\n    },\n}",
              "docs": "Outcome of a structural lineage check.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 49
            },
            {
              "name": "lineage_proof::LineageVerifier",
              "kind": "trait_item",
              "signature": "pub trait LineageVerifier {\n    /// Verify the lineage chain. Implementations may add cryptographic\n    /// signature or zero-knowledge checks; the structural checks below\n    /// are the minimum every implementation must perform.\n    fn verify(&self, chain: &[LineageNode]) -> Result<(), LineageError>;\n}",
              "docs": "Verifier abstraction so a future ZK-wrapped variant can plug in\nwithout changing call sites.",
              "attributes": "",
              "line": 89
            },
            {
              "name": "lineage_proof::StructuralLineageVerifier",
              "kind": "struct_item",
              "signature": "pub struct StructuralLineageVerifier;",
              "docs": "Structural-only verifier: enforces the four invariants documented at\nthe module level. Other verifiers (cryptographic, ZK-wrapped) call\nthis internally and add their own checks on top.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "lineage_proof::verify_structural_chain",
              "kind": "function_item",
              "signature": "pub fn verify_structural_chain(chain: &[LineageNode]) -> Result<(), LineageError>;",
              "docs": "The reference structural check. Same logic as\n`StructuralLineageVerifier::verify` but exposed as a free function so\nit is easy to call from contexts that don't want to hold a verifier\ninstance.",
              "attributes": "",
              "line": 111
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/node/sigil-zk/src/metrics.rs",
          "sha256": "adb85f57b78b77df2c3a579d8572587aacc0b34f3eaca1112dfaeae02cbb0bc3",
          "attributes": "",
          "items": [
            {
              "name": "metrics::ZkMetrics",
              "kind": "struct_item",
              "signature": "pub struct ZkMetrics {\n/// Total number of proofs generated.\n\npub proofs_generated: u64,\n/// Total number of proofs verified.\n\npub proofs_verified: u64,\n/// Average proof generation time in milliseconds.\n\npub avg_prove_time_ms: f64,\n/// Average proof verification time in milliseconds.\n\npub avg_verify_time_ms: f64,\n/// Number of verification failures.\n\npub verification_failures: u64,\n/// Current pipeline depth (number of completed proofs retained).\n\npub pipeline_depth: usize\n}",
              "docs": "Aggregated ZK proof pipeline metrics.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "metrics::ZkMetrics::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new metrics instance with all counters at zero.",
              "attributes": "",
              "line": 36
            },
            {
              "name": "metrics::ZkMetrics::record_proof_generation",
              "kind": "function_item",
              "signature": "pub fn record_proof_generation(&mut self, time_ms: u64);",
              "docs": "Record a proof generation event.\n\nUpdates the running average proof generation time.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "metrics::ZkMetrics::record_verification",
              "kind": "function_item",
              "signature": "pub fn record_verification(&mut self, time_ms: u64, success: bool);",
              "docs": "Record a proof verification event.\n\nUpdates the running average verification time and failure count.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "metrics::ZkMetrics::meets_target",
              "kind": "function_item",
              "signature": "pub fn meets_target(&self) -> bool;",
              "docs": "Returns true if the average verification time meets the target (<= 10ms).",
              "attributes": "",
              "line": 72
            },
            {
              "name": "metrics::ZkMetrics::verification_success_rate",
              "kind": "function_item",
              "signature": "pub fn verification_success_rate(&self) -> f64;",
              "docs": "Returns the verification success rate as a fraction (0.0 to 1.0).\n\nReturns 1.0 if no verifications have been recorded.",
              "attributes": "",
              "line": 79
            }
          ],
          "parseErrors": false
        },
        {
          "module": "pipeline",
          "source": "sigil/node/sigil-zk/src/pipeline.rs",
          "sha256": "fd759dca42f27ed690d9e9e6dd939279a8dcd1b28f57fa3bfa780c848fadc0b8",
          "attributes": "",
          "items": [
            {
              "name": "pipeline::PipelineStage",
              "kind": "enum_item",
              "signature": "pub enum PipelineStage {\n    /// Collecting execution trace from the WASM runtime.\n    TraceCollection,\n    /// Translating WASM trace to RISC-V (for Jolt proving system).\n    TraceTranslation,\n    /// Generating the zero-knowledge proof from the translated trace.\n    ProofGeneration,\n    /// Proof generation is complete and the proof is available.\n    Complete,\n    /// Pipeline stage failed with an error message.\n    Failed(String),\n}",
              "docs": "Pipeline stages for proof generation.\n\nA proof job progresses through these stages sequentially.\nThe pipeline can overlap proof generation with the next block's consensus.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "pipeline::PipelineStage::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(&self) -> bool;",
              "docs": "Returns true if this stage represents a terminal state (Complete or Failed).",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pipeline::PipelineStage::name",
              "kind": "function_item",
              "signature": "pub fn name(&self) -> &str;",
              "docs": "Returns a human-readable name for this stage.",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pipeline::ProofJob",
              "kind": "struct_item",
              "signature": "pub struct ProofJob {\n/// Unique identifier for this job.\n\npub job_id: String,\n/// Block height being proved.\n\npub block_height: u64,\n/// Hash of the block being proved.\n\npub block_hash: SigilHash,\n/// Current pipeline stage.\n\npub stage: PipelineStage,\n/// Unix timestamp (ms) when the job started.\n\npub started_at: u64,\n/// Unix timestamp (ms) when the job completed (if terminal).\n\npub completed_at: Option<u64>,\n/// The completed proof, if generation succeeded.\n\npub proof: Option<BlockProof>,\n/// Error message, if the job failed.\n\npub error: Option<String>\n}",
              "docs": "Status of a single proof generation job.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 51
            },
            {
              "name": "pipeline::ProofPipeline",
              "kind": "struct_item",
              "signature": "pub struct ProofPipeline {\n/// The currently running proof job, if any.\n\npub current_job: Option<ProofJob>,\n/// Completed proofs (bounded by `max_pipeline_depth`).\n\npub completed_proofs: Vec<BlockProof>,\n/// Maximum number of completed proofs to retain.\n\npub max_pipeline_depth: usize\n}",
              "docs": "Proof pipeline that manages proof generation jobs.\n\nThe pipeline can overlap proof generation with the next block's consensus\nround. It maintains a current job and a bounded history of completed proofs.",
              "attributes": "#[derive(Debug)]",
              "line": 75
            },
            {
              "name": "pipeline::ProofPipeline::new",
              "kind": "function_item",
              "signature": "pub fn new(max_depth: usize) -> Self;",
              "docs": "Create a new proof pipeline with the given maximum depth for completed proofs.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "pipeline::ProofPipeline::start_job",
              "kind": "function_item",
              "signature": "pub fn start_job(\n        &mut self,\n        block_height: u64,\n        block_hash: SigilHash,\n    ) -> Result<String, ZkError>;",
              "docs": "Start a new proof generation job for the given block.\n\nReturns the job ID on success. Fails with [`ZkError::PipelineBusy`] if\nthere is already an active (non-terminal) job.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "pipeline::ProofPipeline::advance_stage",
              "kind": "function_item",
              "signature": "pub fn advance_stage(&mut self, job_id: &str, new_stage: PipelineStage) -> Result<(), ZkError>;",
              "docs": "Advance a job to the next pipeline stage.\n\n# Errors\nReturns [`ZkError::JobNotFound`] if no job matches the given ID.",
              "attributes": "",
              "line": 129
            },
            {
              "name": "pipeline::ProofPipeline::complete_job",
              "kind": "function_item",
              "signature": "pub fn complete_job(&mut self, job_id: &str, proof: BlockProof) -> Result<(), ZkError>;",
              "docs": "Mark a job as successfully completed with the generated proof.\n\nThe proof is moved to the completed proofs list. If the list exceeds\n`max_pipeline_depth`, the oldest proof is evicted.\n\n# Errors\nReturns [`ZkError::JobNotFound`] if no job matches the given ID.",
              "attributes": "",
              "line": 147
            },
            {
              "name": "pipeline::ProofPipeline::fail_job",
              "kind": "function_item",
              "signature": "pub fn fail_job(&mut self, job_id: &str, error: String) -> Result<(), ZkError>;",
              "docs": "Mark a job as failed with an error message.\n\nClears the current job slot so new jobs can start.\n\n# Errors\nReturns [`ZkError::JobNotFound`] if no job matches the given ID.",
              "attributes": "",
              "line": 178
            },
            {
              "name": "pipeline::ProofPipeline::get_proof",
              "kind": "function_item",
              "signature": "pub fn get_proof(&self, block_height: u64) -> Option<&BlockProof>;",
              "docs": "Look up a completed proof by block height.\n\nReturns `None` if no proof for that height is in the completed list.",
              "attributes": "",
              "line": 198
            },
            {
              "name": "pipeline::ProofPipeline::is_busy",
              "kind": "function_item",
              "signature": "pub fn is_busy(&self) -> bool;",
              "docs": "Returns true if the pipeline has an active (non-terminal) job.",
              "attributes": "",
              "line": 205
            }
          ],
          "parseErrors": false
        },
        {
          "module": "proof",
          "source": "sigil/node/sigil-zk/src/proof.rs",
          "sha256": "4957d3c16aefecc25268bf2e62fb39b3eb29da582bb1607920cbbf052bc46878",
          "attributes": "",
          "items": [
            {
              "name": "proof::BlockProof",
              "kind": "struct_item",
              "signature": "pub struct BlockProof {\n/// Height of the block this proof covers.\n\npub block_height: u64,\n/// Hash of the block being proved.\n\npub block_hash: SigilHash,\n/// State root before block execution.\n\npub parent_state_root: SigilHash,\n/// State root after block execution.\n\npub post_state_root: SigilHash,\n/// Merkle root of the transactions in the block.\n\npub tx_root: SigilHash,\n/// Merkle root of the transaction receipts.\n\npub receipt_root: SigilHash,\n/// Identifier for the proving system used (e.g., \"jolt-v1\", \"hash-commit-v1\").\n\npub proving_system: String,\n/// The raw proof bytes (format is proving-system-dependent).\n\npub proof_bytes: Vec<u8>,\n/// Public inputs that both prover and verifier agree on.\n\npub public_inputs: PublicInputs,\n/// Hash of the verification key (identifies the circuit).\n\npub verification_key_hash: SigilHash,\n/// OAS DID of the prover (Block Producer).\n\npub prover_did: String,\n/// Time taken to generate this proof, in milliseconds.\n\npub proof_generation_time_ms: u64\n}",
              "docs": "A zero-knowledge proof of correct block execution.\n\nGenerated by a Block Producer after executing all transactions in a block.\nThe proof attests that executing the transactions against `parent_state_root`\nproduces `post_state_root`, without revealing the execution details.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "proof::PublicInputs",
              "kind": "struct_item",
              "signature": "pub struct PublicInputs {\n/// State root before execution.\n\npub pre_state_root: SigilHash,\n/// State root after execution.\n\npub post_state_root: SigilHash,\n/// Block hash being proved.\n\npub block_hash: SigilHash,\n/// Number of transactions in the block.\n\npub tx_count: u32,\n/// Total gas consumed by the block.\n\npub gas_used: u64\n}",
              "docs": "Public inputs that both prover and verifier agree on.\n\nThese values are committed to by the proof and verified against the block.\nAny mismatch between these values and the actual block data means\nthe proof is invalid.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "proof::PublicInputs::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> Vec<u8>;",
              "docs": "Serialize to a deterministic byte representation for proof verification.\n\nLayout: pre_state_root (32) | post_state_root (32) | block_hash (32) |\n        tx_count (4 LE) | gas_used (8 LE) = 108 bytes total.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "proof::PublicInputs::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: &[u8]) -> Result<Self, ZkError>;",
              "docs": "Deserialize from the deterministic byte representation.\n\nExpects exactly 108 bytes in the layout produced by [`Self::to_bytes`].",
              "attributes": "",
              "line": 81
            },
            {
              "name": "proof::PublicInputs::commitment",
              "kind": "function_item",
              "signature": "pub fn commitment(&self) -> SigilHash;",
              "docs": "Compute a commitment hash of these public inputs.\n\nUsed for binding the proof to specific public inputs.",
              "attributes": "",
              "line": 122
            },
            {
              "name": "proof::HashCommitmentProof",
              "kind": "struct_item",
              "signature": "pub struct HashCommitmentProof {\n/// Height of the block this commitment covers.\n\npub block_height: u64,\n/// BLAKE3 hash of the full execution trace.\n\npub execution_trace_hash: SigilHash,\n/// BLAKE3 hash of the state transition (pre_root || post_root || tx_root).\n\npub state_transition_hash: SigilHash,\n/// Ed25519 signature by the prover over (execution_trace_hash || state_transition_hash).\n\n/// 64 bytes.\n\npub prover_signature: Vec<u8>\n}",
              "docs": "A hash-commitment proof used as a fallback when full ZK is not available.\n\nThis is not a true zero-knowledge proof. It commits to the execution trace\nand state transition hashes, signed by the prover's Ed25519 key. Validators\nverify the signature against the prover's public key to confirm attribution,\nbut cannot verify correctness of execution without re-executing (or trusting\nthe prover).\n\nPhase 2 (Jolt Pro) replaces this with real zkSNARKs providing succinctness,\nprivacy, and soundness.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 138
            },
            {
              "name": "proof::HashCommitmentProof::try_to_zk_proof",
              "kind": "function_item",
              "signature": "pub fn try_to_zk_proof(&self) -> Result<sigil_core::block::ZkProof, ZkError>;",
              "docs": "Convert this hash-commitment proof into a [`sigil_core::block::ZkProof`]\nfor embedding in a block header.\n\nSerializes the proof to JSON bytes as the `proof_bytes` field, sets the\nproving system to `hash-commit-v1`, and includes the execution trace and\nstate transition hashes as public inputs.",
              "attributes": "",
              "line": 157
            },
            {
              "name": "proof::HashCommitmentProof::to_zk_proof",
              "kind": "function_item",
              "signature": "pub fn to_zk_proof(&self) -> sigil_core::block::ZkProof;",
              "docs": "Convert this hash-commitment proof into a [`sigil_core::block::ZkProof`].\n\nThis convenience wrapper no longer silently emits empty proof bytes if\nserialization fails; callers that can recover should use\n[`Self::try_to_zk_proof`].",
              "attributes": "",
              "line": 178
            },
            {
              "name": "proof::HashCommitmentProof::from_zk_proof",
              "kind": "function_item",
              "signature": "pub fn from_zk_proof(zk: &sigil_core::block::ZkProof) -> Option<Self>;",
              "docs": "Deserialize a [`HashCommitmentProof`] from a [`sigil_core::block::ZkProof`].\n\nReturns `None` if the proving system is not `hash-commit-v1` or if the\nproof bytes cannot be deserialized.",
              "attributes": "",
              "line": 187
            }
          ],
          "parseErrors": false
        },
        {
          "module": "traits",
          "source": "sigil/node/sigil-zk/src/traits.rs",
          "sha256": "260212a22761e6942d870d29d7c73f4e03d2d74faf682c6a40225f00a40a5c66",
          "attributes": "",
          "items": [
            {
              "name": "traits::Prover",
              "kind": "trait_item",
              "signature": "pub trait Prover: Send + Sync {\n    /// Generate a proof of correct block execution.\n    ///\n    /// # Arguments\n    /// * `block` - The block whose execution is being proved.\n    /// * `pre_state_root` - The state root before executing this block.\n    /// * `post_state_root` - The state root after executing this block.\n    ///\n    /// # Errors\n    /// Returns [`ZkError`] if proof generation fails (e.g., trace collection,\n    /// circuit constraints unsatisfied, resource limits exceeded).\n    fn prove(\n        &self,\n        block: &Block,\n        pre_state_root: SigilHash,\n        post_state_root: SigilHash,\n    ) -> Result<BlockProof, ZkError>;\n\n    /// Returns the proving system identifier (e.g., \"jolt-v1\", \"hash-commit-v1\").\n    fn proving_system(&self) -> &str;\n\n    /// Returns the verification key hash for this prover's circuit.\n    ///\n    /// This identifies the specific circuit version and allows verifiers to\n    /// select the correct verification key.\n    fn verification_key_hash(&self) -> SigilHash;\n}",
              "docs": "Trait for ZK proof generation, implemented by Block Producers.\n\nA `Prover` takes a fully-executed block (with known pre/post state roots)\nand produces a [`BlockProof`] that any [`Verifier`] can check without\nre-executing the block.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "traits::Verifier",
              "kind": "trait_item",
              "signature": "pub trait Verifier: Send + Sync {\n    /// Verify a block proof.\n    ///\n    /// Must complete in < 10ms to meet Sigil's performance targets.\n    ///\n    /// # Arguments\n    /// * `proof` - The block proof to verify.\n    ///\n    /// # Returns\n    /// `Ok(true)` if the proof is valid, `Ok(false)` if the proof is\n    /// cryptographically valid but does not match the claimed public inputs,\n    /// or `Err` if verification itself fails.\n    fn verify(&self, proof: &BlockProof) -> Result<bool, ZkError>;\n\n    /// Returns the list of proving system identifiers this verifier supports.\n    fn supported_systems(&self) -> Vec<String>;\n}",
              "docs": "Trait for ZK proof verification, used by Block Validators.\n\nA `Verifier` checks a [`BlockProof`] and returns whether the proof is valid.\nVerification must complete within the target time (10ms) to maintain\nblock processing throughput.",
              "attributes": "",
              "line": 50
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-storage",
      "version": "0.1.0",
      "source": "sigil/node/sigil-storage",
      "manifestSha256": "d96cdc06bf45ce2535b06cfe7466c6df183181c25548db99e7e224662bafb01e",
      "features": {
        "default": [
          "akashakv-backend"
        ],
        "akashakv-backend": [
          "dep:akashakv",
          "dep:tokio"
        ],
        "legacy-rocksdb-import": [
          "dep:rocksdb"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-storage",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-storage/src/lib.rs",
          "sha256": "894cb149afb7e4dfb1bc25c788c97e696186138772635043567437170aaca657",
          "attributes": "",
          "items": [
            {
              "name": "akashakv_store",
              "kind": "module",
              "signature": "pub mod akashakv_store;",
              "docs": "",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 6
            },
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "da",
              "kind": "module",
              "signature": "pub mod da;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "gal_storage",
              "kind": "module",
              "signature": "pub mod gal_storage;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "memory",
              "kind": "module",
              "signature": "pub mod memory;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "rocksdb_store",
              "kind": "module",
              "signature": "pub mod rocksdb_store;",
              "docs": "",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 13
            },
            {
              "name": "traits",
              "kind": "module",
              "signature": "pub mod traits;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "pub use akashakv_store::{\n    AKASHAKV_KEYSPACES, AkashaKvBlockStore, AkashaKvReceiptStore, AkashaKvStateStore,\n    AkashaKvStore, akashakv_key_for_test, production_akashakv_config,\n};",
              "kind": "use_declaration",
              "signature": "pub use akashakv_store::{\n    AKASHAKV_KEYSPACES, AkashaKvBlockStore, AkashaKvReceiptStore, AkashaKvStateStore,\n    AkashaKvStore, akashakv_key_for_test, production_akashakv_config,\n};",
              "docs": "",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 17
            },
            {
              "name": "pub use config::StorageConfig;",
              "kind": "use_declaration",
              "signature": "pub use config::StorageConfig;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use da::{DaFragment, DaSampleRequest, DaSampleResponse};",
              "kind": "use_declaration",
              "signature": "pub use da::{DaFragment, DaSampleRequest, DaSampleResponse};",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "pub use error::StorageError;",
              "kind": "use_declaration",
              "signature": "pub use error::StorageError;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "pub use gal_storage::{\n    PARTITION_ENR, PARTITION_HMR, PARTITION_MHR, PARTITION_ORG_ROOT, PARTITION_REVOCATION,\n    PARTITION_SHARD_ASSIGNMENT, PARTITION_SHARD_TOPOLOGY, PARTITIONS, cascade_revoke, key_for_did,\n    topology_key,\n};",
              "kind": "use_declaration",
              "signature": "pub use gal_storage::{\n    PARTITION_ENR, PARTITION_HMR, PARTITION_MHR, PARTITION_ORG_ROOT, PARTITION_REVOCATION,\n    PARTITION_SHARD_ASSIGNMENT, PARTITION_SHARD_TOPOLOGY, PARTITIONS, cascade_revoke, key_for_did,\n    topology_key,\n};",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "pub use memory::{MemoryBlockStore, MemoryReceiptStore, MemoryStateStore};",
              "kind": "use_declaration",
              "signature": "pub use memory::{MemoryBlockStore, MemoryReceiptStore, MemoryStateStore};",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "pub use rocksdb_store::{RocksDbBlockStore, RocksDbReceiptStore, RocksDbStateStore};",
              "kind": "use_declaration",
              "signature": "pub use rocksdb_store::{RocksDbBlockStore, RocksDbReceiptStore, RocksDbStateStore};",
              "docs": "",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 31
            },
            {
              "name": "pub use traits::{BlockStore, KeyValuePair, ReceiptStore, StateStore};",
              "kind": "use_declaration",
              "signature": "pub use traits::{BlockStore, KeyValuePair, ReceiptStore, StateStore};",
              "docs": "",
              "attributes": "",
              "line": 32
            }
          ],
          "parseErrors": false
        },
        {
          "module": "akashakv_store",
          "source": "sigil/node/sigil-storage/src/akashakv_store.rs",
          "sha256": "f74807ad1cda407fced1741a4aaea0ffaf4e56191710cecab8b3b463b63df180",
          "attributes": "#[cfg(feature = \"akashakv-backend\")]",
          "items": [
            {
              "name": "akashakv_store::AKASHAKV_KEYSPACES",
              "kind": "const_item",
              "signature": "pub const AKASHAKV_KEYSPACES: &[&str];",
              "docs": "AkashaKV keyspaces reserved for Sigil production storage.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 31
            },
            {
              "name": "akashakv_store::production_akashakv_config",
              "kind": "function_item",
              "signature": "pub fn production_akashakv_config(path: &Path) -> AkConfig;",
              "docs": "Bounded AkashaKV profile for Sigil node processes.\n\nAkashaKV's standalone defaults are intentionally generous for a single\ndatabase. A full Sigil node opens many feature stores in one process, so\nusing those defaults per store can exceed production pod limits during\nrestart. Keep all stores enabled, but cap per-store startup memory.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 59
            },
            {
              "name": "akashakv_store::AkashaKvStore",
              "kind": "struct_item",
              "signature": "pub struct AkashaKvStore {\n\n}",
              "docs": "Production AkashaKV store implementing all Sigil storage traits.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 95
            },
            {
              "name": "akashakv_store::AkashaKvBlockStore",
              "kind": "type_item",
              "signature": "pub type AkashaKvBlockStore = AkashaKvStore;",
              "docs": "Block-store view over the unified AkashaKV backend.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 124
            },
            {
              "name": "akashakv_store::AkashaKvStateStore",
              "kind": "type_item",
              "signature": "pub type AkashaKvStateStore = AkashaKvStore;",
              "docs": "State-store view over the unified AkashaKV backend.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 126
            },
            {
              "name": "akashakv_store::AkashaKvReceiptStore",
              "kind": "type_item",
              "signature": "pub type AkashaKvReceiptStore = AkashaKvStore;",
              "docs": "Receipt-store view over the unified AkashaKV backend.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 128
            },
            {
              "name": "akashakv_store::AkashaKvStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, StorageError>;",
              "docs": "Open or create a Sigil AkashaKV store at `path`.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 132
            },
            {
              "name": "akashakv_store::AkashaKvStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), StorageError>;",
              "docs": "Force AkashaKV memtables to disk. Tests and migration use this before\nreopening or atomically promoting a staging directory.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 160
            },
            {
              "name": "akashakv_store::AkashaKvStore::akashakv_revision",
              "kind": "function_item",
              "signature": "pub fn akashakv_revision(&self) -> &'static str;",
              "docs": "Revision contract enforced by launch-readiness checks.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 166
            },
            {
              "name": "akashakv_store::akashakv_key_for_test",
              "kind": "function_item",
              "signature": "pub fn akashakv_key_for_test(parts: &[&[u8]]) -> Result<Vec<u8>, StorageError>;",
              "docs": "Exposed only for exact-key regression tests.",
              "attributes": "#[cfg(feature = \"akashakv-backend\")]",
              "line": 496
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/node/sigil-storage/src/config.rs",
          "sha256": "6274aeb9505bb60952d77c4eaf728ad507e60f43f53c928bfff7e7d3d3cde720",
          "attributes": "",
          "items": [
            {
              "name": "config::StorageConfig",
              "kind": "struct_item",
              "signature": "pub struct StorageConfig {\n/// Root directory for all database files.\n\npub data_dir: PathBuf,\n/// Backend block cache size in megabytes.\n\npub cache_size_mb: usize\n}",
              "docs": "Configuration for persistent storage backends.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "da",
          "source": "sigil/node/sigil-storage/src/da.rs",
          "sha256": "9d28d40f0ca4d1b2413693be084db6fd3917a49033da988d30bf43b93be1fa52",
          "attributes": "",
          "items": [
            {
              "name": "da::DaFragment",
              "kind": "struct_item",
              "signature": "pub struct DaFragment {\n/// Height of the block this fragment belongs to.\n\npub block_height: u64,\n/// Zero-based index of this fragment within the coding scheme.\n\npub fragment_index: u32,\n/// Total number of fragments the block was split into.\n\npub total_fragments: u32,\n/// The encoded fragment bytes.\n\npub data: Vec<u8>,\n/// Merkle inclusion proof linking this fragment to the block's DA root.\n\npub proof: Vec<u8>\n}",
              "docs": "An erasure-coded fragment of a block for data availability sampling.\n\nBlocks are split into `total_fragments` pieces using Reed-Solomon coding\nso that any subset of sufficient size can reconstruct the original block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "da::DaSampleRequest",
              "kind": "struct_item",
              "signature": "pub struct DaSampleRequest {\n/// Block height to sample.\n\npub block_height: u64,\n/// Which fragment indices to retrieve.\n\npub fragment_indices: Vec<u32>\n}",
              "docs": "A request to sample specific DA fragments for a block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "da::DaSampleResponse",
              "kind": "struct_item",
              "signature": "pub struct DaSampleResponse {\n/// Block height the fragments belong to.\n\npub block_height: u64,\n/// The requested fragments (may be fewer than requested if some are\n\n/// unavailable).\n\npub fragments: Vec<DaFragment>,\n/// Whether the sampled data indicates the block is available.\n\npub available: bool\n}",
              "docs": "A response to a DA sampling request.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 38
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-storage/src/error.rs",
          "sha256": "244350edb411b3c5e2e1172570c8dd2dadf4d60f16580e032ab48d6b6256bbb5",
          "attributes": "",
          "items": [
            {
              "name": "error::StorageError",
              "kind": "enum_item",
              "signature": "pub enum StorageError {\n    /// The requested item was not found.\n    #[error(\"not found: {0}\")]\n    NotFound(String),\n\n    /// Stored data failed integrity checks.\n    #[error(\"corrupted data: {0}\")]\n    CorruptedData(String),\n\n    /// A write operation failed.\n    #[error(\"write error: {0}\")]\n    WriteError(String),\n\n    /// A read operation failed.\n    #[error(\"read error: {0}\")]\n    ReadError(String),\n\n    /// Serialization or deserialization failed.\n    #[error(\"serialization error: {0}\")]\n    SerializationError(String),\n\n    /// The requested partition does not exist.\n    #[error(\"partition not found: {0}\")]\n    PartitionNotFound(String),\n}",
              "docs": "Errors produced by storage operations.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 7
            },
            {
              "name": "error::StorageError::not_found",
              "kind": "function_item",
              "signature": "pub fn not_found(msg: impl fmt::Display) -> Self;",
              "docs": "Convenience: create a `NotFound` error with a formatted message.",
              "attributes": "",
              "line": 35
            }
          ],
          "parseErrors": false
        },
        {
          "module": "gal_storage",
          "source": "sigil/node/sigil-storage/src/gal_storage.rs",
          "sha256": "6810035a31351cf29b97d6d24a7fd7f5b84b9c4d06abe89e5c9a3cca7a621481",
          "attributes": "",
          "items": [
            {
              "name": "gal_storage::PARTITION_HMR",
              "kind": "const_item",
              "signature": "pub const PARTITION_HMR: &str;",
              "docs": "Partition: latest [`HmrAnchor`] per HMR DID.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "gal_storage::PARTITION_MHR",
              "kind": "const_item",
              "signature": "pub const PARTITION_MHR: &str;",
              "docs": "Partition: latest [`MhrAnchor`] per MHR DID.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "gal_storage::PARTITION_ENR",
              "kind": "const_item",
              "signature": "pub const PARTITION_ENR: &str;",
              "docs": "Partition: latest [`EnrAnchor`] per ENR DID.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "gal_storage::PARTITION_ORG_ROOT",
              "kind": "const_item",
              "signature": "pub const PARTITION_ORG_ROOT: &str;",
              "docs": "Partition: latest [`OrgLineageRoot`] per org DID.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "gal_storage::PARTITION_SHARD_ASSIGNMENT",
              "kind": "const_item",
              "signature": "pub const PARTITION_SHARD_ASSIGNMENT: &str;",
              "docs": "Partition: latest [`ShardAssignment`] per subject DID.",
              "attributes": "",
              "line": 26
            },
            {
              "name": "gal_storage::PARTITION_REVOCATION",
              "kind": "const_item",
              "signature": "pub const PARTITION_REVOCATION: &str;",
              "docs": "Partition: revocation records keyed by subject DID.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "gal_storage::PARTITION_SHARD_TOPOLOGY",
              "kind": "const_item",
              "signature": "pub const PARTITION_SHARD_TOPOLOGY: &str;",
              "docs": "Partition: append-only [`ShardTopologyEntry`] log.\nKeys are zero-padded `applied_at_block:sequence` so prefix scans\nproduce a chronological ordering.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "gal_storage::PARTITIONS",
              "kind": "const_item",
              "signature": "pub const PARTITIONS: &[&str];",
              "docs": "All GAL partitions, in canonical iteration order. Useful when wiring\nstorage backends that need to declare column families up front.",
              "attributes": "",
              "line": 36
            },
            {
              "name": "gal_storage::key_for_did",
              "kind": "function_item",
              "signature": "pub fn key_for_did(did: &str) -> Vec<u8>;",
              "docs": "Encode a DID as the canonical key for per-subject partitions\n(HMR / MHR / ENR / org-root / shard-assignment / revocation).",
              "attributes": "",
              "line": 48
            },
            {
              "name": "gal_storage::topology_key",
              "kind": "function_item",
              "signature": "pub fn topology_key(applied_at_block: u64, sequence: u64) -> Vec<u8>;",
              "docs": "Encode a topology key from `applied_at_block` + per-block `sequence`.\nProduces 16 bytes: 8 BE bytes for the block, 8 BE bytes for the\nsequence \u2014 so prefix-scanning yields chronological order.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "gal_storage::write",
              "kind": "module",
              "signature": "pub mod write;",
              "docs": "Typed write helpers. Each accepts the appropriate record type from\n`sigil-core::gal` (passed as `&T` to keep this module loosely coupled).",
              "attributes": "",
              "line": 96
            },
            {
              "name": "gal_storage::write::put_hmr",
              "kind": "function_item",
              "signature": "pub fn put_hmr<T: Serialize>(\n        store: &dyn StateStore,\n        did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store the latest HMR anchor for a DID. Existing entries are\noverwritten \u2014 call sites are responsible for monotonic-sequence\nenforcement.",
              "attributes": "",
              "line": 102
            },
            {
              "name": "gal_storage::write::put_mhr",
              "kind": "function_item",
              "signature": "pub fn put_mhr<T: Serialize>(\n        store: &dyn StateStore,\n        did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store the latest MHR anchor for a DID.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "gal_storage::write::put_enr",
              "kind": "function_item",
              "signature": "pub fn put_enr<T: Serialize>(\n        store: &dyn StateStore,\n        did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store the latest ENR anchor for a DID.",
              "attributes": "",
              "line": 120
            },
            {
              "name": "gal_storage::write::put_org_root",
              "kind": "function_item",
              "signature": "pub fn put_org_root<T: Serialize>(\n        store: &dyn StateStore,\n        org_did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store the latest org lineage root for an org DID.",
              "attributes": "",
              "line": 129
            },
            {
              "name": "gal_storage::write::put_shard_assignment",
              "kind": "function_item",
              "signature": "pub fn put_shard_assignment<T: Serialize>(\n        store: &dyn StateStore,\n        subject_did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store the current shard assignment for a subject DID.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "gal_storage::write::put_revocation",
              "kind": "function_item",
              "signature": "pub fn put_revocation<T: Serialize>(\n        store: &dyn StateStore,\n        subject_did: &str,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Store a revocation record for a subject DID. Cascade revocations\nshould use [`super::cascade_revoke`] for atomic multi-write\nsemantics.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "gal_storage::write::append_shard_topology",
              "kind": "function_item",
              "signature": "pub fn append_shard_topology<T: Serialize>(\n        store: &dyn StateStore,\n        applied_at_block: u64,\n        sequence: u64,\n        record: &T,\n    ) -> Result<(), StorageError>;",
              "docs": "Append a shard-topology entry under a chronological key.",
              "attributes": "",
              "line": 168
            },
            {
              "name": "gal_storage::read",
              "kind": "module",
              "signature": "pub mod read;",
              "docs": "Typed read helpers, generic over the record type. Higher layers pass\n`sigil-core::gal::HmrAnchor` (etc.) directly.",
              "attributes": "",
              "line": 185
            },
            {
              "name": "gal_storage::read::get_hmr",
              "kind": "function_item",
              "signature": "pub fn get_hmr<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the latest HMR record for a DID.",
              "attributes": "",
              "line": 189
            },
            {
              "name": "gal_storage::read::get_mhr",
              "kind": "function_item",
              "signature": "pub fn get_mhr<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the latest MHR record for a DID.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "gal_storage::read::get_enr",
              "kind": "function_item",
              "signature": "pub fn get_enr<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the latest ENR record for a DID.",
              "attributes": "",
              "line": 205
            },
            {
              "name": "gal_storage::read::get_org_root",
              "kind": "function_item",
              "signature": "pub fn get_org_root<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        org_did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the latest org lineage root for an org DID.",
              "attributes": "",
              "line": 213
            },
            {
              "name": "gal_storage::read::get_shard_assignment",
              "kind": "function_item",
              "signature": "pub fn get_shard_assignment<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        subject_did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the current shard assignment for a subject DID.",
              "attributes": "",
              "line": 221
            },
            {
              "name": "gal_storage::read::get_revocation",
              "kind": "function_item",
              "signature": "pub fn get_revocation<T: DeserializeOwned>(\n        store: &dyn StateStore,\n        subject_did: &str,\n    ) -> Result<Option<T>, StorageError>;",
              "docs": "Fetch the revocation record for a subject DID, or `None` if the\nsubject is not revoked.",
              "attributes": "",
              "line": 230
            },
            {
              "name": "gal_storage::read::is_revoked",
              "kind": "function_item",
              "signature": "pub fn is_revoked(store: &dyn StateStore, subject_did: &str) -> Result<bool, StorageError>;",
              "docs": "Returns `true` if `subject_did` has any revocation record.",
              "attributes": "",
              "line": 238
            },
            {
              "name": "gal_storage::cascade_revoke",
              "kind": "function_item",
              "signature": "pub fn cascade_revoke<T: Serialize>(\n    store: &dyn StateStore,\n    subject_dids: &[&str],\n    record_for: impl Fn(&str) -> T,\n) -> Result<(), StorageError>;",
              "docs": "Apply a cascade revocation across multiple DIDs as one logical write.\n\nBackends with a native batch primitive implement this as a crash-atomic\nwrite; simpler stores apply the entries while holding their store lock.",
              "attributes": "",
              "line": 247
            }
          ],
          "parseErrors": false
        },
        {
          "module": "memory",
          "source": "sigil/node/sigil-storage/src/memory.rs",
          "sha256": "6415e79fe7f502f4e100dade795769f45d6a3856ea1faacefd0d7cbe31af3a25",
          "attributes": "",
          "items": [
            {
              "name": "memory::MemoryBlockStore",
              "kind": "struct_item",
              "signature": "pub struct MemoryBlockStore {\n\n}",
              "docs": "In-memory block store backed by height and hash indexes.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 24
            },
            {
              "name": "memory::MemoryBlockStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty block store.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "memory::MemoryStateStore",
              "kind": "struct_item",
              "signature": "pub struct MemoryStateStore {\n\n}",
              "docs": "In-memory key-value state store with partition isolation.\n\nEach partition maps byte-keys to byte-values using a `BTreeMap` so that\n`scan_prefix` can exploit ordering.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 131
            },
            {
              "name": "memory::MemoryStateStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty state store.",
              "attributes": "",
              "line": 137
            },
            {
              "name": "memory::MemoryReceiptStore",
              "kind": "struct_item",
              "signature": "pub struct MemoryReceiptStore {\n\n}",
              "docs": "In-memory receipt store with transaction-hash and block-height indexes.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 212
            },
            {
              "name": "memory::MemoryReceiptStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty receipt store.",
              "attributes": "",
              "line": 221
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rocksdb_store",
          "source": "sigil/node/sigil-storage/src/rocksdb_store.rs",
          "sha256": "12ddad1ad95b5e91078e8cd56def9da49b9052526cf9a70ca919d50b985b0448",
          "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
          "items": [
            {
              "name": "rocksdb_store::RocksDbBlockStore",
              "kind": "struct_item",
              "signature": "pub struct RocksDbBlockStore {\n\n}",
              "docs": "Persistent block store backed by RocksDB.\n\nKey schemes:\n- `b:<height_be_bytes>` -> serde_json-encoded [`Block`]\n- `h:<hash_bytes>` -> `<height_be_bytes>` (hash-to-height index)\n- `meta:latest` -> `<height_be_bytes>` (latest finalized height)",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 148
            },
            {
              "name": "rocksdb_store::RocksDbBlockStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, StorageError>;",
              "docs": "Open (or create) a RocksDB block store at the given path.",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 154
            },
            {
              "name": "rocksdb_store::RocksDbBlockStore::open_read_only",
              "kind": "function_item",
              "signature": "pub fn open_read_only(path: &Path) -> Result<Self, StorageError>;",
              "docs": "Open an existing RocksDB block store read-only.\n\nThis is only for one-shot legacy import and repair tooling. Production\nnode runtime must not write to the deprecated RocksDB store while\nmigrating to AkashaKV.",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 171
            },
            {
              "name": "rocksdb_store::RocksDbStateStore",
              "kind": "struct_item",
              "signature": "pub struct RocksDbStateStore {\n\n}",
              "docs": "Persistent state store backed by RocksDB.\n\nKey scheme: `<partition>\\xFF<key>` where `\\xFF` acts as a separator.\nThis allows efficient prefix iteration for both partition-level and\nkey-level scans.",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 339
            },
            {
              "name": "rocksdb_store::RocksDbStateStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, StorageError>;",
              "docs": "Open (or create) a RocksDB state store at the given path.",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 345
            },
            {
              "name": "rocksdb_store::RocksDbReceiptStore",
              "kind": "struct_item",
              "signature": "pub struct RocksDbReceiptStore {\n\n}",
              "docs": "Persistent receipt store backed by RocksDB.\n\nKey schemes:\n- `t:<tx_hash_bytes>` -> serde_json-encoded [`Receipt`]\n- `b:<height_be_bytes>:<tx_index_be_bytes>` -> `<tx_hash_bytes>`",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 466
            },
            {
              "name": "rocksdb_store::RocksDbReceiptStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, StorageError>;",
              "docs": "Open (or create) a RocksDB receipt store at the given path.",
              "attributes": "#[cfg(feature = \"legacy-rocksdb-import\")]",
              "line": 472
            }
          ],
          "parseErrors": false
        },
        {
          "module": "traits",
          "source": "sigil/node/sigil-storage/src/traits.rs",
          "sha256": "23ed246c4d3f587d244e6936a7b67d19971d064c49727d9faa073203c1b21e79",
          "attributes": "",
          "items": [
            {
              "name": "traits::KeyValuePair",
              "kind": "type_item",
              "signature": "pub type KeyValuePair = (Vec<u8>, Vec<u8>);",
              "docs": "A key-value pair returned by prefix scans.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "traits::BlockStore",
              "kind": "trait_item",
              "signature": "pub trait BlockStore: Send + Sync {\n    /// Store a finalized block. Returns an error if a block at the same height\n    /// already exists (blocks are append-only).\n    fn put_block(&self, block: &Block) -> Result<(), StorageError>;\n\n    /// Retrieve a block by its height, returning `None` if no block exists at\n    /// that height.\n    fn get_block_by_height(&self, height: u64) -> Result<Option<Block>, StorageError>;\n\n    /// Retrieve a block by its header hash.\n    fn get_block_by_hash(&self, hash: &SigilHash) -> Result<Option<Block>, StorageError>;\n\n    /// Return the height of the most recently stored block, or `0` if the\n    /// store is empty.\n    fn latest_height(&self) -> Result<u64, StorageError>;\n\n    /// Check whether a block at the given height has been stored.\n    fn has_block(&self, height: u64) -> Result<bool, StorageError>;\n\n    /// Replace the current tip block with an equivalent block from the\n    /// canonical branch. Implementations must refuse non-tip replacement.\n    fn replace_tip_block(\n        &self,\n        _existing: &Block,\n        _replacement: &Block,\n    ) -> Result<(), StorageError> ;\n}",
              "docs": "Persistent storage for finalized blocks.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "traits::StateStore",
              "kind": "trait_item",
              "signature": "pub trait StateStore: Send + Sync {\n    /// Get a value from a partition. Returns `None` if the key does not exist.\n    fn get(&self, partition: &str, key: &[u8]) -> Result<Option<Vec<u8>>, StorageError>;\n\n    /// Set a key-value pair in a partition, creating the partition if needed.\n    fn put(&self, partition: &str, key: &[u8], value: &[u8]) -> Result<(), StorageError>;\n\n    /// Set multiple key-value pairs as one logical write.\n    ///\n    /// Durable backends should override this with their native write-batch\n    /// primitive. The default implementation preserves the API contract for\n    /// simple stores but is not crash-atomic.\n    fn put_many(&self, entries: &[(&str, &[u8], &[u8])]) -> Result<(), StorageError> ;\n\n    /// Delete a key from a partition. No-op if the key does not exist.\n    fn delete(&self, partition: &str, key: &[u8]) -> Result<(), StorageError>;\n\n    /// Check whether a key exists in a partition.\n    fn has(&self, partition: &str, key: &[u8]) -> Result<bool, StorageError>;\n\n    /// Scan all keys that begin with `prefix` in the given partition,\n    /// returning at most `limit` entries sorted by key.\n    fn scan_prefix(\n        &self,\n        partition: &str,\n        prefix: &[u8],\n        limit: usize,\n    ) -> Result<Vec<KeyValuePair>, StorageError>;\n}",
              "docs": "Key-value state storage partitioned by logical namespace.",
              "attributes": "",
              "line": 48
            },
            {
              "name": "traits::ReceiptStore",
              "kind": "trait_item",
              "signature": "pub trait ReceiptStore: Send + Sync {\n    /// Store a receipt. Overwrites any existing receipt with the same\n    /// `tx_hash`.\n    fn put_receipt(&self, receipt: &Receipt) -> Result<(), StorageError>;\n\n    /// Retrieve a receipt by transaction hash.\n    fn get_receipt(&self, tx_hash: &SigilHash) -> Result<Option<Receipt>, StorageError>;\n\n    /// Retrieve all receipts for a given block height, ordered by `tx_index`.\n    fn get_receipts_for_block(&self, height: u64) -> Result<Vec<Receipt>, StorageError>;\n}",
              "docs": "Storage for transaction receipts produced during block execution.",
              "attributes": "",
              "line": 84
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-compute",
      "version": "0.1.0",
      "source": "sigil/node/sigil-compute",
      "manifestSha256": "1be3cc995666991428c251ded9e98c9afb326d141b262e5b464299406530ad60",
      "features": {
        "default": []
      },
      "publish": true,
      "url": "/reference/rust/sigil-compute",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-compute/src/lib.rs",
          "sha256": "fb582083d367ace694104d8dd48d3d61dc90a7a09a100224138bf6b8b0276568",
          "attributes": "",
          "items": [
            {
              "name": "bridge_arise",
              "kind": "module",
              "signature": "pub mod bridge_arise;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "dispatch",
              "kind": "module",
              "signature": "pub mod dispatch;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "facade",
              "kind": "module",
              "signature": "pub mod facade;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "selector",
              "kind": "module",
              "signature": "pub mod selector;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "pub use dispatch::{ComputeJob, JobStatus, VerificationTier};",
              "kind": "use_declaration",
              "signature": "pub use dispatch::{ComputeJob, JobStatus, VerificationTier};",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "pub use error::ComputeError;",
              "kind": "use_declaration",
              "signature": "pub use error::ComputeError;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "pub use facade::{ProviderCandidate, ProviderSelector};",
              "kind": "use_declaration",
              "signature": "pub use facade::{ProviderCandidate, ProviderSelector};",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "pub use selector::{\n    MacaCandidate, MacaProviderSelector, MacaWeights, RequiredTier, SelectionRequest,\n    SelectorProviderStatus,\n};",
              "kind": "use_declaration",
              "signature": "pub use selector::{\n    MacaCandidate, MacaProviderSelector, MacaWeights, RequiredTier, SelectionRequest,\n    SelectorProviderStatus,\n};",
              "docs": "",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bridge_arise",
          "source": "sigil/node/sigil-compute/src/bridge_arise.rs",
          "sha256": "cf567abd0d3e5055d57f977b1d68d8c7afef65385f6e2fded7c37c1b81d01a6d",
          "attributes": "",
          "items": [
            {
              "name": "bridge_arise::AriseProviderRegistration",
              "kind": "struct_item",
              "signature": "pub struct AriseProviderRegistration {\npub provider_did: String,\npub human_root_did: String,\npub tier: AriseProviderTier,\npub stake: u64,\npub capabilities: serde_json::Value,\npub pricing: AriseComputePricing,\npub registered_epoch: u64,\npub status: AriseProviderStatus\n}",
              "docs": "Wire-compatible provider registration. Mirrors\n`arise_sigil::provider::ProviderRegistration`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 32
            },
            {
              "name": "bridge_arise::AriseProviderTier",
              "kind": "enum_item",
              "signature": "pub enum AriseProviderTier {\n    Consumer,\n    Professional,\n    Enterprise,\n    Cluster,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 44
            },
            {
              "name": "bridge_arise::AriseProviderStatus",
              "kind": "enum_item",
              "signature": "pub enum AriseProviderStatus {\n    Active,\n    Suspended,\n    Exiting,\n    Exited,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 52
            },
            {
              "name": "bridge_arise::AriseComputePricing",
              "kind": "struct_item",
              "signature": "pub struct AriseComputePricing {\npub price_per_input_token: u64,\npub price_per_output_token: u64,\npub price_per_gpu_second: u64,\npub min_job_cost: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 60
            },
            {
              "name": "bridge_arise::AriseComputeReceipt",
              "kind": "struct_item",
              "signature": "pub struct AriseComputeReceipt {\npub receipt_id: String,\npub job_id: String,\npub provider_did: String,\npub consumer_did: String,\npub model_id: String,\npub tokens_in: u64,\npub tokens_out: u64,\npub gpu_seconds: f64,\npub total_cost: u64,\npub started_at: String,\npub completed_at: String,\npub input_hash: SigilHash,\npub output_hash: SigilHash,\npub receipt_hash: SigilHash,\npub provider_signature: Vec<u8>\n}",
              "docs": "Wire-compatible compute receipt. Mirrors\n`arise_sigil::receipt::ComputeReceipt`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 70
            },
            {
              "name": "bridge_arise::AriseComputeReceipt::from_sigil",
              "kind": "function_item",
              "signature": "pub fn from_sigil(r: &ComputeReceipt) -> Self;",
              "docs": "Convert from a Sigil on-chain receipt. Field-for-field mapping; the\nMACA-only fields (commitments, authority context, TEE) are dropped\n\u2014 arise-bridge's wire format does not carry them today.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "bridge_arise::AriseSettlementAction",
              "kind": "struct_item",
              "signature": "pub struct AriseSettlementAction {\npub receipt: AriseComputeReceipt,\npub provider_did: String,\npub consumer_did: String,\npub amount: u64\n}",
              "docs": "Wire-compatible settlement action \u2014 matches\n`arise_sigil::settlement::SettlementAction`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 120
            },
            {
              "name": "bridge_arise::AriseSettlementAction::from_sigil",
              "kind": "function_item",
              "signature": "pub fn from_sigil(r: &ComputeReceipt) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "bridge_arise::T1Outcome",
              "kind": "enum_item",
              "signature": "pub enum T1Outcome {\n    Accept,\n    Reject(String),\n}",
              "docs": "Result of optimistic verification.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 144
            },
            {
              "name": "bridge_arise::verify_t1_optimistic",
              "kind": "function_item",
              "signature": "pub fn verify_t1_optimistic(receipt: &ComputeReceipt) -> T1Outcome;",
              "docs": "T1 optimistic verification of a Sigil compute receipt. Performs the\nstructural checks that match `arise_verify::optimistic` semantics:\n\n- receipt hash matches recomputed canonical hash;\n- signature length is Ed25519 (64 bytes);\n- cost is non-zero.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "bridge_arise::T2ProviderResult",
              "kind": "struct_item",
              "signature": "pub struct T2ProviderResult {\npub provider_did: String,\npub human_root_did: Option<String>,\npub output_hash: SigilHash\n}",
              "docs": "One provider's contribution to a T2 quorum.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 177
            },
            {
              "name": "bridge_arise::T2RedundantVerifier",
              "kind": "struct_item",
              "signature": "pub struct T2RedundantVerifier {\npub job_id: String,\npub required_providers: usize,\npub required_majority: usize\n}",
              "docs": "T2 verifier with Sybil resistance and majority output selection.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 185
            },
            {
              "name": "bridge_arise::T2Error",
              "kind": "enum_item",
              "signature": "pub enum T2Error {\n    DuplicateProvider { provider_did: String },\n    DuplicateHumanRoot { human_root_did: String },\n    Capacity { required: usize, current: usize },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"snake_case\")]",
              "line": 194
            },
            {
              "name": "bridge_arise::T2Outcome",
              "kind": "enum_item",
              "signature": "pub enum T2Outcome {\n    Majority {\n        winning_hash: SigilHash,\n        agreeing: Vec<String>,\n        outliers: Vec<String>,\n    },\n    NoQuorum {\n        votes: HashMap<String, u32>,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"outcome\", rename_all = \"snake_case\")]",
              "line": 220
            },
            {
              "name": "bridge_arise::T2RedundantVerifier::new",
              "kind": "function_item",
              "signature": "pub fn new(job_id: String, n: usize) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 232
            },
            {
              "name": "bridge_arise::T2RedundantVerifier::add",
              "kind": "function_item",
              "signature": "pub fn add(&mut self, r: T2ProviderResult) -> Result<(), T2Error>;",
              "docs": "",
              "attributes": "",
              "line": 242
            },
            {
              "name": "bridge_arise::T2RedundantVerifier::results",
              "kind": "function_item",
              "signature": "pub fn results(&self) -> &[T2ProviderResult];",
              "docs": "",
              "attributes": "",
              "line": 273
            },
            {
              "name": "bridge_arise::T2RedundantVerifier::tally",
              "kind": "function_item",
              "signature": "pub fn tally(&self) -> T2Outcome;",
              "docs": "Tally output hashes; if any reaches `required_majority`, return its\nagreeing/outlier provider partition. Otherwise `NoQuorum`.",
              "attributes": "",
              "line": 279
            },
            {
              "name": "bridge_arise::T3Outcome",
              "kind": "enum_item",
              "signature": "pub enum T3Outcome {\n    Accept,\n    Reject(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 327
            },
            {
              "name": "bridge_arise::verify_t3_attestation",
              "kind": "function_item",
              "signature": "pub fn verify_t3_attestation(att: &SigilTeeAttestation) -> T3Outcome;",
              "docs": "Structural verification of a TEE attestation report.\n\nThis deliberately fails closed after shape validation. A structurally\nplausible TEE quote is not a verified attestation until a vendor-specific\nverifier has checked the report signature, certificate chain, measurement\npolicy, nonce binding, and revocation material.",
              "attributes": "",
              "line": 338
            },
            {
              "name": "bridge_arise::verify_receipt_for_tier",
              "kind": "function_item",
              "signature": "pub fn verify_receipt_for_tier(receipt: &ComputeReceipt) -> T1Outcome;",
              "docs": "Selects the appropriate verification path for a Sigil receipt and runs\nthe structural checks for T1 / T3 (T2 quorum is multi-receipt and uses\n`T2RedundantVerifier` directly).",
              "attributes": "",
              "line": 373
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dispatch",
          "source": "sigil/node/sigil-compute/src/dispatch.rs",
          "sha256": "9d5406b05356ad6b5438a2eb00b4f7c64fb06e9330dea03257bc4e61b7421bc0",
          "attributes": "",
          "items": [
            {
              "name": "dispatch::ComputeJob",
              "kind": "struct_item",
              "signature": "pub struct ComputeJob {\n/// Unique identifier for this job (UUID v7 recommended).\n\npub job_id: String,\n/// OAS DID of the consumer requesting compute.\n\npub consumer_did: String,\n/// OAS DID of the selected provider.\n\npub provider_did: String,\n/// Identifier of the model or computation to run.\n\npub model_id: String,\n/// BLAKE3 hash of the input payload.\n\npub input_hash: SigilHash,\n/// Maximum budget in micro-MINT the consumer will pay.\n\npub max_cost: u64,\n/// ISO 8601 timestamp when the job was created.\n\npub created_at: String,\n/// Current lifecycle status of the job.\n\npub status: JobStatus,\n/// Level of result verification required.\n\npub verification_tier: VerificationTier\n}",
              "docs": "A compute job submitted by a consumer and assigned to a provider.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "dispatch::JobStatus",
              "kind": "enum_item",
              "signature": "pub enum JobStatus {\n    /// Job created, awaiting dispatch.\n    Pending,\n    /// Job sent to the provider.\n    Dispatched,\n    /// Provider is executing the job.\n    Running,\n    /// Job completed successfully; result available.\n    Completed,\n    /// Job failed during execution.\n    Failed,\n    /// Job result is under dispute.\n    Challenged,\n}",
              "docs": "Lifecycle status of a compute job.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 37
            },
            {
              "name": "dispatch::JobStatus::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(&self) -> bool;",
              "docs": "Returns `true` if the job is in a terminal state.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "dispatch::JobStatus::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Returns `true` if the job is still in progress.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "dispatch::VerificationTier",
              "kind": "enum_item",
              "signature": "pub enum VerificationTier {\n    /// Optimistic verification: trust the provider, challenge on dispute.\n    T1Optimistic,\n    /// Lumen verification: provider supplies a signed inference commitment.\n    T15Lumen,\n    /// Redundant verification: run on `n_providers` and compare results.\n    T2Redundant {\n        /// Number of providers that must produce matching results.\n        n_providers: usize,\n    },\n    /// Trusted execution environment: provider uses hardware attestation.\n    T3Tee,\n}",
              "docs": "Verification tier controlling how compute results are validated.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(tag = \"tier\", rename_all = \"snake_case\")]",
              "line": 67
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-compute/src/error.rs",
          "sha256": "d85d33e2d0a3a8b1a1b3c33c9f4300d9107a74c5358668a6e2e77fe898a771bb",
          "attributes": "",
          "items": [
            {
              "name": "error::ComputeError",
              "kind": "enum_item",
              "signature": "pub enum ComputeError {\n    /// No provider is available to fulfill the job.\n    #[error(\"no provider available\")]\n    NoProviderAvailable,\n\n    /// The job's cost exceeds the consumer's budget.\n    #[error(\"budget exceeded: limit={limit}, cost={cost}\")]\n    BudgetExceeded {\n        /// Maximum budget set by the consumer (micro-MINT).\n        limit: u64,\n        /// Actual estimated cost (micro-MINT).\n        cost: u64,\n    },\n\n    /// An error occurred while communicating with a provider.\n    #[error(\"provider error: {0}\")]\n    ProviderError(String),\n\n    /// The job dispatch failed.\n    #[error(\"dispatch failed: {0}\")]\n    DispatchFailed(String),\n\n    /// Verification of compute results failed.\n    #[error(\"verification failed: {0}\")]\n    VerificationFailed(String),\n\n    /// The requested job was not found.\n    #[error(\"job not found: {0}\")]\n    JobNotFound(String),\n}",
              "docs": "Compute facade error types.\nErrors produced by compute marketplace operations.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 5
            }
          ],
          "parseErrors": false
        },
        {
          "module": "facade",
          "source": "sigil/node/sigil-compute/src/facade.rs",
          "sha256": "86a71512e77a33a31e7e828ccbc2b3420bdad716c937b3f3a73694708f18a536",
          "attributes": "",
          "items": [
            {
              "name": "facade::ProviderCandidate",
              "kind": "struct_item",
              "signature": "pub struct ProviderCandidate {\n/// OAS DID of the provider.\n\npub provider_did: String,\n/// Normalized price factor in \\[0, 1\\]. Lower is cheaper.\n\npub price_factor: f64,\n/// Normalized latency factor in \\[0, 1\\]. Lower is faster.\n\npub latency_factor: f64,\n/// OATS reputation score in \\[0, 1\\]. Higher is better.\n\npub reputation: f64,\n/// Normalized capacity factor in \\[0, 1\\]. Higher means more available.\n\npub capacity_factor: f64\n}",
              "docs": "A candidate compute provider with normalized scoring factors.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "facade::ProviderSelector",
              "kind": "struct_item",
              "signature": "pub struct ProviderSelector;",
              "docs": "Score-based provider selection for the compute marketplace.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "facade::ProviderSelector::score_provider",
              "kind": "function_item",
              "signature": "pub fn score_provider(\n        price_factor: f64,\n        latency_factor: f64,\n        reputation: f64,\n        capacity_factor: f64,\n    ) -> f64;",
              "docs": "Compute a composite score for a provider.\n\nScore = reputation * 0.35 + (1 - price) * 0.25\n      + (1 - latency) * 0.25 + capacity * 0.15\n\nAll input factors should be normalized to \\[0, 1\\].",
              "attributes": "",
              "line": 44
            },
            {
              "name": "facade::ProviderSelector::score",
              "kind": "function_item",
              "signature": "pub fn score(candidate: &ProviderCandidate) -> f64;",
              "docs": "Score a `ProviderCandidate`.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "facade::ProviderSelector::select_best",
              "kind": "function_item",
              "signature": "pub fn select_best(providers: &[ProviderCandidate]) -> Option<&ProviderCandidate>;",
              "docs": "Select the best provider from a list of candidates.\n\nReturns `None` if the list is empty.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "facade::ProviderSelector::rank",
              "kind": "function_item",
              "signature": "pub fn rank(providers: &[ProviderCandidate]) -> Vec<(&ProviderCandidate, f64)>;",
              "docs": "Rank all candidates by descending score, returning scored pairs.",
              "attributes": "",
              "line": 78
            }
          ],
          "parseErrors": false
        },
        {
          "module": "selector",
          "source": "sigil/node/sigil-compute/src/selector.rs",
          "sha256": "e11e549e82a7d3a5f31636511bf83927ddf3b1fe05c34ba973f4c05b515de313",
          "attributes": "",
          "items": [
            {
              "name": "selector::RequiredTier",
              "kind": "enum_item",
              "signature": "pub enum RequiredTier {\n    T1Optimistic,\n    T15Lumen,\n    T2Redundant,\n    T3Tee,\n}",
              "docs": "Required tier for a job. Wider than `VerificationTier` because callers\nmay not care about T2's `n_providers` count when filtering.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 22
            },
            {
              "name": "selector::RequiredTier::matches",
              "kind": "function_item",
              "signature": "pub fn matches(self, declared: &VerificationTier) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "selector::SelectorProviderStatus",
              "kind": "enum_item",
              "signature": "pub enum SelectorProviderStatus {\n    Active,\n    Suspended,\n    Exiting,\n    Exited,\n}",
              "docs": "Operational status \u2014 matches the on-chain enum.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 44
            },
            {
              "name": "selector::SelectorProviderStatus::is_eligible",
              "kind": "function_item",
              "signature": "pub fn is_eligible(self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "selector::MacaCandidate",
              "kind": "struct_item",
              "signature": "pub struct MacaCandidate {\npub provider_did: String,\n/// Human root anchoring the provider (HMR DID). Used for distinct-root\n\n/// constraints in T2 redundant verification.\n\npub human_root_did: Option<String>,\npub status: SelectorProviderStatus,\npub price_factor: f64,\npub latency_factor: f64,\npub reputation: f64,\npub capacity_factor: f64,\n/// Penalty derived from `recent_challenges_lost / recent_challenges_total`.\n\n/// Should be in `[0, 1]`. 0 = clean record; 1 = mostly lost.\n\npub recent_challenge_penalty: f64,\n/// Liveness in `[0, 1]` \u2014 1 = fully responsive to sentinel probes.\n\npub liveness: f64,\n/// Declared verification tiers.\n\npub declared_tiers: Vec<VerificationTier>,\n/// Declared model / capability identifiers (e.g. model family names).\n\npub capabilities: Vec<String>,\n/// True when the provider's controller has presented an accepted ACT\n\n/// or scoped authority context. Selectors used in privileged contexts\n\n/// MUST treat `false` as ineligible.\n\npub authority_ok: bool\n}",
              "docs": "MACA-aware provider candidate. Extends the basic 4-factor candidate.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 59
            },
            {
              "name": "selector::SelectionRequest",
              "kind": "struct_item",
              "signature": "pub struct SelectionRequest {\npub required_model: Option<String>,\npub required_tier: Option<RequiredTier>,\npub require_authority: bool,\n/// Caller-provided diversity hint: providers whose human root appears in\n\n/// this set are penalised (for T2 quorum diversity).\n\n#[serde(default)]\npub already_selected_human_roots: Vec<String>\n}",
              "docs": "Required filter: model id + tier + authority.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 94
            },
            {
              "name": "selector::MacaWeights",
              "kind": "struct_item",
              "signature": "pub struct MacaWeights {\npub reputation: f64,\npub price: f64,\npub latency: f64,\npub capacity: f64,\npub liveness: f64,\npub root_diversity: f64,\npub challenge_penalty: f64\n}",
              "docs": "Score weights. Defaults sum to 1.0 for the positive-direction terms; the\nchallenge penalty / liveness penalty subtract independently.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 107
            },
            {
              "name": "selector::MacaProviderSelector",
              "kind": "struct_item",
              "signature": "pub struct MacaProviderSelector;",
              "docs": "",
              "attributes": "",
              "line": 131
            },
            {
              "name": "selector::MacaProviderSelector::score",
              "kind": "function_item",
              "signature": "pub fn score(\n        candidate: &MacaCandidate,\n        request: &SelectionRequest,\n        weights: &MacaWeights,\n    ) -> f64;",
              "docs": "Compute the MACA-aware score. The result is in `(-\u221e, 1]`. Higher is\nbetter. Negative scores are theoretically possible when challenge\npenalty + capacity drops outweigh the positive contribution; in\npractice the comparator will simply rank such providers last.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "selector::MacaProviderSelector::is_eligible",
              "kind": "function_item",
              "signature": "pub fn is_eligible(candidate: &MacaCandidate, request: &SelectionRequest) -> bool;",
              "docs": "Returns true when the candidate is eligible for this request.",
              "attributes": "",
              "line": 190
            },
            {
              "name": "selector::MacaProviderSelector::select_deterministic",
              "kind": "function_item",
              "signature": "pub fn select_deterministic<'a>(\n        candidates: &'a [MacaCandidate],\n        request: &SelectionRequest,\n        weights: &MacaWeights,\n    ) -> Option<&'a MacaCandidate>;",
              "docs": "Deterministic selection. Filters out ineligible candidates, scores\nthe rest, and resolves ties by `(score desc, provider_did asc)` so\nthe result is reproducible across nodes.",
              "attributes": "",
              "line": 213
            },
            {
              "name": "selector::MacaProviderSelector::select_redundant",
              "kind": "function_item",
              "signature": "pub fn select_redundant<'a>(\n        candidates: &'a [MacaCandidate],\n        request: &SelectionRequest,\n        weights: &MacaWeights,\n        n: usize,\n    ) -> Vec<&'a MacaCandidate>;",
              "docs": "Multi-pick selection used by T2 redundant verification. Greedily\npicks the next-best candidate that does not share a human root with\nany previously selected candidate. Returns up to `n` candidates.",
              "attributes": "",
              "line": 234
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-crucible",
      "version": "0.1.0",
      "source": "sigil/node/sigil-crucible",
      "manifestSha256": "96c5656cead91b305ddaa1f10bf68896d8dc228eb51bbd936a564e3ae578e8ca",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-crucible",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-crucible/src/lib.rs",
          "sha256": "6a30dfaddaa439aec787cb6792f3d28d6f40faf07bb6e2267a95300fcdbaed81",
          "attributes": "",
          "items": [
            {
              "name": "errors",
              "kind": "module",
              "signature": "pub mod errors;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "rewards",
              "kind": "module",
              "signature": "pub mod rewards;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "rollout",
              "kind": "module",
              "signature": "pub mod rollout;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "run",
              "kind": "module",
              "signature": "pub mod run;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "types",
              "kind": "module",
              "signature": "pub mod types;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "weights",
              "kind": "module",
              "signature": "pub mod weights;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "pub use errors::CrucibleError;",
              "kind": "use_declaration",
              "signature": "pub use errors::CrucibleError;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "pub use rewards::{\n    DistributionOutcome, LineageRewardMode, RewardBatchAttestation, RewardDistributionPlan,\n    RewardPayout,\n};",
              "kind": "use_declaration",
              "signature": "pub use rewards::{\n    DistributionOutcome, LineageRewardMode, RewardBatchAttestation, RewardDistributionPlan,\n    RewardPayout,\n};",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "pub use rollout::{RolloutBatchCommitment, RolloutBatchMetadata};",
              "kind": "use_declaration",
              "signature": "pub use rollout::{RolloutBatchCommitment, RolloutBatchMetadata};",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use run::{\n    CloseReason, CruciblePolicy, RolloutPolicy, TrainingRun, TrainingRunConfig, TrainingRunStatus,\n};",
              "kind": "use_declaration",
              "signature": "pub use run::{\n    CloseReason, CruciblePolicy, RolloutPolicy, TrainingRun, TrainingRunConfig, TrainingRunStatus,\n};",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "pub use types::{TrainingSlashReason, TrainingSlashRecord, VerifierMode};",
              "kind": "use_declaration",
              "signature": "pub use types::{TrainingSlashReason, TrainingSlashRecord, VerifierMode};",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use weights::WeightPublicationRecord;",
              "kind": "use_declaration",
              "signature": "pub use weights::WeightPublicationRecord;",
              "docs": "",
              "attributes": "",
              "line": 22
            }
          ],
          "parseErrors": false
        },
        {
          "module": "errors",
          "source": "sigil/node/sigil-crucible/src/errors.rs",
          "sha256": "303f7ad4c354162ae1dc404dd70069fc9839e3854662e46eeb76ec6962756b36",
          "attributes": "",
          "items": [
            {
              "name": "errors::CrucibleError",
              "kind": "enum_item",
              "signature": "pub enum CrucibleError {\n    #[error(\"crucible is disabled by policy\")]\n    FeatureDisabled,\n    #[error(\"invalid crucible policy: {0}\")]\n    InvalidPolicy(String),\n    #[error(\"artifact commitment is not content-addressed and identity-bound\")]\n    ArtifactIdentityUnverified,\n    #[error(\"training run `{0}` already exists\")]\n    RunAlreadyExists(String),\n    #[error(\"training run `{0}` was not found\")]\n    RunNotFound(String),\n    #[error(\"training run is not open\")]\n    RunNotOpen,\n    #[error(\"training run id mismatch: expected `{expected}`, got `{got}`\")]\n    RunMismatch { expected: String, got: String },\n    #[error(\"policy version mismatch: expected {expected}, got {got}\")]\n    PolicyVersionMismatch { expected: u32, got: u32 },\n    #[error(\n        \"rollout is stale: committed at epoch {committed_at_epoch}, current epoch {current_epoch}, max staleness {max_staleness_epochs}\"\n    )]\n    StaleRollout {\n        committed_at_epoch: u64,\n        current_epoch: u64,\n        max_staleness_epochs: u64,\n    },\n    #[error(\"verifier mode {0:?} is unavailable\")]\n    VerifierModeUnavailable(VerifierMode),\n    #[error(\"verifier mode mismatch: expected {expected:?}, got {got:?}\")]\n    VerifierModeMismatch {\n        expected: VerifierMode,\n        got: VerifierMode,\n    },\n    #[error(\"unauthorized verifier `{0}`\")]\n    UnauthorizedVerifier(String),\n    #[error(\"unauthorized publisher `{0}`\")]\n    UnauthorizedPublisher(String),\n    #[error(\"reward pool has {available}, needs {needed}\")]\n    RewardPoolInsufficient { available: u64, needed: u64 },\n    #[error(\"unsupported reward token `{0}`\")]\n    UnsupportedRewardToken(String),\n    #[error(\"lineage reward integration is unavailable\")]\n    LineageRewardsUnavailable,\n    #[error(\"reward amount must be non-zero\")]\n    InvalidRewardAmount,\n    #[error(\"previous weight root does not match the run head\")]\n    PreviousRootMismatch,\n    #[error(\"run close is not allowed in the current state\")]\n    CloseNotAllowed,\n    #[error(\"invalid epoch ordering\")]\n    InvalidEpoch,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Error)]",
              "line": 6
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rewards",
          "source": "sigil/node/sigil-crucible/src/rewards.rs",
          "sha256": "7d9295b6d4685891b013703067617b4dc0d1ea1033ebe4806099534dfd5749fb",
          "attributes": "",
          "items": [
            {
              "name": "rewards::RewardPayout",
              "kind": "struct_item",
              "signature": "pub struct RewardPayout {\npub recipient_did: String,\npub amount: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub generation: Option<u32>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub lineage_parent_did: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "rewards::RewardBatchAttestation",
              "kind": "struct_item",
              "signature": "pub struct RewardBatchAttestation {\npub attestation_id: String,\npub run_id: String,\npub rollout_batch_id: String,\npub verifier_did: String,\npub policy_version: u32,\npub payouts: Vec<RewardPayout>,\npub artifact: ArtifactCommitment,\npub attested_at_epoch: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "rewards::LineageRewardMode",
              "kind": "enum_item",
              "signature": "pub enum LineageRewardMode {\n    UnavailableFailClosed,\n    GenerationDecay { config: RewardConfig },\n}",
              "docs": "Boundary for lineage payout integration. `GenerationDecay` is supported by\nthe existing economics API; parent/root lineage payout verification fails\nclosed until a concrete GAL/lineage adapter is available.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 33
            },
            {
              "name": "rewards::DistributionOutcome",
              "kind": "struct_item",
              "signature": "pub struct DistributionOutcome {\npub recipient_did: String,\npub amount: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub generation: Option<u32>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub lineage_parent_did: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "rewards::RewardDistributionPlan",
              "kind": "struct_item",
              "signature": "pub struct RewardDistributionPlan {\npub attestation_id: String,\npub run_id: String,\npub rollout_batch_id: String,\npub total_amount: u64,\npub outcomes: Vec<DistributionOutcome>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 49
            },
            {
              "name": "rewards::RewardDistributionPlan::from_attestation",
              "kind": "function_item",
              "signature": "pub fn from_attestation(\n        attestation: &RewardBatchAttestation,\n        pool_remaining: u64,\n        mode: LineageRewardMode,\n    ) -> Result<Self, CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 58
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rollout",
          "source": "sigil/node/sigil-crucible/src/rollout.rs",
          "sha256": "0186ce61c7a35abb164985384aee80db90cf6d947dfc939685583516a6481e09",
          "attributes": "",
          "items": [
            {
              "name": "rollout::RolloutBatchMetadata",
              "kind": "struct_item",
              "signature": "pub struct RolloutBatchMetadata {\npub environment_commitment: ArtifactCommitment,\npub policy_digest: SigilHash,\npub rollout_root: SigilHash,\npub metrics_root: SigilHash\n}",
              "docs": "Per-batch roots and environment anchors. The rollout payload itself stays\noff-chain behind `artifact`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "rollout::RolloutBatchCommitment",
              "kind": "struct_item",
              "signature": "pub struct RolloutBatchCommitment {\npub run_id: String,\npub batch_id: String,\npub policy_version: u32,\npub artifact: ArtifactCommitment,\npub sample_count: u64,\npub total_reward: u64,\npub committed_by_did: String,\npub committed_at_epoch: u64,\npub verifier_mode: VerifierMode,\npub metadata: RolloutBatchMetadata\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "rollout::RolloutBatchCommitment::validate_for_run",
              "kind": "function_item",
              "signature": "pub fn validate_for_run(\n        &self,\n        run: &TrainingRun,\n        launch_policy: &CruciblePolicy,\n        current_epoch: u64,\n    ) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 31
            }
          ],
          "parseErrors": false
        },
        {
          "module": "run",
          "source": "sigil/node/sigil-crucible/src/run.rs",
          "sha256": "d0df4cfc9323a5eaea09c02bcf593bc142e260f077db8c6d2aac5efb7b1e39ba",
          "attributes": "",
          "items": [
            {
              "name": "run::CruciblePolicy",
              "kind": "struct_item",
              "signature": "pub struct CruciblePolicy {\npub enabled: bool,\npub coordinator_signed_verification: bool,\npub commitment_only_verification: bool,\npub redundant_verification: bool,\npub tee_verification: bool,\npub zk_verification: bool,\npub lineage_rewards: bool,\npub max_rollout_staleness_epochs: u64,\n#[serde(default = \"default_reward_token_id\")]\npub reward_token_id: String,\npub reward_pool_account_did: String\n}",
              "docs": "Runtime policy for exposing Crucible. Canary/mainnet should boot with\n`fail_closed()` until governance or an explicit launch gate enables it.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "run::CruciblePolicy::fail_closed",
              "kind": "function_item",
              "signature": "pub fn fail_closed() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "run::CruciblePolicy::mode_available",
              "kind": "function_item",
              "signature": "pub fn mode_available(&self, mode: VerifierMode) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "run::CruciblePolicy::from_env",
              "kind": "function_item",
              "signature": "pub fn from_env() -> Result<Self, CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "run::CruciblePolicy::require_enabled",
              "kind": "function_item",
              "signature": "pub fn require_enabled(&self) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 102
            },
            {
              "name": "run::CruciblePolicy::require_mode",
              "kind": "function_item",
              "signature": "pub fn require_mode(&self, mode: VerifierMode) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 110
            },
            {
              "name": "run::RolloutPolicy",
              "kind": "struct_item",
              "signature": "pub struct RolloutPolicy {\npub version: u32,\npub verifier_mode: VerifierMode,\npub max_staleness_epochs: u64,\npub min_verifier_attestations: u32,\npub allow_commitment_only: bool\n}",
              "docs": "Versioned rollout verification policy selected at run open.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 122
            },
            {
              "name": "run::TrainingRunConfig",
              "kind": "struct_item",
              "signature": "pub struct TrainingRunConfig {\npub run_id: String,\npub coordinator_did: String,\npub reward_token_id: String,\npub reward_pool: u64,\npub model_family: String,\npub objective_commitment: ArtifactCommitment,\npub policy: RolloutPolicy,\npub eligible_verifier_dids: Vec<String>,\npub authorized_publishers: Vec<String>,\npub opened_at_epoch: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub deadline_epoch: Option<u64>\n}",
              "docs": "Immutable run configuration committed at open.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 132
            },
            {
              "name": "run::TrainingRunStatus",
              "kind": "enum_item",
              "signature": "pub enum TrainingRunStatus {\n    Open,\n    Closed,\n    Cancelled,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 149
            },
            {
              "name": "run::CloseReason",
              "kind": "enum_item",
              "signature": "pub enum CloseReason {\n    Completed,\n    Expired,\n    Cancelled,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 157
            },
            {
              "name": "run::TrainingRun",
              "kind": "struct_item",
              "signature": "pub struct TrainingRun {\npub config: TrainingRunConfig,\npub status: TrainingRunStatus,\npub reward_pool_remaining: u64,\n#[serde(default)]\npub reward_pool_reserved: u64,\n#[serde(default)]\npub reward_pool_distributed: u64,\npub current_policy_version: u32,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub current_weight_root: Option<SigilHash>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub previous_weight_root: Option<SigilHash>,\npub opened_at_epoch: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub closed_at_epoch: Option<u64>\n}",
              "docs": "On-chain run state. It anchors policy, pool accounting, and weight heads;\nrollout bytes and model weights remain off-chain behind commitments.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 166
            },
            {
              "name": "run::TrainingRun::open",
              "kind": "function_item",
              "signature": "pub fn open(\n        config: TrainingRunConfig,\n        launch_policy: &CruciblePolicy,\n    ) -> Result<Self, CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 185
            },
            {
              "name": "run::TrainingRun::ensure_open",
              "kind": "function_item",
              "signature": "pub fn ensure_open(&self) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 231
            },
            {
              "name": "run::TrainingRun::verifier_is_eligible",
              "kind": "function_item",
              "signature": "pub fn verifier_is_eligible(&self, verifier_did: &str) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 239
            },
            {
              "name": "run::TrainingRun::publisher_is_authorized",
              "kind": "function_item",
              "signature": "pub fn publisher_is_authorized(&self, publisher_did: &str) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 249
            },
            {
              "name": "run::TrainingRun::reserve_reward",
              "kind": "function_item",
              "signature": "pub fn reserve_reward(&mut self, amount: u64) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 258
            },
            {
              "name": "run::TrainingRun::settle_reserved_reward",
              "kind": "function_item",
              "signature": "pub fn settle_reserved_reward(&mut self, amount: u64) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "run::TrainingRun::refundable_reward_pool",
              "kind": "function_item",
              "signature": "pub fn refundable_reward_pool(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 299
            },
            {
              "name": "run::TrainingRun::record_weight_root",
              "kind": "function_item",
              "signature": "pub fn record_weight_root(&mut self, model_root: SigilHash) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 304
            },
            {
              "name": "run::TrainingRun::can_close",
              "kind": "function_item",
              "signature": "pub fn can_close(&self, reason: CloseReason, current_epoch: u64) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 311
            },
            {
              "name": "run::TrainingRun::close",
              "kind": "function_item",
              "signature": "pub fn close(&mut self, reason: CloseReason, current_epoch: u64) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 327
            }
          ],
          "parseErrors": false
        },
        {
          "module": "types",
          "source": "sigil/node/sigil-crucible/src/types.rs",
          "sha256": "e8f0f1577641d7c9c8827561650d846a67684a0b61be0ad0c561d4b366f3a559",
          "attributes": "",
          "items": [
            {
              "name": "types::VerifierMode",
              "kind": "enum_item",
              "signature": "pub enum VerifierMode {\n    /// Launch-live mode: the run coordinator's signed reward attestation is\n    /// the verifier signal. This requires no external verifier registry.\n    CoordinatorSigned,\n    /// Only an artifact commitment is anchored. Disabled by default because it\n    /// does not independently verify the rollout.\n    CommitmentOnly,\n    /// Multiple independent verifier attestations over the same batch.\n    Redundant,\n    /// Trusted execution environment attestation. Fails closed until a concrete\n    /// verifier is wired.\n    Tee,\n    /// Zero-knowledge proof verification. Fails closed until a concrete\n    /// verifier is wired.\n    Zk,\n}",
              "docs": "Verification path required for a rollout batch.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 7
            },
            {
              "name": "types::TrainingSlashReason",
              "kind": "enum_item",
              "signature": "pub enum TrainingSlashReason {\n    InvalidCommitment,\n    StaleRollout,\n    PolicyViolation,\n    Equivocation,\n    InvalidWeights,\n    FalseAttestation,\n}",
              "docs": "Slashable behavior in the Crucible training protocol.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 27
            },
            {
              "name": "types::TrainingSlashRecord",
              "kind": "struct_item",
              "signature": "pub struct TrainingSlashRecord {\npub slash_id: String,\npub run_id: String,\npub offender_did: String,\npub reporter_did: String,\npub reason: TrainingSlashReason,\npub evidence: ArtifactCommitment,\npub amount: u64,\npub slashed_at_epoch: u64\n}",
              "docs": "Evidence anchor for a slashing event. Evidence bytes live off-chain.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 38
            }
          ],
          "parseErrors": false
        },
        {
          "module": "weights",
          "source": "sigil/node/sigil-crucible/src/weights.rs",
          "sha256": "eb17c61f909f083b30b3548cfcb841cd2e82eff1a77a168b2d7d011832169f55",
          "attributes": "",
          "items": [
            {
              "name": "weights::WeightPublicationRecord",
              "kind": "struct_item",
              "signature": "pub struct WeightPublicationRecord {\npub run_id: String,\npub model_root: SigilHash,\npub artifact: ArtifactCommitment,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub previous_root: Option<SigilHash>,\npub publisher_did: String,\npub published_at_epoch: u64,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub rollout_batch_id: Option<String>\n}",
              "docs": "Anchor for a published model checkpoint. The model weights remain off-chain\nbehind `artifact`; consensus stores roots and authorization metadata only.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "weights::WeightPublicationRecord::validate_for_run",
              "kind": "function_item",
              "signature": "pub fn validate_for_run(&self, run: &TrainingRun) -> Result<(), CrucibleError>;",
              "docs": "",
              "attributes": "",
              "line": 22
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-lumen",
      "version": "0.1.0",
      "source": "sigil/node/sigil-lumen",
      "manifestSha256": "7f2dd5b1ac89095e863e104bd5f5b611df22760a7bb7107bd6970debbdaeb86b",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-lumen",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-lumen/src/lib.rs",
          "sha256": "8e7949c8133a8b02a1a3dc826adafb2d79ec15202a3e93e0b3c9d14a6f0a7c20",
          "attributes": "",
          "items": [
            {
              "name": "commitment",
              "kind": "module",
              "signature": "pub mod commitment;",
              "docs": "Lumen verifies inference receipts without trusting the operator alone.\n\nThe crate intentionally keeps the launch path narrow: validators verify a\ndeterministic commitment over sampled top-k hidden-state values plus the\nprovider's Ed25519 authorship signature. It does not claim full model\nre-execution or ZK-level proof of inference.",
              "attributes": "",
              "line": 8
            },
            {
              "name": "polynomial",
              "kind": "module",
              "signature": "pub mod polynomial;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "verify",
              "kind": "module",
              "signature": "pub mod verify;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "pub use commitment::{signing_digest, LUMEN_SIGNING_DOMAIN};",
              "kind": "use_declaration",
              "signature": "pub use commitment::{signing_digest, LUMEN_SIGNING_DOMAIN};",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "pub use polynomial::{compute_polynomial_digest, LUMEN_POLYNOMIAL_DOMAIN};",
              "kind": "use_declaration",
              "signature": "pub use polynomial::{compute_polynomial_digest, LUMEN_POLYNOMIAL_DOMAIN};",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "pub use verify::{verify_lumen_attestation, LumenExpectedBinding, LumenVerificationError};",
              "kind": "use_declaration",
              "signature": "pub use verify::{verify_lumen_attestation, LumenExpectedBinding, LumenVerificationError};",
              "docs": "",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commitment",
          "source": "sigil/node/sigil-lumen/src/commitment.rs",
          "sha256": "c0030ee4cf7631a4471988df4fa1b1678e6443213c6f28a12a642beca26d63ec",
          "attributes": "",
          "items": [
            {
              "name": "commitment::LUMEN_SIGNING_DOMAIN",
              "kind": "const_item",
              "signature": "pub const LUMEN_SIGNING_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "commitment::signing_digest",
              "kind": "function_item",
              "signature": "pub fn signing_digest(attestation: &LumenAttestation) -> Result<SigilHash, LumenPolynomialError>;",
              "docs": "",
              "attributes": "",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "polynomial",
          "source": "sigil/node/sigil-lumen/src/polynomial.rs",
          "sha256": "9bd96685e75c01ca4c3554e61b71b3d3587d50f8691c0277c76ebb0ff63cb9c9",
          "attributes": "",
          "items": [
            {
              "name": "polynomial::LUMEN_POLYNOMIAL_DOMAIN",
              "kind": "const_item",
              "signature": "pub const LUMEN_POLYNOMIAL_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "polynomial::LumenPolynomialError",
              "kind": "enum_item",
              "signature": "pub enum LumenPolynomialError {\n    #[error(\"lumen: token_count must be non-zero\")]\n    EmptyTokenWindow,\n    #[error(\"lumen: top_k must be non-zero\")]\n    EmptyTopK,\n    #[error(\"lumen: samples length does not match token_count\")]\n    SampleCountMismatch,\n    #[error(\"lumen: sample {0} has wrong top-k width\")]\n    TopKWidthMismatch(u32),\n    #[error(\"lumen: precision must be declared\")]\n    MissingPrecision,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error, PartialEq, Eq)]",
              "line": 8
            },
            {
              "name": "polynomial::compute_polynomial_digest",
              "kind": "function_item",
              "signature": "pub fn compute_polynomial_digest(\n    attestation: &LumenAttestation,\n) -> Result<SigilHash, LumenPolynomialError>;",
              "docs": "",
              "attributes": "",
              "line": 21
            }
          ],
          "parseErrors": false
        },
        {
          "module": "verify",
          "source": "sigil/node/sigil-lumen/src/verify.rs",
          "sha256": "aa9e19db98be5e31542a4bfb9fde8f3a29c5ba64457023b881237b7820cbb9ab",
          "attributes": "",
          "items": [
            {
              "name": "verify::LumenExpectedBinding",
              "kind": "struct_item",
              "signature": "pub struct LumenExpectedBinding<'a> {\npub job_id: &'a str,\npub model_id: &'a str,\npub output_hash: &'a SigilHash,\npub provider_pubkey: &'a [u8]\n}",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "verify::LumenVerificationError",
              "kind": "enum_item",
              "signature": "pub enum LumenVerificationError {\n    #[error(transparent)]\n    Polynomial(#[from] LumenPolynomialError),\n    #[error(\"lumen: job id does not match receipt\")]\n    JobMismatch,\n    #[error(\"lumen: model id does not match receipt\")]\n    ModelMismatch,\n    #[error(\"lumen: output commitment does not match receipt\")]\n    OutputMismatch,\n    #[error(\"lumen: polynomial digest does not match samples\")]\n    DigestMismatch,\n    #[error(\"lumen: provider public key does not match receipt signer\")]\n    ProviderKeyMismatch,\n    #[error(\"lumen: invalid provider public key\")]\n    InvalidProviderKey,\n    #[error(\"lumen: invalid provider signature\")]\n    InvalidSignature,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 17
            },
            {
              "name": "verify::verify_lumen_attestation",
              "kind": "function_item",
              "signature": "pub fn verify_lumen_attestation(\n    attestation: &LumenAttestation,\n    expected: LumenExpectedBinding<'_>,\n) -> Result<(), LumenVerificationError>;",
              "docs": "",
              "attributes": "",
              "line": 36
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-rpc",
      "version": "0.1.0",
      "source": "sigil/node/sigil-rpc",
      "manifestSha256": "688072b63527aa67d04e1f18275584744ce4dd879068fd45aa30c86c6187a5a0",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "tower": [
          "sigil-core/tower"
        ],
        "czac": [
          "sigil-core/czac"
        ],
        "nova": [
          "sigil-core/nova"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-rpc",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-rpc/src/lib.rs",
          "sha256": "ba16876fd64edeb4fedc7b6242421f22e3bf4475319f21d432ff4388cb0ba454",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "methods",
              "kind": "module",
              "signature": "pub mod methods;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "nft",
              "kind": "module",
              "signature": "pub mod nft;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "responses",
              "kind": "module",
              "signature": "pub mod responses;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "types",
              "kind": "module",
              "signature": "pub mod types;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "pub use error::RpcApiError;",
              "kind": "use_declaration",
              "signature": "pub use error::RpcApiError;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "pub use methods::RpcMethod;",
              "kind": "use_declaration",
              "signature": "pub use methods::RpcMethod;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "pub use nft::{\n    NftEventFilter, RpcDidIdentityIndex, RpcIdentityTokenRef, RpcNftCollection, RpcNftEvent,\n    RpcNftToken, RpcOwnerIndexEntry, RpcTokenId,\n};",
              "kind": "use_declaration",
              "signature": "pub use nft::{\n    NftEventFilter, RpcDidIdentityIndex, RpcIdentityTokenRef, RpcNftCollection, RpcNftEvent,\n    RpcNftToken, RpcOwnerIndexEntry, RpcTokenId,\n};",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use responses::{BlockResponse, NodeInfoResponse, SyncStatusResponse, TransactionResponse};",
              "kind": "use_declaration",
              "signature": "pub use responses::{BlockResponse, NodeInfoResponse, SyncStatusResponse, TransactionResponse};",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use types::{RpcError, RpcRequest, RpcResponse};",
              "kind": "use_declaration",
              "signature": "pub use types::{RpcError, RpcRequest, RpcResponse};",
              "docs": "",
              "attributes": "",
              "line": 22
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-rpc/src/error.rs",
          "sha256": "1d8165adaaba96ea8c969de7eeb4e0012211d9028dbbb68c371153dcf03b8506",
          "attributes": "",
          "items": [
            {
              "name": "error::RpcApiError",
              "kind": "enum_item",
              "signature": "pub enum RpcApiError {\n    /// The request could not be parsed as valid JSON.\n    #[error(\"parse error: {0}\")]\n    ParseError(String),\n\n    /// The request JSON is not a valid JSON-RPC 2.0 request object.\n    #[error(\"invalid request: {0}\")]\n    InvalidRequest(String),\n\n    /// The requested method does not exist.\n    #[error(\"method not found: {0}\")]\n    MethodNotFound(String),\n\n    /// The parameters for the method are invalid.\n    #[error(\"invalid params: {0}\")]\n    InvalidParams(String),\n\n    /// An internal server error occurred.\n    #[error(\"internal error: {0}\")]\n    InternalError(String),\n\n    /// The requested resource was not found (block, tx, validator, etc.).\n    #[error(\"not found: {0}\")]\n    NotFound(String),\n\n    /// The request requires authentication that was not provided or is invalid.\n    #[error(\"unauthorized: {0}\")]\n    Unauthorized(String),\n\n    /// The caller has exceeded the rate limit.\n    #[error(\"rate limited\")]\n    RateLimited,\n}",
              "docs": "High-level RPC API errors.\n\nEach variant maps to a JSON-RPC error code and can be converted into an\n[`RpcError`] for inclusion in a response envelope.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, thiserror::Error)]",
              "line": 24
            },
            {
              "name": "error::RpcApiError::code",
              "kind": "function_item",
              "signature": "pub fn code(&self) -> i32;",
              "docs": "Returns the standard JSON-RPC error code for this error.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "error::RpcApiError::to_rpc_error",
              "kind": "function_item",
              "signature": "pub fn to_rpc_error(&self) -> RpcError;",
              "docs": "Convert into a JSON-RPC [`RpcError`] object.",
              "attributes": "",
              "line": 74
            }
          ],
          "parseErrors": false
        },
        {
          "module": "methods",
          "source": "sigil/node/sigil-rpc/src/methods.rs",
          "sha256": "8a7bb993493b5352ba149750fd4fda48478124e431762a94d1581ba35dfdd099",
          "attributes": "",
          "items": [
            {
              "name": "methods::RpcMethod",
              "kind": "enum_item",
              "signature": "pub enum RpcMethod {\n    // -- Block queries --\n    /// Fetch a block by height or hash.\n    GetBlock,\n    /// Fetch the latest finalized block.\n    GetLatestBlock,\n    /// Fetch a contiguous range of blocks.\n    GetBlockRange,\n\n    // -- Transaction queries --\n    /// Fetch a transaction by hash.\n    GetTransaction,\n    /// List recent transactions.\n    GetTransactions,\n    /// List recent transactions for a DID.\n    GetAccountTransactions,\n    /// Fetch the receipt for a transaction.\n    GetTransactionReceipt,\n    /// Submit a signed transaction.\n    SendTransaction,\n    /// Submit a signed setup-only sponsored transaction.\n    SendSponsoredSetupTransaction,\n    /// Estimate the deterministic fee for a transaction envelope.\n    EstimateFee,\n    /// Estimate the deterministic fee for a setup-only sponsored transaction.\n    EstimateSponsoredSetupFee,\n    /// Fetch the active setup-only sponsorship policy.\n    GetSponsoredSetupPolicy,\n    /// Fetch a sponsored setup receipt by transaction hash.\n    GetSponsoredSetupReceipt,\n    /// Submit a signed `RegisterContractCode` transaction through the typed\n    /// public deployment endpoint.\n    RegisterContractCode,\n    /// Fetch a deployed contract record by DID.\n    GetContract,\n    /// Fetch a single contract state value by key.\n    GetContractState,\n    /// Fetch contract events with optional filters.\n    GetContractEvents,\n    /// List deployed contracts in an organization zone.\n    ListZoneContracts,\n    /// Fetch an organization zone record.\n    GetZone,\n    /// Perform a read-only contract call preflight.\n    CallContractDryRun,\n    /// Register a Vigils subscription.\n    RegisterVigilSubscription,\n    /// Update a Vigils subscription.\n    UpdateVigilSubscription,\n    /// Cancel a Vigils subscription.\n    CancelVigilSubscription,\n    /// Deposit gas-tank funds for Vigils callbacks.\n    DepositVigilGas,\n    /// Withdraw unused gas-tank funds.\n    WithdrawVigilGas,\n    /// Submit a verified event delivery for a subscription.\n    SubmitEventDelivery,\n    /// Register a staked Vigils ingestor.\n    RegisterIngestor,\n    /// Update a staked Vigils ingestor.\n    UpdateIngestorStake,\n    /// Deregister a Vigils ingestor.\n    DeregisterIngestor,\n    /// Slash a Vigils ingestor with deterministic evidence.\n    SlashIngestor,\n\n    // -- State queries --\n    /// Fetch account balance and nonce for a DID.\n    GetBalance,\n    /// Fetch an explorer-ready account summary for a DID.\n    GetAccount,\n    /// List top accounts by balance/stake.\n    GetTopAccounts,\n    /// Read a value from chain state.\n    GetState,\n    /// Get the current state root hash.\n    GetStateRoot,\n    /// Get the next nonce for an account (replay protection).\n    GetAccountNonce,\n    /// Fetch a Vigils subscription by ID.\n    GetVigilSubscription,\n    /// List Vigils subscriptions with pagination.\n    ListVigilSubscriptions,\n    /// Fetch a Vigils delivery-history page.\n    GetVigilDeliveryHistory,\n    /// List registered Vigils ingestors.\n    ListIngestors,\n    /// Fetch a registered Vigils ingestor.\n    GetIngestor,\n\n    // -- Identity queries --\n    /// Fetch an OAS identity document by DID.\n    GetIdentity,\n    /// List registered OAS identities.\n    ListIdentities,\n\n    // -- Staking queries --\n    /// Fetch a single validator's info.\n    GetValidator,\n    /// Fetch the current active validator set.\n    GetValidatorSet,\n    /// Fetch EOS-style boot, stake-collection, active, and stabilized status.\n    GetNetworkActivationStatus,\n    /// Fetch delegations for a delegator DID.\n    GetDelegations,\n\n    // -- Governance queries --\n    /// Fetch a governance proposal by ID.\n    GetProposal,\n    /// List all proposals (optionally filtered by status).\n    ListProposals,\n\n    // -- Labor marketplace queries --\n    /// Fetch a labor job posting.\n    GetLaborJob,\n    /// List labor job postings.\n    ListLaborJobs,\n    /// Fetch a labor bid.\n    GetLaborBid,\n    /// List labor bids, optionally for one job.\n    ListLaborBids,\n    /// Fetch a labor contract.\n    GetLaborContract,\n    /// List milestones for a labor contract.\n    GetLaborMilestones,\n    /// Fetch exact escrow accounting for a labor contract.\n    GetLaborEscrow,\n    /// Fetch a labor dispute.\n    GetLaborDispute,\n    /// Fetch an open bounty offer.\n    GetLaborOffer,\n    /// List open bounty offers.\n    ListLaborOffers,\n    /// Fetch a bounty claim.\n    GetLaborClaim,\n    /// List bounty claims.\n    ListLaborClaims,\n    /// Fetch labor offer/claim audit events.\n    GetLaborOfferEvents,\n    /// Fetch jobs, bids, contracts, and disputes tied to an account DID.\n    GetAccountLaborHistory,\n\n    // -- Crucible training queries --\n    /// Fetch a Crucible training run.\n    GetTrainingRun,\n    /// List Crucible training runs.\n    ListTrainingRuns,\n    /// Fetch a committed rollout batch for a training run.\n    GetTrainingRolloutBatch,\n    /// Fetch or list published training weight anchors.\n    GetTrainingWeights,\n    /// List reward attestations for a training run.\n    GetTrainingRewards,\n    /// List slashing records for a training run.\n    GetTrainingSlashes,\n    /// List Crucible audit events.\n    GetTrainingEvents,\n\n    // -- Compute queries (feature-gated) --\n    /// Fetch a compute provider's registration.\n    #[cfg(feature = \"compute\")]\n    GetProvider,\n    /// List all registered compute providers.\n    #[cfg(feature = \"compute\")]\n    ListProviders,\n    /// Fetch a compute provider's reputation score.\n    #[cfg(feature = \"compute\")]\n    GetProviderReputation,\n    /// Fetch the escrow balance for an organization.\n    #[cfg(feature = \"compute\")]\n    GetEscrowBalance,\n    /// Fetch a compute job by ID.\n    #[cfg(feature = \"compute\")]\n    GetComputeJob,\n    /// List compute jobs with optional filters.\n    #[cfg(feature = \"compute\")]\n    ListComputeJobs,\n    /// Fetch a settled compute receipt.\n    #[cfg(feature = \"compute\")]\n    GetComputeReceipt,\n    /// Fetch proof metadata for a compute receipt.\n    #[cfg(feature = \"compute\")]\n    GetComputeProof,\n    /// Verify a Lumen inference attestation transcript.\n    #[cfg(feature = \"compute\")]\n    VerifyLumenAttestation,\n    /// Fetch a compute challenge by ID.\n    #[cfg(feature = \"compute\")]\n    GetComputeChallenge,\n    /// List compute challenges for a receipt.\n    #[cfg(feature = \"compute\")]\n    ListComputeChallenges,\n    /// Fetch compute audit events.\n    #[cfg(feature = \"compute\")]\n    GetComputeAuditTrail,\n    /// Fetch a MACA work claim by work ID.\n    #[cfg(feature = \"compute\")]\n    GetMacaWorkClaim,\n    /// List MACA validation records by work ID.\n    #[cfg(feature = \"compute\")]\n    ListMacaValidationRecords,\n    /// Deterministically select a compute provider.\n    #[cfg(feature = \"compute\")]\n    SelectComputeProvider,\n    /// Fetch a registered MACA validator agent.\n    #[cfg(feature = \"compute\")]\n    GetValidatorAgent,\n    /// Fetch a MACA epoch by ID.\n    #[cfg(feature = \"compute\")]\n    GetMacaEpoch,\n    /// List MACA epochs.\n    #[cfg(feature = \"compute\")]\n    ListMacaEpochs,\n    /// Fetch a MACA quorum proof.\n    #[cfg(feature = \"compute\")]\n    GetMacaQuorumProof,\n    /// List MACA quorum proofs for an epoch.\n    #[cfg(feature = \"compute\")]\n    ListMacaQuorumProofs,\n\n    // -- Network info --\n    /// Get local node information.\n    GetNodeInfo,\n    /// Lightweight probe for the local node's current block height.\n    GetHeight,\n    /// Fetch local mempool size/capacity.\n    GetMempoolStatus,\n    /// List connected peers.\n    GetPeers,\n    /// Get the current sync status.\n    GetSyncStatus,\n    /// Get the node's production storage backend and migration status.\n    GetStorageStatus,\n    /// Normalize and validate an off-chain artifact commitment.\n    GetArtifactCommitment,\n    /// Verify bytes against a Weave/Sigil artifact commitment.\n    VerifyArtifact,\n    /// Publish a hex-encoded payload into the local Weft store.\n    WeftPublish,\n    /// Publish a local file into the local Weft store.\n    WeftPublishFile,\n    /// Fetch a verified Weft payload as hex bytes.\n    WeftFetch,\n    /// Fetch a verified Weft payload and write it to a local file.\n    WeftFetchFile,\n    /// Inspect local Weft serving status.\n    WeftStatus,\n    /// List registered storage pinning providers.\n    ListStorageProviders,\n    /// Fetch one storage pinning provider.\n    GetStorageProvider,\n    /// Fetch one storage pin request.\n    GetStoragePinRequest,\n    /// List storage pin requests for an owner DID.\n    ListStoragePinRequestsByOwner,\n    /// Fetch one storage pin contract.\n    GetStoragePinContract,\n    /// List storage pin contracts for a provider DID.\n    ListStoragePinContractsByProvider,\n    /// Fetch one storage pin receipt.\n    GetStoragePinReceipt,\n    /// Fetch one storage challenge.\n    GetStorageChallenge,\n    /// Fetch one evidence anchor record by deterministic anchor ID.\n    GetEvidenceAnchor,\n    /// List evidence anchor records for a content digest.\n    ListEvidenceAnchorsByDigest,\n\n    // -- MARS proxy --\n    /// Fetch a MARS registry entry by DID.\n    MarsGetEntry,\n    /// Discover MARS entries matching a query.\n    MarsDiscover,\n\n    // -- Tower coordination chain queries (feature-gated) --\n    /// Fetch a Tower coordination chain block by slot number or hash.\n    #[cfg(feature = \"tower\")]\n    GetTowerBlock,\n    /// Fetch Tower slot information (committee, block producer, status).\n    #[cfg(feature = \"tower\")]\n    GetTowerSlot,\n    /// Fetch a validator's full Tower registry record.\n    #[cfg(feature = \"tower\")]\n    GetTowerValidator,\n    /// Fetch the committee assignment for a given slot.\n    #[cfg(feature = \"tower\")]\n    GetCommittee,\n    /// Get the current finality status (latest justified/finalized epochs).\n    #[cfg(feature = \"tower\")]\n    GetFinalityStatus,\n\n    // -- GAL (Global Anchor Layer) queries (feature-gated) --\n    /// Fetch a GAL entry (HMR anchor, shard assignment, etc.) by DID.\n    /// Deprecated: prefer the typed `GetGalHmr` / `GetGalMhr` / `GetGalEnr`\n    /// methods.\n    #[cfg(feature = \"tower\")]\n    GetGalEntry,\n    /// Fetch the shard assignment for a given DID or namespace. Deprecated:\n    /// prefer the typed `GetGalShard` method.\n    #[cfg(feature = \"tower\")]\n    GetShardAssignment,\n    /// Fetch the current shard topology map. Deprecated: prefer the typed\n    /// `GetGalShardTopology` method.\n    #[cfg(feature = \"tower\")]\n    GetTopologyMap,\n    /// Get a Merkle inclusion proof for a GAL entry.\n    #[cfg(feature = \"tower\")]\n    GetGalProof,\n\n    // -- GAL typed queries (feature-gated) --\n    /// Fetch the typed `HmrAnchor` for a DID.\n    #[cfg(feature = \"tower\")]\n    GetGalHmr,\n    /// Fetch the typed `MhrAnchor` for a DID.\n    #[cfg(feature = \"tower\")]\n    GetGalMhr,\n    /// Fetch the typed `EnrAnchor` for a DID.\n    #[cfg(feature = \"tower\")]\n    GetGalEnr,\n    /// Fetch the typed `OrgLineageRoot` for an org DID.\n    #[cfg(feature = \"tower\")]\n    GetGalOrgRoot,\n    /// Fetch the typed `ShardAssignment` for a subject DID.\n    #[cfg(feature = \"tower\")]\n    GetGalShard,\n    /// Fetch the revocation status for a DID. **Resolvers MUST call this\n    /// first on every resolution** \u2014 the revocation-first invariant.\n    #[cfg(feature = \"tower\")]\n    CheckGalRevocation,\n    /// Fetch the full typed shard topology snapshot.\n    #[cfg(feature = \"tower\")]\n    GetGalShardTopology,\n\n    // -- NFT queries --\n    /// Fetch an NFT collection by its collection ID.\n    GetNftCollection,\n    /// Fetch a single NFT token within a collection.\n    GetNftToken,\n    /// List all NFTs (across collections) owned by a DID, with pagination.\n    GetOwnerNfts,\n    /// Fetch the DID-identity index for a subject DID.\n    GetDidIdentityNft,\n    /// List NFT lifecycle events with optional filters.\n    GetNftEvents,\n\n    // -- DEX queries --\n    /// Fetch a native DEX pool by deterministic pool id.\n    GetDexPool,\n    /// List native DEX pools.\n    ListDexPools,\n    /// Quote an exact-input swap.\n    QuoteDexSwapExactIn,\n    /// Quote an exact-output swap.\n    QuoteDexSwapExactOut,\n    /// Fetch one LP position.\n    GetDexPosition,\n    /// List LP positions by owner and/or pool.\n    ListDexPositions,\n    /// List recent native DEX events.\n    GetDexEvents,\n    /// List distinct token pairs that currently have pools.\n    ListDexPairs,\n    /// Fetch a launch-live custom token class.\n    GetTokenClass,\n    /// Fetch a launch-live custom token balance for one DID.\n    GetTokenBalance,\n\n    // -- Username queries --\n    /// Resolve a canonical `@username` to its on-chain record.\n    ResolveUsername,\n    /// Look up a DID's primary `@username` (reverse-lookup).\n    LookupUsername,\n    /// List all usernames owned by a DID.\n    ListUsernamesForOwner,\n    /// Search usernames by ASCII prefix, with limit.\n    SearchUsernames,\n    /// Fetch a premium-name auction by canonical name.\n    GetUsernameAuction,\n    /// List all open premium-name auctions.\n    ListOpenUsernameAuctions,\n\n    // -- Sigil Mail + Sigil Name System queries --\n    /// Resolve a `.sigil` route or mailbox ID into mail delivery metadata.\n    ResolveMail,\n    /// Fetch a mailbox capability record.\n    GetMailbox,\n    /// List mailboxes owned by a DID.\n    ListMailboxesByOwner,\n    /// Fetch the current or versioned mailbox receive policy.\n    GetMailPolicy,\n    /// List public mailbox keys, optionally filtered by purpose.\n    GetMailKeys,\n    /// Fetch a delivery commitment by ID.\n    GetMailDelivery,\n    /// List delivery commitments indexed by recipient mailbox.\n    ListMailDeliveriesByRecipient,\n    /// List delivery commitments indexed by sender route.\n    ListMailDeliveriesBySender,\n    /// Fetch a mailbox permission grant.\n    GetMailDelegation,\n    /// List mailbox permission grants.\n    ListMailDelegations,\n    /// Fetch an abuse report.\n    GetMailAbuseReport,\n    /// Resolve a `.sigil` name and all resolver records.\n    ResolveName,\n    /// Fetch resolver records for a `.sigil` name.\n    GetNameRecords,\n    /// Resolve website/content records for a `.sigil` name.\n    ResolveWebsite,\n\n    // -- Nova metaverse queries (feature-gated) --\n    /// Fetch a Nova land parcel by ID or coordinates.\n    #[cfg(feature = \"nova\")]\n    GetParcel,\n    /// Fetch a deployed building by ID.\n    #[cfg(feature = \"nova\")]\n    GetBuilding,\n    /// Fetch an avatar's current state (position, animation, presence).\n    #[cfg(feature = \"nova\")]\n    GetAvatar,\n    /// Get the world configuration for a given world ID.\n    #[cfg(feature = \"nova\")]\n    GetWorldConfig,\n    /// List all parcels within a Nova region.\n    #[cfg(feature = \"nova\")]\n    ListParcelsInRegion,\n    /// Get the current status of a Nova land auction.\n    #[cfg(feature = \"nova\")]\n    GetAuctionStatus,\n}",
              "docs": "Available RPC methods exposed by a Sigil node.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "methods::RpcMethod::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "Returns the canonical JSON-RPC method string.",
              "attributes": "",
              "line": 445
            },
            {
              "name": "methods::RpcMethod::from_method_str",
              "kind": "function_item",
              "signature": "pub fn from_method_str(s: &str) -> Option<Self>;",
              "docs": "Parse a method string into an `RpcMethod`.\n\nReturns `None` for unknown method names.",
              "attributes": "",
              "line": 675
            },
            {
              "name": "methods::RpcMethod::requires_auth",
              "kind": "function_item",
              "signature": "pub fn requires_auth(&self) -> bool;",
              "docs": "Returns `true` for methods that mutate state and therefore require an\nArsenal ACT (Authorization Capability Token).",
              "attributes": "",
              "line": 907
            },
            {
              "name": "methods::RpcMethod::is_query",
              "kind": "function_item",
              "signature": "pub fn is_query(&self) -> bool;",
              "docs": "Returns `true` for read-only query methods.",
              "attributes": "",
              "line": 930
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nft",
          "source": "sigil/node/sigil-rpc/src/nft.rs",
          "sha256": "585a677974ec6ed1554791571a2e5efef4afc8517e063b79f0fa2719c6c90f70",
          "attributes": "",
          "items": [
            {
              "name": "nft::RpcTokenId",
              "kind": "struct_item",
              "signature": "pub struct RpcTokenId(pub u128);",
              "docs": "A `u128` token identifier serialized as a decimal string on the JSON wire.\n\nJavaScript cannot represent u128 as a Number without precision loss, so\nall token IDs in RPC responses are sent as strings (e.g. `\"340282366920938\"`).",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]",
              "line": 29
            },
            {
              "name": "nft::RpcNftCollection",
              "kind": "struct_item",
              "signature": "pub struct RpcNftCollection {\npub collection_id: String,\npub name: String,\npub symbol: String,\npub kind: NftKind,\npub issuer_did: String,\npub controller_did: String,\npub policy: CollectionPolicy,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\npub created_height: u64,\n/// Cumulative mint count serialized as a string (u128 safety).\n\npub total_minted: String,\n/// Cumulative burn count serialized as a string (u128 safety).\n\npub total_burned: String\n}",
              "docs": "Wire representation of an NFT collection for `sigil_getNftCollection`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 69
            },
            {
              "name": "nft::RpcNftToken",
              "kind": "struct_item",
              "signature": "pub struct RpcNftToken {\npub collection_id: String,\n/// Token ID as a decimal string (u128-safe).\n\npub token_id: RpcTokenId,\npub owner_did: String,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n/// BLAKE3 hash as hex string, if present.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<String>,\npub locked: bool,\npub burn_auth: BurnAuth,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub identity: Option<IdentityBinding>,\npub minted_height: u64,\npub last_metadata_update_height: u64\n}",
              "docs": "Wire representation of a single NFT token for `sigil_getNftToken`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 110
            },
            {
              "name": "nft::RpcOwnerIndexEntry",
              "kind": "struct_item",
              "signature": "pub struct RpcOwnerIndexEntry {\npub collection_id: String,\npub owner_did: String,\n/// All token IDs held by this owner in this collection \u2014 decimal strings.\n\npub token_ids: Vec<RpcTokenId>\n}",
              "docs": "Wire representation of one (collection, token list) entry for\n`sigil_getOwnerNfts`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 152
            },
            {
              "name": "nft::RpcDidIdentityIndex",
              "kind": "struct_item",
              "signature": "pub struct RpcDidIdentityIndex {\npub subject_did: String,\n/// All `(collection_id, token_id)` pairs bound to this DID.\n\npub identity_tokens: Vec<RpcIdentityTokenRef>\n}",
              "docs": "Wire representation of the DID-identity index for `sigil_getDidIdentityNft`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 175
            },
            {
              "name": "nft::RpcIdentityTokenRef",
              "kind": "struct_item",
              "signature": "pub struct RpcIdentityTokenRef {\npub collection_id: String,\n/// Token ID as a decimal string.\n\npub token_id: RpcTokenId\n}",
              "docs": "A single `(collection_id, token_id)` pair in a DID-identity index entry.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 183
            },
            {
              "name": "nft::RpcNftEvent",
              "kind": "struct_item",
              "signature": "pub struct RpcNftEvent {\npub kind: NftEventKind,\npub collection_id: String,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub token_id: Option<RpcTokenId>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub from_did: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub to_did: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_uri: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub metadata_hash: Option<String>,\npub block_height: u64,\n/// Transaction hash as hex string.\n\npub tx_hash: String\n}",
              "docs": "Wire representation of a single NFT lifecycle event for `sigil_getNftEvents`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 211
            },
            {
              "name": "nft::NftEventFilter",
              "kind": "struct_item",
              "signature": "pub struct NftEventFilter {\n/// Filter by collection ID. Field name `collection_id` matches the Explorer\n\n/// client and the rest of the NFT RPC surface.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub collection_id: Option<String>,\n/// Filter by owner / participant DID.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub owner_did: Option<String>,\n/// Filter by event kind.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub kind: Option<NftEventKind>,\n/// Maximum number of events to return (default: 50).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub limit: Option<usize>,\n/// Number of events to skip (default: 0).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub offset: Option<usize>\n}",
              "docs": "Query parameters for `sigil_getNftEvents`.\n\nAll fields are optional; omitting a field means \"no filter on that\ndimension\". `limit` defaults to 50 when absent; `offset` defaults to 0.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]",
              "line": 254
            }
          ],
          "parseErrors": false
        },
        {
          "module": "responses",
          "source": "sigil/node/sigil-rpc/src/responses.rs",
          "sha256": "bb4b88ed78249589845f31db4538e9ecae9f9754a2dcbf2bb38ce86ced005ab0",
          "attributes": "",
          "items": [
            {
              "name": "responses::BlockResponse",
              "kind": "struct_item",
              "signature": "pub struct BlockResponse {\n/// The full block data.\n\npub block: Block,\n/// Hex-encoded block hash.\n\npub hash: String\n}",
              "docs": "Response for `sigil_getBlock`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "responses::TransactionResponse",
              "kind": "struct_item",
              "signature": "pub struct TransactionResponse {\n/// The signed transaction.\n\npub tx: SignedTransaction,\n/// Block height at which the transaction was included, if finalized.\n\npub block_height: Option<u64>,\n/// Whether this transaction has been finalized.\n\npub confirmed: bool\n}",
              "docs": "Response for `sigil_getTransaction`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "responses::NodeInfoResponse",
              "kind": "struct_item",
              "signature": "pub struct NodeInfoResponse {\n/// The chain identifier.\n\npub chain_id: String,\n/// Protocol version.\n\npub protocol_version: String,\n/// Current block height.\n\npub current_height: u64,\n/// Current epoch number.\n\npub current_epoch: u64,\n/// Node operating mode (e.g. `\"validator\"`, `\"rpc\"`, `\"archive\"`).\n\npub node_mode: String,\n/// Number of connected peers.\n\npub peer_count: usize\n}",
              "docs": "Response for `sigil_getNodeInfo`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "responses::SyncStatusResponse",
              "kind": "struct_item",
              "signature": "pub struct SyncStatusResponse {\n/// Whether the node is currently syncing.\n\npub syncing: bool,\n/// The node's current block height.\n\npub current_height: u64,\n/// The target height (highest known from peers).\n\npub target_height: u64,\n/// Number of peers the node has synced headers from.\n\npub peers_synced: usize\n}",
              "docs": "Response for `sigil_getSyncStatus`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 49
            },
            {
              "name": "responses::StateResponse",
              "kind": "struct_item",
              "signature": "pub struct StateResponse {\n/// The state partition queried.\n\npub partition: String,\n/// The key queried.\n\npub key: String,\n/// The value, if found (hex-encoded bytes).\n\npub value: Option<String>,\n/// Block height at which the state was read.\n\npub at_height: u64\n}",
              "docs": "Response for `sigil_getState`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "responses::ValidatorResponse",
              "kind": "struct_item",
              "signature": "pub struct ValidatorResponse {\n/// Validator DID.\n\npub did: String,\n/// Current stake in micro-MINT.\n\npub stake: u64,\n/// Validator mode.\n\npub mode: String,\n/// Whether the validator is in the active set.\n\npub active: bool\n}",
              "docs": "Response for `sigil_getValidator`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 75
            },
            {
              "name": "responses::ValidatorSetResponse",
              "kind": "struct_item",
              "signature": "pub struct ValidatorSetResponse {\n/// The epoch this validator set applies to.\n\npub epoch: u64,\n/// Total count of active validators.\n\npub total: usize,\n/// The validators.\n\npub validators: Vec<ValidatorResponse>\n}",
              "docs": "Response for `sigil_getValidatorSet`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 88
            },
            {
              "name": "responses::ProposalResponse",
              "kind": "struct_item",
              "signature": "pub struct ProposalResponse {\n/// Proposal ID.\n\npub id: String,\n/// Proposal title.\n\npub title: String,\n/// Proposal description.\n\npub description: String,\n/// Proposal type.\n\npub proposal_type: String,\n/// Current status (e.g. `\"voting\"`, `\"passed\"`, `\"rejected\"`, `\"executed\"`).\n\npub status: String,\n/// Payload data.\n\npub payload: serde_json::Value\n}",
              "docs": "Response for `sigil_getProposal`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 99
            },
            {
              "name": "responses::SendTransactionResponse",
              "kind": "struct_item",
              "signature": "pub struct SendTransactionResponse {\n/// Hex-encoded transaction hash.\n\npub tx_hash: String,\n/// Whether the transaction was accepted into the mempool.\n\npub accepted: bool\n}",
              "docs": "Response for `sigil_sendTransaction`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 116
            },
            {
              "name": "responses::TransactionReceiptResponse",
              "kind": "struct_item",
              "signature": "pub struct TransactionReceiptResponse {\n/// The transaction receipt.\n\npub receipt: sigil_core::Receipt\n}",
              "docs": "Response for `sigil_getTransactionReceipt`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 125
            },
            {
              "name": "responses::MarsEntryResponse",
              "kind": "struct_item",
              "signature": "pub struct MarsEntryResponse {\n/// The entry DID.\n\npub did: String,\n/// The entry data as JSON.\n\npub data: serde_json::Value,\n/// Block height at which the entry was anchored.\n\npub anchored_at: u64\n}",
              "docs": "Response for `mars_getEntry`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 132
            },
            {
              "name": "responses::GalHmrResponse",
              "kind": "struct_item",
              "signature": "pub struct GalHmrResponse {\npub anchor: Option<sigil_core::HmrAnchor>\n}",
              "docs": "Response for `gal_getHmr`. `None` when no anchor exists for the DID.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 148
            },
            {
              "name": "responses::GalMhrResponse",
              "kind": "struct_item",
              "signature": "pub struct GalMhrResponse {\npub anchor: Option<sigil_core::MhrAnchor>\n}",
              "docs": "Response for `gal_getMhr`.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 155
            },
            {
              "name": "responses::GalEnrResponse",
              "kind": "struct_item",
              "signature": "pub struct GalEnrResponse {\npub anchor: Option<sigil_core::EnrAnchor>\n}",
              "docs": "Response for `gal_getEnr`.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 162
            },
            {
              "name": "responses::GalOrgRootResponse",
              "kind": "struct_item",
              "signature": "pub struct GalOrgRootResponse {\npub root: Option<sigil_core::OrgLineageRoot>\n}",
              "docs": "Response for `gal_getOrgRoot`.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 169
            },
            {
              "name": "responses::GalShardResponse",
              "kind": "struct_item",
              "signature": "pub struct GalShardResponse {\npub assignment: Option<sigil_core::ShardAssignment>,\npub topology: Vec<sigil_core::ShardTopologyEntry>\n}",
              "docs": "Response for `gal_getShard` (typed shard summary). The `topology` field\ncarries any relevant topology entries describing the shard's lineage\n(split/merge/migrate history) \u2014 empty when the shard is freshly added.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 178
            },
            {
              "name": "responses::GalRevocationResponse",
              "kind": "struct_item",
              "signature": "pub struct GalRevocationResponse {\n#[serde(flatten)]\npub status: sigil_core::RevocationStatus\n}",
              "docs": "Response for `gal_checkRevocation`. Wraps the canonical\n`RevocationStatus` shape \u2014 resolvers MUST call this first.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 187
            },
            {
              "name": "responses::GalShardTopologyResponse",
              "kind": "struct_item",
              "signature": "pub struct GalShardTopologyResponse {\npub entries: Vec<sigil_core::ShardTopologyEntry>\n}",
              "docs": "Response for `gal_getShardTopology`.",
              "attributes": "#[cfg(feature = \"tower\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 195
            }
          ],
          "parseErrors": false
        },
        {
          "module": "types",
          "source": "sigil/node/sigil-rpc/src/types.rs",
          "sha256": "b8c5f361d783d97df11a2fbf839a128280b94a537c6554f1e484577f813d5a33",
          "attributes": "",
          "items": [
            {
              "name": "types::JSONRPC_VERSION",
              "kind": "const_item",
              "signature": "pub const JSONRPC_VERSION: &str;",
              "docs": "The JSON-RPC protocol version we support.",
              "attributes": "",
              "line": 6
            },
            {
              "name": "types::RpcRequest",
              "kind": "struct_item",
              "signature": "pub struct RpcRequest {\n/// Protocol version -- always `\"2.0\"`.\n\npub jsonrpc: String,\n/// The RPC method name (e.g. `\"sigil_getBlock\"`).\n\npub method: String,\n/// Method parameters as arbitrary JSON.\n\npub params: serde_json::Value,\n/// Caller-provided request identifier (number or string).\n\npub id: serde_json::Value\n}",
              "docs": "A JSON-RPC 2.0 request envelope.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "types::RpcRequest::new",
              "kind": "function_item",
              "signature": "pub fn new(method: &str, params: serde_json::Value, id: serde_json::Value) -> Self;",
              "docs": "Create a new request with the standard `\"2.0\"` version.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "types::RpcRequest::is_valid_version",
              "kind": "function_item",
              "signature": "pub fn is_valid_version(&self) -> bool;",
              "docs": "Returns `true` if the `jsonrpc` field is the supported version.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "types::RpcResponse",
              "kind": "struct_item",
              "signature": "pub struct RpcResponse {\n/// Protocol version -- always `\"2.0\"`.\n\npub jsonrpc: String,\n/// The result payload (present on success).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub result: Option<serde_json::Value>,\n/// The error payload (present on failure).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub error: Option<RpcError>,\n/// The request identifier echoed back.\n\npub id: serde_json::Value\n}",
              "docs": "A JSON-RPC 2.0 response envelope.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 40
            },
            {
              "name": "types::RpcResponse::success",
              "kind": "function_item",
              "signature": "pub fn success(result: serde_json::Value, id: serde_json::Value) -> Self;",
              "docs": "Build a success response.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "types::RpcResponse::error",
              "kind": "function_item",
              "signature": "pub fn error(error: RpcError, id: serde_json::Value) -> Self;",
              "docs": "Build an error response.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "types::RpcResponse::is_error",
              "kind": "function_item",
              "signature": "pub fn is_error(&self) -> bool;",
              "docs": "Returns `true` when the response carries an error.",
              "attributes": "",
              "line": 75
            },
            {
              "name": "types::RpcError",
              "kind": "struct_item",
              "signature": "pub struct RpcError {\n/// Numeric error code (see JSON-RPC 2.0 spec and [`crate::error::RpcApiError`]).\n\npub code: i32,\n/// Short human-readable error message.\n\npub message: String,\n/// Optional structured error data.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub data: Option<serde_json::Value>\n}",
              "docs": "A JSON-RPC 2.0 error object.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "types::RpcError::new",
              "kind": "function_item",
              "signature": "pub fn new(code: i32, message: impl Into<String>) -> Self;",
              "docs": "Create a new error without additional data.",
              "attributes": "",
              "line": 94
            },
            {
              "name": "types::RpcError::with_data",
              "kind": "function_item",
              "signature": "pub fn with_data(mut self, data: serde_json::Value) -> Self;",
              "docs": "Attach additional structured data.",
              "attributes": "",
              "line": 103
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-sdk",
      "version": "0.1.0",
      "source": "sigil/node/sigil-sdk",
      "manifestSha256": "8b1344a6557ac7f79ec946112c66f439b018d68bb71245a76fabed16a21a73bd",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "evidence": [
          "dep:async-trait",
          "dep:tokio"
        ],
        "evidence-http": [
          "evidence",
          "dep:reqwest"
        ],
        "gal": [
          "sigil-core/tower",
          "dep:async-trait",
          "dep:blake3",
          "dep:hex",
          "dep:mars-protocol",
          "dep:oas-resolve"
        ],
        "gal-http": [
          "gal",
          "dep:reqwest"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-sdk",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-sdk/src/lib.rs",
          "sha256": "47f04f730028ba969bea67397680283fb966ef198d424cd49747e5e0f2b4b4ac",
          "attributes": "",
          "items": [
            {
              "name": "builder",
              "kind": "module",
              "signature": "pub mod builder;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "client",
              "kind": "module",
              "signature": "pub mod client;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "mail",
              "kind": "module",
              "signature": "pub mod mail;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "nft",
              "kind": "module",
              "signature": "pub mod nft;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "resolver",
              "kind": "module",
              "signature": "pub mod resolver;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "sns",
              "kind": "module",
              "signature": "pub mod sns;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "storage_market",
              "kind": "module",
              "signature": "pub mod storage_market;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "evidence",
              "kind": "module",
              "signature": "pub mod evidence;",
              "docs": "",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 20
            },
            {
              "name": "evidence_http",
              "kind": "module",
              "signature": "pub mod evidence_http;",
              "docs": "",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 22
            },
            {
              "name": "gal_adapter",
              "kind": "module",
              "signature": "pub mod gal_adapter;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 25
            },
            {
              "name": "sign_in",
              "kind": "module",
              "signature": "pub mod sign_in;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 27
            },
            {
              "name": "gal_http",
              "kind": "module",
              "signature": "pub mod gal_http;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 30
            },
            {
              "name": "pub use builder::{sign_transaction, TransactionBuilder};",
              "kind": "use_declaration",
              "signature": "pub use builder::{sign_transaction, TransactionBuilder};",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "pub use client::SigilClientConfig;",
              "kind": "use_declaration",
              "signature": "pub use client::SigilClientConfig;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use error::SdkError;",
              "kind": "use_declaration",
              "signature": "pub use error::SdkError;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use mail::{\n    allow_all_policy, delivery_commitment, derive_mailbox_id, preflight_delivery_commitment,\n    public_mail_key_record,\n};",
              "kind": "use_declaration",
              "signature": "pub use mail::{\n    allow_all_policy, delivery_commitment, derive_mailbox_id, preflight_delivery_commitment,\n    public_mail_key_record,\n};",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pub use resolver::{ResolvedDocument, SigilResolver};",
              "kind": "use_declaration",
              "signature": "pub use resolver::{ResolvedDocument, SigilResolver};",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use sns::{\n    compute_namehash, mailbox_record, normalize_name, weave_mailbox_record, website_record,\n};",
              "kind": "use_declaration",
              "signature": "pub use sns::{\n    compute_namehash, mailbox_record, normalize_name, weave_mailbox_record, website_record,\n};",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use storage_market::{\n    derive_storage_challenge_id, derive_storage_contract_id, derive_storage_pin_request_id,\n    preflight_storage_pin_request, preflight_storage_receipt,\n};",
              "kind": "use_declaration",
              "signature": "pub use storage_market::{\n    derive_storage_challenge_id, derive_storage_contract_id, derive_storage_pin_request_id,\n    preflight_storage_pin_request, preflight_storage_receipt,\n};",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "pub use evidence::{\n    anchor_digest_tx, digest_artifact, AnchorParams, AnchorProof, AnchorSubmission, ConfirmPolicy,\n    EvidenceAnchorClient, EvidenceError, EvidenceTransport,\n};",
              "kind": "use_declaration",
              "signature": "pub use evidence::{\n    anchor_digest_tx, digest_artifact, AnchorParams, AnchorProof, AnchorSubmission, ConfirmPolicy,\n    EvidenceAnchorClient, EvidenceError, EvidenceTransport,\n};",
              "docs": "",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 49
            },
            {
              "name": "pub use evidence_http::{HttpEvidenceTransport, HttpEvidenceTransportConfig};",
              "kind": "use_declaration",
              "signature": "pub use evidence_http::{HttpEvidenceTransport, HttpEvidenceTransportConfig};",
              "docs": "",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 54
            },
            {
              "name": "pub use gal_adapter::{FinalizedBlockFuture, FinalizedBlockSource, MarsToOasGalSource};",
              "kind": "use_declaration",
              "signature": "pub use gal_adapter::{FinalizedBlockFuture, FinalizedBlockSource, MarsToOasGalSource};",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 57
            },
            {
              "name": "pub use sign_in::{\n    build_sign_in_transcript, canonical_sign_in_message, verify_sign_in_response,\n    verify_sign_in_response_with_store, InMemorySignInChallengeStore, SignInChallenge,\n    SignInChallengeInput, SignInChallengeStore, SignInRootKind, SignInVerifyError,\n    SignInVerifyOptions, SignedSignInResponse, VerifiedSignIn,\n};",
              "kind": "use_declaration",
              "signature": "pub use sign_in::{\n    build_sign_in_transcript, canonical_sign_in_message, verify_sign_in_response,\n    verify_sign_in_response_with_store, InMemorySignInChallengeStore, SignInChallenge,\n    SignInChallengeInput, SignInChallengeStore, SignInRootKind, SignInVerifyError,\n    SignInVerifyOptions, SignedSignInResponse, VerifiedSignIn,\n};",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 59
            },
            {
              "name": "pub use gal_http::{HttpSigilAnchorClient, HttpSigilAnchorClientConfig};",
              "kind": "use_declaration",
              "signature": "pub use gal_http::{HttpSigilAnchorClient, HttpSigilAnchorClientConfig};",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 67
            }
          ],
          "parseErrors": false
        },
        {
          "module": "builder",
          "source": "sigil/node/sigil-sdk/src/builder.rs",
          "sha256": "379aa782af61eef3c41239de2ed9306df19c7f29975ba0aaf3ce6f6b71d8af73",
          "attributes": "",
          "items": [
            {
              "name": "builder::sign_transaction",
              "kind": "function_item",
              "signature": "pub fn sign_transaction(\n    tx: Transaction,\n    signing_key: &SigningKey,\n) -> Result<SignedTransaction, SdkError>;",
              "docs": "Sign an unsigned [`Transaction`] with an Ed25519 signing key.\n\nProduces a [`SignedTransaction`] containing a real 64-byte Ed25519 signature\nover `BLAKE3(TX_DOMAIN_TAG || serde_json::to_vec(&tx))` and the corresponding\n32-byte compressed verifying key.\n\nThis is the canonical way to prepare a transaction for submission to a Sigil\nnode via `sigil_sendTransaction`.\n\n# Errors\n\nReturns [`SdkError::TransactionBuildError`] if the transaction cannot be\nserialized for signing.\n\n# Example\n\n```rust,no_run\nuse ed25519_dalek::SigningKey;\nuse sigil_sdk::builder::{TransactionBuilder, sign_transaction};\n\nlet key = SigningKey::generate(&mut rand::rngs::OsRng);\nlet tx = TransactionBuilder::new(\"sigil-mainnet-1\", \"did:oas:prod:hmr:alice\")\n    .nonce(1)\n    .unstake(5_000);\nlet signed = sign_transaction(tx, &key).expect(\"sign\");\n```",
              "attributes": "",
              "line": 46
            },
            {
              "name": "builder::TransactionBuilder",
              "kind": "struct_item",
              "signature": "pub struct TransactionBuilder {\n\n}",
              "docs": "A fluent builder for constructing unsigned Sigil transactions.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 62
            },
            {
              "name": "builder::TransactionBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new(chain_id: &str, sender_did: &str) -> Self;",
              "docs": "Create a new builder for the given chain and sender.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "builder::TransactionBuilder::nonce",
              "kind": "function_item",
              "signature": "pub fn nonce(mut self, n: u64) -> Self;",
              "docs": "Set the transaction nonce.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "builder::TransactionBuilder::gas_limit",
              "kind": "function_item",
              "signature": "pub fn gas_limit(mut self, g: u64) -> Self;",
              "docs": "Set the gas limit.",
              "attributes": "",
              "line": 89
            },
            {
              "name": "builder::TransactionBuilder::gas_price",
              "kind": "function_item",
              "signature": "pub fn gas_price(mut self, p: u64) -> Self;",
              "docs": "Set the gas price in micro-MINT.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "builder::TransactionBuilder::register_identity",
              "kind": "function_item",
              "signature": "pub fn register_identity(\n        self,\n        did: &str,\n        document: serde_json::Value,\n        conformance_level: &str,\n    ) -> Transaction;",
              "docs": "Build an identity registration transaction.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "builder::TransactionBuilder::stake",
              "kind": "function_item",
              "signature": "pub fn stake(self, amount: u64, mode: &str) -> Result<Transaction, SdkError>;",
              "docs": "Build a stake transaction.\n\n# Errors\n\nReturns [`SdkError::TransactionBuildError`] if the mode string is not\n`\"producer\"` or `\"validator\"`.",
              "attributes": "",
              "line": 124
            },
            {
              "name": "builder::TransactionBuilder::unstake",
              "kind": "function_item",
              "signature": "pub fn unstake(self, amount: u64) -> Transaction;",
              "docs": "Build an unstake transaction.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "builder::TransactionBuilder::delegate",
              "kind": "function_item",
              "signature": "pub fn delegate(self, validator_did: &str, amount: u64) -> Transaction;",
              "docs": "Build a delegation transaction.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "builder::TransactionBuilder::undelegate",
              "kind": "function_item",
              "signature": "pub fn undelegate(self, validator_did: &str, shares: u64) -> Transaction;",
              "docs": "Build an undelegation transaction.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "builder::TransactionBuilder::claim_rewards",
              "kind": "function_item",
              "signature": "pub fn claim_rewards(self) -> Transaction;",
              "docs": "Build a claim-rewards transaction.",
              "attributes": "",
              "line": 162
            },
            {
              "name": "builder::TransactionBuilder::propose",
              "kind": "function_item",
              "signature": "pub fn propose(\n        self,\n        title: &str,\n        description: &str,\n        proposal_type: ProposalType,\n        payload: serde_json::Value,\n        deposit: u64,\n    ) -> Transaction;",
              "docs": "Build a governance proposal transaction.",
              "attributes": "",
              "line": 172
            },
            {
              "name": "builder::TransactionBuilder::vote",
              "kind": "function_item",
              "signature": "pub fn vote(self, proposal_id: &str, choice: &str) -> Result<Transaction, SdkError>;",
              "docs": "Build a governance vote transaction.\n\n# Errors\n\nReturns [`SdkError::TransactionBuildError`] if the choice string is not\none of `\"yes\"`, `\"no\"`, `\"abstain\"`, or `\"no_with_veto\"`.",
              "attributes": "",
              "line": 195
            },
            {
              "name": "builder::TransactionBuilder::register_contract_code",
              "kind": "function_item",
              "signature": "pub fn register_contract_code(\n        self,\n        code: Vec<u8>,\n        license_metadata: ContractLicenseMetadata,\n    ) -> Transaction;",
              "docs": "Build a public contract-code registration transaction.",
              "attributes": "",
              "line": 218
            },
            {
              "name": "builder::TransactionBuilder::deploy_contract",
              "kind": "function_item",
              "signature": "pub fn deploy_contract(\n        self,\n        contract_did: &str,\n        controller_did: &str,\n        code_hash: &str,\n        zone_id: Option<String>,\n    ) -> Transaction;",
              "docs": "Build a deployment transaction for code that was previously registered\nby `RegisterContractCode` or installed at genesis.",
              "attributes": "",
              "line": 235
            },
            {
              "name": "builder::TransactionBuilder::sponsored_setup",
              "kind": "function_item",
              "signature": "pub fn sponsored_setup(\n        self,\n        subject_did: &str,\n        setup_scope: SponsoredSetupScope,\n        idempotency_key: &str,\n        setup_tx_type: TransactionType,\n        subject_public_key: Vec<u8>,\n        subject_signature: Vec<u8>,\n    ) -> Transaction;",
              "docs": "Build a setup-only sponsored transaction envelope.\n\nThe builder sender is the sponsor DID and pays the fee. The inner\n`setup_tx_type` must be one of the allowlisted setup actions enforced by\nthe node executor.",
              "attributes": "",
              "line": 269
            },
            {
              "name": "builder::TransactionBuilder::initial_device_anchor",
              "kind": "function_item",
              "signature": "pub fn initial_device_anchor(self, data: InitialDeviceAnchorData) -> Transaction;",
              "docs": "Build a setup-only initial device anchor transaction.",
              "attributes": "",
              "line": 291
            }
          ],
          "parseErrors": false
        },
        {
          "module": "client",
          "source": "sigil/node/sigil-sdk/src/client.rs",
          "sha256": "0236a8490bc14cb2caf01d04a28127291afa5f70eb4952a41cf853fcb972b252",
          "attributes": "",
          "items": [
            {
              "name": "client::SigilClientConfig",
              "kind": "struct_item",
              "signature": "pub struct SigilClientConfig {\n/// RPC endpoint URL (e.g. `\"http://localhost:12618\"`).\n\npub rpc_url: String,\n/// The chain ID to target.\n\npub chain_id: String,\n/// Request timeout in seconds.\n\npub timeout_secs: u64,\n/// Optional bearer token for authenticated endpoints.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub auth_token: Option<String>\n}",
              "docs": "Configuration for connecting to a Sigil node.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "client::SigilClientConfig::mainnet",
              "kind": "function_item",
              "signature": "pub fn mainnet(rpc_url: &str) -> Self;",
              "docs": "Create a config targeting the Sigil mainnet.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "client::SigilClientConfig::testnet",
              "kind": "function_item",
              "signature": "pub fn testnet(rpc_url: &str) -> Self;",
              "docs": "Create a config targeting the Sigil testnet.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "client::SigilClientConfig::devnet",
              "kind": "function_item",
              "signature": "pub fn devnet(rpc_url: &str) -> Self;",
              "docs": "Create a config targeting a local devnet.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "client::SigilClientConfig::with_timeout",
              "kind": "function_item",
              "signature": "pub fn with_timeout(mut self, secs: u64) -> Self;",
              "docs": "Override the request timeout.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "client::SigilClientConfig::with_auth_token",
              "kind": "function_item",
              "signature": "pub fn with_auth_token(mut self, token: impl Into<String>) -> Self;",
              "docs": "Set an authentication token.",
              "attributes": "",
              "line": 60
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-sdk/src/error.rs",
          "sha256": "d5b20314c8ac4c5c1c1f46a7383474e5cec5f40c4da6f8b30ae14d37101e6f76",
          "attributes": "",
          "items": [
            {
              "name": "error::SdkError",
              "kind": "enum_item",
              "signature": "pub enum SdkError {\n    /// Failed to connect to the Sigil node.\n    #[error(\"connection failed: {0}\")]\n    ConnectionFailed(String),\n\n    /// The RPC node returned an error.\n    #[error(\"rpc error: {0}\")]\n    RpcError(String),\n\n    /// Error while building a transaction.\n    #[error(\"transaction build error: {0}\")]\n    TransactionBuildError(String),\n\n    /// DID resolution failed.\n    #[error(\"resolution failed: {0}\")]\n    ResolutionFailed(String),\n\n    /// Authentication/authorization failure.\n    #[error(\"unauthorized: {0}\")]\n    Unauthorized(String),\n\n    /// Request timed out.\n    #[error(\"request timed out\")]\n    Timeout,\n}",
              "docs": "Errors that can occur when using the Sigil SDK.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, thiserror::Error)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mail",
          "source": "sigil/node/sigil-sdk/src/mail.rs",
          "sha256": "755d120a271ab72894f4d39d32daa9ad985a948ce4dc67a5e3af042ef3d1e5aa",
          "attributes": "",
          "items": [
            {
              "name": "mail::derive_mailbox_id",
              "kind": "function_item",
              "signature": "pub fn derive_mailbox_id(\n    chain_id: &str,\n    subject_did: &str,\n    mailbox_salt_commitment: &str,\n) -> Result<String, SdkError>;",
              "docs": "Build a deterministic mailbox id from the chain, subject DID, and blinded\nmailbox salt commitment.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "mail::allow_all_policy",
              "kind": "function_item",
              "signature": "pub fn allow_all_policy(\n    chain_id: &str,\n    mailbox_id: &str,\n    version: u64,\n    created_at_height: u64,\n) -> Result<MailboxPolicyRecord, SdkError>;",
              "docs": "Build the standard launch v1 allow-all receive policy.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "mail::public_mail_key_record",
              "kind": "function_item",
              "signature": "pub fn public_mail_key_record(\n    chain_id: &str,\n    mailbox_id: &str,\n    purpose: MailKeyPurpose,\n    algorithm: &str,\n    public_key_hex: &str,\n    device_commitment: &str,\n    version: u64,\n    published_at_height: u64,\n    expires_at_height: Option<u64>,\n) -> Result<MailPublicKeyRecord, SdkError>;",
              "docs": "Build an active public mail key record from a lowercase hex public key.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 63
            },
            {
              "name": "mail::delivery_commitment",
              "kind": "function_item",
              "signature": "pub fn delivery_commitment(\n    chain_id: &str,\n    sender_route: SenderRoute,\n    recipient_mailbox_id: &str,\n    encrypted_weave_ref_commitment: &str,\n    ciphertext_content_hash: &str,\n    recipient_key_id: &str,\n    recipient_key_version: u64,\n    policy_version: u64,\n    client_nonce: &str,\n    required_fee: u128,\n    locked_stake: u128,\n) -> Result<DeliveryCommitmentRecord, SdkError>;",
              "docs": "Build a content-blind delivery commitment. `encrypted_weave_ref_commitment`\nand `ciphertext_content_hash` must be 32-byte lowercase hex commitments,\nnever plaintext paths or headers.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 108
            },
            {
              "name": "mail::preflight_delivery_commitment",
              "kind": "function_item",
              "signature": "pub fn preflight_delivery_commitment(record: &DeliveryCommitmentRecord) -> Result<(), SdkError>;",
              "docs": "",
              "attributes": "",
              "line": 153
            },
            {
              "name": "mail::TransactionBuilder::mail_create_mailbox",
              "kind": "function_item",
              "signature": "pub fn mail_create_mailbox(\n        self,\n        mailbox_id: &str,\n        subject_did: &str,\n        controller_policy: ControlPolicy,\n        wallet_address: Option<&str>,\n        mailbox_salt_commitment: &str,\n        mailbox_storage_commitment: Option<&str>,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `MailCreateMailbox`.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 168
            },
            {
              "name": "mail::TransactionBuilder::mail_update_receive_policy",
              "kind": "function_item",
              "signature": "pub fn mail_update_receive_policy(\n        self,\n        mailbox_id: &str,\n        policy: MailboxPolicyRecord,\n        expected_sequence: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `MailUpdateReceivePolicy`.",
              "attributes": "",
              "line": 190
            },
            {
              "name": "mail::TransactionBuilder::mail_publish_key",
              "kind": "function_item",
              "signature": "pub fn mail_publish_key(\n        self,\n        mailbox_id: &str,\n        key: MailPublicKeyRecord,\n        expected_sequence: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `MailPublishKey`.",
              "attributes": "",
              "line": 208
            },
            {
              "name": "mail::TransactionBuilder::mail_publish_delivery_commitment",
              "kind": "function_item",
              "signature": "pub fn mail_publish_delivery_commitment(\n        self,\n        commitment: DeliveryCommitmentRecord,\n        sender_signature_hex: Option<&str>,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `MailPublishDeliveryCommitment`.",
              "attributes": "",
              "line": 224
            },
            {
              "name": "mail::TransactionBuilder::mail_grant_permission",
              "kind": "function_item",
              "signature": "pub fn mail_grant_permission(\n        self,\n        grant: MailDelegationGrant,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `MailGrantPermission`.",
              "attributes": "",
              "line": 242
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nft",
          "source": "sigil/node/sigil-sdk/src/nft.rs",
          "sha256": "ad901fe315da1c546036b38df4ee4d7a4043c5f53177a93822fd3f1f9e4fac5e",
          "attributes": "",
          "items": [
            {
              "name": "nft::TransactionBuilder::create_nft_collection",
              "kind": "function_item",
              "signature": "pub fn create_nft_collection(\n        self,\n        collection_id: &str,\n        name: &str,\n        symbol: &str,\n        kind: NftKind,\n        issuer_did: &str,\n        controller_did: &str,\n        policy: CollectionPolicy,\n        metadata_uri: Option<&str>,\n    ) -> Transaction;",
              "docs": "Build a `CreateNftCollection` transaction.\n\nThe `sender_did` on the builder must match `issuer_did` (enforced by\nthe executor, not here).",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 36
            },
            {
              "name": "nft::TransactionBuilder::mint_nft",
              "kind": "function_item",
              "signature": "pub fn mint_nft(\n        self,\n        collection_id: &str,\n        token_id: u128,\n        recipient_did: &str,\n        metadata_uri: Option<&str>,\n        metadata_hash: Option<SigilHash>,\n        locked: Option<bool>,\n        burn_auth: Option<BurnAuth>,\n        identity: Option<IdentityBinding>,\n    ) -> Transaction;",
              "docs": "Build a `MintNft` transaction.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 67
            },
            {
              "name": "nft::TransactionBuilder::transfer_nft",
              "kind": "function_item",
              "signature": "pub fn transfer_nft(\n        self,\n        collection_id: &str,\n        token_id: u128,\n        from_did: &str,\n        to_did: &str,\n    ) -> Transaction;",
              "docs": "Build a `TransferNft` transaction.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "nft::TransactionBuilder::burn_nft",
              "kind": "function_item",
              "signature": "pub fn burn_nft(self, collection_id: &str, token_id: u128, authorized_by: &str) -> Transaction;",
              "docs": "Build a `BurnNft` transaction.",
              "attributes": "",
              "line": 107
            },
            {
              "name": "nft::TransactionBuilder::set_nft_metadata",
              "kind": "function_item",
              "signature": "pub fn set_nft_metadata(\n        self,\n        collection_id: &str,\n        token_id: u128,\n        metadata_uri: Option<&str>,\n        metadata_hash: Option<SigilHash>,\n    ) -> Transaction;",
              "docs": "Build a `SetNftMetadata` transaction (ERC-4906 inspired).\n\nAt least one of `metadata_uri` or `metadata_hash` should be supplied;\nthe executor rejects transactions where both are `None`.",
              "attributes": "",
              "line": 119
            },
            {
              "name": "nft::TransactionBuilder::verify_identity_nft",
              "kind": "function_item",
              "signature": "pub fn verify_identity_nft(\n        self,\n        collection_id: &str,\n        token_id: u128,\n        verifier_did: &str,\n        new_verification_level: u8,\n        note: Option<&str>,\n    ) -> Transaction;",
              "docs": "Build a `VerifyIdentityNft` transaction.",
              "attributes": "",
              "line": 135
            }
          ],
          "parseErrors": false
        },
        {
          "module": "resolver",
          "source": "sigil/node/sigil-sdk/src/resolver.rs",
          "sha256": "f3a30069d95b88207ca5be01ef3c275812ae589d968c7b00e94339e7b9cc5825",
          "attributes": "",
          "items": [
            {
              "name": "resolver::SigilResolver",
              "kind": "struct_item",
              "signature": "pub struct SigilResolver {\n/// RPC endpoint URL of the Sigil node.\n\npub rpc_url: String,\n/// The chain ID to target.\n\npub chain_id: String\n}",
              "docs": "Resolves OAS documents from Sigil chain state.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 12
            },
            {
              "name": "resolver::SigilResolver::new",
              "kind": "function_item",
              "signature": "pub fn new(rpc_url: &str, chain_id: &str) -> Self;",
              "docs": "Create a new resolver targeting the given node.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "resolver::SigilResolver::resolve_did",
              "kind": "function_item",
              "signature": "pub fn resolve_did(&self, did: &str) -> Result<ResolvedDocument, SdkError>;",
              "docs": "Resolve an OAS document by DID.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "resolver::ResolvedDocument",
              "kind": "struct_item",
              "signature": "pub struct ResolvedDocument {\n/// The DID of the resolved identity.\n\npub did: String,\n/// The full OAS document as JSON.\n\npub document_json: serde_json::Value,\n/// Block height at which this document was last anchored.\n\npub block_height: u64,\n/// Whether the document is anchored on the Sigil chain.\n\npub anchored: bool\n}",
              "docs": "A resolved OAS document with on-chain anchoring metadata.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 127
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sns",
          "source": "sigil/node/sigil-sdk/src/sns.rs",
          "sha256": "ca7197ae934dd9bb2e402b6cc5c49129e7dafbcc53ce6568e0fd06af76b0ba00",
          "attributes": "",
          "items": [
            {
              "name": "sns::normalize_name",
              "kind": "function_item",
              "signature": "pub fn normalize_name(name: &str) -> Result<String, SdkError>;",
              "docs": "Normalize and validate an ASCII `.sigil` name.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "sns::compute_namehash",
              "kind": "function_item",
              "signature": "pub fn compute_namehash(name: &str) -> Result<String, SdkError>;",
              "docs": "Compute the canonical SNS namehash.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "sns::compute_auction_id",
              "kind": "function_item",
              "signature": "pub fn compute_auction_id(name: &str) -> Result<String, SdkError>;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "sns::compute_name_registration_commitment",
              "kind": "function_item",
              "signature": "pub fn compute_name_registration_commitment(\n    chain_id: &str,\n    name: &str,\n    owner_did: &str,\n    salt: &str,\n    reveal_nonce: &str,\n) -> Result<String, SdkError>;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "sns::compute_sealed_bid_commitment",
              "kind": "function_item",
              "signature": "pub fn compute_sealed_bid_commitment(\n    chain_id: &str,\n    auction_id: &str,\n    name: &str,\n    bidder_did: &str,\n    bid_amount: u128,\n    salt: &str,\n) -> Result<String, SdkError>;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "sns::mailbox_record",
              "kind": "function_item",
              "signature": "pub fn mailbox_record(\n    name: &str,\n    mailbox_id: &str,\n    controller_did: &str,\n    revision: u64,\n) -> Result<SnsResolverRecord, SdkError>;",
              "docs": "Build a mailbox resolver record for a `.sigil` name.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "sns::weave_mailbox_record",
              "kind": "function_item",
              "signature": "pub fn weave_mailbox_record(\n    name: &str,\n    weave_ref_commitment: &str,\n    controller_did: &str,\n    revision: u64,\n) -> Result<SnsResolverRecord, SdkError>;",
              "docs": "Build a Weave mailbox reference record. The value must be an encrypted\ntarget commitment or content-addressed private mailbox reference, not a\nplaintext mailbox path.",
              "attributes": "",
              "line": 75
            },
            {
              "name": "sns::website_record",
              "kind": "function_item",
              "signature": "pub fn website_record(\n    name: &str,\n    public_content_ref: &str,\n    controller_did: &str,\n    revision: u64,\n) -> Result<SnsResolverRecord, SdkError>;",
              "docs": "Build a public website/content record.",
              "attributes": "",
              "line": 96
            },
            {
              "name": "sns::TransactionBuilder::sns_register_name",
              "kind": "function_item",
              "signature": "pub fn sns_register_name(\n        self,\n        name: &str,\n        owner_did: &str,\n        years: u8,\n        salt: &str,\n        reveal_nonce: &str,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `RegisterName`.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "sns::TransactionBuilder::sns_renew_name",
              "kind": "function_item",
              "signature": "pub fn sns_renew_name(\n        self,\n        name: &str,\n        years: u8,\n        expected_revision: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `RenewName`.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "sns::TransactionBuilder::sns_set_name_records",
              "kind": "function_item",
              "signature": "pub fn sns_set_name_records(\n        self,\n        name: &str,\n        records: Vec<SnsResolverRecord>,\n        expected_revision: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `SetNameRecords`.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "sns::TransactionBuilder::sns_delete_name_records",
              "kind": "function_item",
              "signature": "pub fn sns_delete_name_records(\n        self,\n        name: &str,\n        kinds: Vec<NameRecordKind>,\n        expected_revision: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `DeleteNameRecords`.",
              "attributes": "",
              "line": 170
            },
            {
              "name": "sns::TransactionBuilder::sns_commit_name_registration",
              "kind": "function_item",
              "signature": "pub fn sns_commit_name_registration(\n        self,\n        commitment: &str,\n        bidder_did: &str,\n        deposit: u128,\n        reveal_after_height: u64,\n        expires_at_height: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `CommitNameRegistration`.",
              "attributes": "",
              "line": 186
            },
            {
              "name": "sns::TransactionBuilder::sns_commit_sealed_name_bid",
              "kind": "function_item",
              "signature": "pub fn sns_commit_sealed_name_bid(\n        self,\n        auction_id: &str,\n        commitment: &str,\n        bidder_did: &str,\n        deposit: u128,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `CommitSealedNameBid`.",
              "attributes": "",
              "line": 208
            },
            {
              "name": "sns::TransactionBuilder::sns_reveal_sealed_name_bid",
              "kind": "function_item",
              "signature": "pub fn sns_reveal_sealed_name_bid(\n        self,\n        auction_id: &str,\n        name: &str,\n        bid_amount: u128,\n        salt: &str,\n        bidder_did: &str,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `RevealSealedNameBid`.",
              "attributes": "",
              "line": 228
            },
            {
              "name": "sns::TransactionBuilder::sns_finalize_sealed_name_auction",
              "kind": "function_item",
              "signature": "pub fn sns_finalize_sealed_name_auction(\n        self,\n        auction_id: &str,\n        name: &str,\n        winner_did: &str,\n        expected_bid: u128,\n        years: u8,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `FinalizeSealedNameAuction`.",
              "attributes": "",
              "line": 250
            }
          ],
          "parseErrors": false
        },
        {
          "module": "storage_market",
          "source": "sigil/node/sigil-sdk/src/storage_market.rs",
          "sha256": "59a1e22010659d410ddf0751d42050395dcfc34c3ce9487a7a02584c09bab5be",
          "attributes": "",
          "items": [
            {
              "name": "storage_market::derive_storage_pin_request_id",
              "kind": "function_item",
              "signature": "pub fn derive_storage_pin_request_id(\n    chain_id: &str,\n    owner_did: &str,\n    artifact: &ArtifactCommitment,\n    duration_epochs: u64,\n    replication_factor: u16,\n    client_nonce: &str,\n) -> Result<String, SdkError>;",
              "docs": "Derive the canonical storage pin request id before submitting a request.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "storage_market::derive_storage_contract_id",
              "kind": "function_item",
              "signature": "pub fn derive_storage_contract_id(\n    chain_id: &str,\n    request_id: &str,\n    provider_did: &str,\n) -> Result<String, SdkError>;",
              "docs": "Derive the canonical storage contract id for a provider accepting a request.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "storage_market::derive_storage_challenge_id",
              "kind": "function_item",
              "signature": "pub fn derive_storage_challenge_id(\n    chain_id: &str,\n    contract_id: &str,\n    opened_at_height: u64,\n    client_nonce: &str,\n) -> Result<String, SdkError>;",
              "docs": "Derive the canonical storage challenge id before submitting a challenge.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "storage_market::preflight_storage_pin_request",
              "kind": "function_item",
              "signature": "pub fn preflight_storage_pin_request(data: &StoragePinRequestData) -> Result<(), SdkError>;",
              "docs": "Preflight a pin request without reading chain state.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "storage_market::preflight_storage_receipt",
              "kind": "function_item",
              "signature": "pub fn preflight_storage_receipt(receipt: &StoragePinReceipt) -> Result<(), SdkError>;",
              "docs": "Preflight a provider receipt without reading chain state.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "storage_market::TransactionBuilder::storage_provider_register",
              "kind": "function_item",
              "signature": "pub fn storage_provider_register(\n        self,\n        provider_did: &str,\n        capacity_gib: u64,\n        regions: Vec<String>,\n        price_per_gib_epoch: u64,\n        retrieval_price_per_gib: u64,\n        replication_guarantee: u16,\n        stake: u64,\n        provider_pubkey: Vec<u8>,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `StorageProviderRegister`.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 115
            },
            {
              "name": "storage_market::TransactionBuilder::storage_provider_update",
              "kind": "function_item",
              "signature": "pub fn storage_provider_update(\n        self,\n        provider_did: &str,\n        capacity_gib: Option<u64>,\n        regions: Option<Vec<String>>,\n        price_per_gib_epoch: Option<u64>,\n        retrieval_price_per_gib: Option<u64>,\n        replication_guarantee: Option<u16>,\n        provider_pubkey: Option<Vec<u8>>,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `StorageProviderUpdate`.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 144
            },
            {
              "name": "storage_market::TransactionBuilder::storage_provider_exit",
              "kind": "function_item",
              "signature": "pub fn storage_provider_exit(self, provider_did: &str, client_nonce: &str) -> Transaction;",
              "docs": "Build `StorageProviderExit`.",
              "attributes": "",
              "line": 170
            },
            {
              "name": "storage_market::TransactionBuilder::storage_pin_request",
              "kind": "function_item",
              "signature": "pub fn storage_pin_request(\n        self,\n        owner_did: &str,\n        artifact: ArtifactCommitment,\n        duration_epochs: u64,\n        replication_factor: u16,\n        max_price_per_gib_epoch: u64,\n        escrowed_amount: u64,\n        expires_at_height: Option<u64>,\n        client_nonce: &str,\n    ) -> Result<Transaction, SdkError>;",
              "docs": "Build `StoragePinRequest`.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 181
            },
            {
              "name": "storage_market::TransactionBuilder::storage_pin_accept",
              "kind": "function_item",
              "signature": "pub fn storage_pin_accept(\n        self,\n        request_id: &str,\n        provider_did: &str,\n        accepted_price_per_gib_epoch: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `StoragePinAccept`.",
              "attributes": "",
              "line": 207
            },
            {
              "name": "storage_market::TransactionBuilder::storage_receipt_settle",
              "kind": "function_item",
              "signature": "pub fn storage_receipt_settle(\n        self,\n        receipt: StoragePinReceipt,\n    ) -> Result<Transaction, SdkError>;",
              "docs": "Build `StorageReceiptSettle`.",
              "attributes": "",
              "line": 223
            },
            {
              "name": "storage_market::TransactionBuilder::storage_challenge",
              "kind": "function_item",
              "signature": "pub fn storage_challenge(\n        self,\n        contract_id: &str,\n        challenger_did: &str,\n        sample_indices: Vec<u64>,\n        response_window_blocks: u64,\n        client_nonce: &str,\n    ) -> Transaction;",
              "docs": "Build `StorageChallenge`.",
              "attributes": "",
              "line": 234
            },
            {
              "name": "storage_market::TransactionBuilder::storage_challenge_resolve",
              "kind": "function_item",
              "signature": "pub fn storage_challenge_resolve(\n        self,\n        challenge_id: &str,\n        proof: StorageChallengeProof,\n    ) -> Transaction;",
              "docs": "Build `StorageChallengeResolve`.",
              "attributes": "",
              "line": 252
            }
          ],
          "parseErrors": false
        },
        {
          "module": "evidence",
          "source": "sigil/node/sigil-sdk/src/evidence.rs",
          "sha256": "883a73943ae57bfa7f79d201349498b104f8c971e070540c8d1a6f1ac63eee47",
          "attributes": "#[cfg(feature = \"evidence\")]",
          "items": [
            {
              "name": "evidence::EvidenceError",
              "kind": "enum_item",
              "signature": "pub enum EvidenceError {\n    /// The digest or payload failed validation before submission.\n    #[error(\"invalid anchor payload: {0}\")]\n    InvalidPayload(String),\n    /// Network transport failure (connect, read, HTTP status).\n    #[error(\"transport error: {0}\")]\n    Transport(String),\n    /// The node returned a JSON-RPC error.\n    #[error(\"rpc error {code}: {message}\")]\n    Rpc {\n        /// JSON-RPC error code.\n        code: i64,\n        /// Server-provided message.\n        message: String,\n    },\n    /// The node returned a structurally unexpected response.\n    #[error(\"malformed response: {0}\")]\n    MalformedResponse(String),\n    /// The transaction was included but execution failed.\n    #[error(\"anchor transaction failed on-chain: {0}\")]\n    ExecutionFailed(String),\n    /// Inclusion was not observed within the confirmation budget.\n    #[error(\"confirmation timed out after {0:?}\")]\n    ConfirmTimeout(Duration),\n    /// No anchor exists for the queried digest.\n    #[error(\"no evidence anchor found for digest {0}\")]\n    NotFound(String),\n}",
              "docs": "Fail-closed errors for the evidence anchoring client.",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, thiserror::Error)]",
              "line": 39
            },
            {
              "name": "evidence::AnchorParams",
              "kind": "struct_item",
              "signature": "pub struct AnchorParams {\n/// Lowercase hex BLAKE3 digest (64 chars) of the artifact.\n\npub digest: String,\n/// Classification label, e.g. `\"one.harness-archive.v1\"`.\n\npub label: String,\n/// Optional content-addressed URI for retrieval.\n\npub uri: Option<String>,\n/// Small JSON metadata object.\n\npub metadata: serde_json::Value,\n/// Client nonce for deterministic anchor IDs / duplicate rejection.\n\npub client_nonce: String\n}",
              "docs": "Parameters for anchoring a digest on-chain.",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 86
            },
            {
              "name": "evidence::AnchorParams::from_digest_bytes",
              "kind": "function_item",
              "signature": "pub fn from_digest_bytes(\n        digest: [u8; 32],\n        label: impl Into<String>,\n        client_nonce: impl Into<String>,\n    ) -> Self;",
              "docs": "Create params for a raw 32-byte BLAKE3 digest.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 101
            },
            {
              "name": "evidence::AnchorParams::with_uri",
              "kind": "function_item",
              "signature": "pub fn with_uri(mut self, uri: impl Into<String>) -> Self;",
              "docs": "Attach a content URI.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 116
            },
            {
              "name": "evidence::AnchorParams::with_metadata",
              "kind": "function_item",
              "signature": "pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self;",
              "docs": "Attach metadata.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 122
            },
            {
              "name": "evidence::AnchorParams::anchor_id",
              "kind": "function_item",
              "signature": "pub fn anchor_id(&self, chain_id: &str, anchor_did: &str) -> Result<String, EvidenceError>;",
              "docs": "The deterministic anchor ID for (chain, sender, digest, nonce).",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 128
            },
            {
              "name": "evidence::anchor_digest_tx",
              "kind": "function_item",
              "signature": "pub fn anchor_digest_tx(\n    builder: TransactionBuilder,\n    params: &AnchorParams,\n) -> Result<Transaction, EvidenceError>;",
              "docs": "Build an unsigned `EvidenceAnchor` transaction from validated params.\n\n# Errors\n\nReturns [`EvidenceError::InvalidPayload`] if the digest is not 64\nlowercase hex chars, the label/nonce bounds are exceeded, or the metadata\nexceeds the on-chain size cap.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 151
            },
            {
              "name": "evidence::digest_artifact",
              "kind": "function_item",
              "signature": "pub fn digest_artifact(bytes: &[u8]) -> String;",
              "docs": "Compute the BLAKE3 digest of artifact bytes in the canonical lowercase\nhex form expected by [`AnchorParams`].",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 163
            },
            {
              "name": "evidence::AnchorSubmission",
              "kind": "struct_item",
              "signature": "pub struct AnchorSubmission {\n/// Hash of the submitted anchor transaction.\n\npub tx_hash: String,\n/// Deterministic anchor ID the record will have once included.\n\npub anchor_id: String\n}",
              "docs": "Outcome of a successful anchor submission (pre-inclusion).",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 169
            },
            {
              "name": "evidence::AnchorProof",
              "kind": "struct_item",
              "signature": "pub struct AnchorProof {\n/// Deterministic anchor ID (`evidence:anchor:<hex>`).\n\npub anchor_id: String,\n/// Anchored digest (lowercase hex BLAKE3).\n\npub digest: String,\n/// Classification label.\n\npub label: String,\n/// DID that anchored the digest.\n\npub anchor_did: String,\n/// Hash of the anchor transaction.\n\npub tx_hash: String,\n/// Block height at which the anchor executed.\n\npub block_height: u64\n}",
              "docs": "A confirmed on-chain anchor \u2014 the verification artifact returned by\n`confirm_inclusion` / `verify_anchor`.",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 179
            },
            {
              "name": "evidence::ConfirmPolicy",
              "kind": "struct_item",
              "signature": "pub struct ConfirmPolicy {\n/// Interval between `sigil_getTransaction` polls.\n\npub poll_interval: Duration,\n/// Maximum total wait before [`EvidenceError::ConfirmTimeout`].\n\npub timeout: Duration\n}",
              "docs": "Polling policy for inclusion confirmation.",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 209
            },
            {
              "name": "evidence::EvidenceTransport",
              "kind": "trait_item",
              "signature": "pub trait EvidenceTransport: Send + Sync {\n    /// Issue a JSON-RPC 2.0 call and return the `result` field.\n    async fn rpc_call(\n        &self,\n        method: &str,\n        params: serde_json::Value,\n    ) -> Result<Option<serde_json::Value>, EvidenceError>;\n}",
              "docs": "JSON-RPC transport used by [`EvidenceAnchorClient`].\n\nImplementations must apply their own per-request timeout. Return\n`Ok(None)` for a JSON-RPC `null` result.",
              "attributes": "#[cfg(feature = \"evidence\")]\n#[async_trait]",
              "line": 230
            },
            {
              "name": "evidence::EvidenceAnchorClient",
              "kind": "struct_item",
              "signature": "pub struct EvidenceAnchorClient<T: EvidenceTransport> {\n\n}",
              "docs": "Thin async client for the evidence anchoring path.\n\nGeneric over [`EvidenceTransport`] so tests can substitute a mock node;\nthe reqwest-backed transport lives in `evidence_http` behind the\n`evidence-http` feature.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 244
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::new",
              "kind": "function_item",
              "signature": "pub fn new(transport: T, chain_id: impl Into<String>, sender_did: impl Into<String>) -> Self;",
              "docs": "Create a client for a chain and anchorer identity.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 252
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::chain_id",
              "kind": "function_item",
              "signature": "pub fn chain_id(&self) -> &str;",
              "docs": "The chain this client anchors to.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 261
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::sender_did",
              "kind": "function_item",
              "signature": "pub fn sender_did(&self) -> &str;",
              "docs": "The DID this client anchors as.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 266
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::submit_anchor",
              "kind": "function_item",
              "signature": "pub async fn submit_anchor(\n        &self,\n        signed: &SignedTransaction,\n        params: &AnchorParams,\n    ) -> Result<AnchorSubmission, EvidenceError>;",
              "docs": "Submit a signed anchor transaction built with [`anchor_digest_tx`].\n\nReturns the transaction hash and deterministic anchor ID. Inclusion\nis not guaranteed yet \u2014 call [`Self::confirm_inclusion`].",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 274
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::confirm_inclusion",
              "kind": "function_item",
              "signature": "pub async fn confirm_inclusion(\n        &self,\n        submission: &AnchorSubmission,\n        policy: ConfirmPolicy,\n    ) -> Result<AnchorProof, EvidenceError>;",
              "docs": "Confirm that a submitted anchor transaction is included and executed\nsuccessfully. Polls `sigil_getTransaction` until the transaction\nappears or the confirmation budget elapses.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 296
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::verify_anchor",
              "kind": "function_item",
              "signature": "pub async fn verify_anchor(&self, digest: &str) -> Result<Vec<AnchorProof>, EvidenceError>;",
              "docs": "Verify anchors for a digest by reading the on-chain evidence index\n(`sigil_listEvidenceAnchorsByDigest`). Returns every anchor record\nfor the digest, oldest semantics preserved by anchor ID ordering.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 331
            },
            {
              "name": "evidence::EvidenceAnchorClient<T>::get_anchor",
              "kind": "function_item",
              "signature": "pub async fn get_anchor(&self, anchor_id: &str) -> Result<Option<AnchorProof>, EvidenceError>;",
              "docs": "Fetch a single anchor by its deterministic anchor ID.",
              "attributes": "#[cfg(feature = \"evidence\")]",
              "line": 349
            }
          ],
          "parseErrors": false
        },
        {
          "module": "evidence_http",
          "source": "sigil/node/sigil-sdk/src/evidence_http.rs",
          "sha256": "935e807b07e664c7fa02ade5faba8f1f0a3d67043845ef64d40ce5a0490e95be",
          "attributes": "#[cfg(feature = \"evidence-http\")]",
          "items": [
            {
              "name": "evidence_http::HttpEvidenceTransportConfig",
              "kind": "struct_item",
              "signature": "pub struct HttpEvidenceTransportConfig {\n/// JSON-RPC endpoint (e.g. `\"http://localhost:12618\"`).\n\npub rpc_url: String,\n/// Per-request timeout.\n\npub timeout: Duration,\n/// Optional bearer token for authenticated endpoints.\n\npub auth_token: Option<String>\n}",
              "docs": "Configuration for the HTTP evidence transport.",
              "attributes": "#[cfg(feature = \"evidence-http\")]\n#[derive(Debug, Clone)]",
              "line": 21
            },
            {
              "name": "evidence_http::HttpEvidenceTransportConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(rpc_url: impl Into<String>) -> Self;",
              "docs": "Build a config targeting a JSON-RPC URL with the default timeout and\nno auth token.",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 33
            },
            {
              "name": "evidence_http::HttpEvidenceTransportConfig::with_timeout",
              "kind": "function_item",
              "signature": "pub fn with_timeout(mut self, timeout: Duration) -> Self;",
              "docs": "Override the per-request timeout.",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 43
            },
            {
              "name": "evidence_http::HttpEvidenceTransportConfig::with_auth_token",
              "kind": "function_item",
              "signature": "pub fn with_auth_token(mut self, token: impl Into<String>) -> Self;",
              "docs": "Set a bearer token for authenticated endpoints.",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 49
            },
            {
              "name": "evidence_http::HttpEvidenceTransport",
              "kind": "struct_item",
              "signature": "pub struct HttpEvidenceTransport {\n\n}",
              "docs": "Reqwest-backed [`EvidenceTransport`].",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 64
            },
            {
              "name": "evidence_http::HttpEvidenceTransport::new",
              "kind": "function_item",
              "signature": "pub fn new(config: HttpEvidenceTransportConfig) -> Result<Self, EvidenceError>;",
              "docs": "Construct a new transport. Returns an error if the HTTP client cannot\nbe initialized (e.g. TLS configuration failure).",
              "attributes": "#[cfg(feature = \"evidence-http\")]",
              "line": 73
            }
          ],
          "parseErrors": false
        },
        {
          "module": "gal_adapter",
          "source": "sigil/node/sigil-sdk/src/gal_adapter.rs",
          "sha256": "112592422588ed8ce1147b668a9d5d3dc34b8a217c66db583c02b3227ab3a4b4",
          "attributes": "#[cfg(feature = \"gal\")]",
          "items": [
            {
              "name": "gal_adapter::FinalizedBlockFuture",
              "kind": "type_item",
              "signature": "pub type FinalizedBlockFuture<'a> =\n    Pin<Box<dyn Future<Output = Result<u64, AnchorError>> + Send + 'a>>;",
              "docs": "Future returned by [`FinalizedBlockSource::Dynamic`] closures.",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 24
            },
            {
              "name": "gal_adapter::MarsToOasGalSource",
              "kind": "struct_item",
              "signature": "pub struct MarsToOasGalSource {\n\n}",
              "docs": "Wraps any `mars_protocol::SigilAnchorClient` and exposes it as an\n`oas_resolve::LineageAnchor`. Resolvers built on top of this adapter\ntransparently pick up production Sigil RPC, the in-memory mock, or any\nother `SigilAnchorClient` implementation.",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 31
            },
            {
              "name": "gal_adapter::FinalizedBlockSource",
              "kind": "enum_item",
              "signature": "pub enum FinalizedBlockSource {\n    /// Use a fixed value. Useful for tests and for staging environments\n    /// that already pin a head.\n    Fixed(u64),\n    /// Resolve the value lazily on every call. The closure is async to\n    /// allow it to perform a Sigil RPC `sigil_getLatestBlock` call.\n    Dynamic(Arc<dyn Fn() -> FinalizedBlockFuture<'static> + Send + Sync>),\n}",
              "docs": "How the adapter discovers the current finalized block. This avoids a\nhard dependency on a specific RPC method name; callers either supply a\nlive closure (production: query `sigil_getLatestBlock` and return its\nheight) or pin a fixed value (tests).",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 40
            },
            {
              "name": "gal_adapter::MarsToOasGalSource::with_fixed_block",
              "kind": "function_item",
              "signature": "pub fn with_fixed_block(client: Arc<dyn SigilAnchorClient>, block: u64) -> Self;",
              "docs": "Build an adapter with a static finalized-block height. Useful for\ntests and for environments where the head height is supplied\nout-of-band.",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 53
            },
            {
              "name": "gal_adapter::MarsToOasGalSource::with_dynamic_block",
              "kind": "function_item",
              "signature": "pub fn with_dynamic_block(\n        client: Arc<dyn SigilAnchorClient>,\n        source: FinalizedBlockSource,\n    ) -> Self;",
              "docs": "Build an adapter with a dynamic finalized-block source.",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 61
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sign_in",
          "source": "sigil/node/sigil-sdk/src/sign_in.rs",
          "sha256": "d8fdb78f0b0ae7ab23d8998b49e4c5852eabe56f5a3c44f0e4578f3b9f2414bc",
          "attributes": "#[cfg(feature = \"gal\")]",
          "items": [
            {
              "name": "sign_in::SIGN_IN_KIND",
              "kind": "const_item",
              "signature": "pub const SIGN_IN_KIND: &str;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 18
            },
            {
              "name": "sign_in::SIGN_MESSAGE_METHOD",
              "kind": "const_item",
              "signature": "pub const SIGN_MESSAGE_METHOD: &str;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 19
            },
            {
              "name": "sign_in::SIGN_MESSAGE_TRANSCRIPT_VERSION",
              "kind": "const_item",
              "signature": "pub const SIGN_MESSAGE_TRANSCRIPT_VERSION: u8;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 20
            },
            {
              "name": "sign_in::DEFAULT_MAX_SIGN_IN_CHALLENGE_TTL_MS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_SIGN_IN_CHALLENGE_TTL_MS: i64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 21
            },
            {
              "name": "sign_in::MAX_SIGN_IN_MESSAGE_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_SIGN_IN_MESSAGE_BYTES: usize;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 22
            },
            {
              "name": "sign_in::MAX_SIGN_IN_TRANSCRIPT_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_SIGN_IN_TRANSCRIPT_BYTES: usize;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 23
            },
            {
              "name": "sign_in::MAX_SIGN_IN_URL_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_SIGN_IN_URL_BYTES: usize;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 24
            },
            {
              "name": "sign_in::MAX_SIGN_IN_FIELD_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_SIGN_IN_FIELD_BYTES: usize;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 25
            },
            {
              "name": "sign_in::MAX_SIGN_IN_DID_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_SIGN_IN_DID_BYTES: usize;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 26
            },
            {
              "name": "sign_in::SignInChallenge",
              "kind": "struct_item",
              "signature": "pub struct SignInChallenge {\npub kind: String,\npub version: u8,\npub origin: String,\npub audience: String,\npub chain_id: String,\npub nonce: String,\npub request_id: String,\npub hmr_did: String,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub root_did: Option<String>,\npub issued_at_ms: i64,\npub expires_at_ms: i64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 30
            },
            {
              "name": "sign_in::SignInChallengeInput",
              "kind": "struct_item",
              "signature": "pub struct SignInChallengeInput {\npub origin: String,\npub audience: String,\npub chain_id: String,\npub nonce: String,\npub request_id: String,\npub hmr_did: String,\npub root_did: Option<String>,\npub issued_at_ms: i64,\npub expires_at_ms: i64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 46
            },
            {
              "name": "sign_in::SignInChallenge::new",
              "kind": "function_item",
              "signature": "pub fn new(input: SignInChallengeInput) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 59
            },
            {
              "name": "sign_in::SignInChallenge::canonical_message",
              "kind": "function_item",
              "signature": "pub fn canonical_message(&self) -> Result<String, SignInVerifyError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 75
            },
            {
              "name": "sign_in::SignedSignInResponse",
              "kind": "struct_item",
              "signature": "pub struct SignedSignInResponse {\npub kind: String,\npub origin: String,\npub chain_id: String,\npub signer_did: String,\npub message: String,\npub signature: String,\npub signer_public_key: String,\npub digest: String,\npub transcript: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 82
            },
            {
              "name": "sign_in::SignInVerifyOptions",
              "kind": "struct_item",
              "signature": "pub struct SignInVerifyOptions {\npub expected_origin: String,\npub expected_chain_id: String,\npub expected_nonce: String,\npub expected_request_id: Option<String>,\npub expected_audience: String,\npub now_ms: i64,\npub max_clock_skew_ms: i64,\npub max_challenge_ttl_ms: i64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 95
            },
            {
              "name": "sign_in::SignInVerifyOptions::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        expected_origin: impl Into<String>,\n        expected_chain_id: impl Into<String>,\n        expected_nonce: impl Into<String>,\n        expected_audience: impl Into<String>,\n        now_ms: i64,\n    ) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 107
            },
            {
              "name": "sign_in::SignInVerifyOptions::with_expected_request_id",
              "kind": "function_item",
              "signature": "pub fn with_expected_request_id(mut self, expected_request_id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 126
            },
            {
              "name": "sign_in::SignInVerifyOptions::with_max_challenge_ttl_ms",
              "kind": "function_item",
              "signature": "pub fn with_max_challenge_ttl_ms(mut self, max_challenge_ttl_ms: i64) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 131
            },
            {
              "name": "sign_in::SignInRootKind",
              "kind": "enum_item",
              "signature": "pub enum SignInRootKind {\n    Hmr,\n    Mhr,\n    Enr,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 138
            },
            {
              "name": "sign_in::VerifiedSignIn",
              "kind": "struct_item",
              "signature": "pub struct VerifiedSignIn {\npub hmr_did: String,\npub root_did: String,\npub root_kind: SignInRootKind,\npub signer_public_key: String,\npub chain_id: String,\npub origin: String,\npub audience: String,\npub nonce: String,\npub request_id: String,\npub expires_at_ms: i64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 145
            },
            {
              "name": "sign_in::SignInVerifyError",
              "kind": "enum_item",
              "signature": "pub enum SignInVerifyError {\n    #[error(\"malformed sign-in payload: {0}\")]\n    Malformed(String),\n    #[error(\"transcript mismatch\")]\n    TranscriptMismatch,\n    #[error(\"digest mismatch\")]\n    DigestMismatch,\n    #[error(\"invalid signature\")]\n    InvalidSignature,\n    #[error(\"challenge mismatch: {0}\")]\n    ChallengeMismatch(String),\n    #[error(\"challenge already consumed or missing: {0}\")]\n    ChallengeConsumedOrMissing(String),\n    #[error(\"challenge store error: {0}\")]\n    ChallengeStore(String),\n    #[error(\"challenge expired\")]\n    Expired,\n    #[error(\"challenge issued too far in the future\")]\n    IssuedInFuture,\n    #[error(\"GAL lookup failed: {0}\")]\n    GalLookup(String),\n    #[error(\"GAL root missing: {0}\")]\n    GalRootMissing(String),\n    #[error(\"GAL root inactive: {0}\")]\n    GalRootInactive(String),\n    #[error(\"GAL root revoked: {0}\")]\n    GalRootRevoked(String),\n    #[error(\"HMR controller public key does not match signer\")]\n    HmrControllerMismatch,\n    #[error(\"root policy does not authorize signer HMR\")]\n    RootPolicyMismatch,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Error)]",
              "line": 159
            },
            {
              "name": "sign_in::SignInChallengeStore",
              "kind": "trait_item",
              "signature": "pub trait SignInChallengeStore {\n    fn insert_challenge(&self, challenge: SignInChallenge) -> Result<(), SignInVerifyError>;\n    fn take_challenge(\n        &self,\n        request_id: &str,\n    ) -> Result<Option<SignInChallenge>, SignInVerifyError>;\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 192
            },
            {
              "name": "sign_in::InMemorySignInChallengeStore",
              "kind": "struct_item",
              "signature": "pub struct InMemorySignInChallengeStore {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]\n#[derive(Debug, Clone, Default)]",
              "line": 201
            },
            {
              "name": "sign_in::InMemorySignInChallengeStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 206
            },
            {
              "name": "sign_in::canonical_sign_in_message",
              "kind": "function_item",
              "signature": "pub fn canonical_sign_in_message(challenge: &SignInChallenge) -> Result<String, SignInVerifyError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 237
            },
            {
              "name": "sign_in::build_sign_in_transcript",
              "kind": "function_item",
              "signature": "pub fn build_sign_in_transcript(\n    origin: &str,\n    chain_id: &str,\n    signer_did: &str,\n    message: &str,\n) -> Result<String, SignInVerifyError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 243
            },
            {
              "name": "sign_in::verify_sign_in_response_with_store",
              "kind": "function_item",
              "signature": "pub async fn verify_sign_in_response_with_store<C, S>(\n    client: &C,\n    response: &SignedSignInResponse,\n    store: &S,\n    now_ms: i64,\n) -> Result<VerifiedSignIn, SignInVerifyError>\nwhere\n    C: SigilAnchorClient + ?Sized,\n    S: SignInChallengeStore + ?Sized,;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 260
            },
            {
              "name": "sign_in::verify_sign_in_response",
              "kind": "function_item",
              "signature": "pub async fn verify_sign_in_response<C: SigilAnchorClient + ?Sized>(\n    client: &C,\n    response: &SignedSignInResponse,\n    options: &SignInVerifyOptions,\n) -> Result<VerifiedSignIn, SignInVerifyError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"gal\")]",
              "line": 304
            }
          ],
          "parseErrors": false
        },
        {
          "module": "gal_http",
          "source": "sigil/node/sigil-sdk/src/gal_http.rs",
          "sha256": "53980e7e43e59a9fb8df324a56cf4920e0a42aab587982249155e094c9463a25",
          "attributes": "#[cfg(feature = \"gal-http\")]",
          "items": [
            {
              "name": "gal_http::HttpSigilAnchorClientConfig",
              "kind": "struct_item",
              "signature": "pub struct HttpSigilAnchorClientConfig {\n/// JSON-RPC endpoint (e.g. `\"http://localhost:12618\"`).\n\npub rpc_url: String,\n/// Request timeout. Defaults to 10 seconds.\n\npub timeout: Duration,\n/// Optional bearer token for authenticated endpoints.\n\npub auth_token: Option<String>\n}",
              "docs": "Configuration for the HTTP anchor client.",
              "attributes": "#[cfg(feature = \"gal-http\")]\n#[derive(Debug, Clone)]",
              "line": 22
            },
            {
              "name": "gal_http::HttpSigilAnchorClientConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(rpc_url: impl Into<String>) -> Self;",
              "docs": "Build a config targeting a JSON-RPC URL with the default 10-second\ntimeout and no auth token.",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 34
            },
            {
              "name": "gal_http::HttpSigilAnchorClientConfig::with_timeout",
              "kind": "function_item",
              "signature": "pub fn with_timeout(mut self, timeout: Duration) -> Self;",
              "docs": "Override the request timeout.",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 44
            },
            {
              "name": "gal_http::HttpSigilAnchorClientConfig::with_auth_token",
              "kind": "function_item",
              "signature": "pub fn with_auth_token(mut self, token: impl Into<String>) -> Self;",
              "docs": "Set a bearer token for authenticated endpoints.",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 50
            },
            {
              "name": "gal_http::HttpSigilAnchorClient",
              "kind": "struct_item",
              "signature": "pub struct HttpSigilAnchorClient {\n\n}",
              "docs": "Reqwest-backed `SigilAnchorClient` impl.",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 65
            },
            {
              "name": "gal_http::HttpSigilAnchorClient::new",
              "kind": "function_item",
              "signature": "pub fn new(config: HttpSigilAnchorClientConfig) -> Result<Self, AnchorError>;",
              "docs": "Construct a new client. Returns an error if the underlying HTTP\nclient cannot be initialized (e.g., TLS configuration failure).",
              "attributes": "#[cfg(feature = \"gal-http\")]",
              "line": 74
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-cli",
      "version": "0.1.0",
      "source": "sigil/node/sigil-cli",
      "manifestSha256": "acbf6b03db88baa6114f396227ad22e34de781ce8f0c1b85d80a0ae1e974dbf5",
      "features": {
        "default": [],
        "compute": [
          "sigil-core/compute"
        ],
        "testnet": [
          "sigil-node",
          "sigil-network"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-cli",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-cli/src/lib.rs",
          "sha256": "b267ced85180531508b742b5ec44c19ce1f966cd75ec2d1f21279f95a1cabe47",
          "attributes": "",
          "items": [
            {
              "name": "genesis_ceremony",
              "kind": "module",
              "signature": "pub mod genesis_ceremony;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "::Cli",
              "kind": "struct_item",
              "signature": "pub struct Cli {\n/// The subcommand to execute.\n\n#[command(subcommand)]\npub command: Commands,\n/// RPC endpoint URL.\n\n#[arg(long, default_value = \"http://localhost:12618\", global = true)]\npub rpc_url: String,\n/// Chain ID.\n\n#[arg(long, default_value = \"sigil-mainnet-1\", global = true)]\npub chain_id: String,\n/// Sender DID for transaction-oriented subcommands.\n\n#[arg(long, global = true)]\npub tx_sender_did: Option<String>,\n/// Sender nonce for transaction-oriented subcommands.\n\n#[arg(long, global = true)]\npub tx_nonce: Option<u64>,\n/// 32-byte Ed25519 signing key as lowercase hex for transaction-oriented subcommands.\n\n#[arg(long, global = true, conflicts_with = \"tx_signing_key_file\")]\npub tx_signing_key_hex: Option<String>,\n/// File containing a 32-byte Ed25519 signing key as hex for transaction-oriented subcommands.\n\n#[arg(long, global = true, conflicts_with = \"tx_signing_key_hex\")]\npub tx_signing_key_file: Option<String>\n}",
              "docs": "Top-level Sigil CLI.",
              "attributes": "#[derive(Debug, Clone, Parser)]\n#[command(name = \"sigil\", version, about = \"Sigil blockchain CLI\")]",
              "line": 36
            },
            {
              "name": "::Commands",
              "kind": "enum_item",
              "signature": "pub enum Commands {\n    /// NFT collection and token management.\n    Nft {\n        #[command(subcommand)]\n        cmd: NftCommands,\n    },\n    /// DEX pool, swap, and liquidity operations.\n    Dex {\n        #[command(subcommand)]\n        cmd: DexCommands,\n    },\n    /// Custom token class, mint, burn, and transfer operations.\n    Token {\n        #[command(subcommand)]\n        cmd: TokenCommands,\n    },\n    /// Nova world, parcel, avatar, building, and auction operations.\n    Nova {\n        #[command(subcommand)]\n        cmd: NovaCommands,\n    },\n    /// Initialize a new Sigil node data directory.\n    Init {\n        /// Chain ID to initialize with (overrides the global --chain-id for init).\n        #[arg(long = \"init-chain-id\", default_value = \"sigil-testnet-1\")]\n        init_chain_id: String,\n        /// Path to the genesis file.\n        #[arg(long, default_value = \"genesis.json\")]\n        genesis: String,\n        /// Data directory to initialize.\n        #[arg(long, default_value = \"./data\")]\n        data_dir: String,\n        /// Validator DID (omit for non-validator nodes).\n        #[arg(long)]\n        validator_did: Option<String>,\n    },\n    /// Genesis management commands.\n    Genesis {\n        #[command(subcommand)]\n        cmd: GenesisCommands,\n    },\n    /// Node management commands.\n    Node {\n        #[command(subcommand)]\n        cmd: NodeCommands,\n    },\n    /// Staking operations.\n    Stake {\n        #[command(subcommand)]\n        cmd: StakeCommands,\n    },\n    /// Governance participation.\n    Gov {\n        #[command(subcommand)]\n        cmd: GovCommands,\n    },\n    /// On-chain identity document registration.\n    Identity {\n        #[command(subcommand)]\n        cmd: IdentityCommands,\n    },\n    /// Query blockchain state.\n    Query {\n        #[command(subcommand)]\n        cmd: QueryCommands,\n    },\n    /// Labor market job, bid, escrow, milestone, and dispute operations.\n    Labor {\n        #[command(subcommand)]\n        cmd: LaborCommands,\n    },\n    /// Username registration and reverse lookup operations.\n    Username {\n        #[command(subcommand)]\n        cmd: UsernameCommands,\n    },\n    /// Register and deploy WASM smart contracts.\n    Contract {\n        #[command(subcommand)]\n        cmd: ContractCommands,\n    },\n    /// Native Sigil Mail registry operations.\n    Mail {\n        #[command(subcommand)]\n        cmd: MailCommands,\n    },\n    /// Sigil Name System resolver operations.\n    Sns {\n        #[command(subcommand)]\n        cmd: SnsCommands,\n    },\n    /// Crucible distributed training coordination.\n    Crucible {\n        #[command(subcommand)]\n        cmd: CrucibleCommands,\n    },\n    /// Storage pinning marketplace provider and pin-contract operations.\n    Storage {\n        #[command(subcommand)]\n        cmd: StorageCommands,\n    },\n    /// Compute provider tools.\n    #[cfg(feature = \"compute\")]\n    Compute {\n        #[command(subcommand)]\n        cmd: ComputeCommands,\n    },\n    /// Validator registration and management.\n    Validator {\n        #[command(subcommand)]\n        cmd: ValidatorCommands,\n    },\n    /// Send a signed native token transfer.\n    Transfer {\n        /// Sender DID.\n        #[arg(long)]\n        sender_did: String,\n        /// Recipient DID.\n        #[arg(long)]\n        to: String,\n        /// Amount in the network's smallest native unit.\n        #[arg(long)]\n        amount: u64,\n        /// Sender nonce. Use `sigil query balance <did>` first.\n        #[arg(long)]\n        nonce: u64,\n        /// 32-byte Ed25519 signing key as lowercase hex.\n        #[arg(long, conflicts_with = \"signing_key_file\")]\n        signing_key_hex: Option<String>,\n        /// File containing a 32-byte Ed25519 signing key as hex.\n        #[arg(long, conflicts_with = \"signing_key_hex\")]\n        signing_key_file: Option<String>,\n    },\n    /// Show the status of the connected node.\n    Status,\n}",
              "docs": "Top-level subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 68
            },
            {
              "name": "::GenesisCommands",
              "kind": "enum_item",
              "signature": "pub enum GenesisCommands {\n    /// Generate a testnet genesis configuration.\n    Generate {\n        /// Number of validators to include.\n        #[arg(long, default_value_t = 4)]\n        validators: usize,\n        /// Genesis time as Unix timestamp (0 = use current time).\n        #[arg(long, default_value_t = 0)]\n        genesis_time: u64,\n        /// Output file path for the genesis JSON.\n        #[arg(long, default_value = \"genesis.json\")]\n        output: String,\n    },\n    /// Validate an existing genesis file.\n    Validate {\n        /// Path to the genesis file.\n        #[arg(long, default_value = \"genesis.json\")]\n        genesis: String,\n    },\n    /// Display summary information about a genesis file.\n    Show {\n        /// Path to the genesis file.\n        #[arg(long, default_value = \"genesis.json\")]\n        genesis: String,\n    },\n}",
              "docs": "Genesis management subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 207
            },
            {
              "name": "::NodeCommands",
              "kind": "enum_item",
              "signature": "pub enum NodeCommands {\n    /// Start the node with the given configuration.\n    Start {\n        /// Path to the node config file (TOML).\n        #[arg(long, default_value = \"config.toml\")]\n        config: String,\n        /// Node operating mode.\n        #[arg(long, default_value = \"validator\")]\n        mode: String,\n        /// Data directory.\n        #[arg(long, default_value = \"./data\")]\n        data_dir: String,\n        /// P2P listen address.\n        #[arg(long, default_value = \"0.0.0.0:26656\")]\n        p2p_addr: String,\n        /// RPC listen address.\n        #[arg(long, default_value = \"0.0.0.0:12618\")]\n        rpc_addr: String,\n        /// Validator DID (required for validator/producer modes).\n        #[arg(long)]\n        validator_did: Option<String>,\n    },\n    /// Show the node's sync status.\n    Status,\n    /// Show node info (chain ID, version, mode).\n    Info,\n    /// List connected peers.\n    Peers,\n}",
              "docs": "Node management subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 236
            },
            {
              "name": "::ValidatorCommands",
              "kind": "enum_item",
              "signature": "pub enum ValidatorCommands {\n    /// Register as a validator.\n    Register {\n        /// Validator OAS DID.\n        #[arg(long)]\n        did: String,\n        /// Initial stake in micro-MINT.\n        #[arg(long)]\n        stake: u64,\n        /// Validator mode: \"producer\" or \"validator\".\n        #[arg(long, default_value = \"validator\")]\n        mode: String,\n        /// Human root DID for lineage verification.\n        #[arg(long)]\n        human_root: String,\n    },\n    /// Show this node's validator keys.\n    ShowKeys {\n        /// Data directory.\n        #[arg(long, default_value = \"./data\")]\n        data_dir: String,\n    },\n    /// Generate new testnet validator keys.\n    GenerateKeys {\n        /// Validator DID to generate keys for.\n        #[arg(long)]\n        did: String,\n        /// Data directory to write keys to.\n        #[arg(long, default_value = \"./data\")]\n        data_dir: String,\n    },\n}",
              "docs": "Validator management subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 268
            },
            {
              "name": "::StakeCommands",
              "kind": "enum_item",
              "signature": "pub enum StakeCommands {\n    /// Deposit stake to become a validator.\n    Deposit {\n        /// Amount in micro-MINT.\n        amount: u64,\n        /// Validator mode: \"producer\" or \"validator\".\n        #[arg(long)]\n        mode: String,\n    },\n    /// Withdraw stake (begins unbonding period).\n    Withdraw {\n        /// Amount in micro-MINT.\n        amount: u64,\n    },\n    /// Delegate stake to a validator.\n    Delegate {\n        /// Validator DID.\n        validator: String,\n        /// Amount in micro-MINT.\n        amount: u64,\n    },\n    /// Undelegate stake from a validator.\n    Undelegate {\n        /// Validator DID.\n        validator: String,\n        /// Amount in micro-MINT.\n        amount: u64,\n    },\n    /// Show accumulated rewards.\n    Rewards,\n}",
              "docs": "Staking subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 303
            },
            {
              "name": "::GovCommands",
              "kind": "enum_item",
              "signature": "pub enum GovCommands {\n    /// Submit a governance proposal.\n    Propose {\n        /// Proposal title.\n        title: String,\n        /// Proposal description.\n        #[arg(long)]\n        description: String,\n    },\n    /// Vote on a governance proposal.\n    Vote {\n        /// Proposal ID.\n        proposal_id: String,\n        /// Vote choice: yes, no, abstain, no_with_veto.\n        choice: String,\n    },\n    /// List all proposals.\n    ListProposals,\n    /// Show details of a specific proposal.\n    ShowProposal {\n        /// Proposal ID.\n        proposal_id: String,\n    },\n}",
              "docs": "Governance subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 337
            },
            {
              "name": "::QueryCommands",
              "kind": "enum_item",
              "signature": "pub enum QueryCommands {\n    /// Query balance and nonce by DID.\n    Balance {\n        /// Account DID.\n        did: String,\n    },\n    /// Query a block by height (defaults to latest).\n    Block {\n        /// Block height (omit for latest).\n        #[arg(long)]\n        height: Option<u64>,\n    },\n    /// Query a transaction by hash.\n    Tx {\n        /// Transaction hash (hex).\n        hash: String,\n    },\n    /// Query a state value by partition and key.\n    State {\n        /// State partition (e.g. \"identity\", \"stakes\").\n        partition: String,\n        /// State key.\n        key: String,\n    },\n    /// Query validator info by DID.\n    Validator {\n        /// Validator DID.\n        did: String,\n    },\n}",
              "docs": "Query subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 364
            },
            {
              "name": "::LaborCommands",
              "kind": "enum_item",
              "signature": "pub enum LaborCommands {\n    /// Post a labor job.\n    PostJob {\n        #[arg(long)]\n        job_id: String,\n        #[arg(long)]\n        poster_did: String,\n        #[arg(long)]\n        budget: u128,\n        /// Sender nonce. Required when submitting.\n        #[arg(long)]\n        nonce: Option<u64>,\n        /// 32-byte Ed25519 signing key as lowercase hex.\n        #[arg(long, conflicts_with = \"signing_key_file\")]\n        signing_key_hex: Option<String>,\n        /// File containing a 32-byte Ed25519 signing key as hex.\n        #[arg(long, conflicts_with = \"signing_key_hex\")]\n        signing_key_file: Option<String>,\n    },\n    /// Submit a bid for a job.\n    SubmitBid {\n        #[arg(long)]\n        bid_id: String,\n        #[arg(long)]\n        job_id: String,\n        #[arg(long)]\n        bidder_did: String,\n        #[arg(long)]\n        price: u128,\n    },\n    /// Accept a submitted bid.\n    AcceptBid {\n        #[arg(long)]\n        job_id: String,\n        #[arg(long)]\n        bid_id: String,\n    },\n    /// Fund contract escrow.\n    FundEscrow {\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        funder_did: String,\n        #[arg(long)]\n        amount: u128,\n    },\n    /// Open and fund a bounty-style Labor offer.\n    OpenOffer {\n        #[arg(long)]\n        offer_id: String,\n        #[arg(long)]\n        sponsor_did: String,\n        #[arg(long, default_value = \"SIGIL\")]\n        token_id: String,\n        #[arg(long)]\n        total_funding: u128,\n        #[arg(long)]\n        per_claim_payout_cap: u128,\n        #[arg(long)]\n        claim_bond: u128,\n        #[arg(long)]\n        spam_fee: u128,\n        #[arg(long)]\n        max_claims: u32,\n        #[arg(long)]\n        claim_window_start_block: u64,\n        #[arg(long)]\n        claim_window_end_block: u64,\n        #[arg(long)]\n        claim_timeout_blocks: u64,\n        #[arg(long)]\n        verification_mode: String,\n        #[arg(long = \"verifier-did\")]\n        verifier_dids: Vec<String>,\n        #[arg(long)]\n        threshold: u32,\n        #[arg(long)]\n        title_commitment: String,\n        #[arg(long)]\n        description_commitment: String,\n        #[arg(long)]\n        category: String,\n        #[arg(long)]\n        escrow_account_did: String,\n        #[arg(long = \"required-skill\")]\n        required_skills: Vec<String>,\n        #[arg(long = \"required-attestation\")]\n        required_attestations: Vec<String>,\n        #[arg(long)]\n        artifact_policy_commitment: Option<String>,\n    },\n    /// Submit a bonded claim against an open Labor offer.\n    SubmitClaim {\n        #[arg(long)]\n        claim_id: String,\n        #[arg(long)]\n        offer_id: String,\n        #[arg(long)]\n        claimant_did: String,\n        #[arg(long)]\n        deliverable_hash: String,\n        #[arg(long = \"evidence-hash\")]\n        evidence_hashes: Vec<String>,\n        #[arg(long)]\n        requested_payout: u128,\n    },\n    /// Attest a claim against an open Labor offer.\n    AttestClaim {\n        #[arg(long)]\n        attestation_id: String,\n        #[arg(long)]\n        claim_id: String,\n        #[arg(long)]\n        offer_id: String,\n        #[arg(long)]\n        attester_did: String,\n        #[arg(long)]\n        verdict: String,\n        #[arg(long)]\n        reason_commitment: Option<String>,\n    },\n    /// Cancel an open Labor offer after active claims settle or time out.\n    CancelOffer {\n        #[arg(long)]\n        offer_id: String,\n        #[arg(long)]\n        sponsor_did: String,\n        #[arg(long)]\n        reason: Option<String>,\n    },\n    /// Submit a milestone deliverable.\n    SubmitMilestone {\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        milestone_index: u32,\n        #[arg(long)]\n        deliverable_id: String,\n        #[arg(long)]\n        payload_hash: String,\n        #[arg(long)]\n        worker_did: String,\n    },\n    /// Attest/approve a submitted milestone.\n    ApproveMilestone {\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        milestone_index: u32,\n        #[arg(long)]\n        attestation_id: String,\n        #[arg(long)]\n        attester_did: String,\n    },\n    /// Release payment for an attested milestone.\n    ReleaseMilestone {\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        milestone_index: u32,\n    },\n    /// Open a labor dispute.\n    OpenDispute {\n        #[arg(long)]\n        dispute_id: String,\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        raiser_did: String,\n        #[arg(long)]\n        cause: String,\n    },\n    /// Resolve a labor dispute.\n    ResolveDispute {\n        #[arg(long)]\n        dispute_id: String,\n        #[arg(long)]\n        resolver_did: String,\n        #[arg(long)]\n        resolution: String,\n    },\n    /// Inspect live labor state through RPC.\n    Inspect {\n        #[arg(long)]\n        job_id: Option<String>,\n        #[arg(long)]\n        bid_id: Option<String>,\n        #[arg(long)]\n        contract_id: Option<String>,\n        #[arg(long)]\n        dispute_id: Option<String>,\n        #[arg(long)]\n        offer_id: Option<String>,\n        #[arg(long)]\n        claim_id: Option<String>,\n        #[arg(long)]\n        account_did: Option<String>,\n    },\n}",
              "docs": "Labor marketplace subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 397
            },
            {
              "name": "::UsernameCommands",
              "kind": "enum_item",
              "signature": "pub enum UsernameCommands {\n    /// Register an @username for a DID.\n    Register {\n        #[arg(long)]\n        name: String,\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long, default_value_t = 1)]\n        years: u32,\n        /// Optional 32-byte metadata CID/hash as hex.\n        #[arg(long)]\n        metadata_cid: Option<String>,\n    },\n    /// Resolve a username to its owner record.\n    Lookup {\n        #[arg(long)]\n        name: String,\n    },\n    /// Resolve a DID's primary username.\n    Reverse {\n        #[arg(long)]\n        did: String,\n    },\n}",
              "docs": "Username registration and lookup subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 599
            },
            {
              "name": "::IdentityCommands",
              "kind": "enum_item",
              "signature": "pub enum IdentityCommands {\n    /// Register a DID document for the signing key.\n    Register {\n        /// DID subject to register. Must match the transaction sender.\n        #[arg(long)]\n        did: String,\n        /// Optional canonical DID document JSON or path. Defaults to a minimal Ed25519 DID document.\n        #[arg(long)]\n        document_json: Option<String>,\n        /// Initial conformance level.\n        #[arg(long, default_value = \"L1\")]\n        conformance_level: String,\n    },\n}",
              "docs": "On-chain identity document subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 626
            },
            {
              "name": "::ContractCommands",
              "kind": "enum_item",
              "signature": "pub enum ContractCommands {\n    /// Register WASM bytecode by content hash before deployment.\n    RegisterCode {\n        /// Path to a WASM bytecode file.\n        #[arg(long)]\n        code: String,\n        /// SPDX license expression or governance-approved license label.\n        #[arg(long)]\n        license: String,\n        /// Optional source artifact URI.\n        #[arg(long)]\n        source_uri: Option<String>,\n        /// Optional BLAKE3/Sigil hash of the source artifact.\n        #[arg(long)]\n        source_hash: Option<String>,\n        /// Optional audit report URI.\n        #[arg(long)]\n        audit_uri: Option<String>,\n        /// Optional JSON object string for deterministic metadata.\n        #[arg(long)]\n        metadata_json: Option<String>,\n    },\n    /// Deploy a contract from previously registered bytecode.\n    Deploy {\n        /// Contract DID to create.\n        #[arg(long)]\n        contract_did: String,\n        /// Hex or `blake3:<hex>` code hash registered on-chain.\n        #[arg(long)]\n        code_hash: String,\n        /// Optional Organization Zone ID.\n        #[arg(long)]\n        zone_id: Option<String>,\n    },\n}",
              "docs": "Smart-contract deployment subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 643
            },
            {
              "name": "::MailCommands",
              "kind": "enum_item",
              "signature": "pub enum MailCommands {\n    /// Create a mailbox from canonical MailCreateMailboxData JSON.\n    CreateMailbox {\n        /// Inline JSON or a path to a JSON file.\n        #[arg(long)]\n        data_json: String,\n    },\n    /// Resolve a mailbox route, alias, DID, wallet, or .sigil name.\n    Resolve {\n        #[arg(long)]\n        route_or_name: String,\n    },\n    /// Fetch one mailbox capability record.\n    GetMailbox {\n        #[arg(long)]\n        mailbox_id: String,\n    },\n    /// List mailboxes owned by a subject DID.\n    ListByOwner {\n        #[arg(long)]\n        subject_did: String,\n    },\n    /// Fetch the current or a historical receive policy.\n    Policy {\n        #[arg(long)]\n        mailbox_id: String,\n        #[arg(long)]\n        version: Option<u64>,\n    },\n    /// List active mail public keys.\n    Keys {\n        #[arg(long)]\n        mailbox_id: String,\n        #[arg(long)]\n        purpose: Option<String>,\n    },\n    /// Fetch one delivery commitment.\n    Delivery {\n        #[arg(long)]\n        delivery_commitment_id: String,\n    },\n    /// Scan delivery commitments by recipient mailbox.\n    DeliveriesByRecipient {\n        #[arg(long)]\n        mailbox_id: String,\n        #[arg(long)]\n        cursor: Option<String>,\n        #[arg(long, default_value_t = 100)]\n        limit: u32,\n    },\n}",
              "docs": "Native Sigil Mail registry subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 681
            },
            {
              "name": "::SnsCommands",
              "kind": "enum_item",
              "signature": "pub enum SnsCommands {\n    /// Register a .sigil name through the reveal path.\n    RegisterName {\n        #[arg(long)]\n        name: String,\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long, default_value_t = 1)]\n        years: u8,\n        #[arg(long)]\n        salt: String,\n        #[arg(long)]\n        reveal_nonce: String,\n        #[arg(long)]\n        client_nonce: String,\n    },\n    /// Resolve a name and all public resolver records.\n    ResolveName {\n        #[arg(long)]\n        name: String,\n    },\n    /// Fetch resolver records for a name.\n    GetRecords {\n        #[arg(long)]\n        name: String,\n    },\n    /// Resolve a mail route through SNS.\n    ResolveMail {\n        #[arg(long)]\n        route_or_name: String,\n    },\n    /// Resolve public website records.\n    ResolveWebsite {\n        #[arg(long)]\n        name: String,\n    },\n}",
              "docs": "Sigil Name System subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 735
            },
            {
              "name": "::CrucibleCommands",
              "kind": "enum_item",
              "signature": "pub enum CrucibleCommands {\n    /// Open a training run and escrow its reward pool.\n    Open {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        coordinator_did: String,\n        #[arg(long)]\n        reward_pool: u64,\n        #[arg(long, default_value = \"MINT\")]\n        reward_token_id: String,\n        #[arg(long)]\n        model_family: String,\n        #[arg(long)]\n        objective_cid: String,\n        #[arg(long)]\n        objective_blake3: String,\n        #[arg(long, default_value_t = 1)]\n        policy_version: u32,\n        #[arg(long, default_value = \"coordinator_signed\")]\n        verifier_mode: String,\n        #[arg(long, default_value_t = 1)]\n        min_verifier_attestations: u32,\n        #[arg(long, default_value_t = 8)]\n        max_staleness_epochs: u64,\n        #[arg(long = \"verifier-did\")]\n        verifier_dids: Vec<String>,\n        #[arg(long = \"publisher-did\")]\n        publisher_dids: Vec<String>,\n        #[arg(long)]\n        deadline_epoch: Option<u64>,\n    },\n    /// Commit an off-chain rollout batch root and reward budget.\n    CommitRollout {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        batch_id: String,\n        #[arg(long)]\n        artifact_cid: String,\n        #[arg(long)]\n        artifact_blake3: String,\n        #[arg(long)]\n        environment_cid: String,\n        #[arg(long)]\n        environment_blake3: String,\n        #[arg(long)]\n        rollout_root: String,\n        #[arg(long)]\n        metrics_root: String,\n        #[arg(long)]\n        policy_digest: String,\n        #[arg(long)]\n        sample_count: u64,\n        #[arg(long)]\n        total_reward: u64,\n        #[arg(long)]\n        committed_by_did: String,\n        #[arg(long)]\n        committed_at_epoch: u64,\n        #[arg(long, default_value = \"coordinator_signed\")]\n        verifier_mode: String,\n        #[arg(long, default_value_t = 1)]\n        policy_version: u32,\n    },\n    /// Submit a signed reward attestation for a rollout batch.\n    AttestRewards {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        batch_id: String,\n        #[arg(long)]\n        attestation_id: String,\n        #[arg(long)]\n        verifier_did: String,\n        #[arg(long)]\n        rewards_json: String,\n        #[arg(long)]\n        artifact_cid: String,\n        #[arg(long)]\n        artifact_blake3: String,\n        #[arg(long, default_value_t = 1)]\n        policy_version: u32,\n        #[arg(long)]\n        attested_at_epoch: u64,\n    },\n    /// Publish a model weight root and artifact commitment.\n    PublishWeights {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        model_root: String,\n        #[arg(long)]\n        artifact_cid: String,\n        #[arg(long)]\n        artifact_blake3: String,\n        #[arg(long)]\n        publisher_did: String,\n        #[arg(long)]\n        previous_root: Option<String>,\n        #[arg(long)]\n        rollout_batch_id: Option<String>,\n        #[arg(long)]\n        published_at_epoch: u64,\n    },\n    /// Record slash evidence and apply a slash amount.\n    Slash {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        slash_id: String,\n        #[arg(long)]\n        offender_did: String,\n        #[arg(long)]\n        reporter_did: String,\n        #[arg(long)]\n        reason: String,\n        #[arg(long)]\n        evidence_cid: String,\n        #[arg(long)]\n        evidence_blake3: String,\n        #[arg(long)]\n        amount: u64,\n    },\n    /// Close or cancel a training run.\n    Close {\n        #[arg(long)]\n        run_id: String,\n        #[arg(long)]\n        reason: String,\n        #[arg(long)]\n        closed_at_epoch: Option<u64>,\n    },\n    /// Inspect live Crucible state through RPC.\n    Inspect {\n        #[arg(long)]\n        run_id: Option<String>,\n        #[arg(long)]\n        batch_id: Option<String>,\n        #[arg(long)]\n        model_root: Option<String>,\n        #[arg(long, default_value_t = false)]\n        rewards: bool,\n        #[arg(long, default_value_t = false)]\n        slashes: bool,\n        #[arg(long, default_value_t = false)]\n        events: bool,\n    },\n}",
              "docs": "Crucible training coordination subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 775
            },
            {
              "name": "::NftCommands",
              "kind": "enum_item",
              "signature": "pub enum NftCommands {\n    // -- Transaction commands --\n    /// Create a new NFT collection on-chain.\n    CreateCollection {\n        /// Unique collection identifier (e.g. \"my-badges\").\n        #[arg(long)]\n        id: String,\n        /// Human-readable collection name.\n        #[arg(long)]\n        name: String,\n        /// Short ticker symbol (e.g. \"BADGE\").\n        #[arg(long, default_value = \"NFT\")]\n        symbol: String,\n        /// Collection kind: \"standard\" or \"identity\".\n        #[arg(long, default_value = \"standard\")]\n        kind: String,\n        /// Issuer DID (must match the wallet's active DID).\n        #[arg(long)]\n        issuer_did: String,\n        /// Controller DID (may differ from issuer).\n        #[arg(long)]\n        controller_did: Option<String>,\n        /// Start tokens locked by default (soulbound).\n        #[arg(long, default_value_t = false)]\n        default_locked: bool,\n        /// Allow metadata updates after mint.\n        #[arg(long, default_value_t = false)]\n        allow_metadata_updates: bool,\n        /// Optional collection-level metadata URI.\n        #[arg(long)]\n        metadata_uri: Option<String>,\n    },\n\n    /// Mint a new NFT token into an existing collection.\n    Mint {\n        /// Collection ID to mint into.\n        #[arg(long)]\n        collection: String,\n        /// Token ID to assign (decimal u128).\n        #[arg(long)]\n        token_id: String,\n        /// Recipient DID (owner of the new token).\n        #[arg(long)]\n        owner: String,\n        /// Per-token metadata URI.\n        #[arg(long)]\n        metadata_uri: Option<String>,\n        /// BLAKE3 metadata hash (hex).\n        #[arg(long)]\n        metadata_hash: Option<String>,\n        /// Override collection default_locked for this token.\n        #[arg(long)]\n        locked: Option<bool>,\n        /// DID of the identity subject (identity collections only).\n        #[arg(long)]\n        identity_subject: Option<String>,\n        /// Identity kind: agent | human | mhr | enr | ao | app.\n        #[arg(long)]\n        identity_kind: Option<String>,\n        /// Root anchor DID (identity collections only).\n        #[arg(long)]\n        identity_root: Option<String>,\n        /// Root kind: hmr | mhr | enr.\n        #[arg(long)]\n        root_kind: Option<String>,\n    },\n\n    /// Transfer an NFT token to a new owner.\n    Transfer {\n        /// Collection ID containing the token.\n        #[arg(long)]\n        collection: String,\n        /// Token ID to transfer (decimal u128).\n        #[arg(long)]\n        token_id: String,\n        /// Recipient DID.\n        #[arg(long)]\n        to: String,\n    },\n\n    /// Burn (destroy) an NFT token.\n    Burn {\n        /// Collection ID containing the token.\n        #[arg(long)]\n        collection: String,\n        /// Token ID to burn (decimal u128).\n        #[arg(long)]\n        token_id: String,\n    },\n\n    /// Update the metadata URI and/or hash of an NFT (ERC-4906).\n    SetMetadata {\n        /// Collection ID containing the token.\n        #[arg(long)]\n        collection: String,\n        /// Token ID whose metadata to update (decimal u128).\n        #[arg(long)]\n        token_id: String,\n        /// New metadata URI.\n        #[arg(long)]\n        uri: Option<String>,\n        /// New metadata hash (BLAKE3 hex).\n        #[arg(long)]\n        hash: Option<String>,\n    },\n\n    /// Advance the verification level on an identity NFT.\n    VerifyIdentity {\n        /// Collection ID containing the identity token.\n        #[arg(long)]\n        collection: String,\n        /// Token ID (decimal u128).\n        #[arg(long)]\n        token_id: String,\n        /// New verification level (0-255; must be >= current).\n        #[arg(long)]\n        level: u8,\n        /// Optional human-readable verification note.\n        #[arg(long)]\n        note: Option<String>,\n    },\n\n    // -- Query commands --\n    /// Fetch an NFT collection record.\n    GetCollection {\n        /// Collection ID to look up.\n        collection_id: String,\n    },\n\n    /// Fetch a single NFT token.\n    GetToken {\n        /// Collection ID.\n        collection: String,\n        /// Token ID (decimal u128).\n        token_id: String,\n    },\n\n    /// List all NFTs owned by a DID.\n    Owner {\n        /// Owner DID.\n        did: String,\n        /// Maximum number of results (default: 50).\n        #[arg(long, default_value_t = 50)]\n        limit: usize,\n        /// Result offset for pagination (default: 0).\n        #[arg(long, default_value_t = 0)]\n        offset: usize,\n    },\n\n    /// Fetch the DID-identity index for a subject DID.\n    Did {\n        /// Subject DID.\n        subject_did: String,\n    },\n\n    /// List NFT lifecycle events.\n    Events {\n        /// Filter by collection ID.\n        #[arg(long)]\n        collection: Option<String>,\n        /// Filter by owner DID (matches from_did or to_did).\n        #[arg(long)]\n        owner: Option<String>,\n        /// Filter by event kind (mint | transfer | burn | metadata_update |\n        /// locked | unlocked | identity_verified).\n        #[arg(long)]\n        kind: Option<String>,\n        /// Maximum number of events to return (default: 50).\n        #[arg(long, default_value_t = 50)]\n        limit: usize,\n    },\n}",
              "docs": "NFT subcommands.\n\nTransaction commands (create-collection, mint, transfer, burn,\nset-metadata, verify-identity) build and submit signed transactions.\n\nQuery commands (get-collection, get-token, owner, did, events) call the\nJSON-RPC query methods and pretty-print the response.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 933
            },
            {
              "name": "::DexCommands",
              "kind": "enum_item",
              "signature": "pub enum DexCommands {\n    /// Create a constant-product pool with initial liquidity.\n    CreatePool {\n        #[arg(long)]\n        asset_a: String,\n        #[arg(long)]\n        asset_b: String,\n        #[arg(long)]\n        amount_a: u64,\n        #[arg(long)]\n        amount_b: u64,\n        #[arg(long, default_value_t = 30)]\n        fee_bps: u16,\n        #[arg(long, default_value_t = 1)]\n        min_lp_shares: u64,\n        #[arg(long)]\n        expiration_height: Option<u64>,\n    },\n    /// Quote a swap without submitting a transaction.\n    Quote {\n        #[arg(long)]\n        pool: String,\n        #[arg(long)]\n        asset_in: String,\n        #[arg(long)]\n        amount_in: u64,\n    },\n    /// Swap an exact input amount through a pool.\n    SwapExactIn {\n        #[arg(long)]\n        pool: String,\n        #[arg(long)]\n        asset_in: String,\n        #[arg(long)]\n        amount_in: u64,\n        #[arg(long)]\n        min_out: u64,\n        #[arg(long)]\n        recipient: String,\n        #[arg(long)]\n        expiration_height: Option<u64>,\n    },\n    /// Add proportional liquidity to an existing pool.\n    AddLiquidity {\n        #[arg(long)]\n        pool: String,\n        #[arg(long)]\n        amount_a: u64,\n        #[arg(long)]\n        amount_b: u64,\n        #[arg(long)]\n        min_a: u64,\n        #[arg(long)]\n        min_b: u64,\n        #[arg(long, default_value_t = 1)]\n        min_lp_shares: u64,\n        #[arg(long)]\n        expiration_height: Option<u64>,\n    },\n    /// Remove liquidity from a pool.\n    RemoveLiquidity {\n        #[arg(long)]\n        pool: String,\n        #[arg(long)]\n        lp_shares: u64,\n        #[arg(long)]\n        min_a: u64,\n        #[arg(long)]\n        min_b: u64,\n        #[arg(long)]\n        recipient: String,\n        #[arg(long)]\n        expiration_height: Option<u64>,\n    },\n    /// Inspect an LP position.\n    Position {\n        #[arg(long)]\n        owner: String,\n        #[arg(long)]\n        pool: Option<String>,\n    },\n}",
              "docs": "DEX subcommands for pool creation, quotes, swaps, liquidity, and positions.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 1108
            },
            {
              "name": "::TokenCommands",
              "kind": "enum_item",
              "signature": "pub enum TokenCommands {\n    /// Read a launch-live custom token class.\n    Class {\n        #[arg(long)]\n        token_id: String,\n    },\n    /// Read a launch-live custom token balance for one DID.\n    Balance {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        owner_did: String,\n    },\n    /// Create a launch-live custom token class.\n    CreateClass {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        ticker: String,\n        #[arg(long)]\n        decimals: u8,\n        #[arg(long)]\n        issuer_did: String,\n        #[arg(long)]\n        controller_did: Option<String>,\n        #[arg(long)]\n        max_supply: Option<u128>,\n        #[arg(long)]\n        metadata_uri: Option<String>,\n    },\n    /// Mint custom-token units to a DID.\n    Mint {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        recipient_did: String,\n        #[arg(long)]\n        amount: u128,\n    },\n    /// Transfer custom-token units.\n    Transfer {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        recipient_did: String,\n        #[arg(long)]\n        amount: u128,\n        #[arg(long)]\n        memo: Option<String>,\n    },\n    /// Burn custom-token units from an owner account.\n    Burn {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long)]\n        amount: u128,\n    },\n    /// Update the controlled supply policy for a custom token.\n    SetPolicy {\n        #[arg(long)]\n        token_id: String,\n        #[arg(long)]\n        max_supply: Option<u128>,\n    },\n}",
              "docs": "Custom token subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 1193
            },
            {
              "name": "::NovaCommands",
              "kind": "enum_item",
              "signature": "pub enum NovaCommands {\n    /// Create a new Nova world with a JSON config.\n    CreateWorld {\n        #[arg(long)]\n        name: String,\n        /// Inline JSON or a path to a JSON file.\n        #[arg(long)]\n        config_json: String,\n    },\n    /// Inspect a Nova world or list worlds when no world id is provided.\n    World {\n        #[arg(long)]\n        world_id: Option<String>,\n    },\n    /// Claim a parcel in a Nova world.\n    ClaimParcel {\n        #[arg(long)]\n        world_id: String,\n        #[arg(long, allow_hyphen_values = true)]\n        region_x: i32,\n        #[arg(long, allow_hyphen_values = true)]\n        region_z: i32,\n        #[arg(long)]\n        local_x: u16,\n        #[arg(long)]\n        local_z: u16,\n        #[arg(long, default_value = \"residential\")]\n        parcel_type: String,\n    },\n    /// Transfer a parcel to another DID.\n    TransferParcel {\n        #[arg(long)]\n        world_id: String,\n        #[arg(long, allow_hyphen_values = true)]\n        region_x: i32,\n        #[arg(long, allow_hyphen_values = true)]\n        region_z: i32,\n        #[arg(long)]\n        local_x: u16,\n        #[arg(long)]\n        local_z: u16,\n        #[arg(long)]\n        to_did: String,\n    },\n    /// Register a building placement on a Nova parcel.\n    RegisterBuilding {\n        #[arg(long)]\n        world_id: String,\n        #[arg(long, allow_hyphen_values = true)]\n        region_x: i32,\n        #[arg(long, allow_hyphen_values = true)]\n        region_z: i32,\n        #[arg(long)]\n        local_x: u16,\n        #[arg(long)]\n        local_z: u16,\n        #[arg(long)]\n        asset_did: String,\n        #[arg(long)]\n        polycount: u32,\n        #[arg(long)]\n        building_id: Option<String>,\n    },\n    /// Register an avatar profile in a Nova world.\n    RegisterAvatar {\n        #[arg(long)]\n        world_id: String,\n        #[arg(long)]\n        avatar_asset_did: Option<String>,\n    },\n    /// Open an auction for a seller-owned parcel.\n    AuctionCreate {\n        #[arg(long)]\n        world_id: String,\n        #[arg(long, allow_hyphen_values = true)]\n        region_x: i32,\n        #[arg(long, allow_hyphen_values = true)]\n        region_z: i32,\n        #[arg(long)]\n        local_x: u16,\n        #[arg(long)]\n        local_z: u16,\n        #[arg(long)]\n        reserve_amount: u64,\n        #[arg(long)]\n        closes_at_height: u64,\n    },\n    /// Inspect an auction record.\n    AuctionInspect {\n        #[arg(long)]\n        auction_id: String,\n    },\n    /// Bid on a Nova auction.\n    AuctionBid {\n        #[arg(long)]\n        auction_id: String,\n        #[arg(long)]\n        amount: u64,\n    },\n    /// Settle a closed Nova auction.\n    AuctionSettle {\n        #[arg(long)]\n        auction_id: String,\n    },\n    /// Set zone permissions.\n    SetZonePermissions {\n        #[arg(long)]\n        zone_id: String,\n        #[arg(long, default_value = \"public\")]\n        enter: String,\n        #[arg(long, default_value = \"public\")]\n        interact: String,\n        #[arg(long, default_value = \"owner\")]\n        build: String,\n    },\n}",
              "docs": "Nova subcommands for world, parcel, avatar, building, and auction inspection/submission.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 1263
            },
            {
              "name": "::ComputeCommands",
              "kind": "enum_item",
              "signature": "pub enum ComputeCommands {\n    /// Register as a compute provider.\n    RegisterProvider {\n        /// Stake tier: \"consumer\", \"professional\", \"enterprise\", \"cluster\".\n        #[arg(long)]\n        tier: String,\n    },\n    /// List all registered compute providers.\n    ListProviders,\n    /// Select a provider for a model and verification tier.\n    SelectProvider {\n        #[arg(long)]\n        model_id: String,\n        #[arg(long)]\n        verification_tier: String,\n    },\n    /// Create a compute job through the canonical dispatch_compute flow.\n    CreateJob {\n        #[arg(long)]\n        contract_did: String,\n        #[arg(long)]\n        model_id: String,\n        #[arg(long)]\n        input_commitment: String,\n        #[arg(long)]\n        max_cost: u64,\n        #[arg(long)]\n        verification_tier: String,\n        #[arg(long)]\n        mandate_id: String,\n    },\n    /// Fund compute escrow.\n    FundEscrow {\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long)]\n        amount: u64,\n        #[arg(long)]\n        mandate_id: Option<String>,\n        #[arg(long)]\n        budget_limit: Option<u64>,\n    },\n    /// Withdraw available compute escrow.\n    WithdrawEscrow {\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long)]\n        amount: u64,\n    },\n    /// Inspect compute escrow.\n    Escrow {\n        #[arg(long)]\n        owner_did: String,\n    },\n    /// Inspect or submit compute receipts.\n    Receipt {\n        #[command(subcommand)]\n        cmd: ComputeReceiptCommands,\n    },\n    /// Inspect or resolve compute challenges.\n    Challenge {\n        #[command(subcommand)]\n        cmd: ComputeChallengeCommands,\n    },\n    /// Inspect MACA compute epochs and quorum proofs.\n    Maca {\n        #[command(subcommand)]\n        cmd: ComputeMacaCommands,\n    },\n    /// Show accumulated compute earnings.\n    Earnings,\n    /// Attest local hardware for compute marketplace.\n    AttestHardware,\n}",
              "docs": "Compute marketplace subcommands (feature-gated).",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Subcommand)]",
              "line": 1383
            },
            {
              "name": "::StorageCommands",
              "kind": "enum_item",
              "signature": "pub enum StorageCommands {\n    /// Register as a Weave/Weft storage provider.\n    RegisterProvider {\n        #[arg(long)]\n        provider_did: String,\n        #[arg(long)]\n        capacity_gib: u64,\n        #[arg(long, value_delimiter = ',')]\n        regions: Vec<String>,\n        #[arg(long)]\n        price_per_gib_epoch: u64,\n        #[arg(long, default_value_t = 0)]\n        retrieval_price_per_gib: u64,\n        #[arg(long)]\n        replication_guarantee: u16,\n        #[arg(long)]\n        stake: u64,\n        #[arg(long)]\n        provider_pubkey_hex: String,\n    },\n    /// Update provider capacity, pricing, regions, or signing key.\n    UpdateProvider {\n        #[arg(long)]\n        provider_did: String,\n        #[arg(long)]\n        capacity_gib: Option<u64>,\n        #[arg(long, value_delimiter = ',')]\n        regions: Option<Vec<String>>,\n        #[arg(long)]\n        price_per_gib_epoch: Option<u64>,\n        #[arg(long)]\n        retrieval_price_per_gib: Option<u64>,\n        #[arg(long)]\n        replication_guarantee: Option<u16>,\n        #[arg(long)]\n        provider_pubkey_hex: Option<String>,\n    },\n    /// Begin provider exit.\n    ExitProvider {\n        #[arg(long)]\n        provider_did: String,\n    },\n    /// Request replicated pinning for an artifact commitment.\n    RequestPin {\n        #[arg(long)]\n        owner_did: String,\n        #[arg(long)]\n        artifact_json: String,\n        #[arg(long)]\n        duration_epochs: u64,\n        #[arg(long)]\n        replication_factor: u16,\n        #[arg(long)]\n        max_price_per_gib_epoch: u64,\n        #[arg(long)]\n        escrowed_amount: u64,\n        #[arg(long)]\n        expires_at_height: Option<u64>,\n    },\n    /// Accept a pin request as a registered provider.\n    AcceptPin {\n        #[arg(long)]\n        request_id: String,\n        #[arg(long)]\n        provider_did: String,\n        #[arg(long)]\n        accepted_price_per_gib_epoch: u64,\n    },\n    /// Settle a provider's signed pin receipt.\n    SettleReceipt {\n        #[arg(long)]\n        receipt_json: String,\n    },\n    /// Open a proof-of-possession challenge.\n    Challenge {\n        #[arg(long)]\n        contract_id: String,\n        #[arg(long)]\n        challenger_did: String,\n        #[arg(long, value_delimiter = ',')]\n        sample_indices: Vec<u64>,\n        #[arg(long)]\n        response_window_blocks: u64,\n    },\n    /// Resolve a challenge with sampled Weft chunk proofs.\n    ResolveChallenge {\n        #[arg(long)]\n        challenge_id: String,\n        #[arg(long)]\n        proof_json: String,\n    },\n    /// List storage providers.\n    ListProviders,\n    /// Inspect a storage provider.\n    Provider {\n        #[arg(long)]\n        provider_did: String,\n    },\n    /// Inspect a storage pin request.\n    PinRequest {\n        #[arg(long)]\n        request_id: String,\n    },\n    /// Inspect a storage pin contract.\n    Contract {\n        #[arg(long)]\n        contract_id: String,\n    },\n    /// Inspect a storage pin receipt.\n    Receipt {\n        #[arg(long)]\n        receipt_id: String,\n    },\n    /// Inspect a storage challenge.\n    ChallengeStatus {\n        #[arg(long)]\n        challenge_id: String,\n    },\n}",
              "docs": "Storage Pinning Marketplace subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 1460
            },
            {
              "name": "::ComputeReceiptCommands",
              "kind": "enum_item",
              "signature": "pub enum ComputeReceiptCommands {\n    /// Submit a provider-signed receipt for deterministic settlement.\n    Settle {\n        #[arg(long)]\n        receipt_json: String,\n    },\n    /// Fetch a settled compute receipt.\n    Get {\n        #[arg(long)]\n        receipt_id: String,\n    },\n    /// Fetch compute proof metadata for a receipt.\n    Proof {\n        #[arg(long)]\n        receipt_id: String,\n    },\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Subcommand)]",
              "line": 1582
            },
            {
              "name": "::ComputeChallengeCommands",
              "kind": "enum_item",
              "signature": "pub enum ComputeChallengeCommands {\n    /// Open a challenge against a compute receipt.\n    Open {\n        #[arg(long)]\n        receipt_id: String,\n        #[arg(long)]\n        challenger_did: String,\n        #[arg(long)]\n        evidence_json: String,\n        #[arg(long)]\n        deposit: Option<u64>,\n    },\n    /// Resolve an open challenge.\n    Resolve {\n        #[arg(long)]\n        challenge_id: String,\n        #[arg(long)]\n        resolution_json: String,\n    },\n    /// Fetch one challenge.\n    Get {\n        #[arg(long)]\n        challenge_id: String,\n    },\n    /// List challenges for a receipt.\n    List {\n        #[arg(long)]\n        receipt_id: String,\n    },\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Subcommand)]",
              "line": 1602
            },
            {
              "name": "::ComputeMacaCommands",
              "kind": "enum_item",
              "signature": "pub enum ComputeMacaCommands {\n    /// Fetch a MACA epoch.\n    Epoch {\n        #[arg(long)]\n        epoch_id: u64,\n    },\n    /// List MACA epochs.\n    Epochs,\n    /// Fetch a MACA quorum proof.\n    QuorumProof {\n        #[arg(long)]\n        epoch_id: u64,\n        #[arg(long)]\n        work_id: String,\n    },\n    /// List MACA quorum proofs for an epoch.\n    QuorumProofs {\n        #[arg(long)]\n        epoch_id: u64,\n    },\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Subcommand)]",
              "line": 1635
            },
            {
              "name": "::CliError",
              "kind": "enum_item",
              "signature": "pub enum CliError {\n    #[error(\"rpc: {0}\")]\n    Rpc(String),\n    #[error(\"http: {0}\")]\n    Http(#[from] reqwest::Error),\n    #[error(\"json: {0}\")]\n    Json(#[from] serde_json::Error),\n    #[error(\"invalid signing key: {0}\")]\n    SigningKey(String),\n    #[error(\"unsupported command: {0}\")]\n    Unsupported(String),\n    #[error(\"transaction: {0}\")]\n    Transaction(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 1658
            },
            {
              "name": "::RpcTransport",
              "kind": "trait_item",
              "signature": "pub trait RpcTransport {\n    fn call(&self, method: &str, params: Value) -> Result<Value, CliError>;\n}",
              "docs": "",
              "attributes": "",
              "line": 1673
            },
            {
              "name": "::RpcClient",
              "kind": "struct_item",
              "signature": "pub struct RpcClient {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 1678
            },
            {
              "name": "::RpcClient::new",
              "kind": "function_item",
              "signature": "pub fn new(endpoint: impl Into<String>) -> Result<Self, CliError>;",
              "docs": "",
              "attributes": "",
              "line": 1684
            },
            {
              "name": "::normalize_rpc_url",
              "kind": "function_item",
              "signature": "pub fn normalize_rpc_url(mut endpoint: String) -> String;",
              "docs": "",
              "attributes": "",
              "line": 1715
            },
            {
              "name": "::run_cli",
              "kind": "function_item",
              "signature": "pub fn run_cli(cli: Cli) -> Result<Value, CliError>;",
              "docs": "",
              "attributes": "",
              "line": 1726
            },
            {
              "name": "::execute_cli",
              "kind": "function_item",
              "signature": "pub fn execute_cli(cli: Cli) -> Result<Value, CliError>;",
              "docs": "",
              "attributes": "",
              "line": 1731
            },
            {
              "name": "::dispatch_command",
              "kind": "function_item",
              "signature": "pub fn dispatch_command(cli: &Cli, rpc: &dyn RpcTransport) -> Result<Value, CliError>;",
              "docs": "",
              "attributes": "",
              "line": 1735
            },
            {
              "name": "::run_cli_with_rpc",
              "kind": "function_item",
              "signature": "pub fn run_cli_with_rpc(cli: &Cli, rpc: &dyn RpcTransport) -> Result<Value, CliError>;",
              "docs": "",
              "attributes": "",
              "line": 1739
            }
          ],
          "parseErrors": false
        },
        {
          "module": "genesis_ceremony",
          "source": "sigil/node/sigil-cli/src/genesis_ceremony.rs",
          "sha256": "7890ff2a602cad285c769a26003ac14eb339e7d853292d1591af56c5348ec72e",
          "attributes": "",
          "items": [
            {
              "name": "genesis_ceremony::GenesisCeremonyError",
              "kind": "enum_item",
              "signature": "pub enum GenesisCeremonyError {\n    #[error(\"missing CSV header\")]\n    MissingCsvHeader,\n    #[error(\"missing field {field} on CSV line {line}\")]\n    MissingField { line: usize, field: &'static str },\n    #[error(\"invalid generation on CSV line {line}: {value}\")]\n    InvalidGeneration { line: usize, value: String },\n    #[error(\"invalid stake on CSV line {line}: {value}\")]\n    InvalidStake { line: usize, value: String },\n    #[error(\"invalid validator mode on CSV line {line}: {value}\")]\n    InvalidMode { line: usize, value: String },\n    #[error(\"claim chain_id {actual} does not match expected {expected}\")]\n    ClaimChainIdMismatch { expected: String, actual: String },\n    #[error(\"duplicate validator DID in ceremony claims: {0}\")]\n    DuplicateValidatorDid(String),\n    #[error(\"invalid hex field {field}: {reason}\")]\n    InvalidHex { field: &'static str, reason: String },\n    #[error(\"invalid validator possession signature for {did}: {field}\")]\n    InvalidSignature { did: String, field: &'static str },\n    #[error(\"duplicate commit/reveal id: {0}\")]\n    DuplicateCommitmentId(String),\n    #[error(\"missing reveal for commitment id: {0}\")]\n    MissingReveal(String),\n    #[error(\"unexpected reveal without commitment id: {0}\")]\n    UnexpectedReveal(String),\n    #[error(\"commitment mismatch for id {id}: expected {expected}, got {actual}\")]\n    CommitmentMismatch {\n        id: String,\n        expected: String,\n        actual: String,\n    },\n    #[error(\"invalid signature threshold {threshold} for {signer_count} signer(s)\")]\n    InvalidThreshold {\n        threshold: usize,\n        signer_count: usize,\n    },\n    #[error(\"duplicate ceremony signer id: {0}\")]\n    DuplicateSignerId(String),\n    #[error(\"duplicate genesis signature from signer id: {0}\")]\n    DuplicateGenesisSignature(String),\n    #[error(\"genesis signature references unknown signer id: {0}\")]\n    UnknownGenesisSigner(String),\n    #[error(\n        \"genesis signature bundle hash {bundle_hash} does not match genesis hash {genesis_hash}\"\n    )]\n    GenesisSignatureHashMismatch {\n        bundle_hash: String,\n        genesis_hash: String,\n    },\n    #[error(\"genesis signature threshold not met: valid {valid}, required {threshold}\")]\n    GenesisSignatureThresholdNotMet { valid: usize, threshold: usize },\n    #[error(\"genesis validation failed: {0}\")]\n    GenesisValidation(#[from] GenesisValidationError),\n    #[error(\"invalid Vigil event source kind: {0}\")]\n    InvalidVigilSourceKind(String),\n    #[error(\"system contract {id} code hash mismatch: expected {expected}, got {actual}\")]\n    SystemContractHashMismatch {\n        id: String,\n        expected: String,\n        actual: String,\n    },\n    #[error(\"unknown live system contract id in registry: {0}\")]\n    UnknownSystemContractId(String),\n    #[error(\"genesis serialization failed: {0}\")]\n    GenesisSerialization(#[from] sigil_core::error::CoreError),\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"JSON error: {0}\")]\n    Json(#[from] serde_json::Error),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 22
            },
            {
              "name": "genesis_ceremony::CeremonyValidator",
              "kind": "struct_item",
              "signature": "pub struct CeremonyValidator {\npub validator: GenesisValidator,\npub operator: String,\npub jurisdiction: String,\npub hmr: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq)]",
              "line": 94
            },
            {
              "name": "genesis_ceremony::CeremonyAllocation",
              "kind": "struct_item",
              "signature": "pub struct CeremonyAllocation {\npub did: String,\npub amount: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 102
            },
            {
              "name": "genesis_ceremony::UnsignedValidatorClaim",
              "kind": "struct_item",
              "signature": "pub struct UnsignedValidatorClaim {\npub chain_id: String,\npub did: String,\npub human_root_did: String,\npub generation: u32,\npub stake: u64,\npub mode: String,\npub consensus_pubkey: String,\npub network_pubkey: String,\npub operator: String,\npub jurisdiction: String,\npub hmr: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 108
            },
            {
              "name": "genesis_ceremony::SignedValidatorClaim",
              "kind": "struct_item",
              "signature": "pub struct SignedValidatorClaim {\npub claim: UnsignedValidatorClaim,\npub consensus_signature: String,\npub network_signature: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 123
            },
            {
              "name": "genesis_ceremony::CommitmentRecord",
              "kind": "struct_item",
              "signature": "pub struct CommitmentRecord {\npub id: String,\npub commitment_hash: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 130
            },
            {
              "name": "genesis_ceremony::RevealRecord",
              "kind": "struct_item",
              "signature": "pub struct RevealRecord {\npub id: String,\npub value: serde_json::Value,\npub salt_hex: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 136
            },
            {
              "name": "genesis_ceremony::CeremonySigner",
              "kind": "struct_item",
              "signature": "pub struct CeremonySigner {\npub signer_id: String,\npub did: String,\npub public_key: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 143
            },
            {
              "name": "genesis_ceremony::GenesisHashSignature",
              "kind": "struct_item",
              "signature": "pub struct GenesisHashSignature {\npub signer_id: String,\npub signature: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 150
            },
            {
              "name": "genesis_ceremony::GenesisSignatureBundle",
              "kind": "struct_item",
              "signature": "pub struct GenesisSignatureBundle {\npub chain_id: String,\npub genesis_hash: String,\npub threshold: usize,\npub signers: Vec<CeremonySigner>,\npub signatures: Vec<GenesisHashSignature>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 156
            },
            {
              "name": "genesis_ceremony::CeremonyInputs",
              "kind": "struct_item",
              "signature": "pub struct CeremonyInputs {\npub chain_id: String,\npub genesis_time: u64,\npub validators: Vec<CeremonyValidator>,\npub allocations: Vec<CeremonyAllocation>,\npub challenge_resolver_dids: Vec<String>,\npub proposer_dids: Vec<String>,\npub beacon_dids: Vec<String>,\npub system_contracts_activation_height: Option<u64>,\npub system_contract_artifact_root: Option<PathBuf>,\npub vigils_params: Option<VigilsParams>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 165
            },
            {
              "name": "genesis_ceremony::CeremonyTranscript",
              "kind": "struct_item",
              "signature": "pub struct CeremonyTranscript {\npub chain_id: String,\npub genesis_hash: String,\npub validator_count: usize,\npub allocation_count: usize,\npub challenge_resolver_dids: Vec<String>,\npub proposer_dids: Vec<String>,\npub beacon_dids: Vec<String>,\npub contract_params: Option<ContractParams>,\npub vigils_params: Option<VigilsParams>,\npub note: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 179
            },
            {
              "name": "genesis_ceremony::parse_validator_roster_csv",
              "kind": "function_item",
              "signature": "pub fn parse_validator_roster_csv(\n    csv: &str,\n) -> Result<Vec<CeremonyValidator>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 192
            },
            {
              "name": "genesis_ceremony::assemble_genesis_from_inputs",
              "kind": "function_item",
              "signature": "pub fn assemble_genesis_from_inputs(\n    inputs: CeremonyInputs,\n) -> Result<GenesisConfig, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 271
            },
            {
              "name": "genesis_ceremony::system_reference_contracts_from_registry",
              "kind": "function_item",
              "signature": "pub fn system_reference_contracts_from_registry(\n    artifact_root: &Path,\n) -> Result<Vec<GenesisReferenceContract>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 320
            },
            {
              "name": "genesis_ceremony::parse_vigil_source_kinds",
              "kind": "function_item",
              "signature": "pub fn parse_vigil_source_kinds(raw: &str) -> Result<Vec<EventSourceKind>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 415
            },
            {
              "name": "genesis_ceremony::genesis_hash_hex",
              "kind": "function_item",
              "signature": "pub fn genesis_hash_hex(genesis: &GenesisConfig) -> Result<String, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 455
            },
            {
              "name": "genesis_ceremony::validator_claim_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn validator_claim_signing_bytes(\n    claim: &UnsignedValidatorClaim,\n) -> Result<Vec<u8>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 460
            },
            {
              "name": "genesis_ceremony::verify_signed_validator_claims",
              "kind": "function_item",
              "signature": "pub fn verify_signed_validator_claims(\n    claims: &[SignedValidatorClaim],\n    expected_chain_id: &str,\n) -> Result<Vec<CeremonyValidator>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 472
            },
            {
              "name": "genesis_ceremony::validator_roster_csv_from_claims",
              "kind": "function_item",
              "signature": "pub fn validator_roster_csv_from_claims(validators: &[CeremonyValidator]) -> String;",
              "docs": "",
              "attributes": "",
              "line": 526
            },
            {
              "name": "genesis_ceremony::read_signed_validator_claims",
              "kind": "function_item",
              "signature": "pub fn read_signed_validator_claims(\n    path: &Path,\n) -> Result<Vec<SignedValidatorClaim>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 550
            },
            {
              "name": "genesis_ceremony::read_commitments",
              "kind": "function_item",
              "signature": "pub fn read_commitments(path: &Path) -> Result<Vec<CommitmentRecord>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 557
            },
            {
              "name": "genesis_ceremony::read_reveals",
              "kind": "function_item",
              "signature": "pub fn read_reveals(path: &Path) -> Result<Vec<RevealRecord>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 562
            },
            {
              "name": "genesis_ceremony::read_genesis_signature_bundle",
              "kind": "function_item",
              "signature": "pub fn read_genesis_signature_bundle(\n    path: &Path,\n) -> Result<GenesisSignatureBundle, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 567
            },
            {
              "name": "genesis_ceremony::genesis_hash_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn genesis_hash_signing_bytes(\n    chain_id: &str,\n    genesis_hash: &str,\n) -> Result<Vec<u8>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 574
            },
            {
              "name": "genesis_ceremony::normalized_genesis_hash_hex",
              "kind": "function_item",
              "signature": "pub fn normalized_genesis_hash_hex(genesis_hash: &str) -> Result<String, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 591
            },
            {
              "name": "genesis_ceremony::verify_genesis_signature_bundle_for_hash",
              "kind": "function_item",
              "signature": "pub fn verify_genesis_signature_bundle_for_hash(\n    bundle: &GenesisSignatureBundle,\n    expected_genesis_hash: &str,\n) -> Result<usize, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 596
            },
            {
              "name": "genesis_ceremony::verify_genesis_signature_bundle",
              "kind": "function_item",
              "signature": "pub fn verify_genesis_signature_bundle(\n    bundle: &GenesisSignatureBundle,\n) -> Result<usize, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 612
            },
            {
              "name": "genesis_ceremony::commitment_hash_hex",
              "kind": "function_item",
              "signature": "pub fn commitment_hash_hex(\n    id: &str,\n    value: &serde_json::Value,\n    salt_hex: &str,\n) -> Result<String, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 668
            },
            {
              "name": "genesis_ceremony::verify_commit_reveal",
              "kind": "function_item",
              "signature": "pub fn verify_commit_reveal(\n    commitments: &[CommitmentRecord],\n    reveals: &[RevealRecord],\n) -> Result<(), GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 685
            },
            {
              "name": "genesis_ceremony::write_collect_template",
              "kind": "function_item",
              "signature": "pub fn write_collect_template(path: &Path) -> Result<(), GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 730
            },
            {
              "name": "genesis_ceremony::read_allocations",
              "kind": "function_item",
              "signature": "pub fn read_allocations(path: &Path) -> Result<Vec<CeremonyAllocation>, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 736
            },
            {
              "name": "genesis_ceremony::transcript_for_genesis",
              "kind": "function_item",
              "signature": "pub fn transcript_for_genesis(\n    genesis: &GenesisConfig,\n    allocation_count: usize,\n    challenge_resolver_dids: Vec<String>,\n    proposer_dids: Vec<String>,\n    beacon_dids: Vec<String>,\n) -> Result<CeremonyTranscript, GenesisCeremonyError>;",
              "docs": "",
              "attributes": "",
              "line": 767
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-keyloader",
      "version": "0.1.0",
      "source": "sigil/node/sigil-keyloader",
      "manifestSha256": "238e7a800f896a2710c59e5311486f26784b202b2109359e4416ddb8bbdb6b45",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-keyloader",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-keyloader/src/lib.rs",
          "sha256": "16106d0affea8ed4c43bde11d72ea5177a64d7f4ffc601b7dcc4afac28249301",
          "attributes": "",
          "items": [
            {
              "name": "::KeyloaderError",
              "kind": "enum_item",
              "signature": "pub enum KeyloaderError {\n    #[error(\"invalid argument: {0}\")]\n    InvalidArgument(String),\n    #[error(\"OpenBao request failed: {0}\")]\n    OpenBao(String),\n    #[error(\"validator key payload is invalid: {0}\")]\n    InvalidPayload(String),\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"JSON error: {0}\")]\n    Json(#[from] serde_json::Error),\n    #[error(\"HTTP client error: {0}\")]\n    Http(#[from] reqwest::Error),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 16
            },
            {
              "name": "::ValidatorKeys",
              "kind": "struct_item",
              "signature": "pub struct ValidatorKeys {\npub consensus_pubkey: String,\npub consensus_secret: String,\npub network_pubkey: String,\npub network_secret: String,\npub validator_did: String,\n#[serde(default = \"default_tower_addr\")]\npub tower_addr: String,\n#[serde(default)]\npub tower_region: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "::ValidatorKeys::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), KeyloaderError>;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "::FetchConfig",
              "kind": "struct_item",
              "signature": "pub struct FetchConfig {\npub openbao_addr: String,\npub role: String,\npub secret_path: String,\npub token_path: PathBuf,\npub auth_path: String,\npub namespace: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 84
            },
            {
              "name": "::FetchConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), KeyloaderError>;",
              "docs": "",
              "attributes": "",
              "line": 94
            },
            {
              "name": "::openbao_kv2_read_path",
              "kind": "function_item",
              "signature": "pub fn openbao_kv2_read_path(secret_path: &str) -> String;",
              "docs": "",
              "attributes": "",
              "line": 129
            },
            {
              "name": "::extract_validator_keys",
              "kind": "function_item",
              "signature": "pub fn extract_validator_keys(payload: &Value) -> Result<ValidatorKeys, KeyloaderError>;",
              "docs": "",
              "attributes": "",
              "line": 144
            },
            {
              "name": "::fetch_openbao_validator_keys",
              "kind": "function_item",
              "signature": "pub fn fetch_openbao_validator_keys(config: &FetchConfig) -> Result<ValidatorKeys, KeyloaderError>;",
              "docs": "",
              "attributes": "",
              "line": 155
            },
            {
              "name": "::write_validator_keys_atomically",
              "kind": "function_item",
              "signature": "pub fn write_validator_keys_atomically(\n    keys: &ValidatorKeys,\n    output: &Path,\n) -> Result<(), KeyloaderError>;",
              "docs": "",
              "attributes": "",
              "line": 219
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-ingestor",
      "version": "0.1.0",
      "source": "sigil/node/sigil-ingestor",
      "manifestSha256": "e5219f58130bc7d59602939393d8dcae7aaa85e99d47021d10d0936dcf1327cd",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-ingestor",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-ingestor/src/lib.rs",
          "sha256": "381d8cf903b34ca6d7c5a060d069fc7438ac08ba3fb2f83a393a71610cf9ffc7",
          "attributes": "",
          "items": [
            {
              "name": "::IngestorError",
              "kind": "enum_item",
              "signature": "pub enum IngestorError {\n    #[error(\"config IO: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"config parse: {0}\")]\n    Toml(#[from] toml::de::Error),\n    #[error(\"invalid config: {0}\")]\n    InvalidConfig(String),\n    #[error(\"invalid hash: {0}\")]\n    InvalidHash(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 18
            },
            {
              "name": "::ConfiguredSourceKind",
              "kind": "enum_item",
              "signature": "pub enum ConfiguredSourceKind {\n    InZone,\n    CrossZone,\n    ComputeCompletion,\n    TimeBlockHeight,\n    TimeAttestedWallClock,\n    TeeAttested,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 31
            },
            {
              "name": "::ConfiguredSourceKind::event_source_kind",
              "kind": "function_item",
              "signature": "pub fn event_source_kind(&self) -> EventSourceKind;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "::IngestorSourceConfig",
              "kind": "struct_item",
              "signature": "pub struct IngestorSourceConfig {\npub name: String,\npub subscription_id: String,\npub kind: ConfiguredSourceKind,\n#[serde(default = \"default_confirmations\")]\npub confirmation_depth: u64,\n#[serde(default = \"default_poll_interval_secs\")]\npub poll_interval_secs: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 53
            },
            {
              "name": "::IngestorConfig",
              "kind": "struct_item",
              "signature": "pub struct IngestorConfig {\npub ingestor_did: String,\npub node_rpc_url: String,\npub local_state_path: String,\n#[serde(default = \"default_fee_per_delivery\")]\npub fee_per_delivery: u64,\n#[serde(default)]\npub dry_run: bool,\n#[serde(default)]\npub sources: Vec<IngestorSourceConfig>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 64
            },
            {
              "name": "::IngestorConfig::from_path",
              "kind": "function_item",
              "signature": "pub fn from_path(path: &Path) -> Result<Self, IngestorError>;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "::IngestorConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), IngestorError>;",
              "docs": "",
              "attributes": "",
              "line": 94
            },
            {
              "name": "::IngestorSourceConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), IngestorError>;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "::validate_rpc_url",
              "kind": "function_item",
              "signature": "pub fn validate_rpc_url(url: &str) -> Result<(), IngestorError>;",
              "docs": "",
              "attributes": "",
              "line": 140
            },
            {
              "name": "::parse_hash",
              "kind": "function_item",
              "signature": "pub fn parse_hash(value: &str) -> Result<SigilHash, IngestorError>;",
              "docs": "",
              "attributes": "",
              "line": 156
            },
            {
              "name": "::build_block_height_delivery",
              "kind": "function_item",
              "signature": "pub fn build_block_height_delivery(\n    subscription_id: SigilHash,\n    ingestor_did: String,\n    target_height: u64,\n    payload: serde_json::Value,\n) -> EventDeliveryData;",
              "docs": "",
              "attributes": "",
              "line": 160
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-velocity-bench",
      "version": "0.1.0",
      "source": "sigil/node/sigil-velocity-bench",
      "manifestSha256": "3e31046fd5b686248062d2732f00e68c2875aea3409f37632053513995f81d1b",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-velocity-bench",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-velocity-bench/src/lib.rs",
          "sha256": "70221ff62231a51e88ee35c4add66cdd75fc7de14d2aaacc5336b25685a5b072",
          "attributes": "",
          "items": [
            {
              "name": "::VelocityBenchError",
              "kind": "enum_item",
              "signature": "pub enum VelocityBenchError {\n    #[error(\"core: {0}\")]\n    Core(#[from] CoreError),\n    #[error(\"io: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"json: {0}\")]\n    Json(#[from] serde_json::Error),\n    #[error(\"invalid config: {0}\")]\n    InvalidConfig(String),\n    #[error(\"artifact verification: {0}\")]\n    ArtifactVerification(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 30
            },
            {
              "name": "::VelocityBenchmarkConfig",
              "kind": "struct_item",
              "signature": "pub struct VelocityBenchmarkConfig {\npub chain_id: String,\npub lane_count: u32,\npub slots: u64,\npub txs_per_lane_slot: u64,\npub slot_duration_ns: u64,\npub genesis_time_ns: u64,\npub starting_balance_per_sender: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 44
            },
            {
              "name": "::VelocityBenchmarkReport",
              "kind": "struct_item",
              "signature": "pub struct VelocityBenchmarkReport {\npub config: VelocityBenchmarkConfig,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub committed_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64,\npub slot_latency_p50_ns: u64,\npub slot_latency_p95_ns: u64,\npub lane_blocks: Vec<VelocityLaneBlock>,\npub root_commitments: Vec<VelocityRootCommitment>,\npub claim_status: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 89
            },
            {
              "name": "::VelocityBenchmarkReport::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self) -> Result<bool, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 104
            },
            {
              "name": "::VelocityCompactArtifactReport",
              "kind": "struct_item",
              "signature": "pub struct VelocityCompactArtifactReport {\npub config: VelocityBenchmarkConfig,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub committed_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64,\npub slot_latency_p50_ns: u64,\npub slot_latency_p95_ns: u64,\npub lane_block_count: usize,\npub root_commitment_count: usize,\npub witness_count: usize,\npub manifest_hash: String,\npub claim_status: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 166
            },
            {
              "name": "::run_velocity_benchmark",
              "kind": "function_item",
              "signature": "pub fn run_velocity_benchmark(\n    config: VelocityBenchmarkConfig,\n) -> Result<VelocityBenchmarkReport, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 239
            },
            {
              "name": "::write_velocity_artifacts",
              "kind": "function_item",
              "signature": "pub fn write_velocity_artifacts(\n    output_dir: &Path,\n    report: &VelocityBenchmarkReport,\n) -> Result<(), VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 357
            },
            {
              "name": "::write_velocity_compact_artifacts",
              "kind": "function_item",
              "signature": "pub fn write_velocity_compact_artifacts(\n    output_dir: &Path,\n    config: VelocityBenchmarkConfig,\n) -> Result<VelocityCompactArtifactReport, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 415
            },
            {
              "name": "::verify_velocity_compact_artifacts",
              "kind": "function_item",
              "signature": "pub fn verify_velocity_compact_artifacts(\n    output_dir: &Path,\n) -> Result<VelocityCompactArtifactReport, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 476
            },
            {
              "name": "::verify_velocity_artifacts",
              "kind": "function_item",
              "signature": "pub fn verify_velocity_artifacts(\n    output_dir: &Path,\n) -> Result<VelocityBenchmarkReport, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 735
            },
            {
              "name": "::summarize_by_slot",
              "kind": "function_item",
              "signature": "pub fn summarize_by_slot(report: &VelocityBenchmarkReport) -> BTreeMap<u64, (u64, u64, u64, u64)>;",
              "docs": "",
              "attributes": "",
              "line": 858
            },
            {
              "name": "::velocity_json_rpc_result",
              "kind": "function_item",
              "signature": "pub fn velocity_json_rpc_result(\n    method: &str,\n    params: Option<&serde_json::Value>,\n    status: &VelocityLiveStatus,\n) -> Result<serde_json::Value, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 870
            },
            {
              "name": "::aggregate_velocity_status",
              "kind": "function_item",
              "signature": "pub fn aggregate_velocity_status(\n    chain_id: impl Into<String>,\n    worker_statuses: &[VelocityLiveStatus],\n    elapsed_ns: u64,\n) -> Result<VelocityLiveStatus, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1091
            },
            {
              "name": "::VelocityRootValidatorProfile",
              "kind": "enum_item",
              "signature": "pub enum VelocityRootValidatorProfile {\n    Single,\n    Testnet,\n    Mainnet,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 1289
            },
            {
              "name": "::VelocityRootValidatorProfile::parse",
              "kind": "function_item",
              "signature": "pub fn parse(value: &str) -> Result<Self, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1296
            },
            {
              "name": "::VelocityRootQuorumConfig",
              "kind": "struct_item",
              "signature": "pub struct VelocityRootQuorumConfig {\npub profile: VelocityRootValidatorProfile,\npub validator_count: u32,\npub required_validators: Option<u32>,\npub stake_per_validator: u128\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 1309
            },
            {
              "name": "::VelocityRootValidatorStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityRootValidatorStatus {\npub did: String,\npub mode: String,\npub status: String,\npub stake: String,\npub consensus_public_key: String,\npub signed_latest_root: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1328
            },
            {
              "name": "::VelocityRootAttestationStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityRootAttestationStatus {\npub validator_did: String,\npub root_height: u64,\npub root_hash: String,\npub signature: String,\npub verified: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1338
            },
            {
              "name": "::VelocityRootQuorumStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityRootQuorumStatus {\npub active_validators: u32,\npub required_validators: u32,\npub total_stake: String,\npub quorum_stake: String,\npub signed_validators: u32,\npub signed_stake: String,\npub threshold_met: bool,\npub root_commit_latency_ns: u64,\npub latest_commitment_hash: String,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub covered_lane_committee_assignment_root: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub covered_slashing_demotion_decision_root: Option<String>,\npub attestations: Vec<VelocityRootAttestationStatus>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1347
            },
            {
              "name": "::apply_velocity_root_quorum",
              "kind": "function_item",
              "signature": "pub fn apply_velocity_root_quorum(\n    status: &mut VelocityLiveStatus,\n    config: &VelocityRootQuorumConfig,\n) -> Result<(), VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1389
            },
            {
              "name": "::apply_velocity_lane_committee_rotation",
              "kind": "function_item",
              "signature": "pub fn apply_velocity_lane_committee_rotation(\n    status: &mut VelocityLiveStatus,\n    rotation_interval_slots: u64,\n    committee_size: usize,\n    sampled_lane_limit: usize,\n) -> Result<(), VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1476
            },
            {
              "name": "::apply_velocity_full_lane_committee_rotation",
              "kind": "function_item",
              "signature": "pub fn apply_velocity_full_lane_committee_rotation(\n    status: &mut VelocityLiveStatus,\n    rotation_interval_slots: u64,\n    committee_size: usize,\n) -> Result<(), VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1561
            },
            {
              "name": "::apply_velocity_slashing_demotion_status",
              "kind": "function_item",
              "signature": "pub fn apply_velocity_slashing_demotion_status(\n    status: &mut VelocityLiveStatus,\n    worker_statuses: &[VelocityLiveStatus],\n) -> Result<(), VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 1575
            },
            {
              "name": "::VelocityLiveConfig",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveConfig {\npub chain_id: String,\npub lane_count: u32,\npub lane_id_base: u32,\npub global_lane_count: u32,\npub txs_per_lane_slot: u64,\npub slot_duration_ns: u64,\npub genesis_time_ns: u64,\npub starting_balance_per_sender: u128,\npub agent_accounts_per_lane: u32,\npub transfer_amount: u128,\npub allocation_manifest_sha256: Option<String>,\npub genesis_hash: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1820
            },
            {
              "name": "::VelocityLiveStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveStatus {\npub chain_id: String,\npub live: bool,\npub latest_slot: u64,\npub root_height: u64,\npub lane_count: u32,\npub lane_id_base: u32,\npub global_lane_count: u32,\npub agent_accounts_per_lane: u32,\n#[serde(default)]\npub txs_per_lane_slot: u64,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub committed_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64,\npub lane_block_count: u64,\npub root_commitment_count: u64,\npub worker_machine_count: u32,\npub lane_execution_workers: u32,\npub slot_duration_ns: u64,\npub slot_latency_p50_ns: u64,\npub slot_latency_p95_ns: u64,\npub wall_clock_elapsed_ns: u64,\npub wall_clock_committed_tps: f64,\npub target_committed_tps: f64,\npub latest_lane_commitment_root: String,\npub lagging: bool,\npub claim_status: String,\n#[serde(default)]\npub allocation_manifest_sha256: Option<String>,\n#[serde(default)]\npub genesis_hash: Option<String>,\n#[serde(default)]\npub worker_allocation_manifest_sha256s: Vec<String>,\n#[serde(default)]\npub worker_allocation_manifest_mismatch_count: u32,\n#[serde(default)]\npub worker_genesis_hashes: Vec<String>,\n#[serde(default)]\npub worker_genesis_hash_mismatch_count: u32,\n#[serde(default)]\npub recent_transactions: Vec<VelocityLiveTransactionStatus>,\npub lanes: Vec<VelocityLiveLaneStatus>,\n#[serde(default)]\npub root_validators: Vec<VelocityRootValidatorStatus>,\n#[serde(default)]\npub root_quorum: VelocityRootQuorumStatus,\n#[serde(default)]\npub lane_committee_rotation: VelocityLaneCommitteeRotationStatus,\n#[serde(default)]\npub slashing_demotion: VelocitySlashingDemotionStatus,\n#[serde(default)]\npub worker_chain_ids: Vec<String>,\n#[serde(default)]\npub worker_chain_id_mismatch_count: u32\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 1909
            },
            {
              "name": "::VelocityLiveEngineSnapshot",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveEngineSnapshot {\npub schema: String,\npub config: VelocityLiveConfig,\npub latest_slot: u64,\npub raw_tx_count: u64,\npub accepted_tx_count: u64,\npub invalid_tx_count: u64,\npub dropped_tx_count: u64,\npub lane_block_count: u64,\npub root_commitment_count: u64,\npub last_execution_elapsed_ns: u64,\npub parent_hashes: Vec<String>,\npub lane_states: Vec<VelocityAccountState>,\npub lane_committed_tx_counts: Vec<u64>,\npub lane_statuses: Vec<VelocityLiveLaneStatus>,\npub recent_transactions: Vec<VelocityLiveTransactionStatus>,\npub slot_latencies: Vec<u64>,\npub latest_root_commitment: Option<VelocityRootCommitment>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 1968
            },
            {
              "name": "::VelocityLiveStatus::bind_allocation_commitments",
              "kind": "function_item",
              "signature": "pub fn bind_allocation_commitments(\n        &mut self,\n        allocation_manifest_sha256: Option<String>,\n        genesis_hash: Option<String>,\n    );",
              "docs": "",
              "attributes": "",
              "line": 1989
            },
            {
              "name": "::VelocityLaneCommitteeRotationStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneCommitteeRotationStatus {\npub enabled: bool,\npub core_primitives: bool,\npub policy_url: String,\npub artifact_url: Option<String>,\npub enforcement: String,\npub rotation_interval_slots: Option<u64>,\npub committee_size: u32,\npub rotation_epoch: u64,\npub randomness_seed: String,\npub assignment_root: String,\npub sampled_assignment_count: u32,\npub sampled_assignments: Vec<VelocityLaneCommitteeAssignmentStatus>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 2039
            },
            {
              "name": "::VelocityLaneCommitteeAssignmentStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneCommitteeAssignmentStatus {\npub lane_id: u32,\npub rotation_epoch: u64,\npub member_validator_dids: Vec<String>,\npub assignment_hash: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 2074
            },
            {
              "name": "::VelocitySlashingDemotionStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocitySlashingDemotionStatus {\npub enabled: bool,\npub core_primitives: bool,\npub policy_url: String,\npub artifact_url: Option<String>,\npub enforcement: String,\npub max_p95_latency_ns: u64,\npub max_missed_slots: u64,\npub max_invalid_roots: u64,\npub max_missing_artifacts: u64,\npub demoted_lane_groups: u32,\npub slashable_faults: u32,\npub decision_root: String,\npub sampled_decisions: Vec<VelocityLaneDemotionDecisionStatus>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 2082
            },
            {
              "name": "::VelocityLaneDemotionDecisionStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLaneDemotionDecisionStatus {\npub lane_id_base: u32,\npub lane_count: u32,\npub slot_id: u64,\npub p95_latency_ns: u64,\npub demote: bool,\npub slash: bool,\npub reasons: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 2119
            },
            {
              "name": "::VelocityLiveLaneStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveLaneStatus {\npub lane_id: u32,\npub latest_slot: u64,\npub latest_block_hash: String,\npub tx_root: String,\npub receipt_root: String,\npub state_delta_root: String,\npub post_state_root: String,\npub committed_tx_count: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 2130
            },
            {
              "name": "::VelocityLiveTransactionStatus",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveTransactionStatus {\npub hash: String,\n#[serde(rename = \"type\")]\npub tx_type: String,\npub from: String,\npub to: String,\npub value: String,\npub gas: u64,\n#[serde(rename = \"gasPrice\")]\npub gas_price: u64,\npub nonce: u64,\n#[serde(rename = \"blockHeight\")]\npub block_height: u64,\npub timestamp: u64,\npub status: String,\npub lane_id: u32,\npub slot_id: u64,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 2142
            },
            {
              "name": "::VelocityLiveEngine",
              "kind": "struct_item",
              "signature": "pub struct VelocityLiveEngine {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug)]",
              "line": 2163
            },
            {
              "name": "::VelocityLiveEngine::new",
              "kind": "function_item",
              "signature": "pub fn new(config: VelocityLiveConfig) -> Result<Self, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 2265
            },
            {
              "name": "::VelocityLiveEngine::from_snapshot",
              "kind": "function_item",
              "signature": "pub fn from_snapshot(snapshot: VelocityLiveEngineSnapshot) -> Result<Self, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 2326
            },
            {
              "name": "::VelocityLiveEngine::snapshot",
              "kind": "function_item",
              "signature": "pub fn snapshot(&self) -> VelocityLiveEngineSnapshot;",
              "docs": "",
              "attributes": "",
              "line": 2382
            },
            {
              "name": "::VelocityLiveEngine::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &VelocityLiveConfig;",
              "docs": "",
              "attributes": "",
              "line": 2404
            },
            {
              "name": "::VelocityLiveEngine::advance_slot",
              "kind": "function_item",
              "signature": "pub fn advance_slot(&mut self) -> Result<VelocityRootCommitment, VelocityBenchError>;",
              "docs": "",
              "attributes": "",
              "line": 2408
            },
            {
              "name": "::VelocityLiveEngine::status",
              "kind": "function_item",
              "signature": "pub fn status(&self) -> VelocityLiveStatus;",
              "docs": "",
              "attributes": "",
              "line": 2516
            },
            {
              "name": "::VelocityLiveEngine::status_with_elapsed_ns",
              "kind": "function_item",
              "signature": "pub fn status_with_elapsed_ns(&self, elapsed_ns: u64) -> VelocityLiveStatus;",
              "docs": "",
              "attributes": "",
              "line": 2522
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-snapshot-publisher",
      "version": "0.1.0",
      "source": "sigil/node/sigil-snapshot-publisher",
      "manifestSha256": "55d5487ea5a9aa4352c564ab87b7d30a1701ad32b5bf2bab6fb6230889d90572",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-snapshot-publisher",
      "modules": []
    },
    {
      "name": "sigil-node",
      "version": "0.1.0",
      "source": "sigil/node/sigil-node",
      "manifestSha256": "fe27b5b88b8576aa727e35dc194e79814911a6046da9a4a1905eb7d6eac43a96",
      "features": {
        "default": [
          "compute",
          "vigils-v1",
          "labor-bounty"
        ],
        "legacy-rocksdb-import": [
          "dep:rocksdb",
          "sigil-storage/legacy-rocksdb-import"
        ],
        "labor-bounty": [],
        "compute": [
          "sigil-core/compute",
          "sigil-consensus/compute",
          "sigil-execution/compute"
        ],
        "tower": [
          "sigil-core/tower",
          "sigil-consensus/tower"
        ],
        "czac": [
          "sigil-core/czac"
        ],
        "nova": [
          "sigil-core/nova"
        ],
        "governance": [
          "sigil-core/governance"
        ],
        "contracts": [
          "compute",
          "sigil-consensus/contracts"
        ],
        "wasm": [
          "contracts",
          "dep:sigil-wasm"
        ],
        "vigils-v1": [
          "wasm"
        ],
        "tee-verify": [
          "compute"
        ],
        "tee-verify-sev-snp": [
          "tee-verify",
          "dep:p384",
          "dep:sha2",
          "dep:x509-parser",
          "dep:der-parser",
          "dep:ring"
        ],
        "tee-verify-sgx-dcap": [
          "tee-verify",
          "dep:p256",
          "dep:sha2",
          "dep:x509-parser",
          "dep:der-parser"
        ],
        "tee-verify-tdx": [
          "tee-verify",
          "dep:p256",
          "dep:sha2",
          "dep:x509-parser",
          "dep:der-parser"
        ],
        "tee-verify-arm-cca": [
          "tee-verify",
          "dep:p384",
          "dep:sha2",
          "dep:coset",
          "dep:ciborium"
        ],
        "dao-validators": [
          "sigil-state/dao-validators",
          "dep:async-trait",
          "dep:oas-resolve"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-node",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-node/src/lib.rs",
          "sha256": "a00ce310d188c4e4b5318bbd77b8febc186e97f1486e7d25ce7aae7d65ec829b",
          "attributes": "",
          "items": [
            {
              "name": "admission",
              "kind": "module",
              "signature": "pub mod admission;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "bootstrap",
              "kind": "module",
              "signature": "pub mod bootstrap;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "compute_durable",
              "kind": "module",
              "signature": "pub mod compute_durable;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 14
            },
            {
              "name": "compute_state",
              "kind": "module",
              "signature": "pub mod compute_state;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 16
            },
            {
              "name": "consensus_coordinator",
              "kind": "module",
              "signature": "pub mod consensus_coordinator;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "contract_durable",
              "kind": "module",
              "signature": "pub mod contract_durable;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 19
            },
            {
              "name": "crucible_durable",
              "kind": "module",
              "signature": "pub mod crucible_durable;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "dex_durable",
              "kind": "module",
              "signature": "pub mod dex_durable;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "engine",
              "kind": "module",
              "signature": "pub mod engine;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "executor",
              "kind": "module",
              "signature": "pub mod executor;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "executor_compute",
              "kind": "module",
              "signature": "pub mod executor_compute;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 26
            },
            {
              "name": "executor_contract",
              "kind": "module",
              "signature": "pub mod executor_contract;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 28
            },
            {
              "name": "executor_crucible",
              "kind": "module",
              "signature": "pub mod executor_crucible;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "executor_dao",
              "kind": "module",
              "signature": "pub mod executor_dao;",
              "docs": "",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 31
            },
            {
              "name": "executor_dex",
              "kind": "module",
              "signature": "pub mod executor_dex;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "executor_evidence",
              "kind": "module",
              "signature": "pub mod executor_evidence;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "executor_gal",
              "kind": "module",
              "signature": "pub mod executor_gal;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 35
            },
            {
              "name": "executor_labor",
              "kind": "module",
              "signature": "pub mod executor_labor;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "executor_mail",
              "kind": "module",
              "signature": "pub mod executor_mail;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "executor_nft",
              "kind": "module",
              "signature": "pub mod executor_nft;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "executor_nova",
              "kind": "module",
              "signature": "pub mod executor_nova;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "executor_recovery",
              "kind": "module",
              "signature": "pub mod executor_recovery;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "executor_storage",
              "kind": "module",
              "signature": "pub mod executor_storage;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "executor_username",
              "kind": "module",
              "signature": "pub mod executor_username;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "executor_vigils",
              "kind": "module",
              "signature": "pub mod executor_vigils;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 44
            },
            {
              "name": "gal_durable",
              "kind": "module",
              "signature": "pub mod gal_durable;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 46
            },
            {
              "name": "genesis_loader",
              "kind": "module",
              "signature": "pub mod genesis_loader;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "governance_durable",
              "kind": "module",
              "signature": "pub mod governance_durable;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "health",
              "kind": "module",
              "signature": "pub mod health;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "host_backend",
              "kind": "module",
              "signature": "pub mod host_backend;",
              "docs": "",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 51
            },
            {
              "name": "labor_durable",
              "kind": "module",
              "signature": "pub mod labor_durable;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "logging",
              "kind": "module",
              "signature": "pub mod logging;",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "mail_durable",
              "kind": "module",
              "signature": "pub mod mail_durable;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "mempool",
              "kind": "module",
              "signature": "pub mod mempool;",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "metrics",
              "kind": "module",
              "signature": "pub mod metrics;",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "nft_durable",
              "kind": "module",
              "signature": "pub mod nft_durable;",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "nova_durable",
              "kind": "module",
              "signature": "pub mod nova_durable;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "recovery_durable",
              "kind": "module",
              "signature": "pub mod recovery_durable;",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "rpc_compute",
              "kind": "module",
              "signature": "pub mod rpc_compute;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 61
            },
            {
              "name": "rpc_contract",
              "kind": "module",
              "signature": "pub mod rpc_contract;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 63
            },
            {
              "name": "rpc_crucible",
              "kind": "module",
              "signature": "pub mod rpc_crucible;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "rpc_dex",
              "kind": "module",
              "signature": "pub mod rpc_dex;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "rpc_evidence",
              "kind": "module",
              "signature": "pub mod rpc_evidence;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "rpc_gal",
              "kind": "module",
              "signature": "pub mod rpc_gal;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 68
            },
            {
              "name": "rpc_labor",
              "kind": "module",
              "signature": "pub mod rpc_labor;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "rpc_mail",
              "kind": "module",
              "signature": "pub mod rpc_mail;",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "rpc_middleware",
              "kind": "module",
              "signature": "pub mod rpc_middleware;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "rpc_nft",
              "kind": "module",
              "signature": "pub mod rpc_nft;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "rpc_nova",
              "kind": "module",
              "signature": "pub mod rpc_nova;",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "rpc_server",
              "kind": "module",
              "signature": "pub mod rpc_server;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "rpc_storage_market",
              "kind": "module",
              "signature": "pub mod rpc_storage_market;",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "rpc_sync",
              "kind": "module",
              "signature": "pub mod rpc_sync;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "rpc_username",
              "kind": "module",
              "signature": "pub mod rpc_username;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "rpc_vigils",
              "kind": "module",
              "signature": "pub mod rpc_vigils;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 79
            },
            {
              "name": "snapshot",
              "kind": "module",
              "signature": "pub mod snapshot;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "storage_market_durable",
              "kind": "module",
              "signature": "pub mod storage_market_durable;",
              "docs": "",
              "attributes": "",
              "line": 82
            },
            {
              "name": "storage_migration",
              "kind": "module",
              "signature": "pub mod storage_migration;",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "tee_verify",
              "kind": "module",
              "signature": "pub mod tee_verify;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 85
            },
            {
              "name": "tower_durable",
              "kind": "module",
              "signature": "pub mod tower_durable;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "tower_runtime",
              "kind": "module",
              "signature": "pub mod tower_runtime;",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "username_durable",
              "kind": "module",
              "signature": "pub mod username_durable;",
              "docs": "",
              "attributes": "",
              "line": 88
            },
            {
              "name": "validator_agent",
              "kind": "module",
              "signature": "pub mod validator_agent;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "weave",
              "kind": "module",
              "signature": "pub mod weave;",
              "docs": "",
              "attributes": "",
              "line": 90
            },
            {
              "name": "ws",
              "kind": "module",
              "signature": "pub mod ws;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "::NodeMode",
              "kind": "enum_item",
              "signature": "pub enum NodeMode {\n    /// Block Producer: execute transactions, generate ZK proofs.\n    Producer,\n    /// Block Validator: verify ZK proofs, participate in consensus.\n    Validator,\n    /// RPC node: serve API queries (no consensus participation).\n    Rpc,\n    /// Archive node: store full chain history.\n    Archive,\n    /// Light node: verify block headers only.\n    Light,\n    /// Tower coordination chain validator: participate in Tower consensus,\n    /// committee selection, finality voting, and slashing evidence processing.\n    /// Runs the Tower chain alongside the execution chain.\n    #[cfg(feature = \"tower\")]\n    Tower,\n    /// Observer node: subscribe to blocks and transactions without participating\n    /// in consensus. Useful for analytics, indexing, and monitoring dashboards.\n    Observer,\n}",
              "docs": "Node operating modes.\n\nEach mode determines which subsystems are activated and how much data the\nnode stores.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, clap::ValueEnum, Serialize, Deserialize)]",
              "line": 142
            },
            {
              "name": "::StateSyncMode",
              "kind": "enum_item",
              "signature": "pub enum StateSyncMode {\n    /// Do not attempt snapshot restore or state sync at startup.\n    Off,\n    /// Restore the latest signed snapshot, then catch up from peers.\n    SnapshotThenP2pCatchup,\n    /// Header sync first, then fetch state chunks against the finalized root.\n    HeaderThenStateFetch,\n}",
              "docs": "Startup state-sync mode for nodes booting from an existing chain.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, clap::ValueEnum, Serialize, Deserialize)]",
              "line": 181
            },
            {
              "name": "::NodeConfig",
              "kind": "struct_item",
              "signature": "pub struct NodeConfig {\n/// Node operating mode.\n\n#[arg(long, value_enum, default_value_t = NodeMode::Validator)]\npub mode: NodeMode,\n/// Chain ID.\n\n#[arg(long, default_value = \"sigil-mainnet-1\")]\npub chain_id: String,\n/// Data directory for chain state and blocks.\n\n#[arg(long, default_value = \"./data\")]\npub data_dir: String,\n/// RPC listen address.\n\n#[arg(long, default_value = \"0.0.0.0:12618\")]\npub rpc_addr: String,\n/// P2P listen address.\n\n#[arg(long, default_value = \"0.0.0.0:26656\")]\npub p2p_addr: String,\n/// Validator DID (required for producer/validator modes).\n\n#[arg(long)]\npub validator_did: Option<String>,\n/// Log level (e.g. \"info\", \"debug\", \"trace\").\n\n#[arg(long, default_value = \"info\")]\npub log_level: String,\n/// Genesis file path.\n\n#[arg(long, default_value = \"genesis.json\")]\npub genesis: String,\n/// Expected BLAKE3 state-root hash of the loaded genesis file.\n\n///\n\n/// When set, startup recomputes the canonical genesis hash and refuses to\n\n/// start if it differs. Mainnet chain IDs require this flag so a validator\n\n/// or RPC pod cannot silently boot against stale or tampered genesis data.\n\n#[arg(long)]\npub expected_genesis_hash: Option<String>,\n/// Tower coordination chain listen address (Tower mode only).\n\n#[arg(long, default_value = \"0.0.0.0:26660\")]\npub tower_addr: String,\n/// Geographic region for Tower committee diversity (e.g., \"us-east\", \"eu-west\").\n\n#[arg(long)]\npub tower_region: Option<String>,\n/// Path to a pre-provisioned validator key file (`validator_keys.json`).\n\n///\n\n/// When set, the node reads Ed25519 validator keys from this path instead\n\n/// of the default `<data-dir>/keys/validator_keys.json`. This allows\n\n/// operators to keep key material on an HSM-backed FUSE mount, a sealed\n\n/// volume, or a separate read-only filesystem.\n\n///\n\n/// **Mainnet requirement**: on mainnet (`chain-id` starting with\n\n/// `sigil-mainnet-`) this flag (or a pre-existing key file at the default\n\n/// path) is mandatory. The node will refuse to start without pre-provisioned\n\n/// keys \u2014 auto-generation and DID-derived keys are forbidden on mainnet.\n\n///\n\n/// Recommended HSM workflows:\n\n/// - **Software HSM / OpenBao / Vault**: use `vault kv get` to export the\n\n///   key JSON to a tempfs path, mount it read-only, and point this flag at\n\n///   it. Revoke the export token after startup.\n\n/// - **Hardware HSM (YubiHSM / Thales)**: generate the key inside the HSM,\n\n///   export the public components to `validator_keys.json` (keep the private\n\n///   key in the HSM), and adapt `BlockEngine` to call the HSM signing API.\n\n/// - **Sealed file (e.g., Linux Keyring / TPM)**: decrypt the key file at\n\n///   boot via `systemd-creds` or `clevis`, write to a tmpfs path, and pass\n\n///   that path here.\n\n///\n\n/// See `docs/operator/validator-key-provisioning.md` for step-by-step\n\n/// instructions and the audit checklist.\n\n#[arg(long)]\npub validator_key_path: Option<PathBuf>,\n/// Snapshot URI to restore before bootstrapping a fresh data directory.\n\n///\n\n/// Supported forms are an unpacked local snapshot directory, a local\n\n/// `.tar`/`.tar.zst` archive, or an HTTP(S) `latest.json` manifest that\n\n/// points to the archive payload. The restored state root is verified\n\n/// against genesis for height 0 snapshots or against the restored canonical\n\n/// block header for height > 0 snapshots.\n\n#[arg(long)]\npub restore_from: Option<String>,\n/// Startup state-sync strategy.\n\n#[arg(long, value_enum, default_value_t = StateSyncMode::Off)]\npub state_sync_mode: StateSyncMode,\n/// Public snapshot base URL used when `state-sync-mode` is\n\n/// `snapshot-then-p2p-catchup` and `--restore-from` is omitted.\n\n#[arg(long)]\npub snapshot_base_url: Option<String>,\n/// Finalized block retention window kept for snapshot restore and\n\n/// state-sync catchup.\n\n#[arg(long, default_value_t = 100_000)]\npub retain_finalized_blocks: u64\n}",
              "docs": "Node configuration parsed from CLI arguments.",
              "attributes": "#[derive(Debug, Clone, Parser)]\n#[command(name = \"sigil-node\", version, about = \"Sigil blockchain node\")]",
              "line": 217
            },
            {
              "name": "::NodeConfig::apply_env_overrides",
              "kind": "function_item",
              "signature": "pub fn apply_env_overrides(&mut self) -> Result<(), error::NodeError>;",
              "docs": "Apply environment overrides supplied by Kubernetes manifests.",
              "attributes": "",
              "line": 321
            },
            {
              "name": "::NodeConfig::is_public_production_chain",
              "kind": "function_item",
              "signature": "pub fn is_public_production_chain(&self) -> bool;",
              "docs": "Returns true for public production/canary chain IDs where validator\nnodes must not silently fall back to solo block production.",
              "attributes": "",
              "line": 349
            },
            {
              "name": "::NodeConfig::validate_public_validator_peers",
              "kind": "function_item",
              "signature": "pub fn validate_public_validator_peers(\n        &self,\n        sigil_peers: Option<&str>,\n    ) -> Result<(), error::NodeError>;",
              "docs": "Validate peer configuration for public validator/producer chains.",
              "attributes": "",
              "line": 354
            },
            {
              "name": "::NodeConfig::effective_restore_uri",
              "kind": "function_item",
              "signature": "pub fn effective_restore_uri(&self) -> Option<String>;",
              "docs": "Resolve the concrete snapshot URI to restore, if startup should use one.",
              "attributes": "",
              "line": 371
            },
            {
              "name": "::NodeConfig::requires_validator",
              "kind": "function_item",
              "signature": "pub fn requires_validator(&self) -> bool;",
              "docs": "Returns `true` if this mode requires a validator DID.",
              "attributes": "",
              "line": 384
            },
            {
              "name": "::NodeConfig::requires_zk_prover",
              "kind": "function_item",
              "signature": "pub fn requires_zk_prover(&self) -> bool;",
              "docs": "Returns `true` if this mode needs the ZK proving subsystem.",
              "attributes": "",
              "line": 394
            },
            {
              "name": "::NodeConfig::requires_full_state",
              "kind": "function_item",
              "signature": "pub fn requires_full_state(&self) -> bool;",
              "docs": "Returns `true` if this mode maintains full state.",
              "attributes": "",
              "line": 399
            },
            {
              "name": "::NodeConfig::stores_full_history",
              "kind": "function_item",
              "signature": "pub fn stores_full_history(&self) -> bool;",
              "docs": "Returns `true` if this mode stores the complete block history.",
              "attributes": "",
              "line": 404
            },
            {
              "name": "::NodeConfig::runs_tower_chain",
              "kind": "function_item",
              "signature": "pub fn runs_tower_chain(&self) -> bool;",
              "docs": "Returns `true` if this mode participates in the Tower coordination chain.",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 410
            },
            {
              "name": "::NodeConfig::is_observer",
              "kind": "function_item",
              "signature": "pub fn is_observer(&self) -> bool;",
              "docs": "Returns `true` if this mode only observes (no consensus participation).",
              "attributes": "",
              "line": 418
            },
            {
              "name": "::NodeConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), error::NodeError>;",
              "docs": "Validate the configuration. Returns an error if the config is\ninconsistent (e.g. producer mode without a validator DID).",
              "attributes": "",
              "line": 424
            },
            {
              "name": "::is_public_production_chain_id",
              "kind": "function_item",
              "signature": "pub fn is_public_production_chain_id(chain_id: &str) -> bool;",
              "docs": "Public networks where validator/producer mode must fail closed without\nexplicit peers.",
              "attributes": "",
              "line": 468
            },
            {
              "name": "::peer_config_empty",
              "kind": "function_item",
              "signature": "pub fn peer_config_empty(sigil_peers: Option<&str>) -> bool;",
              "docs": "True when the comma-separated peer config is absent or contains only\nwhitespace/empty entries.",
              "attributes": "",
              "line": 474
            },
            {
              "name": "::NodeInfo",
              "kind": "struct_item",
              "signature": "pub struct NodeInfo {\n/// Software version.\n\npub version: String,\n/// Chain ID.\n\npub chain_id: String,\n/// Operating mode.\n\npub mode: NodeMode,\n/// Current block height.\n\npub current_height: u64,\n/// Current epoch number.\n\npub current_epoch: u64,\n/// Number of connected peers.\n\npub peer_count: usize,\n/// Whether the node has finished initial sync.\n\npub synced: bool,\n/// Current Tower slot number (Tower/Validator/Producer modes only).\n\n#[cfg(feature = \"tower\")]\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tower_slot: Option<u64>,\n/// Latest finalized epoch via Casper FFG (Tower modes only).\n\n#[cfg(feature = \"tower\")]\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub finalized_epoch: Option<u64>\n}",
              "docs": "Summary of the running node's state.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 482
            }
          ],
          "parseErrors": false
        },
        {
          "module": "admission",
          "source": "sigil/node/sigil-node/src/admission.rs",
          "sha256": "538ddd68a7841720c7bb7a69dc963e026f45d41371f3525cb0ff087d5b3b115a",
          "attributes": "",
          "items": [
            {
              "name": "admission::AdmissionRejectReason",
              "kind": "enum_item",
              "signature": "pub enum AdmissionRejectReason {\n    ChainId,\n    Signature,\n    SignerPolicy,\n    Replay,\n    Nonce,\n    GasBounds,\n    Hash,\n}",
              "docs": "Stable, bounded transaction rejection reasons shared across RPC, mempool,\nconsensus, and executor prechecks.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 14
            },
            {
              "name": "admission::NoncePolicy",
              "kind": "enum_item",
              "signature": "pub enum NoncePolicy {\n    /// Require `tx.nonce == state_nonce`; used by the executor and proposal\n    /// validation because they are final safety boundaries.\n    Exact,\n    /// Require `tx.nonce >= state_nonce`; used by RPC/mempool admission so a\n    /// sender can queue future nonces while stale nonces still fail closed.\n    AtLeastCurrent,\n    /// Skip nonce lookup. This is only for stateless transports/tests.\n    Skip,\n}",
              "docs": "How a state-backed admission call should compare the submitted nonce to the\ncurrent account nonce.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 27
            },
            {
              "name": "admission::PrecheckContext",
              "kind": "struct_item",
              "signature": "pub struct PrecheckContext<'a> {\n\n}",
              "docs": "Shared admission/precheck configuration.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 40
            },
            {
              "name": "admission::PrecheckContext<'a>::new",
              "kind": "function_item",
              "signature": "pub fn new(expected_chain_id: &'a str) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "admission::PrecheckContext<'a>::unbound",
              "kind": "function_item",
              "signature": "pub fn unbound() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "admission::PrecheckContext<'a>::with_tx_index",
              "kind": "function_item",
              "signature": "pub fn with_tx_index(mut self, tx_index: u32) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "admission::PrecheckContext<'a>::with_max_tx_gas",
              "kind": "function_item",
              "signature": "pub fn with_max_tx_gas(mut self, max_tx_gas: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "admission::PrecheckContext<'a>::with_min_gas_price",
              "kind": "function_item",
              "signature": "pub fn with_min_gas_price(mut self, min_gas_price: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "admission::PrecheckContext<'a>::with_nonce_policy",
              "kind": "function_item",
              "signature": "pub fn with_nonce_policy(mut self, nonce_policy: NoncePolicy) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "admission::AdmissionReject",
              "kind": "struct_item",
              "signature": "pub struct AdmissionReject {\n\n}",
              "docs": "Detailed rejection object. The public `reason` is stable; the message keeps\nenough context for logs and JSON-RPC errors without leaking signature-oracle\ndetail.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 94
            },
            {
              "name": "admission::AdmissionReject::reason",
              "kind": "function_item",
              "signature": "pub fn reason(&self) -> AdmissionRejectReason;",
              "docs": "",
              "attributes": "",
              "line": 107
            },
            {
              "name": "admission::AdmissionReject::public_message",
              "kind": "function_item",
              "signature": "pub fn public_message(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 111
            },
            {
              "name": "admission::AdmissionReject::rpc_error_code",
              "kind": "function_item",
              "signature": "pub fn rpc_error_code(&self) -> i32;",
              "docs": "",
              "attributes": "",
              "line": 115
            },
            {
              "name": "admission::AdmissionReject::into_node_error",
              "kind": "function_item",
              "signature": "pub fn into_node_error(self, partial_receipts: Vec<Receipt>) -> NodeError;",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "admission::precheck_transaction",
              "kind": "function_item",
              "signature": "pub fn precheck_transaction(\n    tx: &SignedTransaction,\n    state: Option<&dyn ExecutionState>,\n    ctx: PrecheckContext<'_>,\n) -> Result<SigilHash, AdmissionReject>;",
              "docs": "Run the shared transaction admission checks. Passing `state` enables replay\nand nonce checks according to `ctx.nonce_policy`; passing `None` still checks\nchain ID, signature, signer policy, hashability, and gas bounds.",
              "attributes": "",
              "line": 398
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bootstrap",
          "source": "sigil/node/sigil-node/src/bootstrap.rs",
          "sha256": "fa906252ae8d8694d78527fe3e0afe8073601c6401cd2d64772a6fd8ec940ba0",
          "attributes": "",
          "items": [
            {
              "name": "bootstrap::is_mainnet",
              "kind": "function_item",
              "signature": "pub fn is_mainnet(chain_id: &str) -> bool;",
              "docs": "Returns `true` when `chain_id` identifies a mainnet deployment.\n\nThe canonical convention is that every production chain ID begins with the\nprefix `\"sigil-mainnet-\"` (e.g. `\"sigil-mainnet-1\"`). Any other prefix \u2014\n`\"sigil-testnet-\"`, `\"sigil-devnet-\"`, `\"sigil-canary-\"`, etc. \u2014 is treated\nas a non-production network where auto-generation is still permitted.\n\nAdd new production chain IDs to the `MAINNET_PREFIXES` list below rather\nthan changing the calling convention.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "bootstrap::KeySource",
              "kind": "enum_item",
              "signature": "pub enum KeySource {\n    /// Keys were read from a pre-existing file (default path or\n    /// `--validator-key-path`). This is the only source permitted on mainnet.\n    PreProvisioned,\n    /// Keys were freshly generated from a deterministic DID-derived seed.\n    /// Only allowed on non-mainnet chains. A `tracing::warn` is emitted.\n    TestnetAutoGenerated,\n    /// No validator DID was supplied \u2014 this node is running in a non-validator\n    /// mode (RPC, Archive, Light, Observer).\n    #[default]\n    None,\n}",
              "docs": "Describes how validator keys were obtained during this bootstrap run.\n\n`main.rs` logs this so operators and monitoring can immediately distinguish\nthe three possible key origins. A mainnet node will never log any variant\nother than `PreProvisioned`.\n\nImplements `Default` (\u2192 `None`) so that serde's `#[serde(skip)]` on\n`BootstrapResult::key_source` can reconstruct the field during\ndeserialization without requiring `KeySource` to be serialized itself.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]",
              "line": 59
            },
            {
              "name": "bootstrap::ValidatorKeys",
              "kind": "struct_item",
              "signature": "pub struct ValidatorKeys {\n/// Ed25519 consensus public key (hex-encoded, 64 hex chars = 32 bytes).\n\npub consensus_pubkey: String,\n/// Ed25519 consensus secret key (hex-encoded, 128 hex chars = 64 bytes).\n\n/// NEVER log or transmit this value.\n\npub consensus_secret: String,\n/// P2P network public key (hex-encoded).\n\npub network_pubkey: String,\n/// P2P network secret key (hex-encoded).\n\n/// NEVER log or transmit this value.\n\npub network_secret: String,\n/// OAS DID associated with this key set.\n\npub validator_did: String,\n/// Tower attestation gossip listen address (e.g. \"0.0.0.0:26660\").\n\n///\n\n/// Sourced from `--tower-addr` CLI flag and stored here so\n\n/// `BlockEngine::new` can access it without needing `NodeConfig`.\n\n#[serde(default = \"default_tower_addr\")]\npub tower_addr: String,\n/// Geographic region label for Tower committee diversity.\n\n///\n\n/// Sourced from `--tower-region` CLI flag and stored here so\n\n/// `BlockEngine::new` can log the region when starting the Tower runtime.\n\n#[serde(default)]\npub tower_region: Option<String>\n}",
              "docs": "Validator key material stored on disk.\n\nOn mainnet these keys **must** be generated by a hardware security module or\nsecure enclave and written to the data directory before node startup. See\n`docs/operator/validator-key-provisioning.md`.\n\nOn testnet/devnet/canary networks the node may auto-generate deterministic\nkeys from the validator DID for convenience, but a loud warning is emitted.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 139
            },
            {
              "name": "bootstrap::InitialState",
              "kind": "struct_item",
              "signature": "pub struct InitialState {\n/// Genesis state root hash (BLAKE3 of the serialized genesis config).\n\npub state_root: SigilHash,\n/// Chain ID from the genesis config.\n\npub chain_id: String,\n/// Genesis timestamp.\n\npub genesis_time: u64,\n/// Number of initial validators.\n\npub validator_count: usize,\n/// Total staked amount at genesis.\n\npub total_stake: u64,\n/// Total initial balance supply.\n\npub total_balance: u64,\n/// Protocol version at genesis.\n\npub protocol_version: String\n}",
              "docs": "Initial state snapshot derived from the genesis configuration.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 172
            },
            {
              "name": "bootstrap::SeedNode",
              "kind": "struct_item",
              "signature": "pub struct SeedNode {\n/// Multiaddr-style address (e.g., \"/ip4/1.2.3.4/tcp/26656/p2p/PEER_ID\").\n\npub address: String,\n/// Optional human-readable label.\n\npub label: Option<String>\n}",
              "docs": "Seed node entry for P2P bootstrap.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 191
            },
            {
              "name": "bootstrap::BootstrapResult",
              "kind": "struct_item",
              "signature": "pub struct BootstrapResult {\n/// Path to the data directory that was initialized.\n\npub data_dir: String,\n/// The initial state derived from genesis.\n\npub initial_state: InitialState,\n/// Validator keys if this node is a validator (None for RPC/observer nodes).\n\npub validator_keys: Option<ValidatorKeys>,\n/// Whether the data directory was freshly created vs already existed.\n\npub freshly_created: bool,\n/// How the validator keys were obtained. Used for startup logging and\n\n/// monitoring. On mainnet this must always be `KeySource::PreProvisioned`.\n\n#[serde(skip)]\npub key_source: KeySource\n}",
              "docs": "Bootstrap result containing all artifacts from node initialization.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 200
            },
            {
              "name": "bootstrap::init_data_directory",
              "kind": "function_item",
              "signature": "pub fn init_data_directory(data_dir: &Path) -> Result<bool, NodeError>;",
              "docs": "Initialize the data directory structure for a Sigil node.\n\nCreates the following subdirectories under `data_dir`:\n- `akashakv/`   \u2014 production block/index/query storage\n- `state/`      \u2014 state trie storage\n- `keys/`       \u2014 validator key material\n- `snapshots/`  \u2014 state snapshots\n- `logs/`       \u2014 structured logs\n- `wal/`        \u2014 write-ahead log\n\nReturns `true` if the directory was freshly created, `false` if it\nalready existed.",
              "attributes": "",
              "line": 227
            },
            {
              "name": "bootstrap::derive_initial_state",
              "kind": "function_item",
              "signature": "pub fn derive_initial_state(genesis: &GenesisConfig) -> Result<InitialState, NodeError>;",
              "docs": "Derive the initial state from a genesis configuration.\n\nThis computes the state root, tallies initial stakes and balances,\nand returns a summary of the genesis state.",
              "attributes": "",
              "line": 294
            },
            {
              "name": "bootstrap::validate_cli_chain_id_matches_genesis",
              "kind": "function_item",
              "signature": "pub fn validate_cli_chain_id_matches_genesis(\n    config_chain_id: &str,\n    genesis: &GenesisConfig,\n) -> Result<(), NodeError>;",
              "docs": "Verify that the CLI-selected chain ID matches the loaded genesis.\n\nStartup must fail before any subsystem accepts, gossips, or executes\ntransactions if the operator-selected chain ID is not the genesis chain ID.",
              "attributes": "",
              "line": 316
            },
            {
              "name": "bootstrap::validate_expected_genesis_hash",
              "kind": "function_item",
              "signature": "pub fn validate_expected_genesis_hash(\n    expected_hash: Option<&str>,\n    genesis: &GenesisConfig,\n) -> Result<(), NodeError>;",
              "docs": "Verify an operator-supplied genesis hash before startup continues.\n\nMainnet nodes must be started with an independently supplied hash so a bad\nConfigMap mount or stale local file cannot silently select a different\ngenesis. Non-mainnet nodes may omit the hash for developer ergonomics.",
              "attributes": "",
              "line": 334
            },
            {
              "name": "bootstrap::validate_mainnet_compute_quorum",
              "kind": "function_item",
              "signature": "pub fn validate_mainnet_compute_quorum(genesis: &GenesisConfig) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 369
            },
            {
              "name": "bootstrap::generate_testnet_validator_keys",
              "kind": "function_item",
              "signature": "pub fn generate_testnet_validator_keys(validator_did: &str) -> ValidatorKeys;",
              "docs": "Generate deterministic validator keys for **testnet use only**.\n\nDerives real Ed25519 keypairs from a deterministic seed (BLAKE3 hash of the\nDID). This ensures the same DID always produces the same keypair, enabling\nreproducible testnet setups.\n\n**WARNING \u2014 NOT FOR PRODUCTION**: The derivation seed is computed from a\npublic DID string, making it fully predictable to anyone who knows the DID.\nThis function is **never called on mainnet** \u2014 [`bootstrap_node`] enforces\nthe fail-closed policy. Do not bypass that policy.\n\nFor mainnet use an HSM-generated key or an offline-generated key file\nprovisioned before node startup.",
              "attributes": "",
              "line": 415
            },
            {
              "name": "bootstrap::write_validator_keys",
              "kind": "function_item",
              "signature": "pub fn write_validator_keys(data_dir: &Path, keys: &ValidatorKeys) -> Result<PathBuf, NodeError>;",
              "docs": "Write validator keys to the keys directory.\n\nThe keys are stored as `keys/validator_keys.json` under the data directory.\nFile permissions should be restricted to owner-only in production.",
              "attributes": "",
              "line": 445
            },
            {
              "name": "bootstrap::read_validator_keys_from",
              "kind": "function_item",
              "signature": "pub fn read_validator_keys_from(path: &Path) -> Result<Option<ValidatorKeys>, NodeError>;",
              "docs": "Read validator keys from a specific file path.\n\nReturns `None` if the file does not exist.",
              "attributes": "",
              "line": 471
            },
            {
              "name": "bootstrap::read_validator_keys",
              "kind": "function_item",
              "signature": "pub fn read_validator_keys(data_dir: &Path) -> Result<Option<ValidatorKeys>, NodeError>;",
              "docs": "Read validator keys from the default location inside `data_dir`.\n\nReturns `None` if the key file does not exist.",
              "attributes": "",
              "line": 496
            },
            {
              "name": "bootstrap::write_initial_state",
              "kind": "function_item",
              "signature": "pub fn write_initial_state(data_dir: &Path, state: &InitialState) -> Result<PathBuf, NodeError>;",
              "docs": "Write the initial state snapshot to the state directory.",
              "attributes": "",
              "line": 502
            },
            {
              "name": "bootstrap::parse_seed_nodes",
              "kind": "function_item",
              "signature": "pub fn parse_seed_nodes(content: &str) -> Vec<SeedNode>;",
              "docs": "Parse a seed nodes file into a list of `SeedNode` entries.\n\nThe file format is one address per line. Lines starting with `#` are\ncomments. Empty lines are ignored. Lines may optionally end with\n` # label` to provide a human-readable label.",
              "attributes": "",
              "line": 530
            },
            {
              "name": "bootstrap::bootstrap_node",
              "kind": "function_item",
              "signature": "pub fn bootstrap_node(\n    data_dir: &Path,\n    genesis: &GenesisConfig,\n    validator_did: Option<&str>,\n    validator_key_path: Option<&Path>,\n) -> Result<BootstrapResult, NodeError>;",
              "docs": "Full bootstrap procedure: initialize data dir, derive state, load or\n(testnet-only) auto-generate keys, and write everything to disk.\n\n# Arguments\n\n* `data_dir` \u2014 Root data directory for this node.\n* `genesis` \u2014 The validated genesis configuration.\n* `validator_did` \u2014 If set, this node acts as a validator for the given DID.\n* `validator_key_path` \u2014 When `Some`, read keys from this explicit path\n  instead of `<data_dir>/keys/validator_keys.json`. Useful for HSM-backed\n  FUSE mounts or sealed volumes.\n\n# Mainnet fail-closed policy\n\nWhen `genesis.chain_id` starts with `\"sigil-mainnet-\"`:\n\n- If `validator_did` is `Some` and no key file exists at the expected path,\n  the function returns [`NodeError::ProductionKeyMissing`] and the node\n  refuses to start.\n- Auto-generation via [`generate_testnet_validator_keys`] is **never\n  called** on mainnet regardless of any flags.\n\n# Testnet / devnet behaviour\n\nOn non-mainnet chains, if no key file is found the node auto-generates\ndeterministic keys and writes them to `<data_dir>/keys/validator_keys.json`.\nA `tracing::warn` is always emitted so the auto-generated origin is visible\nin logs and monitoring.",
              "attributes": "",
              "line": 583
            }
          ],
          "parseErrors": false
        },
        {
          "module": "compute_durable",
          "source": "sigil/node/sigil-node/src/compute_durable.rs",
          "sha256": "437021897c9eb2d2d32ce2847faeec14accea136edca2bf1de537c06e0707126",
          "attributes": "#[cfg(feature = \"compute\")]",
          "items": [
            {
              "name": "compute_durable::PREFIX_VIGIL_SUB",
              "kind": "const_item",
              "signature": "pub const PREFIX_VIGIL_SUB: &[u8];",
              "docs": "Reserved durable-state prefix for Vigils subscriptions.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 78
            },
            {
              "name": "compute_durable::PREFIX_VIGIL_INGESTOR",
              "kind": "const_item",
              "signature": "pub const PREFIX_VIGIL_INGESTOR: &[u8];",
              "docs": "Reserved durable-state prefix for Vigils ingestors.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 80
            },
            {
              "name": "compute_durable::PREFIX_VIGIL_DELIVERY",
              "kind": "const_item",
              "signature": "pub const PREFIX_VIGIL_DELIVERY: &[u8];",
              "docs": "Reserved durable-state prefix for Vigils delivery records.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 82
            },
            {
              "name": "compute_durable::PREFIX_VIGIL_CALLBACK",
              "kind": "const_item",
              "signature": "pub const PREFIX_VIGIL_CALLBACK: &[u8];",
              "docs": "Reserved durable-state prefix for scheduled Vigils callbacks.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 84
            },
            {
              "name": "compute_durable::DurableComputeStore",
              "kind": "struct_item",
              "signature": "pub struct DurableComputeStore {\n\n}",
              "docs": "Durable compute marketplace store backed by AkashaKV.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 176
            },
            {
              "name": "compute_durable::DurableComputeStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the compute marketplace.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 190
            },
            {
              "name": "compute_durable::DurableComputeStore::put_provider",
              "kind": "function_item",
              "signature": "pub fn put_provider(&self, p: &ComputeProvider) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 279
            },
            {
              "name": "compute_durable::DurableComputeStore::get_provider",
              "kind": "function_item",
              "signature": "pub fn get_provider(&self, did: &str) -> Result<Option<ComputeProvider>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 285
            },
            {
              "name": "compute_durable::DurableComputeStore::list_providers",
              "kind": "function_item",
              "signature": "pub fn list_providers(&self) -> Result<Vec<ComputeProvider>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 293
            },
            {
              "name": "compute_durable::DurableComputeStore::put_escrow",
              "kind": "function_item",
              "signature": "pub fn put_escrow(&self, e: &ComputeEscrow) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 305
            },
            {
              "name": "compute_durable::DurableComputeStore::get_escrow",
              "kind": "function_item",
              "signature": "pub fn get_escrow(&self, owner: &str) -> Result<Option<ComputeEscrow>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 311
            },
            {
              "name": "compute_durable::DurableComputeStore::list_escrows",
              "kind": "function_item",
              "signature": "pub fn list_escrows(&self) -> Result<Vec<ComputeEscrow>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 319
            },
            {
              "name": "compute_durable::DurableComputeStore::put_job",
              "kind": "function_item",
              "signature": "pub fn put_job(&self, j: &ComputeJob) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 331
            },
            {
              "name": "compute_durable::DurableComputeStore::get_job",
              "kind": "function_item",
              "signature": "pub fn get_job(&self, id: &str) -> Result<Option<ComputeJob>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 337
            },
            {
              "name": "compute_durable::DurableComputeStore::list_jobs",
              "kind": "function_item",
              "signature": "pub fn list_jobs(&self, filter: &JobIndexFilter) -> Result<Vec<ComputeJob>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 345
            },
            {
              "name": "compute_durable::DurableComputeStore::put_receipt",
              "kind": "function_item",
              "signature": "pub fn put_receipt(&self, r: &ComputeReceiptRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 369
            },
            {
              "name": "compute_durable::DurableComputeStore::get_receipt",
              "kind": "function_item",
              "signature": "pub fn get_receipt(&self, id: &str) -> Result<Option<ComputeReceiptRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 382
            },
            {
              "name": "compute_durable::DurableComputeStore::list_receipts",
              "kind": "function_item",
              "signature": "pub fn list_receipts(&self) -> Result<Vec<ComputeReceiptRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 390
            },
            {
              "name": "compute_durable::DurableComputeStore::list_settled_ids",
              "kind": "function_item",
              "signature": "pub fn list_settled_ids(&self) -> Result<Vec<String>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 400
            },
            {
              "name": "compute_durable::DurableComputeStore::is_settled",
              "kind": "function_item",
              "signature": "pub fn is_settled(&self, id: &str) -> Result<bool, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 411
            },
            {
              "name": "compute_durable::DurableComputeStore::is_tuple_settled",
              "kind": "function_item",
              "signature": "pub fn is_tuple_settled(\n        &self,\n        receipt_id: &str,\n        job_id: &str,\n        task_id: Option<&str>,\n    ) -> Result<bool, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 415
            },
            {
              "name": "compute_durable::DurableComputeStore::put_challenge",
              "kind": "function_item",
              "signature": "pub fn put_challenge(&self, c: &ComputeChallenge) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 427
            },
            {
              "name": "compute_durable::DurableComputeStore::get_challenge",
              "kind": "function_item",
              "signature": "pub fn get_challenge(&self, id: &str) -> Result<Option<ComputeChallenge>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 438
            },
            {
              "name": "compute_durable::DurableComputeStore::list_challenges",
              "kind": "function_item",
              "signature": "pub fn list_challenges(&self) -> Result<Vec<ComputeChallenge>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 446
            },
            {
              "name": "compute_durable::DurableComputeStore::list_challenges_by_receipt",
              "kind": "function_item",
              "signature": "pub fn list_challenges_by_receipt(\n        &self,\n        receipt_id: &str,\n    ) -> Result<Vec<ComputeChallenge>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 456
            },
            {
              "name": "compute_durable::DurableComputeStore::append_audit",
              "kind": "function_item",
              "signature": "pub fn append_audit(&self, mut event: ComputeAuditEvent) -> Result<u64, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 480
            },
            {
              "name": "compute_durable::DurableComputeStore::list_audit",
              "kind": "function_item",
              "signature": "pub fn list_audit(&self, query: &AuditQuery) -> Result<Vec<ComputeAuditEvent>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 499
            },
            {
              "name": "compute_durable::DurableComputeStore::append_reputation",
              "kind": "function_item",
              "signature": "pub fn append_reputation(&self, sig: &ComputeReputationSignal) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 526
            },
            {
              "name": "compute_durable::DurableComputeStore::list_reputation",
              "kind": "function_item",
              "signature": "pub fn list_reputation(\n        &self,\n        provider_did: &str,\n    ) -> Result<Vec<ComputeReputationSignal>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 537
            },
            {
              "name": "compute_durable::DurableComputeStore::list_all_reputation",
              "kind": "function_item",
              "signature": "pub fn list_all_reputation(\n        &self,\n    ) -> Result<std::collections::HashMap<String, Vec<ComputeReputationSignal>>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 552
            },
            {
              "name": "compute_durable::DurableComputeStore::put_maca_claim",
              "kind": "function_item",
              "signature": "pub fn put_maca_claim(&self, c: &MacaWorkClaim) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 570
            },
            {
              "name": "compute_durable::DurableComputeStore::get_maca_claim",
              "kind": "function_item",
              "signature": "pub fn get_maca_claim(&self, work_id: &SigilHash) -> Result<Option<MacaWorkClaim>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 575
            },
            {
              "name": "compute_durable::DurableComputeStore::list_maca_claims",
              "kind": "function_item",
              "signature": "pub fn list_maca_claims(&self) -> Result<Vec<MacaWorkClaim>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 583
            },
            {
              "name": "compute_durable::DurableComputeStore::put_maca_validation",
              "kind": "function_item",
              "signature": "pub fn put_maca_validation(&self, record: &MacaValidationRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 593
            },
            {
              "name": "compute_durable::DurableComputeStore::list_maca_validations",
              "kind": "function_item",
              "signature": "pub fn list_maca_validations(\n        &self,\n        work_id: &SigilHash,\n    ) -> Result<Vec<MacaValidationRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 603
            },
            {
              "name": "compute_durable::DurableComputeStore::list_all_maca_validations",
              "kind": "function_item",
              "signature": "pub fn list_all_maca_validations(&self) -> Result<Vec<MacaValidationRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 618
            },
            {
              "name": "compute_durable::DurableComputeStore::put_balance",
              "kind": "function_item",
              "signature": "pub fn put_balance(&self, did: &str, amount: u64) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 645
            },
            {
              "name": "compute_durable::DurableComputeStore::get_balance",
              "kind": "function_item",
              "signature": "pub fn get_balance(&self, did: &str) -> Result<Option<u64>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 649
            },
            {
              "name": "compute_durable::DurableComputeStore::list_balances",
              "kind": "function_item",
              "signature": "pub fn list_balances(&self) -> Result<Vec<(String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 660
            },
            {
              "name": "compute_durable::DurableComputeStore::put_identity",
              "kind": "function_item",
              "signature": "pub fn put_identity(&self, did: &str, document: &serde_json::Value) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 677
            },
            {
              "name": "compute_durable::DurableComputeStore::get_identity",
              "kind": "function_item",
              "signature": "pub fn get_identity(&self, did: &str) -> Result<Option<serde_json::Value>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 681
            },
            {
              "name": "compute_durable::DurableComputeStore::list_identities",
              "kind": "function_item",
              "signature": "pub fn list_identities(&self) -> Result<Vec<(String, serde_json::Value)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 700
            },
            {
              "name": "compute_durable::DurableComputeStore::put_vigil_subscription",
              "kind": "function_item",
              "signature": "pub fn put_vigil_subscription(\n        &self,\n        subscription: &sigil_core::vigil::VigilSubscription,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 719
            },
            {
              "name": "compute_durable::DurableComputeStore::get_vigil_subscription",
              "kind": "function_item",
              "signature": "pub fn get_vigil_subscription(\n        &self,\n        subscription_id: &SigilHash,\n    ) -> Result<Option<sigil_core::vigil::VigilSubscription>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 729
            },
            {
              "name": "compute_durable::DurableComputeStore::list_vigil_subscriptions",
              "kind": "function_item",
              "signature": "pub fn list_vigil_subscriptions(\n        &self,\n        subscriber_did: Option<&str>,\n        limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::VigilSubscription>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 739
            },
            {
              "name": "compute_durable::DurableComputeStore::put_vigil_ingestor",
              "kind": "function_item",
              "signature": "pub fn put_vigil_ingestor(\n        &self,\n        ingestor: &sigil_core::vigil::Ingestor,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 756
            },
            {
              "name": "compute_durable::DurableComputeStore::get_vigil_ingestor",
              "kind": "function_item",
              "signature": "pub fn get_vigil_ingestor(\n        &self,\n        ingestor_did: &str,\n    ) -> Result<Option<sigil_core::vigil::Ingestor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 766
            },
            {
              "name": "compute_durable::DurableComputeStore::list_vigil_ingestors",
              "kind": "function_item",
              "signature": "pub fn list_vigil_ingestors(&self) -> Result<Vec<sigil_core::vigil::Ingestor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 776
            },
            {
              "name": "compute_durable::DurableComputeStore::put_vigil_delivery",
              "kind": "function_item",
              "signature": "pub fn put_vigil_delivery(\n        &self,\n        record: &sigil_core::vigil::VigilDeliveryRecord,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 785
            },
            {
              "name": "compute_durable::DurableComputeStore::has_vigil_delivery",
              "kind": "function_item",
              "signature": "pub fn has_vigil_delivery(\n        &self,\n        subscription_id: &SigilHash,\n        event_id: &SigilHash,\n    ) -> Result<bool, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 799
            },
            {
              "name": "compute_durable::DurableComputeStore::list_vigil_delivery_history",
              "kind": "function_item",
              "signature": "pub fn list_vigil_delivery_history(\n        &self,\n        subscription_id: &SigilHash,\n        limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::VigilDeliveryRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 811
            },
            {
              "name": "compute_durable::DurableComputeStore::list_all_vigil_deliveries",
              "kind": "function_item",
              "signature": "pub fn list_all_vigil_deliveries(\n        &self,\n    ) -> Result<Vec<sigil_core::vigil::VigilDeliveryRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 832
            },
            {
              "name": "compute_durable::DurableComputeStore::schedule_vigil_callback",
              "kind": "function_item",
              "signature": "pub fn schedule_vigil_callback(\n        &self,\n        callback: &sigil_core::vigil::ScheduledVigilCallback,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 858
            },
            {
              "name": "compute_durable::DurableComputeStore::list_vigil_callbacks",
              "kind": "function_item",
              "signature": "pub fn list_vigil_callbacks(\n        &self,\n    ) -> Result<Vec<sigil_core::vigil::ScheduledVigilCallback>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 865
            },
            {
              "name": "compute_durable::DurableComputeStore::drain_vigil_callbacks_for_height",
              "kind": "function_item",
              "signature": "pub fn drain_vigil_callbacks_for_height(\n        &self,\n        height: u64,\n        limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::ScheduledVigilCallback>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 881
            },
            {
              "name": "compute_durable::DurableComputeStore::put_validator_record",
              "kind": "function_item",
              "signature": "pub fn put_validator_record(\n        &self,\n        record: &crate::executor::ValidatorRecord,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 915
            },
            {
              "name": "compute_durable::DurableComputeStore::get_validator_record",
              "kind": "function_item",
              "signature": "pub fn get_validator_record(\n        &self,\n        did: &str,\n    ) -> Result<Option<crate::executor::ValidatorRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 922
            },
            {
              "name": "compute_durable::DurableComputeStore::list_validator_records",
              "kind": "function_item",
              "signature": "pub fn list_validator_records(\n        &self,\n    ) -> Result<Vec<crate::executor::ValidatorRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 947
            },
            {
              "name": "compute_durable::DurableComputeStore::put_delegation_shares",
              "kind": "function_item",
              "signature": "pub fn put_delegation_shares(\n        &self,\n        delegator: &str,\n        validator: &str,\n        shares: u64,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 956
            },
            {
              "name": "compute_durable::DurableComputeStore::get_delegation_shares",
              "kind": "function_item",
              "signature": "pub fn get_delegation_shares(\n        &self,\n        delegator: &str,\n        validator: &str,\n    ) -> Result<Option<u64>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 972
            },
            {
              "name": "compute_durable::DurableComputeStore::list_delegations_for_delegator",
              "kind": "function_item",
              "signature": "pub fn list_delegations_for_delegator(\n        &self,\n        delegator: &str,\n    ) -> Result<Vec<(String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 991
            },
            {
              "name": "compute_durable::DurableComputeStore::list_delegations",
              "kind": "function_item",
              "signature": "pub fn list_delegations(&self) -> Result<Vec<(String, String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1018
            },
            {
              "name": "compute_durable::DurableComputeStore::put_delegation_unbonding",
              "kind": "function_item",
              "signature": "pub fn put_delegation_unbonding(\n        &self,\n        delegator: &str,\n        validator: &str,\n        claim: &crate::executor::DelegationUnbonding,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1051
            },
            {
              "name": "compute_durable::DurableComputeStore::get_delegation_unbonding",
              "kind": "function_item",
              "signature": "pub fn get_delegation_unbonding(\n        &self,\n        delegator: &str,\n        validator: &str,\n    ) -> Result<Option<crate::executor::DelegationUnbonding>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1067
            },
            {
              "name": "compute_durable::DurableComputeStore::clear_delegation_unbonding",
              "kind": "function_item",
              "signature": "pub fn clear_delegation_unbonding(\n        &self,\n        delegator: &str,\n        validator: &str,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1081
            },
            {
              "name": "compute_durable::DurableComputeStore::put_nonce",
              "kind": "function_item",
              "signature": "pub fn put_nonce(&self, did: &str, nonce: u64) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1101
            },
            {
              "name": "compute_durable::DurableComputeStore::get_nonce",
              "kind": "function_item",
              "signature": "pub fn get_nonce(&self, did: &str) -> Result<Option<u64>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1105
            },
            {
              "name": "compute_durable::DurableComputeStore::list_nonces",
              "kind": "function_item",
              "signature": "pub fn list_nonces(&self) -> Result<Vec<(String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1116
            },
            {
              "name": "compute_durable::DurableComputeStore::mark_tx_included",
              "kind": "function_item",
              "signature": "pub fn mark_tx_included(&self, tx_hash: &[u8; 32], block_height: u64) -> Result<(), NodeError>;",
              "docs": "Record `tx_hash` as included at `block_height`. Idempotent: writing\nthe same hash twice is harmless because the value encodes the\noriginating block height; the lookup path only inspects presence.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1145
            },
            {
              "name": "compute_durable::DurableComputeStore::has_tx_included",
              "kind": "function_item",
              "signature": "pub fn has_tx_included(&self, tx_hash: &[u8; 32]) -> Result<bool, NodeError>;",
              "docs": "Check whether `tx_hash` has been durably recorded as included.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1151
            },
            {
              "name": "compute_durable::DurableComputeStore::get_tx_included_height",
              "kind": "function_item",
              "signature": "pub fn get_tx_included_height(&self, tx_hash: &[u8; 32]) -> Result<Option<u64>, NodeError>;",
              "docs": "Return the block height at which `tx_hash` was recorded, if any.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1156
            },
            {
              "name": "compute_durable::DurableComputeStore::list_tx_included",
              "kind": "function_item",
              "signature": "pub fn list_tx_included(&self) -> Result<Vec<([u8; 32], u64)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1167
            },
            {
              "name": "compute_durable::DurableComputeStore::put_clock",
              "kind": "function_item",
              "signature": "pub fn put_clock(&self, epoch: u64, height: u64) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1189
            },
            {
              "name": "compute_durable::DurableComputeStore::get_clock",
              "kind": "function_item",
              "signature": "pub fn get_clock(&self) -> Result<(u64, u64), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1196
            },
            {
              "name": "compute_durable::DurableComputeStore::put_policy",
              "kind": "function_item",
              "signature": "pub fn put_policy(&self, policy: &ComputePolicy) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1209
            },
            {
              "name": "compute_durable::DurableComputeStore::get_policy",
              "kind": "function_item",
              "signature": "pub fn get_policy(&self) -> Result<Option<ComputePolicy>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1213
            },
            {
              "name": "compute_durable::DurableComputeStore::put_validator_agent",
              "kind": "function_item",
              "signature": "pub fn put_validator_agent(&self, r: &ValidatorAgentRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1222
            },
            {
              "name": "compute_durable::DurableComputeStore::get_validator_agent",
              "kind": "function_item",
              "signature": "pub fn get_validator_agent(\n        &self,\n        agent_did: &str,\n    ) -> Result<Option<ValidatorAgentRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1228
            },
            {
              "name": "compute_durable::DurableComputeStore::list_validator_agents",
              "kind": "function_item",
              "signature": "pub fn list_validator_agents(&self) -> Result<Vec<ValidatorAgentRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1238
            },
            {
              "name": "compute_durable::DurableComputeStore::put_beacon",
              "kind": "function_item",
              "signature": "pub fn put_beacon(&self, r: &BeaconRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1248
            },
            {
              "name": "compute_durable::DurableComputeStore::get_beacon",
              "kind": "function_item",
              "signature": "pub fn get_beacon(&self, epoch_id: u64) -> Result<Option<BeaconRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1254
            },
            {
              "name": "compute_durable::DurableComputeStore::put_maca_epoch",
              "kind": "function_item",
              "signature": "pub fn put_maca_epoch(&self, e: &MacaEpoch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1261
            },
            {
              "name": "compute_durable::DurableComputeStore::get_maca_epoch",
              "kind": "function_item",
              "signature": "pub fn get_maca_epoch(&self, epoch_id: u64) -> Result<Option<MacaEpoch>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1267
            },
            {
              "name": "compute_durable::DurableComputeStore::list_maca_epochs",
              "kind": "function_item",
              "signature": "pub fn list_maca_epochs(&self, query: &EpochQuery) -> Result<Vec<MacaEpoch>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1274
            },
            {
              "name": "compute_durable::DurableComputeStore::put_epoch_attestation",
              "kind": "function_item",
              "signature": "pub fn put_epoch_attestation(\n        &self,\n        record: &MacaValidationRecord,\n        epoch_id: u64,\n    ) -> Result<(), NodeError>;",
              "docs": "Append an attestation to the per-epoch index. Stored under\n`compute/epoch_att/<epoch_id BE>/<work_id 32B>/<validator_did>`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1292
            },
            {
              "name": "compute_durable::DurableComputeStore::list_epoch_attestations",
              "kind": "function_item",
              "signature": "pub fn list_epoch_attestations(\n        &self,\n        epoch_id: u64,\n        work_id: &SigilHash,\n    ) -> Result<Vec<MacaValidationRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1310
            },
            {
              "name": "compute_durable::DurableComputeStore::put_quorum_proof",
              "kind": "function_item",
              "signature": "pub fn put_quorum_proof(&self, p: &MacaQuorumProof) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1329
            },
            {
              "name": "compute_durable::DurableComputeStore::get_quorum_proof",
              "kind": "function_item",
              "signature": "pub fn get_quorum_proof(\n        &self,\n        epoch_id: u64,\n        work_id: &SigilHash,\n    ) -> Result<Option<MacaQuorumProof>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1339
            },
            {
              "name": "compute_durable::DurableComputeStore::list_quorum_proofs",
              "kind": "function_item",
              "signature": "pub fn list_quorum_proofs(&self, epoch_id: u64) -> Result<Vec<MacaQuorumProof>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1355
            },
            {
              "name": "compute_durable::DurableComputeStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of the underlying AkashaKV memtables to SSTables.\nUseful in tests that drop and reopen the store at the same path\nto verify durability without waiting for the background flush.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1371
            },
            {
              "name": "compute_durable::DurableComputeStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1378
            },
            {
              "name": "compute_durable::DurableComputeStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the namespace prefix used by every compute key\nso callers can co-locate other data under different roots without\nrisk of collision.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1387
            },
            {
              "name": "compute_durable::DurableComputeStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &ComputeWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV MVCC\ntransaction.\n\nAtomicity guarantee: if any individual operation fails (encoding error\nor storage error) the transaction is dropped (auto-aborted via `Drop`)\nbefore it can be committed, leaving zero partial state visible. Either\nevery operation in the batch lands or none of them do.\n\nThis is the only write path that compute transaction handlers should use\nafter the handler has finished its read-only checks.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1403
            },
            {
              "name": "compute_durable::ArcStore",
              "kind": "type_item",
              "signature": "pub type ArcStore = Arc<DurableComputeStore>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1595
            },
            {
              "name": "compute_durable::ComputeBatchOp",
              "kind": "enum_item",
              "signature": "pub enum ComputeBatchOp {\n    PutProvider(ComputeProvider),\n    PutEscrow(ComputeEscrow),\n    PutJob(ComputeJob),\n    /// Puts both the receipt record and the settled-marker in one atomic op.\n    PutReceipt(ComputeReceiptRecord),\n    PutChallenge(ComputeChallenge),\n    AppendAudit(ComputeAuditEvent),\n    AppendReputation(ComputeReputationSignal),\n    PutMacaWorkClaim(MacaWorkClaim),\n    PutMacaValidationRecord(MacaValidationRecord),\n    PutBalance(String, u64),\n    PutClock(u64, u64),\n    PutPolicy(ComputePolicy),\n    PutValidatorAgent(ValidatorAgentRecord),\n    PutBeacon(BeaconRecord),\n    PutMacaEpoch(MacaEpoch),\n    PutQuorumProof(MacaQuorumProof),\n}",
              "docs": "An individual operation inside a [`ComputeWriteBatch`].\n\nCloning is derived from the inner state types which already implement\n`Clone`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Clone)]",
              "line": 1606
            },
            {
              "name": "compute_durable::ComputeWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct ComputeWriteBatch {\n\n}",
              "docs": "Write batch accumulating all mutations for a single compute executor\nhandler.  Commit the batch via [`crate::executor::ExecutionState::commit_compute_tx`]\nat the end of the handler to apply all mutations atomically.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Default)]",
              "line": 1630
            },
            {
              "name": "compute_durable::ComputeWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1636
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_provider",
              "kind": "function_item",
              "signature": "pub fn put_provider(&mut self, p: ComputeProvider);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1640
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_escrow",
              "kind": "function_item",
              "signature": "pub fn put_escrow(&mut self, e: ComputeEscrow);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1644
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_job",
              "kind": "function_item",
              "signature": "pub fn put_job(&mut self, j: ComputeJob);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1648
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_receipt",
              "kind": "function_item",
              "signature": "pub fn put_receipt(&mut self, r: ComputeReceiptRecord);",
              "docs": "Put a receipt record and its settled marker atomically.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1653
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_challenge",
              "kind": "function_item",
              "signature": "pub fn put_challenge(&mut self, c: ComputeChallenge);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1657
            },
            {
              "name": "compute_durable::ComputeWriteBatch::append_audit",
              "kind": "function_item",
              "signature": "pub fn append_audit(&mut self, ev: ComputeAuditEvent);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1661
            },
            {
              "name": "compute_durable::ComputeWriteBatch::append_reputation",
              "kind": "function_item",
              "signature": "pub fn append_reputation(&mut self, sig: ComputeReputationSignal);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1665
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_maca_work_claim",
              "kind": "function_item",
              "signature": "pub fn put_maca_work_claim(&mut self, c: MacaWorkClaim);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1669
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_maca_validation_record",
              "kind": "function_item",
              "signature": "pub fn put_maca_validation_record(&mut self, r: MacaValidationRecord);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1673
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_balance",
              "kind": "function_item",
              "signature": "pub fn put_balance(&mut self, did: String, amount: u64);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1677
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_clock",
              "kind": "function_item",
              "signature": "pub fn put_clock(&mut self, epoch: u64, height: u64);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1681
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_policy",
              "kind": "function_item",
              "signature": "pub fn put_policy(&mut self, policy: ComputePolicy);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1685
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_validator_agent",
              "kind": "function_item",
              "signature": "pub fn put_validator_agent(&mut self, r: ValidatorAgentRecord);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1689
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_beacon",
              "kind": "function_item",
              "signature": "pub fn put_beacon(&mut self, r: BeaconRecord);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1693
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_maca_epoch",
              "kind": "function_item",
              "signature": "pub fn put_maca_epoch(&mut self, e: MacaEpoch);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1697
            },
            {
              "name": "compute_durable::ComputeWriteBatch::put_quorum_proof",
              "kind": "function_item",
              "signature": "pub fn put_quorum_proof(&mut self, p: MacaQuorumProof);",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1701
            },
            {
              "name": "compute_durable::ComputeWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued in this batch.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1706
            },
            {
              "name": "compute_durable::ComputeWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1711
            },
            {
              "name": "compute_durable::ComputeWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<ComputeBatchOp>;",
              "docs": "Consume the batch and return the inner op list.\n\nUsed by the in-memory `MemoryExecutionState::commit_compute_tx` path\nto iterate ops without an extra clone.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1719
            }
          ],
          "parseErrors": false
        },
        {
          "module": "compute_state",
          "source": "sigil/node/sigil-node/src/compute_state.rs",
          "sha256": "4d3972f1807f71d929091f0a1bb937a72d80d993b28821996f64b4250188d5c0",
          "attributes": "#[cfg(feature = \"compute\")]",
          "items": [
            {
              "name": "compute_state::receipt_settlement_tuple_key",
              "kind": "function_item",
              "signature": "pub fn receipt_settlement_tuple_key(\n    receipt_id: &str,\n    job_id: &str,\n    task_id: Option<&str>,\n) -> String;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 17
            },
            {
              "name": "compute_state::ProviderTier",
              "kind": "enum_item",
              "signature": "pub enum ProviderTier {\n    Consumer,\n    Professional,\n    Enterprise,\n    Cluster,\n}",
              "docs": "Provider stake tier \u2014 copy of arise-bridge's ProviderTier on-chain.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 32
            },
            {
              "name": "compute_state::ProviderTier::min_stake",
              "kind": "function_item",
              "signature": "pub fn min_stake(self) -> u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 40
            },
            {
              "name": "compute_state::ProviderTier::from_stake",
              "kind": "function_item",
              "signature": "pub fn from_stake(stake: u64) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 49
            },
            {
              "name": "compute_state::ProviderStatus",
              "kind": "enum_item",
              "signature": "pub enum ProviderStatus {\n    Active,\n    Suspended,\n    Exiting,\n    Exited,\n}",
              "docs": "Operational status of a registered provider.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 65
            },
            {
              "name": "compute_state::ComputeProvider",
              "kind": "struct_item",
              "signature": "pub struct ComputeProvider {\npub provider_did: String,\npub human_root_did: Option<String>,\npub tier: ProviderTier,\npub stake: u64,\npub pricing: ComputePricing,\npub supported_models: Vec<String>,\npub capabilities: Option<serde_json::Value>,\npub endpoint_url: Option<String>,\npub verification_tiers: Vec<ComputeVerificationTier>,\npub hardware_attestation: Option<serde_json::Value>,\npub provider_pubkey: Option<Vec<u8>>,\n#[serde(default)]\npub relayer_dids: Vec<String>,\npub status: ProviderStatus,\npub registered_epoch: u64,\npub last_updated_epoch: u64,\npub unbonding_until_epoch: Option<u64>,\npub active_jobs: u64,\npub unresolved_challenges: u64,\n/// Aggregate reputation score (signed). Updated by reputation signals.\n\npub reputation: i64\n}",
              "docs": "On-chain compute provider record.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 74
            },
            {
              "name": "compute_state::ComputeEscrow",
              "kind": "struct_item",
              "signature": "pub struct ComputeEscrow {\npub owner_did: String,\npub available_balance: u64,\npub reserved_balance: u64,\npub mandate_id: Option<String>,\npub budget_limit: Option<u64>,\npub last_updated_epoch: u64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]",
              "line": 103
            },
            {
              "name": "compute_state::ComputeEscrow::total",
              "kind": "function_item",
              "signature": "pub fn total(&self) -> u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 113
            },
            {
              "name": "compute_state::JobStatus",
              "kind": "enum_item",
              "signature": "pub enum JobStatus {\n    Pending,\n    Dispatched,\n    Running,\n    Completed,\n    Failed,\n    Challenged,\n    Refunded,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 124
            },
            {
              "name": "compute_state::JobStatus::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(self) -> bool;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 135
            },
            {
              "name": "compute_state::JobStatus::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(self) -> bool;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 138
            },
            {
              "name": "compute_state::JobStatus::allows_receipt_settlement",
              "kind": "function_item",
              "signature": "pub fn allows_receipt_settlement(self) -> bool;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 142
            },
            {
              "name": "compute_state::ComputeJob",
              "kind": "struct_item",
              "signature": "pub struct ComputeJob {\npub job_id: String,\npub consumer_did: String,\npub provider_did: String,\npub model_id: String,\npub input_hash: SigilHash,\npub max_cost: u64,\npub reserved_amount: u64,\npub verification_tier: ComputeVerificationTier,\npub status: JobStatus,\npub created_epoch: u64,\npub dispatched_epoch: Option<u64>,\npub completed_epoch: Option<u64>,\npub agent_did: Option<String>,\npub dao_did: Option<String>,\npub mandate_id: Option<String>,\npub treasury_did: Option<String>,\npub authority_context: Option<serde_json::Value>,\npub receipt_id: Option<String>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 148
            },
            {
              "name": "compute_state::ComputeReceiptRecord",
              "kind": "struct_item",
              "signature": "pub struct ComputeReceiptRecord {\npub receipt: ComputeReceipt,\npub settled_epoch: u64,\npub challenge_window_until_epoch: u64,\npub challenged: bool\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 174
            },
            {
              "name": "compute_state::ChallengeState",
              "kind": "enum_item",
              "signature": "pub enum ChallengeState {\n    Open,\n    Resolving,\n    Resolved,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 187
            },
            {
              "name": "compute_state::ComputeChallenge",
              "kind": "struct_item",
              "signature": "pub struct ComputeChallenge {\npub challenge_id: String,\npub receipt_id: String,\npub challenger_did: String,\npub deposit: u64,\npub evidence: serde_json::Value,\npub opened_at_epoch: u64,\npub state: ChallengeState,\npub resolution: Option<ChallengeResolution>,\npub resolved_at_epoch: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 194
            },
            {
              "name": "compute_state::AuditAggregate",
              "kind": "enum_item",
              "signature": "pub enum AuditAggregate {\n    Provider,\n    Escrow,\n    Job,\n    Receipt,\n    Challenge,\n    Maca,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 212
            },
            {
              "name": "compute_state::ComputeAuditEvent",
              "kind": "struct_item",
              "signature": "pub struct ComputeAuditEvent {\npub aggregate: AuditAggregate,\npub seq: u64,\npub epoch: u64,\npub block_height: u64,\npub kind: String,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 222
            },
            {
              "name": "compute_state::ReputationSignalKind",
              "kind": "enum_item",
              "signature": "pub enum ReputationSignalKind {\n    JobCompleted,\n    LatencyAccurate,\n    Available,\n    ChallengeSurvived,\n    ChallengeLost,\n    InvalidReceipt,\n    InvalidProofCommitment,\n    RedundantOutlier,\n    ValidatorAgreement,\n    TeeAttestationFresh,\n    JobFailed,\n    StorageChallengeFailed,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 237
            },
            {
              "name": "compute_state::ComputeReputationSignal",
              "kind": "struct_item",
              "signature": "pub struct ComputeReputationSignal {\npub provider_did: String,\npub kind: ReputationSignalKind,\npub weight: i32,\npub at_epoch: u64,\npub evidence_seq: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 253
            },
            {
              "name": "compute_state::MacaWorkClaim",
              "kind": "struct_item",
              "signature": "pub struct MacaWorkClaim {\npub work_id: SigilHash,\npub receipt_id: String,\npub worker_did: String,\npub consumer_did: String,\npub agent_did: Option<String>,\npub dao_did: Option<String>,\npub mandate_id: Option<String>,\npub verification_tier: ComputeVerificationTier,\npub commitments: ComputeEvidenceCommitment,\npub authority_context: Option<serde_json::Value>,\npub worker_signature: Vec<u8>,\npub worker_pubkey: Vec<u8>,\npub epoch_settled: u64,\npub challenge_window_until_epoch: u64,\npub tee_attestation: Option<TeeAttestation>,\npub lumen_attestation: Option<sigil_core::transaction::LumenAttestation>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 266
            },
            {
              "name": "compute_state::MacaWorkClaim::derive_work_id",
              "kind": "function_item",
              "signature": "pub fn derive_work_id(receipt_id: &str, worker_did: &str, epoch: u64) -> SigilHash;",
              "docs": "Canonical work id derivation: BLAKE3(receipt_id || worker_did || epoch_le).",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 287
            },
            {
              "name": "compute_state::MacaValidationRecord",
              "kind": "struct_item",
              "signature": "pub struct MacaValidationRecord {\npub attestation: AgentVerificationAttestation,\npub recorded_at_epoch: u64,\npub recorded_at_block: u64,\n/// Phase 12: epoch this attestation was submitted under (when the\n\n/// validator submitted via the on-chain `MacaSubmitAttestation` tx).\n\n/// `None` for records persisted directly by the executor before\n\n/// Phase 12 wiring.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub maca_epoch_id: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 294
            },
            {
              "name": "compute_state::ValidatorAgentRecord",
              "kind": "struct_item",
              "signature": "pub struct ValidatorAgentRecord {\npub agent_did: String,\npub role: ValidatorRole,\npub human_root_did: Option<String>,\npub agent_pubkey: Vec<u8>,\npub capabilities: Option<serde_json::Value>,\npub registered_epoch: u64,\npub last_updated_epoch: u64\n}",
              "docs": "On-chain validator agent record. Tracks the role and signing key the\nagent claimed at registration time. Authority gates (proposer/beacon\nallowlists) are still policy-driven; this record exists so attestations\ncan be cross-checked against the registered pubkey + role.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 315
            },
            {
              "name": "compute_state::BeaconRecord",
              "kind": "struct_item",
              "signature": "pub struct BeaconRecord {\npub epoch_id: u64,\npub beacon_did: String,\npub beacon_value: SigilHash,\npub beacon_signature: Vec<u8>,\npub published_at_epoch: u64,\npub published_at_block: u64\n}",
              "docs": "On-chain beacon publication for a single epoch.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 327
            },
            {
              "name": "compute_state::MacaEpoch",
              "kind": "struct_item",
              "signature": "pub struct MacaEpoch {\npub epoch_id: u64,\n/// `BLAKE3(epoch_id LE || proposer_did || beacon_value || start_block_height\n\n///         LE || end_block_height LE || sorted_included_work_ids)`.\n\n/// Replay-safe: identical inputs always yield the same hash.\n\npub epoch_hash: SigilHash,\npub proposer_did: String,\npub beacon_value: SigilHash,\npub start_block_height: u64,\npub end_block_height: u64,\n/// Sorted ascending so the canonical hash is order-independent.\n\npub included_work_ids: Vec<SigilHash>,\npub state: MacaEpochState,\npub proposed_at_epoch: u64,\npub proposed_at_block: u64,\npub finalized_at_epoch: Option<u64>,\npub proposer_signature: Vec<u8>\n}",
              "docs": "On-chain MACA epoch record. Aggregates open work claims and (after\nfinalization) the per-work `MacaQuorumProof`s.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 339
            },
            {
              "name": "compute_state::MacaEpoch::canonical_hash",
              "kind": "function_item",
              "signature": "pub fn canonical_hash(\n        epoch_id: u64,\n        proposer_did: &str,\n        beacon_value: &SigilHash,\n        start_block_height: u64,\n        end_block_height: u64,\n        sorted_work_ids: &[SigilHash],\n    ) -> SigilHash;",
              "docs": "Canonical replay-safe hash. Used by tests and the executor to\ndeduplicate and to check that a re-proposal of the same epoch\n(with the same content) produces the same `epoch_hash`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 362
            },
            {
              "name": "compute_state::MacaQuorumProof",
              "kind": "struct_item",
              "signature": "pub struct MacaQuorumProof {\n/// `BLAKE3(epoch_id LE || work_id || sorted_validator_dids || sorted_signatures)`\n\n/// \u2014 replay-safe.\n\npub proof_id: SigilHash,\npub epoch_id: u64,\npub work_id: SigilHash,\npub outcome: QuorumOutcome,\n/// Sorted ascending.\n\npub agreeing_validators: Vec<String>,\n/// Sorted ascending.\n\npub dissenting_validators: Vec<String>,\n/// Validators that submitted Indeterminate or whose attestation could\n\n/// not be classified (e.g. missing output_hash).\n\npub indeterminate_validators: Vec<String>,\n/// `(validator_did, validator_signature)` pairs sorted by `validator_did`.\n\npub validator_signatures: Vec<(String, Vec<u8>)>,\npub quorum_threshold: u32,\npub finalized_at_epoch: u64,\npub finalized_at_block: u64\n}",
              "docs": "Per-work-claim aggregate of validator attestations. Created when an\nepoch is finalized.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 389
            },
            {
              "name": "compute_state::MacaQuorumProof::canonical_hash",
              "kind": "function_item",
              "signature": "pub fn canonical_hash(\n        epoch_id: u64,\n        work_id: &SigilHash,\n        sorted_validators: &[(String, Vec<u8>)],\n    ) -> SigilHash;",
              "docs": "Canonical replay-safe hash over `(epoch_id, work_id, sorted\nvalidator dids, sorted signatures)`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 413
            },
            {
              "name": "compute_state::EpochQuery",
              "kind": "struct_item",
              "signature": "pub struct EpochQuery {\npub state: Option<MacaEpochState>,\npub limit: Option<u32>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 431
            },
            {
              "name": "compute_state::JobIndexFilter",
              "kind": "struct_item",
              "signature": "pub struct JobIndexFilter {\npub by_provider: Option<String>,\npub by_consumer: Option<String>,\npub status: Option<JobStatus>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 441
            },
            {
              "name": "compute_state::AuditQuery",
              "kind": "struct_item",
              "signature": "pub struct AuditQuery {\npub aggregate: Option<AuditAggregate>,\npub after_seq: Option<u64>,\npub limit: Option<u32>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 448
            },
            {
              "name": "compute_state::ComputePolicy",
              "kind": "struct_item",
              "signature": "pub struct ComputePolicy {\n/// Allowlist of DIDs that may resolve compute challenges. The executor\n\n/// MUST fail closed when the sender is not in this list. An empty list\n\n/// disables challenge resolution entirely.\n\npub challenge_resolver_dids: Vec<String>,\n/// When `true`, T3 (TEE) receipts may settle. When `false`, the\n\n/// executor refuses T3 settlement.\n\npub tee_verifier_enabled: bool,\n/// Provider exit cooldown in epochs.\n\npub unbonding_epochs: u64,\n/// Default challenger deposit (micro-MINT) when the tx omits one.\n\npub default_challenge_deposit: u64,\n/// Default challenge window in epochs (used when the receipt does not\n\n/// pin one).\n\npub default_challenge_window_epochs: u32,\n/// Default reward shares applied when `ChallengeResolveData.reward_shares`\n\n/// is `None`. `(challenger, arbitrators, treasury)`. Must sum to 1.0.\n\npub default_reward_shares: (f64, f64, f64),\n/// Treasury DID (paid arbitrator + treasury shares).\n\npub treasury_did: String,\n/// Phase 12 \u2014 DIDs authorised to submit `MacaProposeEpoch` and\n\n/// `MacaFinalizeEpoch` transactions. Empty list disables MACA epoch\n\n/// proposal entirely (fail-closed).\n\n#[serde(default)]\npub proposer_dids: Vec<String>,\n/// Phase 12 \u2014 DIDs authorised to submit `MacaPublishBeacon`. Empty\n\n/// list disables beacon publication.\n\n#[serde(default)]\npub beacon_dids: Vec<String>,\n/// Phase 12 \u2014 minimum number of agreeing validators required for a\n\n/// `MacaQuorumProof` to be `Confirmed`. Below this, the outcome is\n\n/// `Inconclusive` (no clear majority) or `Rejected` (majority\n\n/// disagreement).\n\n#[serde(default = \"default_validator_quorum_threshold\")]\npub validator_quorum_threshold: u32,\n/// Protocol escape hatch for receipts that are not bound to a stored job.\n\n/// Mainnet and canary keep this off; tests and explicitly named ad-hoc\n\n/// networks may enable it while they migrate dispatch to durable jobs.\n\n#[serde(default)]\npub allow_ad_hoc_receipts: bool,\n/// Phase 14a \u2014 AMD SEV-SNP trust anchors. When `None`, the SEV-SNP\n\n/// verifier remains the Phase 13 fail-closed stub. When set, the\n\n/// verifier accepts an attestation iff (a) its 1184-byte report\n\n/// signature verifies against one of the allowlisted VCEK pubkeys,\n\n/// (b) the report's MEASUREMENT field is on the measurement\n\n/// allowlist. Cert-chain validation (VCEK \u2192 ASK \u2192 ARK) and\n\n/// REPORT_DATA / freshness binding are deferred to Phase 14a-2.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub sev_snp_trust_anchors: Option<SevSnpTrustAnchors>,\n/// Phase 14b \u2014 Intel SGX DCAP trust anchor material. When `Some`\n\n/// and the `tee-verify-sgx-dcap` feature is compiled in, the verifier\n\n/// validates DCAP Quote v3 against the configured Intel root /\n\n/// MRENCLAVE / MRSIGNER allowlists, REPORT_DATA binding, freshness\n\n/// window, and TCB minimum.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub sgx_dcap_trust_anchors: Option<SgxDcapTrustAnchors>,\n/// Phase 14c \u2014 Intel TDX trust anchor material. When `Some` and\n\n/// the `tee-verify-tdx` feature is compiled in, the verifier\n\n/// validates DCAP Quote v4 (TDX) against the configured Intel\n\n/// root, MRTD / MRSIGNER_SEAM / RTMR allowlists, REPORT_DATA\n\n/// binding, collateral, and TCB minima.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tdx_trust_anchors: Option<TdxTrustAnchors>,\n/// Phase 14d \u2014 Arm CCA (Confidential Compute Architecture) trust\n\n/// anchor material. When `Some` and the `tee-verify-arm-cca`\n\n/// feature is compiled in, the verifier validates a CCA realm\n\n/// token (COSE_Sign1 + CBOR EAT-style claims) against the pinned\n\n/// IAK pubkey, RIM allowlist, challenge binding, and freshness\n\n/// window.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub arm_cca_trust_anchors: Option<ArmCcaTrustAnchors>\n}",
              "docs": "Snapshot of the chain config the compute executor consults at every\ntransaction. Loaded from `genesis::ComputeParams` by the production\nstate backend; the trait default in `ExecutionState::compute_policy`\nreturns `fail_closed()` so a backend that forgets to wire genesis\nrejects all challenge-resolves and T3 settlements.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 464
            },
            {
              "name": "compute_state::SevSnpTrustAnchors",
              "kind": "struct_item",
              "signature": "pub struct SevSnpTrustAnchors {\n/// SEC1 uncompressed P-384 pubkeys (`0x04 || x || y`, 97 bytes each).\n\n/// May be empty if `pinned_ark_fingerprint_sha256` is set.\n\n#[serde(default)]\npub acceptable_vcek_pubkeys: Vec<Vec<u8>>,\n/// 48-byte SHA-384 measurements.\n\npub measurement_allowlist: Vec<Vec<u8>>,\n/// Phase 14a-2 \u2014 SHA-256 of the AMD ARK certificate (DER).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_ark_fingerprint_sha256: Option<[u8; 32]>,\n/// Phase 14a-2 \u2014 SHA-256 of the AMD ASK / product signing\n\n/// certificate (DER).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_ask_fingerprint_sha256: Option<[u8; 32]>,\n/// Phase 14a-2 \u2014 optional exact VCEK allowlist by chip ID and TCB.\n\n#[serde(default)]\npub vcek_allowlist: Vec<SevSnpVcekAllowlistEntry>,\n/// Phase 14a-2 \u2014 maximum attestation age (in chain epochs).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n/// Phase 14a-2 \u2014 minimum SEV-SNP TCB version.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_tcb: Option<SevSnpTcb>,\n/// Phase 14a-2 \u2014 require REPORT_DATA receipt-binding.\n\n#[serde(default)]\npub require_receipt_binding: bool\n}",
              "docs": "Phase 14a / 14a-2 \u2014 AMD SEV-SNP trust anchor material.\n\n`acceptable_vcek_pubkeys`: SEC1-encoded **uncompressed** P-384 public\nkeys (97 bytes each: `0x04 || x || y`). Operators may pre-pin one\nentry per CPU they accept attestations from. When\n`pinned_ark_fingerprint_sha256` is set, the verifier instead extracts\nthe VCEK pubkey from the cert chain in the attestation envelope after\nvalidating VCEK \u2192 ASK \u2192 ARK against the pinned root, and the\npre-pinned key list becomes optional (kept for operators that want\nbelt-and-braces).\n\n`measurement_allowlist`: 48-byte SHA-384 launch / image measurements\nthe chain accepts. The verifier compares the report's MEASUREMENT\nfield against this list and rejects if not present.\n\nPhase 14a-2 fields:\n\n`pinned_ark_fingerprint_sha256`: SHA-256 of the AMD ARK certificate\n(DER form). When set, every attestation must carry a cert chain whose\nterminal cert hashes to this value; intermediate ASK is verified\nagainst ARK; VCEK is verified against ASK. When `None`, the verifier\nfalls back to direct VCEK pubkey pinning (Phase 14a posture).\n\n`pinned_ask_fingerprint_sha256`: optional SHA-256 fingerprint of the\nAMD ASK / product signing certificate (DER form). When set, the\nverifier rejects any SEV-SNP chain whose ASK cert does not match this\nproduct anchor. This prevents a broad ARK pin from accidentally\naccepting the wrong AMD product line.\n\n`vcek_allowlist`: optional explicit CPU allowlist. Each entry binds\na chip ID to the exact reported TCB version accepted for that VCEK\nissuance, with an optional VCEK certificate fingerprint. When the\nlist is non-empty, every accepted report must match one entry.\n\n`max_attestation_age_epochs`: when set, the verifier requires\n`att.generated_at_epoch` to be within this many epochs of the\nexecutor's `now_epoch`. When `None`, freshness is not enforced\n(Phase 14a posture).\n\n`min_tcb`: minimum SEV-SNP TCB version the chain accepts. Each report\ncarries a `REPORTED_TCB` field at offset `0x180`; the verifier rejects\nreports where any pinned component is below the corresponding minimum.\nWhen `None`, TCB is not enforced (Phase 14a posture).\n\n`require_receipt_binding`: when true, the verifier requires the\nSEV-SNP report's `REPORT_DATA` field at offset `0x50..0x90` to match\nthe canonical 64-byte receipt-binding derivation. The settle path\ncomputes the expected binding from the receipt being settled and\npasses it to the verifier. Enabled independently of the other\nfields so operators can dial in production posture incrementally.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 592
            },
            {
              "name": "compute_state::SevSnpVcekAllowlistEntry",
              "kind": "struct_item",
              "signature": "pub struct SevSnpVcekAllowlistEntry {\n/// AMD KDS product name (`Milan`, `Genoa`, `Turin`, ...). The current\n\n/// verifier treats this as operator/audit metadata because the report\n\n/// carries chip ID and TCB, not a product string.\n\npub product: String,\n/// 64-byte chip ID (`CHIP_ID`) from the SEV-SNP report / VCEK HWID.\n\npub chip_id: Vec<u8>,\n/// Exact reported TCB tuple accepted for this VCEK issuance.\n\npub tcb: SevSnpTcb,\n/// Optional SHA-256 fingerprint of the VCEK certificate DER.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub vcek_fingerprint_sha256: Option<[u8; 32]>\n}",
              "docs": "One accepted AMD SEV-SNP VCEK issuance.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 622
            },
            {
              "name": "compute_state::SevSnpTcb",
              "kind": "struct_item",
              "signature": "pub struct SevSnpTcb {\npub bootloader: u8,\npub tee: u8,\npub snp: u8,\npub microcode: u8\n}",
              "docs": "SEV-SNP TCB version. Each component is a u8 packed into the\n`REPORTED_TCB` u64 in the report:\n  - byte 0: bootloader\n  - byte 1: tee\n  - byte 6: snp firmware\n  - byte 7: microcode\n\nBytes 2..6 are AMD-reserved.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 645
            },
            {
              "name": "compute_state::SevSnpTcb::from_le_bytes",
              "kind": "function_item",
              "signature": "pub fn from_le_bytes(bytes: [u8; 8]) -> Self;",
              "docs": "Decode from the 8-byte little-endian `REPORTED_TCB` field.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 654
            },
            {
              "name": "compute_state::SevSnpTcb::meets",
              "kind": "function_item",
              "signature": "pub fn meets(&self, minimum: &SevSnpTcb) -> bool;",
              "docs": "True when every component on `self` is `>= other`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 664
            },
            {
              "name": "compute_state::ComputePolicy::fail_closed",
              "kind": "function_item",
              "signature": "pub fn fail_closed() -> Self;",
              "docs": "Maximum-restriction policy: no resolver may resolve, T3 disabled.\nUsed as the default for backends that don't override\n`ExecutionState::compute_policy`.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 676
            },
            {
              "name": "compute_state::ComputePolicy::is_authorised_proposer",
              "kind": "function_item",
              "signature": "pub fn is_authorised_proposer(&self, did: &str) -> bool;",
              "docs": "Returns true when `did` is on the proposer allowlist.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 697
            },
            {
              "name": "compute_state::ComputePolicy::is_authorised_beacon",
              "kind": "function_item",
              "signature": "pub fn is_authorised_beacon(&self, did: &str) -> bool;",
              "docs": "Returns true when `did` is on the beacon allowlist.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 702
            },
            {
              "name": "compute_state::ComputePolicy::is_authorised_resolver",
              "kind": "function_item",
              "signature": "pub fn is_authorised_resolver(&self, did: &str) -> bool;",
              "docs": "Returns true when `did` is on the resolver allowlist.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 707
            },
            {
              "name": "compute_state::ArmCcaTrustAnchors",
              "kind": "struct_item",
              "signature": "pub struct ArmCcaTrustAnchors {\n/// SEC1-uncompressed P-384 IAK pubkeys (97 bytes each).\n\n#[serde(default)]\npub pinned_iak_pubkeys_sec1: Vec<Vec<u8>>,\n/// Realm initial measurement allowlist (raw measurement bytes).\n\n#[serde(default)]\npub rim_allowlist: Vec<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n#[serde(default)]\npub require_receipt_binding: bool\n}",
              "docs": "Phase 14d \u2014 Arm CCA (Confidential Compute Architecture) trust\nanchor material.\n\n`pinned_iak_pubkeys_sec1`: SEC1-uncompressed P-384 public keys\n(`0x04 || x || y`, 97 bytes each) for the Initial Attestation Keys\n(IAKs) accepted by the chain. The verifier verifies the realm\ntoken's COSE_Sign1 ECDSA-P-384/SHA-384 signature against any of\nthese pubkeys; first match accepts.\n\n`rim_allowlist`: realm initial measurements (RIM) the chain\naccepts. Each entry is the raw measurement bytes (length depends\non the CCA hash algo claim \u2014 32 / 48 / 64 bytes).\n\n`max_attestation_age_epochs` / `require_receipt_binding`:\nsame shape as the other vendors. Receipt-binding compares\n`att.binding_nonce` against the realm token's\n`cca-realm-challenge` claim (canonical CBOR label 44233).\n\n# Mainnet caveats\n\nArm CCA's verifier ecosystem is still maturing. This slice\nimplements the **structural** checks (COSE_Sign1 envelope, CBOR\nclaim parsing, ECDSA P-384 signature verification, RIM allowlist,\nchallenge binding, freshness) and explicitly **defers** the\nplatform-token / realm-token cross-binding, the full Arm IAK\ncertificate chain (Arm has not published a stable production root\nyet), TCB lifecycle claim semantics, and per-claim policy\nenforcement. Until those land, mainnet operators should keep T3\nArm CCA off or pin a known-good IAK pubkey + RIM allowlist as an\ninterim measure.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 749
            },
            {
              "name": "compute_state::TdxTrustAnchors",
              "kind": "struct_item",
              "signature": "pub struct TdxTrustAnchors {\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_intel_root_fingerprint_sha256: Option<[u8; 32]>,\n/// 48-byte MRTD values the chain accepts.\n\n#[serde(default)]\npub mrtd_allowlist: Vec<Vec<u8>>,\n/// 48-byte MRSIGNER_SEAM values the chain accepts.\n\n#[serde(default)]\npub mrsigner_seam_allowlist: Vec<Vec<u8>>,\n/// Per-RTMR allowlists. Index 0 = RTMR0, 1 = RTMR1, etc.\n\n/// `None` disables enforcement for that register.\n\n#[serde(default)]\npub rtmr0_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr1_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr2_allowlist: Vec<Vec<u8>>,\n#[serde(default)]\npub rtmr3_allowlist: Vec<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_pce_svn: Option<u16>,\n#[serde(default)]\npub require_receipt_binding: bool,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub intel_tcb_signing_cert_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tcb_info_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub qe_identity_json: Option<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pck_crl_der: Option<Vec<u8>>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub root_ca_crl_der: Option<Vec<u8>>,\n#[serde(default)]\npub allowed_tcb_statuses: Vec<String>,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub collateral_max_age_epochs: Option<u64>\n}",
              "docs": "Phase 14c \u2014 Intel TDX trust anchor material.\n\nReuses the Intel root pinning + collateral pattern established by\nSGX DCAP. TDX-specific fields:\n\n`mrtd_allowlist`: 48-byte SHA-384 measurements of accepted TD\nimages. Equivalent to MRENCLAVE on SGX but always 48 bytes.\n\n`mrsigner_seam_allowlist`: 48-byte SHA-384 measurements of\naccepted SEAM-module signers. Equivalent to MRSIGNER on SGX.\n\n`rtmr_allowlist[0..4]`: optional 48-byte allowlists for RTMR0..3\n(Runtime Measurement Registers). When `None` for a slot, the\ncorresponding RTMR is not enforced; when `Some`, the report's\nRTMR<i> must match one of the listed values. Operators that pin\nboot-time RTMRs (e.g. UEFI/firmware via RTMR0) configure these.\n\nCollateral fields (`intel_tcb_signing_cert_der`, `tcb_info_json`,\n`qe_identity_json`, `pck_crl_der`, `root_ca_crl_der`,\n`allowed_tcb_statuses`) follow the same shape as SGX DCAP. The\nQE Identity for TDX has `id == \"TD_QE\"` and the TCB Info contains\n**both** SGX and TDX TCB component arrays \u2014 the verifier walks\nboth against the quote's CPUSVN+TEE_TCB_SVN and takes the lower\nstatus.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 787
            },
            {
              "name": "compute_state::SgxDcapTrustAnchors",
              "kind": "struct_item",
              "signature": "pub struct SgxDcapTrustAnchors {\n/// SHA-256 of Intel SGX Root CA DER. When `None`, every well-formed\n\n/// quote falls into `FixtureMaterialRequired` (Phase 13 posture).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pinned_intel_root_fingerprint_sha256: Option<[u8; 32]>,\n/// 32-byte MRENCLAVE values the chain accepts.\n\n#[serde(default)]\npub mrenclave_allowlist: Vec<Vec<u8>>,\n/// 32-byte MRSIGNER values the chain accepts.\n\n#[serde(default)]\npub mrsigner_allowlist: Vec<Vec<u8>>,\n/// Freshness window in chain epochs.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub max_attestation_age_epochs: Option<u64>,\n/// Minimum ISV enclave SVN.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_isv_svn: Option<u16>,\n/// Minimum PCE SVN (from quote header).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub min_pce_svn: Option<u16>,\n/// Require REPORT_DATA receipt-binding on every quote.\n\n#[serde(default)]\npub require_receipt_binding: bool,\n// ----- Phase 14b-2 collateral hardening -----\n/// Intel TCB Signing Cert (DER). The cert that signs Intel TCB\n\n/// Info and QE Identity JSON. Must be signed by Intel SGX Root\n\n/// CA (the verifier validates this against the pinned root at\n\n/// quote time). When `None`, every quote is rejected with\n\n/// `FixtureMaterialRequired` once collateral fields are present \u2014\n\n/// a partial collateral configuration is itself a misconfiguration.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub intel_tcb_signing_cert_der: Option<Vec<u8>>,\n/// Intel TCB Info JSON document. Operator-supplied; the verifier\n\n/// checks the signature on the inner `tcbInfo` value with the TCB\n\n/// Signing Cert pubkey, walks `tcbLevels` against the quote's\n\n/// CPUSVN / PCESVN, and rejects when the resolved status is not\n\n/// in `allowed_tcb_statuses`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tcb_info_json: Option<String>,\n/// Intel QE Identity JSON document. Operator-supplied; the\n\n/// verifier checks the signature on `enclaveIdentity`, matches\n\n/// fields against the quote's QE report (mrsigner / isvprodid /\n\n/// miscselect / attributes), and walks `tcbLevels` against the\n\n/// QE ISVSVN.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub qe_identity_json: Option<String>,\n/// PCK Platform CA CRL (DER). Required when collateral is on. The\n\n/// verifier rejects when the PCK leaf serial appears in the\n\n/// revoked list or when the CRL is expired.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub pck_crl_der: Option<Vec<u8>>,\n/// Intel SGX Root CA CRL (DER). Optional. When set, the verifier\n\n/// also rejects when the PCK Platform CA serial appears in this\n\n/// CRL.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub root_ca_crl_der: Option<Vec<u8>>,\n/// Allowed Intel TCB statuses. The verifier interprets the\n\n/// **empty** Vec as the strict default `[\"UpToDate\"]` \u2014\n\n/// `OutOfDate`, `Revoked`, `ConfigurationNeeded`,\n\n/// `ConfigurationAndSWHardeningNeeded`, `SWHardeningNeeded`, etc.\n\n/// all reject unless explicitly listed here.\n\n#[serde(default)]\npub allowed_tcb_statuses: Vec<String>,\n/// Maximum collateral age in chain epochs. When set, the verifier\n\n/// requires the TCB Info / QE Identity to be no older than this\n\n/// many epochs relative to the chain `now_epoch` (uses the\n\n/// collateral's `issueDate` field).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub collateral_max_age_epochs: Option<u64>\n}",
              "docs": "Phase 14b \u2014 Intel SGX DCAP trust anchor material.\n\n`pinned_intel_root_fingerprint_sha256`: SHA-256 of the **Intel SGX\nRoot CA** certificate (DER form). When set, the verifier walks the\nPCK certificate chain inside the quote (PCK leaf \u2192 PCK Platform CA \u2192\nIntel SGX Root CA), validates the SHA-256 fingerprint of the root\nagainst the operator anchor, verifies every link's\nECDSA-P-256/SHA-256 signature, and uses the PCK leaf pubkey to\nverify the QE report signature inside the quote.\n\n`mrenclave_allowlist`: 32-byte SHA-256 enclave-image measurements\n(`MRENCLAVE`) the chain accepts.\n`mrsigner_allowlist`: 32-byte SHA-256 enclave-signer measurements\n(`MRSIGNER`) the chain accepts. **Either** the report's `MRENCLAVE`\nmust match the MRENCLAVE allowlist, **or** the report's `MRSIGNER`\nmust match the MRSIGNER allowlist (both can be configured for\nbelt-and-braces; at least one must be non-empty for the verifier to\nhave something to compare against).\n\n`max_attestation_age_epochs`: when set, enforces a freshness window\nagainst `att.generated_at_epoch` (operator-supplied, since DCAP\nquotes carry collateral timestamps but we keep parity with the\nSEV-SNP gate for now).\n\n`min_isv_svn`: minimum `ISVSVN` value the chain accepts on the ISV\nenclave report. `min_pce_svn` plays the same role for the\nplatform-config-enclave SVN advertised in the quote header.\n\n`require_receipt_binding`: when true, the verifier requires the\nISV report's REPORT_DATA field at offset 0x140 (first 64 bytes) to\nmatch `att.binding_nonce` decoded as 64 bytes of hex.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 860
            },
            {
              "name": "compute_state::ComputeSnapshot",
              "kind": "struct_item",
              "signature": "pub struct ComputeSnapshot {\npub policy: ComputePolicy,\npub clock: (u64, u64),\npub providers: std::collections::HashMap<String, ComputeProvider>,\npub escrows: std::collections::HashMap<String, ComputeEscrow>,\npub jobs: std::collections::HashMap<String, ComputeJob>,\npub receipts: std::collections::HashMap<String, ComputeReceiptRecord>,\npub settled: std::collections::HashSet<String>,\npub challenges: std::collections::HashMap<String, ComputeChallenge>,\npub audit: Vec<ComputeAuditEvent>,\npub audit_seq: u64,\npub reputation: std::collections::HashMap<String, Vec<ComputeReputationSignal>>,\n/// `(work_id, claim)` pairs \u2014 JSON cannot key maps by `SigilHash`.\n\npub maca_claims: Vec<(sigil_core::hash::SigilHash, MacaWorkClaim)>,\n/// `(work_id, [(validator_did, record), ...])` \u2014 same reason.\n\npub maca_validations: Vec<(\n        sigil_core::hash::SigilHash,\n        Vec<(String, MacaValidationRecord)>,\n    )>,\npub balances: std::collections::HashMap<String, u64>,\n/// Phase 12 \u2014 `MacaEpoch` state.\n\n#[serde(default)]\npub maca_epochs: std::collections::HashMap<u64, MacaEpoch>,\n/// Phase 12 \u2014 `(epoch_id, work_id) \u2192 MacaQuorumProof`.\n\n#[serde(default)]\npub maca_quorum_proofs: Vec<((u64, sigil_core::hash::SigilHash), MacaQuorumProof)>,\n/// Phase 12 \u2014 `(epoch_id) \u2192 BeaconRecord`.\n\n#[serde(default)]\npub maca_beacons: std::collections::HashMap<u64, BeaconRecord>,\n/// Phase 12 \u2014 registered MACA validator agents.\n\n#[serde(default)]\npub validator_agents: std::collections::HashMap<String, ValidatorAgentRecord>\n}",
              "docs": "JSON-serialisable snapshot of the compute marketplace state.\n\nUsed by `MemoryExecutionState::compute_snapshot`\n`MemoryExecutionState::compute_restore` to provide restart/reload\nsemantics until a disk-backed state store lands across the rest of the\nchain. Every field round-trips through serde so the snapshot can be\nwritten to disk, sent over the wire, or replayed in tests.\n\nSigilHash-keyed maps are stored as `Vec<(SigilHash, ...)>` because\nJSON requires string keys at the protocol level. The structures are\nrebuilt into `HashMap`s by `compute_restore`.",
              "attributes": "#[cfg(feature = \"compute\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 944
            }
          ],
          "parseErrors": false
        },
        {
          "module": "consensus_coordinator",
          "source": "sigil/node/sigil-node/src/consensus_coordinator.rs",
          "sha256": "17f14a881f2f1b3e7f3597aad8fb9400093ab52b3f5030e223e8308373f0eb2a",
          "attributes": "",
          "items": [
            {
              "name": "consensus_coordinator::PeerEndpoint",
              "kind": "struct_item",
              "signature": "pub struct PeerEndpoint {\n/// Validator DID.\n\npub did: String,\n/// HTTP RPC URL (e.g., \"http://validator-2:26657/rpc\").\n\npub rpc_url: String\n}",
              "docs": "Peer address for consensus message broadcasting.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 54
            },
            {
              "name": "consensus_coordinator::InboundConsensusMsg",
              "kind": "enum_item",
              "signature": "pub enum InboundConsensusMsg {\n    Proposal {\n        block: Box<Block>,\n        proposer_did: String,\n        view: u64,\n        signature: Vec<u8>,\n    },\n    PreVote(PreVote),\n    PreCommit(PreCommit),\n    ViewChange(ViewChangeMessage),\n    NewView(NewViewMessage),\n}",
              "docs": "Messages that flow into the coordinator from the RPC layer.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 63
            },
            {
              "name": "consensus_coordinator::RejectedReason",
              "kind": "enum_item",
              "signature": "pub enum RejectedReason {\n    WrongChainId,\n    WrongParentHash,\n    WrongHeight,\n    InvalidProposer,\n    InvalidProposerSignature,\n    InvalidTransactionChainId,\n    InvalidTransactionSignature,\n    InvalidTransactionSigner,\n    InvalidTransactionNonce,\n    TransactionReplay,\n    TxRootMismatch,\n    ReceiptCountMismatch,\n    ReceiptRootMismatch,\n    StateRootMismatch,\n    ZeroRootNonEmpty,\n    GasLimitExceeded,\n    GasUsedMismatch,\n    SemanticValidationFailed,\n    ExecutionSnapshotUnavailable,\n    ExecutionFailed,\n}",
              "docs": "Bounded reasons a proposal can be rejected before this validator prevotes.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 83
            },
            {
              "name": "consensus_coordinator::CoordinatorConfig",
              "kind": "struct_item",
              "signature": "pub struct CoordinatorConfig {\n/// This node's validator DID.\n\npub validator_did: String,\n/// This node's Ed25519 signing key for consensus messages.\n\npub signing_key: ed25519_dalek::SigningKey,\n/// Chain ID.\n\npub chain_id: String,\n/// Target block time in milliseconds.\n\npub block_time_ms: u64,\n/// Blocks per epoch.\n\npub blocks_per_epoch: u64,\n/// Maximum gas per block.\n\npub max_block_gas: u64,\n/// Ed25519 transaction signature batch size.\n\npub signature_batch_size: usize,\n/// Peer endpoints for broadcasting.\n\npub peers: Vec<PeerEndpoint>,\n/// The validator set (from genesis).\n\npub validator_set: ValidatorSet\n}",
              "docs": "Configuration for the consensus coordinator.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "consensus_coordinator::ConsensusCoordinator",
              "kind": "struct_item",
              "signature": "pub struct ConsensusCoordinator {\n\n}",
              "docs": "Drives the MACA consensus protocol across validators.",
              "attributes": "",
              "line": 156
            },
            {
              "name": "consensus_coordinator::ConsensusCoordinator::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        config: CoordinatorConfig,\n        mempool: Arc<RwLock<Mempool>>,\n        state: Arc<dyn ExecutionState>,\n        inbound_rx: mpsc::Receiver<InboundConsensusMsg>,\n        initial_height: u64,\n        initial_hash: SigilHash,\n        block_store: Option<Arc<dyn sigil_storage::BlockStore>>,\n        zk_prover: Option<sigil_zk::HashCommitmentProver>,\n    ) -> Self;",
              "docs": "Create a new consensus coordinator.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 179
            },
            {
              "name": "consensus_coordinator::ConsensusCoordinator::run",
              "kind": "function_item",
              "signature": "pub async fn run(&mut self) -> Result<(), NodeError>;",
              "docs": "Run the consensus coordinator loop.\n\nFor each block height:\n1. Determine the proposer (round-robin by height)\n2. If we are the proposer: build block, broadcast proposal\n3. Run the MACA round, collecting votes from peers\n4. Finalize when quorum is reached",
              "attributes": "",
              "line": 211
            }
          ],
          "parseErrors": false
        },
        {
          "module": "contract_durable",
          "source": "sigil/node/sigil-node/src/contract_durable.rs",
          "sha256": "133cd84c3ea670420745f6e552a846511146176455fda3264abda3e80f5c0999",
          "attributes": "#[cfg(feature = \"contracts\")]",
          "items": [
            {
              "name": "contract_durable::DurableContractStore",
              "kind": "struct_item",
              "signature": "pub struct DurableContractStore {\n\n}",
              "docs": "Durable Agent Contract Zone store backed by AkashaKV.\n\nStores contract records, per-contract keyed state, code blobs,\norganization zones, contract events, and cross-zone messages.\nAll multi-write operations should go through [`ContractWriteBatch`] +\n[`DurableContractStore::commit_batch`] for crash safety.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 213
            },
            {
              "name": "contract_durable::DurableContractStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the contract subsystem.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 221
            },
            {
              "name": "contract_durable::DurableContractStore::get_contract",
              "kind": "function_item",
              "signature": "pub fn get_contract(&self, contract_did: &str) -> Result<Option<ContractRecord>, NodeError>;",
              "docs": "Fetch a contract record by DID. Returns `None` if not deployed.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 298
            },
            {
              "name": "contract_durable::DurableContractStore::put_contract",
              "kind": "function_item",
              "signature": "pub fn put_contract(&self, record: &ContractRecord) -> Result<(), NodeError>;",
              "docs": "Insert or replace a contract record.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 307
            },
            {
              "name": "contract_durable::DurableContractStore::delete_contract",
              "kind": "function_item",
              "signature": "pub fn delete_contract(&self, contract_did: &str) -> Result<(), NodeError>;",
              "docs": "Delete a contract record. Used during failed deploy rollback.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 314
            },
            {
              "name": "contract_durable::DurableContractStore::list_contracts",
              "kind": "function_item",
              "signature": "pub fn list_contracts(&self) -> Result<Vec<ContractRecord>, NodeError>;",
              "docs": "List all deployed contract records in deterministic DID order.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 320
            },
            {
              "name": "contract_durable::DurableContractStore::list_zone_contracts",
              "kind": "function_item",
              "signature": "pub fn list_zone_contracts(&self, zone_id: &str) -> Result<Vec<ContractRecord>, NodeError>;",
              "docs": "List all contracts deployed in `zone_id`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 331
            },
            {
              "name": "contract_durable::DurableContractStore::get_zone",
              "kind": "function_item",
              "signature": "pub fn get_zone(&self, zone_id: &str) -> Result<Option<OrganizationZone>, NodeError>;",
              "docs": "Fetch an OrganizationZone by id. Returns `None` if not found.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 346
            },
            {
              "name": "contract_durable::DurableContractStore::put_zone",
              "kind": "function_item",
              "signature": "pub fn put_zone(&self, zone: &OrganizationZone) -> Result<(), NodeError>;",
              "docs": "Insert or replace an OrganizationZone.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 355
            },
            {
              "name": "contract_durable::DurableContractStore::list_zones",
              "kind": "function_item",
              "signature": "pub fn list_zones(&self) -> Result<Vec<OrganizationZone>, NodeError>;",
              "docs": "List all known Organization Zones in deterministic `zone_id` order.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 362
            },
            {
              "name": "contract_durable::DurableContractStore::get_contract_state",
              "kind": "function_item",
              "signature": "pub fn get_contract_state(\n        &self,\n        contract_did: &str,\n        slot: &[u8],\n    ) -> Result<Option<Vec<u8>>, NodeError>;",
              "docs": "Read a single key from a contract's keyed state.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 374
            },
            {
              "name": "contract_durable::DurableContractStore::put_contract_state",
              "kind": "function_item",
              "signature": "pub fn put_contract_state(\n        &self,\n        contract_did: &str,\n        slot: &[u8],\n        value: &[u8],\n    ) -> Result<(), NodeError>;",
              "docs": "Write a single key into a contract's keyed state.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 383
            },
            {
              "name": "contract_durable::DurableContractStore::delete_contract_state",
              "kind": "function_item",
              "signature": "pub fn delete_contract_state(&self, contract_did: &str, slot: &[u8]) -> Result<(), NodeError>;",
              "docs": "Delete a single key from a contract's keyed state.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 393
            },
            {
              "name": "contract_durable::DurableContractStore::list_contract_state_entries",
              "kind": "function_item",
              "signature": "pub fn list_contract_state_entries(\n        &self,\n    ) -> Result<Vec<(String, Vec<u8>, Vec<u8>)>, NodeError>;",
              "docs": "List every keyed state cell as `(contract_did, slot, value)`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 398
            },
            {
              "name": "contract_durable::DurableContractStore::contract_state_root",
              "kind": "function_item",
              "signature": "pub fn contract_state_root(&self, contract_did: &str) -> Result<SigilHash, NodeError>;",
              "docs": "Compute a BLAKE3-based state root over all keyed state for `contract_did`.\nIterates all `(slot, value)` pairs in lexicographic key order and feeds them\ninto a flat byte buffer, then hashes it with BLAKE3 via `SigilHash::digest`.\nReturns `SigilHash::ZERO` if the contract has no keyed state.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 432
            },
            {
              "name": "contract_durable::DurableContractStore::get_code_blob",
              "kind": "function_item",
              "signature": "pub fn get_code_blob(&self, code_hash: &SigilHash) -> Result<Option<Vec<u8>>, NodeError>;",
              "docs": "Get WASM bytecode by content-addressed hash.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 461
            },
            {
              "name": "contract_durable::DurableContractStore::get_code_metadata",
              "kind": "function_item",
              "signature": "pub fn get_code_metadata(\n        &self,\n        code_hash: &SigilHash,\n    ) -> Result<Option<ContractLicenseMetadata>, NodeError>;",
              "docs": "Get license/source/audit metadata for a registered code hash.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 467
            },
            {
              "name": "contract_durable::DurableContractStore::put_code_blob",
              "kind": "function_item",
              "signature": "pub fn put_code_blob(&self, code_hash: &SigilHash, bytes: &[u8]) -> Result<(), NodeError>;",
              "docs": "Store a WASM bytecode blob. Verifies `hash == BLAKE3(bytes)`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 476
            },
            {
              "name": "contract_durable::DurableContractStore::list_code_blobs",
              "kind": "function_item",
              "signature": "pub fn list_code_blobs(&self) -> Result<Vec<(SigilHash, Vec<u8>)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 487
            },
            {
              "name": "contract_durable::DurableContractStore::put_code_metadata",
              "kind": "function_item",
              "signature": "pub fn put_code_metadata(\n        &self,\n        code_hash: &SigilHash,\n        metadata: &ContractLicenseMetadata,\n    ) -> Result<(), NodeError>;",
              "docs": "Store license/source/audit metadata for a registered code hash.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 506
            },
            {
              "name": "contract_durable::DurableContractStore::list_code_metadata",
              "kind": "function_item",
              "signature": "pub fn list_code_metadata(\n        &self,\n    ) -> Result<Vec<(SigilHash, ContractLicenseMetadata)>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 515
            },
            {
              "name": "contract_durable::DurableContractStore::append_contract_event",
              "kind": "function_item",
              "signature": "pub fn append_contract_event(&self, event: ContractEvent) -> Result<u64, NodeError>;",
              "docs": "Append a contract event. Returns the assigned monotonic global seq.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 538
            },
            {
              "name": "contract_durable::DurableContractStore::list_contract_events",
              "kind": "function_item",
              "signature": "pub fn list_contract_events(\n        &self,\n        query: &ContractEventQuery,\n    ) -> Result<Vec<ContractEvent>, NodeError>;",
              "docs": "List contract events matching `query`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 563
            },
            {
              "name": "contract_durable::DurableContractStore::enqueue_zone_message",
              "kind": "function_item",
              "signature": "pub fn enqueue_zone_message(&self, msg: &CrossZoneMessage) -> Result<(), NodeError>;",
              "docs": "Enqueue a cross-zone message.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 592
            },
            {
              "name": "contract_durable::DurableContractStore::list_pending_zone_messages",
              "kind": "function_item",
              "signature": "pub fn list_pending_zone_messages(\n        &self,\n        target_zone: &str,\n    ) -> Result<Vec<CrossZoneMessage>, NodeError>;",
              "docs": "List pending messages for `target_zone`.\n\nAkashaKV's scan returns the **oldest** visible version of each key due to\nascending SkipMap ordering.  To avoid stale reads, we use the pending\nindex only for its *keys* (to discover which message IDs to look up), then\nfetch the authoritative current record from the main `PREFIX_MSG` store.\nAny message whose current status is not `Pending` is excluded.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 611
            },
            {
              "name": "contract_durable::DurableContractStore::list_zone_messages",
              "kind": "function_item",
              "signature": "pub fn list_zone_messages(&self) -> Result<Vec<CrossZoneMessage>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 638
            },
            {
              "name": "contract_durable::DurableContractStore::mark_zone_message_delivered",
              "kind": "function_item",
              "signature": "pub fn mark_zone_message_delivered(\n        &self,\n        msg_id: &str,\n        status: MessageStatus,\n    ) -> Result<(), NodeError>;",
              "docs": "Update a message's status (e.g. Delivered / Failed).\n\nUpdates the authoritative main record under `PREFIX_MSG`.\n`list_pending_zone_messages` reads from the main record for each message\nID it discovers via the pending index, so it will see the updated status.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 653
            },
            {
              "name": "contract_durable::DurableContractStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of AkashaKV memtables to SSTables. Useful in tests.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 671
            },
            {
              "name": "contract_durable::DurableContractStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 678
            },
            {
              "name": "contract_durable::DurableContractStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &ContractWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV MVCC\ntransaction.\n\nAtomicity guarantee: if any individual operation fails the transaction is\ndropped (auto-aborted via `Drop`) before commit, leaving zero partial\nstate visible. Either every operation in the batch lands or none do.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 692
            },
            {
              "name": "contract_durable::DurableContractStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the namespace prefix used by every contract key.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 789
            },
            {
              "name": "contract_durable::ArcContractStore",
              "kind": "type_item",
              "signature": "pub type ArcContractStore = Arc<DurableContractStore>;",
              "docs": "Convenience type alias for a shared durable store.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 795
            },
            {
              "name": "contract_durable::ContractBatchOp",
              "kind": "enum_item",
              "signature": "pub enum ContractBatchOp {\n    /// Insert or replace a contract record.\n    PutContract(Box<ContractRecord>),\n    /// Remove a contract record (rollback of failed deploys).\n    DeleteContract(String),\n    /// Insert or replace an OrganizationZone.\n    PutZone(Box<OrganizationZone>),\n    /// Write a (contract_did, slot, value) keyed state entry.\n    PutContractState(String, Vec<u8>, Vec<u8>),\n    /// Delete a (contract_did, slot) keyed state entry.\n    DeleteContractState(String, Vec<u8>),\n    /// Content-addressed WASM bytecode blob (hash, bytes).\n    PutCodeBlob(SigilHash, Vec<u8>),\n    /// License/source/audit metadata associated with a code hash.\n    PutCodeMetadata(SigilHash, Box<ContractLicenseMetadata>),\n    /// Append a contract event (seq will be assigned at commit time).\n    AppendContractEvent(Box<ContractEvent>),\n    /// Enqueue a cross-zone message.\n    EnqueueZoneMessage(Box<CrossZoneMessage>),\n}",
              "docs": "An individual operation inside a [`ContractWriteBatch`].",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[derive(Clone)]",
              "line": 803
            },
            {
              "name": "contract_durable::ContractWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct ContractWriteBatch {\n\n}",
              "docs": "Write batch accumulating all mutations for a single contract executor handler.\n\nBuild the batch during the handler, then call\n[`crate::executor::ExecutionState::commit_contract_tx`] at the end to apply\nall mutations atomically.  A crash before `commit_contract_tx` leaves zero\npartial state on disk.",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[derive(Default)]",
              "line": 831
            },
            {
              "name": "contract_durable::ContractWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 837
            },
            {
              "name": "contract_durable::ContractWriteBatch::put_contract",
              "kind": "function_item",
              "signature": "pub fn put_contract(&mut self, record: ContractRecord);",
              "docs": "Insert or replace a contract record.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 842
            },
            {
              "name": "contract_durable::ContractWriteBatch::delete_contract",
              "kind": "function_item",
              "signature": "pub fn delete_contract(&mut self, did: impl Into<String>);",
              "docs": "Delete a contract record (rollback / replacement).",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 848
            },
            {
              "name": "contract_durable::ContractWriteBatch::put_zone",
              "kind": "function_item",
              "signature": "pub fn put_zone(&mut self, zone: OrganizationZone);",
              "docs": "Insert or replace an OrganizationZone.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 853
            },
            {
              "name": "contract_durable::ContractWriteBatch::put_contract_state",
              "kind": "function_item",
              "signature": "pub fn put_contract_state(\n        &mut self,\n        contract_did: impl Into<String>,\n        slot: Vec<u8>,\n        value: Vec<u8>,\n    );",
              "docs": "Write a keyed state entry for `contract_did`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 858
            },
            {
              "name": "contract_durable::ContractWriteBatch::delete_contract_state",
              "kind": "function_item",
              "signature": "pub fn delete_contract_state(&mut self, contract_did: impl Into<String>, slot: Vec<u8>);",
              "docs": "Delete a keyed state entry for `contract_did`.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 872
            },
            {
              "name": "contract_durable::ContractWriteBatch::put_code_blob",
              "kind": "function_item",
              "signature": "pub fn put_code_blob(&mut self, hash: SigilHash, bytes: Vec<u8>);",
              "docs": "Add a content-addressed WASM code blob.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 880
            },
            {
              "name": "contract_durable::ContractWriteBatch::put_code_metadata",
              "kind": "function_item",
              "signature": "pub fn put_code_metadata(&mut self, hash: SigilHash, metadata: ContractLicenseMetadata);",
              "docs": "Add metadata associated with a content-addressed code blob.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 885
            },
            {
              "name": "contract_durable::ContractWriteBatch::append_contract_event",
              "kind": "function_item",
              "signature": "pub fn append_contract_event(&mut self, event: ContractEvent);",
              "docs": "Append a contract event (seq assigned at commit time).",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 891
            },
            {
              "name": "contract_durable::ContractWriteBatch::enqueue_zone_message",
              "kind": "function_item",
              "signature": "pub fn enqueue_zone_message(&mut self, msg: CrossZoneMessage);",
              "docs": "Enqueue a cross-zone message.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 897
            },
            {
              "name": "contract_durable::ContractWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 903
            },
            {
              "name": "contract_durable::ContractWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 908
            },
            {
              "name": "contract_durable::ContractWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<ContractBatchOp>;",
              "docs": "Consume the batch and return the inner op list.\n\nUsed by `MemoryExecutionState::commit_contract_tx` to iterate ops\non the in-memory slow-path without an extra clone.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 916
            }
          ],
          "parseErrors": false
        },
        {
          "module": "crucible_durable",
          "source": "sigil/node/sigil-node/src/crucible_durable.rs",
          "sha256": "28befa64cbd7be221ec79115df3ac49558f0d55d04bb1ecfd616369a6dec2eeb",
          "attributes": "",
          "items": [
            {
              "name": "crucible_durable::CrucibleEvent",
              "kind": "struct_item",
              "signature": "pub struct CrucibleEvent {\npub block_height: u64,\npub seq: u64,\npub run_id: String,\npub kind: String,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 37
            },
            {
              "name": "crucible_durable::CrucibleBatchOp",
              "kind": "enum_item",
              "signature": "pub enum CrucibleBatchOp {\n    PutRun(TrainingRun),\n    PutRolloutBatch(RolloutBatchCommitment),\n    PutRewardAttestation(RewardBatchAttestation),\n    PutWeights(WeightPublicationRecord),\n    PutSlash(TrainingSlashRecord),\n    AppendEvent(CrucibleEvent),\n    PutBalance(String, u64),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct CrucibleWriteBatch {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_run",
              "kind": "function_item",
              "signature": "pub fn put_run(&mut self, run: TrainingRun);",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_rollout_batch",
              "kind": "function_item",
              "signature": "pub fn put_rollout_batch(&mut self, batch: RolloutBatchCommitment);",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_reward_attestation",
              "kind": "function_item",
              "signature": "pub fn put_reward_attestation(&mut self, attestation: RewardBatchAttestation);",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_weights",
              "kind": "function_item",
              "signature": "pub fn put_weights(&mut self, weights: WeightPublicationRecord);",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_slash",
              "kind": "function_item",
              "signature": "pub fn put_slash(&mut self, slash: TrainingSlashRecord);",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&mut self, event: CrucibleEvent);",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::put_balance",
              "kind": "function_item",
              "signature": "pub fn put_balance(&mut self, did: impl Into<String>, amount: u64);",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "crucible_durable::CrucibleWriteBatch::ops",
              "kind": "function_item",
              "signature": "pub fn ops(&self) -> &[CrucibleBatchOp];",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "crucible_durable::DurableCrucibleStore",
              "kind": "struct_item",
              "signature": "pub struct DurableCrucibleStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 183
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::put_run",
              "kind": "function_item",
              "signature": "pub fn put_run(&self, run: &TrainingRun) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 251
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_run",
              "kind": "function_item",
              "signature": "pub fn get_run(&self, run_id: &str) -> Result<Option<TrainingRun>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 255
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_runs",
              "kind": "function_item",
              "signature": "pub fn list_runs(&self) -> Result<Vec<TrainingRun>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_rollout_batch",
              "kind": "function_item",
              "signature": "pub fn get_rollout_batch(\n        &self,\n        run_id: &str,\n        batch_id: &str,\n    ) -> Result<Option<RolloutBatchCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 271
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_rollout_batches",
              "kind": "function_item",
              "signature": "pub fn list_rollout_batches(\n        &self,\n        run_id: &str,\n    ) -> Result<Vec<RolloutBatchCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 282
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_weights",
              "kind": "function_item",
              "signature": "pub fn get_weights(\n        &self,\n        run_id: &str,\n        model_root: &SigilHash,\n    ) -> Result<Option<WeightPublicationRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 301
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_weights",
              "kind": "function_item",
              "signature": "pub fn list_weights(&self, run_id: &str) -> Result<Vec<WeightPublicationRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 312
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_reward_attestation",
              "kind": "function_item",
              "signature": "pub fn get_reward_attestation(\n        &self,\n        run_id: &str,\n        attestation_id: &str,\n    ) -> Result<Option<RewardBatchAttestation>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 329
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_reward_attestations",
              "kind": "function_item",
              "signature": "pub fn list_reward_attestations(\n        &self,\n        run_id: &str,\n    ) -> Result<Vec<RewardBatchAttestation>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 340
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_slash",
              "kind": "function_item",
              "signature": "pub fn get_slash(\n        &self,\n        run_id: &str,\n        slash_id: &str,\n    ) -> Result<Option<TrainingSlashRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 357
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_slashes",
              "kind": "function_item",
              "signature": "pub fn list_slashes(&self, run_id: &str) -> Result<Vec<TrainingSlashRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 368
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_events",
              "kind": "function_item",
              "signature": "pub fn list_events(&self, run_id: Option<&str>) -> Result<Vec<CrucibleEvent>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 382
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::put_balance",
              "kind": "function_item",
              "signature": "pub fn put_balance(&self, did: &str, amount: u64) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 398
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::get_balance",
              "kind": "function_item",
              "signature": "pub fn get_balance(&self, did: &str) -> Result<Option<u64>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 402
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::list_balances",
              "kind": "function_item",
              "signature": "pub fn list_balances(&self) -> Result<Vec<(String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 413
            },
            {
              "name": "crucible_durable::DurableCrucibleStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &CrucibleWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 427
            },
            {
              "name": "crucible_durable::ArcCrucibleStore",
              "kind": "type_item",
              "signature": "pub type ArcCrucibleStore = Arc<DurableCrucibleStore>;",
              "docs": "",
              "attributes": "",
              "line": 533
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dex_durable",
          "source": "sigil/node/sigil-node/src/dex_durable.rs",
          "sha256": "61f494ff0848902445b5d1aaa6b79107f40d548cfb529e01c1438b88ea0966f2",
          "attributes": "",
          "items": [
            {
              "name": "dex_durable::DurableDexStore",
              "kind": "struct_item",
              "signature": "pub struct DurableDexStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "dex_durable::DurableDexStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 139
            },
            {
              "name": "dex_durable::DurableDexStore::get_pool",
              "kind": "function_item",
              "signature": "pub fn get_pool(&self, pool_id: &str) -> Result<Option<DexPool>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 205
            },
            {
              "name": "dex_durable::DurableDexStore::put_pool",
              "kind": "function_item",
              "signature": "pub fn put_pool(&self, pool: &DexPool) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 212
            },
            {
              "name": "dex_durable::DurableDexStore::list_pools",
              "kind": "function_item",
              "signature": "pub fn list_pools(&self) -> Result<Vec<DexPool>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 216
            },
            {
              "name": "dex_durable::DurableDexStore::get_position",
              "kind": "function_item",
              "signature": "pub fn get_position(\n        &self,\n        pool_id: &str,\n        owner_did: &str,\n    ) -> Result<Option<DexPosition>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 225
            },
            {
              "name": "dex_durable::DurableDexStore::put_position",
              "kind": "function_item",
              "signature": "pub fn put_position(&self, position: &DexPosition) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 236
            },
            {
              "name": "dex_durable::DurableDexStore::list_positions",
              "kind": "function_item",
              "signature": "pub fn list_positions(\n        &self,\n        owner_did: Option<&str>,\n        pool_id: Option<&str>,\n    ) -> Result<Vec<DexPosition>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 243
            },
            {
              "name": "dex_durable::DurableDexStore::get_asset_balance",
              "kind": "function_item",
              "signature": "pub fn get_asset_balance(&self, asset_id: &str, owner_did: &str) -> Result<u64, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "dex_durable::DurableDexStore::put_asset_balance",
              "kind": "function_item",
              "signature": "pub fn put_asset_balance(\n        &self,\n        asset_id: &str,\n        owner_did: &str,\n        amount: u64,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 274
            },
            {
              "name": "dex_durable::DurableDexStore::get_token_class",
              "kind": "function_item",
              "signature": "pub fn get_token_class(&self, token_id: &str) -> Result<Option<CustomTokenClass>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 286
            },
            {
              "name": "dex_durable::DurableDexStore::put_token_class",
              "kind": "function_item",
              "signature": "pub fn put_token_class(&self, class: &CustomTokenClass) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 292
            },
            {
              "name": "dex_durable::DurableDexStore::list_token_classes",
              "kind": "function_item",
              "signature": "pub fn list_token_classes(&self) -> Result<Vec<CustomTokenClass>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 296
            },
            {
              "name": "dex_durable::DurableDexStore::list_asset_balances",
              "kind": "function_item",
              "signature": "pub fn list_asset_balances(&self) -> Result<Vec<(String, String, u64)>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 305
            },
            {
              "name": "dex_durable::DurableDexStore::list_events",
              "kind": "function_item",
              "signature": "pub fn list_events(\n        &self,\n        pool_id: Option<&str>,\n        limit: usize,\n    ) -> Result<Vec<DexEvent>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 328
            },
            {
              "name": "dex_durable::DurableDexStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &DexWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 353
            },
            {
              "name": "dex_durable::ArcDexStore",
              "kind": "type_item",
              "signature": "pub type ArcDexStore = Arc<DurableDexStore>;",
              "docs": "",
              "attributes": "",
              "line": 419
            },
            {
              "name": "dex_durable::DexBatchOp",
              "kind": "enum_item",
              "signature": "pub enum DexBatchOp {\n    PutTokenClass(CustomTokenClass),\n    PutPool(DexPool),\n    PutPosition(DexPosition),\n    PutAssetBalance {\n        asset_id: String,\n        owner_did: String,\n        amount: u64,\n    },\n    AppendEvent(DexEvent),\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 422
            },
            {
              "name": "dex_durable::DexWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct DexWriteBatch {\n\n}",
              "docs": "",
              "attributes": "#[derive(Default)]",
              "line": 435
            },
            {
              "name": "dex_durable::DexWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 440
            },
            {
              "name": "dex_durable::DexWriteBatch::put_pool",
              "kind": "function_item",
              "signature": "pub fn put_pool(&mut self, pool: DexPool);",
              "docs": "",
              "attributes": "",
              "line": 444
            },
            {
              "name": "dex_durable::DexWriteBatch::put_token_class",
              "kind": "function_item",
              "signature": "pub fn put_token_class(&mut self, class: CustomTokenClass);",
              "docs": "",
              "attributes": "",
              "line": 448
            },
            {
              "name": "dex_durable::DexWriteBatch::put_position",
              "kind": "function_item",
              "signature": "pub fn put_position(&mut self, position: DexPosition);",
              "docs": "",
              "attributes": "",
              "line": 452
            },
            {
              "name": "dex_durable::DexWriteBatch::put_asset_balance",
              "kind": "function_item",
              "signature": "pub fn put_asset_balance(\n        &mut self,\n        asset_id: impl Into<String>,\n        owner_did: impl Into<String>,\n        amount: u64,\n    );",
              "docs": "",
              "attributes": "",
              "line": 456
            },
            {
              "name": "dex_durable::DexWriteBatch::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&mut self, event: DexEvent);",
              "docs": "",
              "attributes": "",
              "line": 469
            }
          ],
          "parseErrors": false
        },
        {
          "module": "engine",
          "source": "sigil/node/sigil-node/src/engine.rs",
          "sha256": "0734c0e521c5d0f4818d219f3e816df9a552f716afa4e8e284ca4012136f22e8",
          "attributes": "",
          "items": [
            {
              "name": "engine::BlockEngine",
              "kind": "struct_item",
              "signature": "pub struct BlockEngine {\n\n}",
              "docs": "Block production and execution engine.\n\nRuns in a loop, draining the mempool and producing blocks at the target\ninterval. Uses `AtomicU64` for the current height so `run(&self)` can\nbe called on a shared reference from multiple tasks.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "engine::BlockEngine::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        bootstrap: BootstrapResult,\n        mempool: Arc<RwLock<Mempool>>,\n        genesis: &GenesisConfig,\n        bootstrap_team: Option<BootstrapTeam>,\n    ) -> Result<Self, NodeError>;",
              "docs": "Create a new block engine from bootstrap results, genesis config, and\nan optional bootstrap agent team.\n\nWhen a `BootstrapTeam` is provided, block production uses agent-driven\nproposer rotation. Without one, it falls back to the single validator\nDID from the bootstrap result.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "engine::BlockEngine::height",
              "kind": "function_item",
              "signature": "pub fn height(&self) -> u64;",
              "docs": "Current block height (atomic read \u2014 safe from any thread).",
              "attributes": "",
              "line": 940
            },
            {
              "name": "engine::BlockEngine::chain_id",
              "kind": "function_item",
              "signature": "pub fn chain_id(&self) -> &str;",
              "docs": "The chain ID this engine is producing blocks for.",
              "attributes": "",
              "line": 945
            },
            {
              "name": "engine::BlockEngine::genesis_accounts",
              "kind": "function_item",
              "signature": "pub fn genesis_accounts(&self) -> usize;",
              "docs": "Number of genesis accounts loaded.",
              "attributes": "",
              "line": 950
            },
            {
              "name": "engine::BlockEngine::genesis_supply",
              "kind": "function_item",
              "signature": "pub fn genesis_supply(&self) -> u64;",
              "docs": "Total initial supply loaded from genesis.",
              "attributes": "",
              "line": 955
            },
            {
              "name": "engine::BlockEngine::target_block_time",
              "kind": "function_item",
              "signature": "pub fn target_block_time(&self) -> u64;",
              "docs": "Target block time in whole seconds, rounded up for legacy callers.",
              "attributes": "",
              "line": 960
            },
            {
              "name": "engine::BlockEngine::target_block_time_ms",
              "kind": "function_item",
              "signature": "pub fn target_block_time_ms(&self) -> u64;",
              "docs": "Target block time in milliseconds.",
              "attributes": "",
              "line": 965
            },
            {
              "name": "engine::BlockEngine::target_block_time_seconds",
              "kind": "function_item",
              "signature": "pub fn target_block_time_seconds(&self) -> f64;",
              "docs": "Target block time in seconds, preserving sub-second precision.",
              "attributes": "",
              "line": 970
            },
            {
              "name": "engine::BlockEngine::validator_summary",
              "kind": "function_item",
              "signature": "pub fn validator_summary(&self) -> &str;",
              "docs": "Validator set summary.",
              "attributes": "",
              "line": 975
            },
            {
              "name": "engine::BlockEngine::has_bootstrap_team",
              "kind": "function_item",
              "signature": "pub fn has_bootstrap_team(&self) -> bool;",
              "docs": "Whether this engine has a bootstrap agent team.",
              "attributes": "",
              "line": 980
            },
            {
              "name": "engine::BlockEngine::tower_genesis_params",
              "kind": "function_item",
              "signature": "pub fn tower_genesis_params(&self) -> &sigil_core::genesis::TowerParams;",
              "docs": "Return the Tower consensus parameters loaded from genesis.\n\nUsed by diagnostics endpoints, the P2P gossip layer, and future\nTower slot-scheduling logic that needs epoch/committee configuration.",
              "attributes": "",
              "line": 988
            },
            {
              "name": "engine::BlockEngine::governance_genesis_params",
              "kind": "function_item",
              "signature": "pub fn governance_genesis_params(&self) -> &sigil_core::genesis::GovernanceParams;",
              "docs": "Return the governance parameters loaded from genesis.\n\nUsed by RPC `chain_getGenesisConfig` and the governance execution\npath that needs deposit minimums, voting periods, and quorum thresholds.",
              "attributes": "",
              "line": 996
            },
            {
              "name": "engine::BlockEngine::execution_state",
              "kind": "function_item",
              "signature": "pub fn execution_state(&self) -> Arc<dyn ExecutionState>;",
              "docs": "Return a shared reference to the execution state.\n\nUsed to wire the RPC server so query methods (`sigil_getBalance`,\n`sigil_getIdentity`, `sigil_getValidator`, `sigil_getValidatorSet`)\ncan read live chain state.",
              "attributes": "",
              "line": 1005
            },
            {
              "name": "engine::BlockEngine::block_store",
              "kind": "function_item",
              "signature": "pub fn block_store(&self) -> Arc<dyn BlockStore>;",
              "docs": "Returns a shared reference to the block store.\n\nThe store is always present \u2014 `BlockEngine::new` is fatal if it cannot be opened.",
              "attributes": "",
              "line": 1012
            },
            {
              "name": "engine::BlockEngine::parent_hash_for_current_height",
              "kind": "function_item",
              "signature": "pub fn parent_hash_for_current_height(&self) -> Result<SigilHash, NodeError>;",
              "docs": "Hash of the block that should be used as the parent for the current\nheight. At height 1 the parent is the genesis state commitment; after a\nrestart it is the hash of the latest persisted canonical block.",
              "attributes": "",
              "line": 1019
            },
            {
              "name": "engine::BlockEngine::take_attestation_rx",
              "kind": "function_item",
              "signature": "pub fn take_attestation_rx(&self) -> Option<crate::tower_runtime::AttestationReceiver>;",
              "docs": "Take the Tower attestation receiver channel, if present.\n\nMust be called exactly once after `BlockEngine::new` to wire the\noutbound attestation queue to the gossip transport. Returns `None`\nfor non-validator nodes (no tower runtime).",
              "attributes": "",
              "line": 1097
            },
            {
              "name": "engine::BlockEngine::on_tower_attestation_received",
              "kind": "function_item",
              "signature": "pub fn on_tower_attestation_received(\n        &self,\n        msg: sigil_network::message::TowerAttestationMessage,\n    ) -> Result<(), crate::error::NodeError>;",
              "docs": "Process an inbound Tower attestation received from a peer via gossip.\n\nVerifies the signature, persists via `commit_tower_tx`, and advances\nCasper FFG finality state. Call this from the gossip handler task\nwhen a `MessagePayload::TowerAttestation` arrives on\n`GossipTopic::TowerAttestations`.",
              "attributes": "",
              "line": 1110
            },
            {
              "name": "engine::BlockEngine::run",
              "kind": "function_item",
              "signature": "pub async fn run(&self) -> Result<(), NodeError>;",
              "docs": "Run the block production loop. Takes `&self` \u2014 uses AtomicU64 for height.\n\nWhen a bootstrap team is present, the proposer rotates each block via\nround-robin among block producers. Each block is signed by the proposer\nagent's Ed25519 key.",
              "attributes": "",
              "line": 1133
            },
            {
              "name": "engine::MemoryExecutionState::install_nft_durable",
              "kind": "function_item",
              "signature": "pub fn install_nft_durable(\n        &self,\n        store: crate::nft_durable::ArcNftStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Install a durable NFT store backed by AkashaKV.  After this call all\nNFT reads and writes are routed through the store; the in-memory\n`HashMap` fields remain available as the test/fallback path when no\ndurable store has been installed.\n\nCalled from `BlockEngine::new` on startup so the production node has\ndurable NFT state from the very first block; tests may also call this\nexplicitly with a `tempfile`-backed store.",
              "attributes": "",
              "line": 2580
            },
            {
              "name": "engine::MemoryExecutionState::install_dex_durable",
              "kind": "function_item",
              "signature": "pub fn install_dex_durable(\n        &self,\n        store: crate::dex_durable::ArcDexStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Install a durable native DEX store. After this call all DEX reads and\nwrites use AkashaKV; the in-memory maps remain only as dev/test\nfallbacks and snapshot mirrors.",
              "attributes": "",
              "line": 2604
            },
            {
              "name": "engine::MemoryExecutionState::install_storage_market_durable",
              "kind": "function_item",
              "signature": "pub fn install_storage_market_durable(\n        &self,\n        store: crate::storage_market_durable::ArcStorageMarketStore,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 2672
            },
            {
              "name": "engine::MemoryExecutionState::install_nova_durable",
              "kind": "function_item",
              "signature": "pub fn install_nova_durable(\n        &self,\n        store: crate::nova_durable::ArcNovaStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Install a durable Nova store. After this call all Nova reads and writes\nuse AkashaKV; the in-memory maps remain mirrors for validation\nsnapshots and state-root computation.",
              "attributes": "",
              "line": 2796
            },
            {
              "name": "engine::MemoryExecutionState::install_contract_durable",
              "kind": "function_item",
              "signature": "pub fn install_contract_durable(\n        &self,\n        store: crate::contract_durable::ArcContractStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Install a durable Agent Contract Zone store backed by AkashaKV. After\nthis call all contract reads and writes are routed through the store.\nCalled from `BlockEngine::new` on startup so the production node has\ndurable contract state from the very first block.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 2862
            },
            {
              "name": "engine::MemoryExecutionState::install_tower_durable",
              "kind": "function_item",
              "signature": "pub fn install_tower_durable(\n        &self,\n        store: crate::tower_durable::ArcTowerStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Install a durable Tower finality store backed by AkashaKV. After this\ncall all Tower reads and writes are routed through the store and survive\nprocess restart. Called from `BlockEngine::new` on startup so the\nproduction node has durable Tower state from the very first block.",
              "attributes": "",
              "line": 2945
            },
            {
              "name": "engine::MemoryExecutionState::install_gal_durable",
              "kind": "function_item",
              "signature": "pub fn install_gal_durable(\n        &self,\n        store: crate::gal_durable::ArcGalStore,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 2967
            },
            {
              "name": "engine::MemoryExecutionState::install_governance_durable",
              "kind": "function_item",
              "signature": "pub fn install_governance_durable(\n        &self,\n        store: crate::governance_durable::ArcGovernanceStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Wire in the durable AkashaKV-backed Governance store. Called from\n`BlockEngine::new` so proposal creation, voting, and timelock operations\nsurvive process restart. Failure to install is fatal.",
              "attributes": "",
              "line": 3031
            },
            {
              "name": "engine::MemoryExecutionState::install_labor_durable",
              "kind": "function_item",
              "signature": "pub fn install_labor_durable(\n        &self,\n        store: crate::labor_durable::ArcLaborStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Wire in the durable AkashaKV-backed Labor Marketplace store. Called from\n`BlockEngine::new` so contract creation, milestone release, worker\nindexes, and audit events survive process restart. Failure to install is fatal.",
              "attributes": "",
              "line": 3068
            },
            {
              "name": "engine::MemoryExecutionState::install_crucible_durable",
              "kind": "function_item",
              "signature": "pub fn install_crucible_durable(\n        &self,\n        store: crate::crucible_durable::ArcCrucibleStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Wire in the durable AkashaKV-backed Crucible training store. The store\nis opened on startup even though the execution policy remains disabled\nby default, so governance activation later cannot lose prior anchors.",
              "attributes": "",
              "line": 3092
            },
            {
              "name": "engine::MemoryExecutionState::install_crucible_policy",
              "kind": "function_item",
              "signature": "pub fn install_crucible_policy(\n        &self,\n        policy: sigil_crucible::CruciblePolicy,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 3159
            },
            {
              "name": "engine::MemoryExecutionState::install_username_durable",
              "kind": "function_item",
              "signature": "pub fn install_username_durable(\n        &self,\n        store: crate::username_durable::ArcUsernameStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Wire in the durable AkashaKV-backed username registry. Called from\n`BlockEngine::new` so register/transfer/release transactions survive\nprocess restart. Failure to install is fatal.",
              "attributes": "",
              "line": 3183
            },
            {
              "name": "engine::MemoryExecutionState::install_mail_durable",
              "kind": "function_item",
              "signature": "pub fn install_mail_durable(\n        &self,\n        store: crate::mail_durable::ArcMailStore,\n    ) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 3243
            },
            {
              "name": "engine::MemoryExecutionState::install_username_params",
              "kind": "function_item",
              "signature": "pub fn install_username_params(\n        &self,\n        params: sigil_core::username::UsernameParams,\n    ) -> Result<(), NodeError>;",
              "docs": "Replace the live `UsernameParams` policy (e.g. genesis bootstrap or a\nfuture governance param-change hook).",
              "attributes": "",
              "line": 3473
            },
            {
              "name": "engine::MemoryExecutionState::install_recovery_durable",
              "kind": "function_item",
              "signature": "pub fn install_recovery_durable(\n        &self,\n        store: crate::recovery_durable::ArcRecoveryStore,\n    ) -> Result<(), NodeError>;",
              "docs": "Wire in the durable AkashaKV-backed recovery store. Called from\n`BlockEngine::new` so initiated recovery ceremonies survive restart\nduring their multi-day timelock window. Failure to install is fatal.",
              "attributes": "#[allow(dead_code)]",
              "line": 3488
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-node/src/error.rs",
          "sha256": "3a599e3c736d120029610f954cdcf3732f150113072131412c30b7c1744b8afc",
          "attributes": "",
          "items": [
            {
              "name": "error::NodeError",
              "kind": "enum_item",
              "signature": "pub enum NodeError {\n    /// Invalid or incomplete node configuration.\n    #[error(\"config error: {0}\")]\n    ConfigError(String),\n\n    /// Failed to load or validate the genesis configuration.\n    #[error(\"genesis load failed: {0}\")]\n    GenesisLoadFailed(String),\n\n    /// Storage subsystem error.\n    #[error(\"storage error: {0}\")]\n    StorageError(String),\n\n    /// Consensus subsystem error.\n    #[error(\"consensus error: {0}\")]\n    ConsensusError(String),\n\n    /// Network subsystem error.\n    #[error(\"network error: {0}\")]\n    NetworkError(String),\n\n    /// RPC subsystem error.\n    #[error(\"rpc error: {0}\")]\n    RpcError(String),\n\n    /// Error during node shutdown.\n    #[error(\"shutdown error: {0}\")]\n    ShutdownError(String),\n\n    /// Transaction execution error.\n    #[error(\"execution error: {0}\")]\n    ExecutionError(String),\n\n    /// A transaction targeted a different chain than the block execution\n    /// context.\n    #[error(\n        \"invalid transaction chain id at tx index {tx_index}: expected {expected:?}, got {actual:?}\"\n    )]\n    InvalidTransactionChainId {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Expected chain ID supplied by consensus/startup context.\n        expected: String,\n        /// Chain ID declared by the transaction.\n        actual: String,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// A transaction's Ed25519 signature failed verification.\n    #[error(\"invalid transaction signature at tx index {tx_index}: {reason}\")]\n    InvalidTransactionSignature {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Stable, non-secret rejection reason.\n        reason: String,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// A transaction failed signer/public-key policy validation.\n    #[error(\"invalid transaction signer at tx index {tx_index}: {reason}\")]\n    InvalidTransactionSigner {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Stable, non-secret rejection reason.\n        reason: String,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// A transaction's nonce did not match the sender's next expected nonce.\n    #[error(\n        \"invalid transaction nonce at tx index {tx_index}: sender {sender_did}, expected {expected}, got {actual}\"\n    )]\n    InvalidTransactionNonce {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Sender DID whose nonce was checked.\n        sender_did: String,\n        /// Next nonce expected by execution state.\n        expected: u64,\n        /// Nonce declared by the transaction.\n        actual: u64,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// A transaction was already durably recorded as included.\n    #[error(\"transaction replay at tx index {tx_index}: {tx_hash}\")]\n    TransactionReplay {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Hex-encoded transaction hash.\n        tx_hash: String,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// A transaction violated gas admission bounds.\n    #[error(\"invalid transaction gas at tx index {tx_index}: {reason}\")]\n    InvalidTransactionGas {\n        /// Transaction index within the block.\n        tx_index: u32,\n        /// Stable, non-secret rejection reason.\n        reason: String,\n        /// Receipts already produced before the rejected transaction.\n        partial_receipts: Vec<Receipt>,\n    },\n\n    /// Idempotent compute settlement rejected because the receipt/job/task\n    /// tuple has already been settled.\n    #[error(\"already settled: {0}\")]\n    AlreadySettled(String),\n\n    /// Bootstrap or agent initialization error.\n    #[error(\"bootstrap error: {0}\")]\n    BootstrapError(String),\n\n    /// Mainnet startup refused because no pre-provisioned validator keys were\n    /// found and auto-generation is forbidden on mainnet.\n    ///\n    /// `path` is the canonical location where the node expected to find\n    /// `validator_keys.json`. Operators must provision keys via HSM, a sealed\n    /// file mount, or by copying an externally generated key file to that path\n    /// before starting the mainnet validator.\n    #[error(\n        \"production validator key missing at {path}. \\\n         Mainnet validators must be provisioned with pre-generated or \\\n         HSM-backed Ed25519 keys. Auto-generation and DID-derived keys \\\n         are forbidden on mainnet. \\\n         Operator workflow: (1) generate keys offline or via HSM, \\\n         (2) write validator_keys.json to {path}, \\\n         (3) restart with --validator-key-path <path> if using a custom location. \\\n         See docs/operator/validator-key-provisioning.md for HSM workflows.\"\n    )]\n    ProductionKeyMissing {\n        /// Canonical path where the key file was expected.\n        path: String,\n    },\n}",
              "docs": "Errors that can occur during node operation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, thiserror::Error)]",
              "line": 8
            },
            {
              "name": "error::NodeError::with_partial_receipts",
              "kind": "function_item",
              "signature": "pub fn with_partial_receipts(self, partial_receipts: Vec<Receipt>) -> Self;",
              "docs": "Attach block-level partial receipts to transaction-validity errors.",
              "attributes": "",
              "line": 152
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor",
          "source": "sigil/node/sigil-node/src/executor.rs",
          "sha256": "0e296c403ef21e4fd4e81e81f448be6e3ead66e0bbdfc44fce11d9c6b223f1d3",
          "attributes": "",
          "items": [
            {
              "name": "executor::BOOTSTRAP_SECURITY_MIN_BP_STAKE",
              "kind": "const_item",
              "signature": "pub const BOOTSTRAP_SECURITY_MIN_BP_STAKE: u64;",
              "docs": "Bootstrap security floor for Block Producers: 100,000,000 MINT.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "executor::BOOTSTRAP_SECURITY_MIN_BV_STAKE",
              "kind": "const_item",
              "signature": "pub const BOOTSTRAP_SECURITY_MIN_BV_STAKE: u64;",
              "docs": "Bootstrap security floor for Block Validators: 25,000,000 MINT.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "executor::DEFAULT_VALIDATOR_REWARD_RESERVE_DID",
              "kind": "const_item",
              "signature": "pub const DEFAULT_VALIDATOR_REWARD_RESERVE_DID: &str;",
              "docs": "Default pre-funded account used to pay validator rewards without inflating native supply.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "executor::ValidatorRecord",
              "kind": "struct_item",
              "signature": "pub struct ValidatorRecord {\n/// OAS DID of the validator.\n\npub did: String,\n/// micro-MINT staked by the validator itself.\n\npub stake: u64,\n/// Validator mode: BlockProducer or BlockValidator.\n\npub mode: ValidatorMode,\n/// Whether this validator is in the active set.\n\npub active: bool,\n/// Total delegated stake from delegators.\n\npub delegated_stake: u64,\n/// Total delegation pool shares issued to delegators.\n\n#[serde(default)]\npub delegated_shares: u64,\n/// Accumulated rewards in micro-MINT.\n\npub accumulated_rewards: u64,\n/// Epoch at which unbonding completes (None if not unbonding).\n\npub unbonding_epoch: Option<u64>,\n/// Self-stake waiting out the unbonding period before it can return to the liquid balance.\n\n#[serde(default)]\npub unbonding_stake: u64,\n/// Epoch through which a slashed validator is jailed and epoch-excluded.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub slashed_until_epoch: Option<u64>\n}",
              "docs": "On-chain validator record managed by the executor.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 98
            },
            {
              "name": "executor::ValidatorRecord::total_stake",
              "kind": "function_item",
              "signature": "pub fn total_stake(&self) -> u64;",
              "docs": "Total effective stake (self + delegated).",
              "attributes": "",
              "line": 126
            },
            {
              "name": "executor::StakingPolicy",
              "kind": "struct_item",
              "signature": "pub struct StakingPolicy {\npub legacy_min_bp_stake: u64,\npub legacy_min_bv_stake: u64,\npub activation_height: Option<u64>,\npub activated_min_bp_stake: u64,\npub activated_min_bv_stake: u64\n}",
              "docs": "Height-gated staking policy used by transaction execution.\n\nExisting chains can continue from their current history by configuring a\nfuture activation height. Before that height, legacy minimums apply so\nalready-running validator sets keep producing blocks while operators top up.\nAt and after activation, new stakes and post-unstake active eligibility use\nthe upgraded floor.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 139
            },
            {
              "name": "executor::NativeSupplyPolicy",
              "kind": "struct_item",
              "signature": "pub struct NativeSupplyPolicy {\npub max_supply: Option<u64>,\npub validator_reward_reserve_did: Option<String>\n}",
              "docs": "Native MINT/BITS supply policy enforced by launch-live execution paths.\n\nA fixed supply chain must not silently mint rewards. Rewards are paid by\ndebiting a pre-funded reserve account that was included in genesis.",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 152
            },
            {
              "name": "executor::CustomTokenClass",
              "kind": "struct_item",
              "signature": "pub struct CustomTokenClass {\npub token_id: String,\npub ticker: String,\npub decimals: u8,\npub issuer_did: String,\npub controller_did: String,\npub supply_policy: SupplyPolicy,\npub transfer_policy: Option<ControlPolicy>,\npub metadata_uri: Option<String>,\npub total_supply: u128\n}",
              "docs": "Launch-live custom-token class record.\n\nBalances for these token ids use the same deterministic DEX asset-balance\ntable so a freshly minted token can be pooled and traded without a shadow\nledger. Amounts are currently bounded to `u64::MAX` at the executor edge\nbecause the DEX/labor asset ledger is `u64`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 164
            },
            {
              "name": "executor::DelegationUnbonding",
              "kind": "struct_item",
              "signature": "pub struct DelegationUnbonding {\n/// Pool shares redeemed from the delegator position.\n\npub shares: u64,\n/// Native token amount claimable after `unlock_height`.\n\npub amount: u64,\n/// Block height at which the claim becomes withdrawable.\n\npub unlock_height: u64\n}",
              "docs": "Delegated-stake redemption waiting out the unbonding period before withdrawal.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 178
            },
            {
              "name": "executor::AccountSnapshot",
              "kind": "struct_item",
              "signature": "pub struct AccountSnapshot {\npub did: String,\npub balance: u64,\npub nonce: u64,\npub staked_amount: u64,\npub transaction_count: u64,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub identity_doc: Option<serde_json::Value>\n}",
              "docs": "Read-only account summary returned to public explorer RPCs.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 189
            },
            {
              "name": "executor::NativeSupplyPolicy::fixed_at_genesis",
              "kind": "function_item",
              "signature": "pub fn fixed_at_genesis(max_supply: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 200
            },
            {
              "name": "executor::StakingPolicy::from_env",
              "kind": "function_item",
              "signature": "pub fn from_env() -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 221
            },
            {
              "name": "executor::StakingPolicy::min_stake_for_mode_at",
              "kind": "function_item",
              "signature": "pub fn min_stake_for_mode_at(&self, mode: &ValidatorMode, block_height: u64) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 245
            },
            {
              "name": "executor::ProposalStatus",
              "kind": "enum_item",
              "signature": "pub enum ProposalStatus {\n    /// Voting is open.\n    Voting,\n    /// Proposal passed.\n    Passed,\n    /// Proposal rejected.\n    Rejected,\n    /// Proposal cancelled by proposer.\n    Cancelled,\n    /// Proposal executed.\n    Executed,\n}",
              "docs": "Status of a governance proposal.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 277
            },
            {
              "name": "executor::Proposal",
              "kind": "struct_item",
              "signature": "pub struct Proposal {\n/// Auto-incrementing proposal ID.\n\npub id: u64,\n/// DID of the proposer.\n\npub proposer: String,\n/// Proposal title.\n\npub title: String,\n/// Proposal description.\n\npub description: String,\n/// Block height at which this proposal was created.\n\npub created_height: u64,\n/// Block height at which voting ends.\n\npub voting_end_height: u64,\n/// Total yes votes (stake-weighted, in micro-MINT).\n\npub votes_yes: u64,\n/// Total no votes (stake-weighted, in micro-MINT).\n\npub votes_no: u64,\n/// Total abstain votes (stake-weighted, in micro-MINT).\n\npub votes_abstain: u64,\n/// Current proposal status.\n\npub status: ProposalStatus,\n/// Deposit amount locked by the proposer.\n\npub deposit: u64\n}",
              "docs": "On-chain governance proposal.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 292
            },
            {
              "name": "executor::StateRootEntry",
              "kind": "struct_item",
              "signature": "pub struct StateRootEntry {\n/// Top-level state namespace, e.g. `balance`, `nonce`, `validator`.\n\npub partition: String,\n/// Namespaced state key within the partition.\n\npub key: Vec<u8>,\n/// Canonically encoded value bytes.\n\npub value: Vec<u8>\n}",
              "docs": "One canonical leaf in Sigil's global state commitment.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 323
            },
            {
              "name": "executor::ExecutionState",
              "kind": "trait_item",
              "signature": "pub trait ExecutionState: Send + Sync {\n    // -- Account state --\n    fn get_balance(&self, did: &str) -> Result<u64, NodeError>;\n    fn set_balance(&self, did: &str, amount: u64) -> Result<(), NodeError>;\n    fn get_nonce(&self, did: &str) -> Result<u64, NodeError>;\n    fn increment_nonce(&self, did: &str) -> Result<(), NodeError>;\n    fn has_sponsored_setup_idempotency(\n        &self,\n        _subject_did: &str,\n        _setup_scope: &SponsoredSetupScope,\n        _idempotency_key: &str,\n    ) -> Result<bool, NodeError> ;\n    fn mark_sponsored_setup_idempotency(\n        &self,\n        _subject_did: &str,\n        _setup_scope: &SponsoredSetupScope,\n        _idempotency_key: &str,\n    ) -> Result<(), NodeError> ;\n\n    // -- Identity state --\n    /// Returns the OAS identity document for a DID, or None if not registered.\n    fn get_identity(&self, did: &str) -> Result<Option<serde_json::Value>, NodeError>;\n    /// Stores an OAS identity document for a DID.\n    fn set_identity(&self, did: &str, document: serde_json::Value) -> Result<(), NodeError>;\n    fn get_initial_device_anchor(\n        &self,\n        _subject_did: &str,\n        _device_id: &str,\n    ) -> Result<Option<sigil_core::InitialDeviceAnchorData>, NodeError> ;\n    fn put_initial_device_anchor(\n        &self,\n        _anchor: sigil_core::InitialDeviceAnchorData,\n    ) -> Result<(), NodeError> ;\n    /// Returns whether this DID received a balance at genesis.\n    fn is_genesis_balance_account(&self, _did: &str) -> Result<bool, NodeError> ;\n\n    // -- Validator state --\n    /// Returns the validator record for a DID, or None if not staked.\n    fn get_validator(&self, did: &str) -> Result<Option<ValidatorRecord>, NodeError>;\n    /// Stores or updates a validator record.\n    fn set_validator(&self, did: &str, record: ValidatorRecord) -> Result<(), NodeError>;\n    /// Returns all active validators.\n    fn get_active_validators(&self) -> Result<Vec<ValidatorRecord>, NodeError>;\n\n    // -- Delegation state --\n    /// Returns delegation pool shares from `delegator` to `validator`.\n    fn get_delegation(&self, delegator: &str, validator: &str) -> Result<u64, NodeError>;\n    /// Returns all known delegation pool shares for `delegator`.\n    fn list_delegations_for_delegator(\n        &self,\n        delegator: &str,\n    ) -> Result<Vec<(String, u64)>, NodeError> ;\n    /// Sets delegation pool shares from `delegator` to `validator`.\n    fn set_delegation(\n        &self,\n        delegator: &str,\n        validator: &str,\n        amount: u64,\n    ) -> Result<(), NodeError>;\n    /// Returns a pending delegation unbonding claim, if one exists.\n    fn get_delegation_unbonding(\n        &self,\n        delegator: &str,\n        validator: &str,\n    ) -> Result<Option<DelegationUnbonding>, NodeError> ;\n    /// Sets or clears a pending delegation unbonding claim.\n    fn set_delegation_unbonding(\n        &self,\n        delegator: &str,\n        validator: &str,\n        claim: Option<DelegationUnbonding>,\n    ) -> Result<(), NodeError> ;\n\n    // -- Custom token state -------------------------------------------------\n    fn get_token_class(&self, _token_id: &str) -> Result<Option<CustomTokenClass>, NodeError> ;\n\n    fn put_token_class(&self, _class: CustomTokenClass) -> Result<(), NodeError> ;\n\n    /// Lists account summaries for explorer/public RPC views.\n    fn list_accounts(\n        &self,\n        _limit: usize,\n        _offset: usize,\n    ) -> Result<Vec<AccountSnapshot>, NodeError> ;\n\n    /// Lists registered identity documents for explorer/public RPC views.\n    fn list_identities(\n        &self,\n        limit: usize,\n        offset: usize,\n    ) -> Result<Vec<AccountSnapshot>, NodeError> ;\n\n    // -- Governance state --\n    /// Returns a governance proposal by ID, or None.\n    fn get_proposal(&self, id: u64) -> Result<Option<Proposal>, NodeError>;\n    /// Lists governance proposals for public RPC and wallet views.\n    fn list_proposals(\n        &self,\n        _status: Option<ProposalStatus>,\n        _limit: usize,\n        _offset: usize,\n    ) -> Result<Vec<Proposal>, NodeError> ;\n    /// Stores or updates a governance proposal.\n    fn set_proposal(&self, proposal: Proposal) -> Result<(), NodeError>;\n    /// Returns the next proposal ID and increments the counter.\n    fn next_proposal_id(&self) -> Result<u64, NodeError>;\n    /// Returns whether `voter_did` has already voted on `proposal_id`.\n    fn has_voted(&self, proposal_id: u64, voter_did: &str) -> Result<bool, NodeError>;\n    /// Records that `voter_did` has voted on `proposal_id`.\n    fn record_vote(&self, proposal_id: u64, voter_did: &str) -> Result<(), NodeError>;\n\n    // -- Global Anchor Layer (GAL) ----------------------------------\n    //\n    // These methods back the public `gal_*` RPC surface used by OAS/HMR\n    // resolvers. Defaults fail closed or return empty so test-only backends\n    // that do not wire GAL cannot accidentally approve production identity\n    // checks.\n    #[cfg(feature = \"tower\")]\n    fn get_gal_hmr(&self, _did: &str) -> Result<Option<sigil_core::HmrAnchor>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_hmr(&self, _anchor: sigil_core::HmrAnchor) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn get_gal_mhr(&self, _did: &str) -> Result<Option<sigil_core::MhrAnchor>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_mhr(&self, _anchor: sigil_core::MhrAnchor) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn get_gal_enr(&self, _did: &str) -> Result<Option<sigil_core::EnrAnchor>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_enr(&self, _anchor: sigil_core::EnrAnchor) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn get_gal_org_root(\n        &self,\n        _org_did: &str,\n    ) -> Result<Option<sigil_core::OrgLineageRoot>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_org_root(&self, _root: sigil_core::OrgLineageRoot) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn get_gal_shard_assignment(\n        &self,\n        _did: &str,\n    ) -> Result<Option<sigil_core::ShardAssignment>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_shard_assignment(\n        &self,\n        _assignment: sigil_core::ShardAssignment,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn get_gal_revocation(\n        &self,\n        _did: &str,\n    ) -> Result<Option<sigil_core::RevocationRecord>, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_revocation(&self, _record: sigil_core::RevocationRecord) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn check_gal_revocation(&self, did: &str) -> Result<sigil_core::RevocationStatus, NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn put_gal_topology(&self, _entry: sigil_core::ShardTopologyEntry) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"tower\")]\n    fn list_gal_topology(&self) -> Result<Vec<sigil_core::ShardTopologyEntry>, NodeError> ;\n\n    /// Return the on-chain governance parameters loaded from genesis.\n    ///\n    /// The default returns `GovernanceParams::default()` so that test\n    /// backends and old-format genesis files that pre-date this field\n    /// continue to work. Production `MemoryExecutionState` overrides this\n    /// to return whatever was stored via `install_governance_policy`.\n    fn governance_params(&self) -> sigil_core::genesis::GovernanceParams ;\n\n    /// Return the effective staking policy for consensus-critical stake checks.\n    ///\n    /// Production nodes should run with identical environment values or a\n    /// backend override installed at startup. The default keeps legacy behavior\n    /// when no upgrade env is configured.\n    fn staking_policy(&self) -> Result<StakingPolicy, NodeError> ;\n\n    /// Return launch activation policy for EOS-style stake collection gating.\n    ///\n    /// Production backends derive this from the fixed staking policy and\n    /// launch environment. Tests can override it directly so environment\n    /// changes do not leak between parallel test cases.\n    fn network_activation_policy(&self) -> Result<NetworkActivationPolicy, NodeError> ;\n\n    /// Return the native supply policy.\n    ///\n    /// Production backends install a fixed-at-genesis policy during bootstrap.\n    /// The default is uncapped only for older tests and external lightweight\n    /// state implementations that have not opted into launch-live accounting.\n    fn native_supply_policy(&self) -> NativeSupplyPolicy ;\n\n    /// Return smart-contract platform parameters loaded from genesis.\n    #[cfg(feature = \"contracts\")]\n    fn contract_params(&self) -> sigil_core::genesis::ContractParams ;\n\n    /// Return CZAC protocol parameters loaded from genesis.\n    fn czac_params(&self) -> sigil_core::genesis::CzacParams ;\n\n    /// Return Vigils launch and source-gating parameters loaded from genesis.\n    fn vigils_params(&self) -> sigil_core::genesis::VigilsParams ;\n\n    /// Transaction signature batch size configured from genesis.\n    ///\n    /// Batch size only affects verifier throughput. It does not change block\n    /// validity, and the batch verifier derives its scalars from the input\n    /// transcript rather than from wall-clock or process RNG.\n    fn signature_batch_size(&self) -> usize ;\n\n    /// Current epoch for DAO/labor validator snapshots.\n    ///\n    /// Production backends should override this from consensus state. The\n    /// default keeps genesis-free tests deterministic.\n    fn current_epoch_for_dao(&self) -> Result<u64, NodeError> ;\n\n    /// Current finalized block height used as the DAO snapshot block.\n    ///\n    /// This is deliberately state-derived rather than clock-derived so replay\n    /// and consensus execution see identical validator context.\n    fn current_block_height_for_dao(&self) -> Result<u64, NodeError> ;\n\n    // -- Crucible training coordination -------------------------------------\n    //\n    // Defaults fail closed for writes and expose an explicit disabled policy.\n    // Production `MemoryExecutionState` overrides these with durable AkashaKV\n    // storage; lightweight tests must opt in deliberately before transactions\n    // can mutate training state.\n\n    fn crucible_policy(&self) -> Result<sigil_crucible::CruciblePolicy, NodeError> ;\n\n    fn get_training_run(\n        &self,\n        _run_id: &str,\n    ) -> Result<Option<sigil_crucible::TrainingRun>, NodeError> ;\n\n    fn list_training_runs(&self) -> Result<Vec<sigil_crucible::TrainingRun>, NodeError> ;\n\n    fn get_training_rollout_batch(\n        &self,\n        _run_id: &str,\n        _batch_id: &str,\n    ) -> Result<Option<sigil_crucible::RolloutBatchCommitment>, NodeError> ;\n\n    fn list_training_rollout_batches(\n        &self,\n        _run_id: &str,\n    ) -> Result<Vec<sigil_crucible::RolloutBatchCommitment>, NodeError> ;\n\n    fn get_training_weights(\n        &self,\n        _run_id: &str,\n        _model_root: &SigilHash,\n    ) -> Result<Option<sigil_crucible::WeightPublicationRecord>, NodeError> ;\n\n    fn list_training_weights(\n        &self,\n        _run_id: &str,\n    ) -> Result<Vec<sigil_crucible::WeightPublicationRecord>, NodeError> ;\n\n    fn list_training_rewards(\n        &self,\n        _run_id: &str,\n    ) -> Result<Vec<sigil_crucible::RewardBatchAttestation>, NodeError> ;\n\n    fn list_training_slashes(\n        &self,\n        _run_id: &str,\n    ) -> Result<Vec<sigil_crucible::TrainingSlashRecord>, NodeError> ;\n\n    fn list_training_events(\n        &self,\n        _run_id: Option<&str>,\n    ) -> Result<Vec<crate::crucible_durable::CrucibleEvent>, NodeError> ;\n\n    fn commit_crucible_tx(\n        &self,\n        _batch: crate::crucible_durable::CrucibleWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    // -- Vigils --------------------------------------------------------------\n    //\n    // Defaults fail closed for writes so a backend cannot silently accept\n    // autonomous subscription state without storage. Read/list defaults keep\n    // test-only backends usable until they opt in.\n    #[cfg(feature = \"vigils-v1\")]\n    fn get_vigil_subscription(\n        &self,\n        _subscription_id: &sigil_core::SigilHash,\n    ) -> Result<Option<sigil_core::vigil::VigilSubscription>, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn put_vigil_subscription(\n        &self,\n        _subscription: sigil_core::vigil::VigilSubscription,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn list_vigil_subscriptions(\n        &self,\n        _subscriber_did: Option<&str>,\n        _limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::VigilSubscription>, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn get_vigil_ingestor(\n        &self,\n        _ingestor_did: &str,\n    ) -> Result<Option<sigil_core::vigil::Ingestor>, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn put_vigil_ingestor(&self, _ingestor: sigil_core::vigil::Ingestor) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn list_vigil_ingestors(&self) -> Result<Vec<sigil_core::vigil::Ingestor>, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn has_vigil_delivery(\n        &self,\n        _subscription_id: &sigil_core::SigilHash,\n        _event_id: &sigil_core::SigilHash,\n    ) -> Result<bool, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn put_vigil_delivery(\n        &self,\n        _record: sigil_core::vigil::VigilDeliveryRecord,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn list_vigil_delivery_history(\n        &self,\n        _subscription_id: &sigil_core::SigilHash,\n        _limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::VigilDeliveryRecord>, NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn schedule_vigil_callback(\n        &self,\n        _callback: sigil_core::vigil::ScheduledVigilCallback,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"vigils-v1\")]\n    fn drain_vigil_callbacks_for_height(\n        &self,\n        _height: u64,\n        _limit: u32,\n    ) -> Result<Vec<sigil_core::vigil::ScheduledVigilCallback>, NodeError> ;\n\n    // -- Tx-inclusion replay barrier (Round-7 P0) --\n    //\n    // `is_tx_included` and `mark_tx_included` form a durable barrier that\n    // closes the crash-window replay window for non-NFT tx types. The\n    // executor calls `is_tx_included` before its nonce-equality check and\n    // `mark_tx_included` on the success path **before** the sequential\n    // `increment_nonce`. Once the inclusion entry has committed, even a\n    // crash that loses the post-execution nonce write cannot replay the\n    // signed transaction on restart \u2014 the inclusion check fires first.\n    //\n    // The default impls return `false` / `Ok(())` so test backends and\n    // genesis-bootstrap code paths that have no durable store still work.\n    // Production `MemoryExecutionState` overrides both to delegate to\n    // `compute_durable` when wired.\n\n    /// Was this signed transaction already durably recorded as applied?\n    fn is_tx_included(&self, _tx_hash: &[u8; 32]) -> Result<bool, NodeError> ;\n\n    /// Record this signed transaction as durably applied at `block_height`.\n    /// Must be called BEFORE `increment_nonce` on every successful tx\n    /// (NFT executors that already fold the nonce update into their atomic\n    /// batch should still mark the inclusion so non-`compute` builds remain\n    /// safe under restart).\n    fn mark_tx_included(&self, _tx_hash: &[u8; 32], _block_height: u64) -> Result<(), NodeError> ;\n\n    // -- Native DEX state ---------------------------------------------------\n    //\n    // DEX is consensus state: pools, LP positions, non-native asset balances,\n    // and audit events must be backed by the same replayable/snapshot-friendly\n    // execution state as balances and nonces. Defaults fail closed for every\n    // write except native MINT balance reads/writes, which deliberately reuse\n    // the account-balance ledger.\n\n    fn get_dex_pool(&self, _pool_id: &str) -> Result<Option<sigil_core::dex::DexPool>, NodeError> ;\n\n    fn put_dex_pool(&self, _pool: sigil_core::dex::DexPool) -> Result<(), NodeError> ;\n\n    fn list_dex_pools(&self) -> Result<Vec<sigil_core::dex::DexPool>, NodeError> ;\n\n    fn get_dex_position(\n        &self,\n        _pool_id: &str,\n        _owner_did: &str,\n    ) -> Result<Option<sigil_core::dex::DexPosition>, NodeError> ;\n\n    fn put_dex_position(&self, _position: sigil_core::dex::DexPosition) -> Result<(), NodeError> ;\n\n    fn list_dex_positions(\n        &self,\n        _owner_did: Option<&str>,\n        _pool_id: Option<&str>,\n    ) -> Result<Vec<sigil_core::dex::DexPosition>, NodeError> ;\n\n    fn get_dex_asset_balance(&self, asset_id: &str, owner_did: &str) -> Result<u64, NodeError> ;\n\n    fn set_dex_asset_balance(\n        &self,\n        asset_id: &str,\n        owner_did: &str,\n        amount: u64,\n    ) -> Result<(), NodeError> ;\n\n    fn append_dex_event(&self, _event: sigil_core::dex::DexEvent) -> Result<u64, NodeError> ;\n\n    fn list_dex_events(\n        &self,\n        _pool_id: Option<&str>,\n        _limit: usize,\n    ) -> Result<Vec<sigil_core::dex::DexEvent>, NodeError> ;\n\n    fn commit_dex_tx(&self, _batch: crate::dex_durable::DexWriteBatch) -> Result<(), NodeError> ;\n\n    // -- Storage Pinning Marketplace state ---------------------------------\n    //\n    // Storage marketplace consensus state contains commitments, provider\n    // records, pin contracts, receipts, challenge records, and slashing /\n    // reward outcomes. Weave bytes stay off-chain.\n\n    fn get_storage_provider(\n        &self,\n        _provider_did: &str,\n    ) -> Result<Option<sigil_core::storage_market::StorageProviderRecord>, NodeError> ;\n\n    fn list_storage_providers(\n        &self,\n    ) -> Result<Vec<sigil_core::storage_market::StorageProviderRecord>, NodeError> ;\n\n    fn get_storage_pin_request(\n        &self,\n        _request_id: &str,\n    ) -> Result<Option<sigil_core::storage_market::StoragePinRequest>, NodeError> ;\n\n    fn list_storage_pin_requests_by_owner(\n        &self,\n        _owner_did: &str,\n    ) -> Result<Vec<sigil_core::storage_market::StoragePinRequest>, NodeError> ;\n\n    fn get_storage_pin_contract(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Option<sigil_core::storage_market::StoragePinContract>, NodeError> ;\n\n    fn list_storage_pin_contracts_by_provider(\n        &self,\n        _provider_did: &str,\n    ) -> Result<Vec<sigil_core::storage_market::StoragePinContract>, NodeError> ;\n\n    fn list_storage_pin_contracts_by_request(\n        &self,\n        _request_id: &str,\n    ) -> Result<Vec<sigil_core::storage_market::StoragePinContract>, NodeError> ;\n\n    fn get_storage_pin_receipt(\n        &self,\n        _receipt_id: &str,\n    ) -> Result<Option<sigil_core::storage_market::StoragePinReceipt>, NodeError> ;\n\n    fn list_storage_pin_receipts_by_contract(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Vec<sigil_core::storage_market::StoragePinReceipt>, NodeError> ;\n\n    fn get_storage_challenge(\n        &self,\n        _challenge_id: &str,\n    ) -> Result<Option<sigil_core::storage_market::StorageChallengeRecord>, NodeError> ;\n\n    fn list_storage_challenges_by_contract(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Vec<sigil_core::storage_market::StorageChallengeRecord>, NodeError> ;\n\n    fn commit_storage_market_tx(\n        &self,\n        _batch: crate::storage_market_durable::StorageMarketWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    // -- Evidence anchoring state ------------------------------------------\n    //\n    // Reads default to empty; the write path fails closed so a backend\n    // without evidence storage cannot silently accept anchor transactions.\n\n    /// Fetch one evidence anchor record by deterministic anchor ID.\n    fn get_evidence_anchor(\n        &self,\n        _anchor_id: &str,\n    ) -> Result<Option<sigil_core::evidence::EvidenceAnchorRecord>, NodeError> ;\n\n    /// List all evidence anchor records for a content digest.\n    fn list_evidence_anchors_by_digest(\n        &self,\n        _digest: &str,\n    ) -> Result<Vec<sigil_core::evidence::EvidenceAnchorRecord>, NodeError> ;\n\n    /// Persist an evidence anchor record (keyed by `record.anchor_id`).\n    fn put_evidence_anchor(\n        &self,\n        _record: sigil_core::evidence::EvidenceAnchorRecord,\n    ) -> Result<(), NodeError> ;\n\n    // -- Nova metaverse state ----------------------------------------------\n    //\n    // Nova is launch-scope consensus state. Defaults fail closed for writes so\n    // no backend can appear launch-live without durable world/parcel storage.\n\n    fn get_nova_world(\n        &self,\n        _world_id: &str,\n    ) -> Result<Option<sigil_core::nova::NovaWorldConfig>, NodeError> ;\n\n    fn put_nova_world(&self, _world: sigil_core::nova::NovaWorldConfig) -> Result<(), NodeError> ;\n\n    fn list_nova_worlds(&self) -> Result<Vec<sigil_core::nova::NovaWorldConfig>, NodeError> ;\n\n    fn get_nova_parcel(\n        &self,\n        _parcel_id: &str,\n    ) -> Result<Option<sigil_core::nova::NovaParcelRecord>, NodeError> ;\n\n    fn put_nova_parcel(\n        &self,\n        _parcel: sigil_core::nova::NovaParcelRecord,\n    ) -> Result<(), NodeError> ;\n\n    fn list_nova_parcels_in_region(\n        &self,\n        _world_id: &str,\n        _region_x: i32,\n        _region_z: i32,\n    ) -> Result<Vec<sigil_core::nova::NovaParcelRecord>, NodeError> ;\n\n    fn list_nova_parcels(&self) -> Result<Vec<sigil_core::nova::NovaParcelRecord>, NodeError> ;\n\n    fn get_nova_building(\n        &self,\n        _building_id: &str,\n    ) -> Result<Option<sigil_core::nova::NovaBuildingRecord>, NodeError> ;\n\n    fn put_nova_building(\n        &self,\n        _building: sigil_core::nova::NovaBuildingRecord,\n    ) -> Result<(), NodeError> ;\n\n    fn delete_nova_building(&self, _building_id: &str) -> Result<(), NodeError> ;\n\n    fn list_nova_buildings(&self) -> Result<Vec<sigil_core::nova::NovaBuildingRecord>, NodeError> ;\n\n    fn get_nova_avatar(\n        &self,\n        _avatar_id: &str,\n    ) -> Result<Option<sigil_core::nova::NovaAvatarRecord>, NodeError> ;\n\n    fn put_nova_avatar(\n        &self,\n        _avatar: sigil_core::nova::NovaAvatarRecord,\n    ) -> Result<(), NodeError> ;\n\n    fn list_nova_avatars(&self) -> Result<Vec<sigil_core::nova::NovaAvatarRecord>, NodeError> ;\n\n    fn get_nova_auction(\n        &self,\n        _auction_id: &str,\n    ) -> Result<Option<sigil_core::nova::NovaAuctionRecord>, NodeError> ;\n\n    fn put_nova_auction(\n        &self,\n        _auction: sigil_core::nova::NovaAuctionRecord,\n    ) -> Result<(), NodeError> ;\n\n    fn list_nova_auctions(&self) -> Result<Vec<sigil_core::nova::NovaAuctionRecord>, NodeError> ;\n\n    fn commit_nova_tx(&self, _batch: crate::nova_durable::NovaWriteBatch) -> Result<(), NodeError> ;\n\n    /// Create a disposable, copy-on-write validation snapshot.\n    ///\n    /// Consensus uses this before prevoting so proposal re-execution cannot\n    /// mutate canonical state unless the block later finalizes.\n    fn snapshot_for_validation(&self) -> Result<Box<dyn ExecutionState>, NodeError> ;\n\n    /// Compute the deterministic global post-state root.\n    ///\n    /// Production backends must override this with their complete state snapshot.\n    fn compute_state_root(&self) -> Result<SigilHash, NodeError> ;\n\n    /// Compute the deterministic global post-state root for a specific block\n    /// height.\n    ///\n    /// This is used during rolling protocol upgrades where new state-root\n    /// namespaces must not alter historical replay before their configured\n    /// activation height. Backends that do not need height-aware schemas may\n    /// safely delegate to `compute_state_root`.\n    fn compute_state_root_at_height(&self, _block_height: u64) -> Result<SigilHash, NodeError> ;\n\n    fn state_root_entries_at_height(\n        &self,\n        _block_height: u64,\n    ) -> Result<Vec<StateRootEntry>, NodeError> ;\n\n    // -- Compute marketplace --\n    //\n    // The default implementations return NotSupported. Production state\n    // backends (the `engine` module) override the methods they wire; the\n    // executor's compute handlers fail closed when the backend has not yet\n    // implemented compute storage.\n\n    /// Current epoch (used by compute handlers to time-stamp records).\n    #[cfg(feature = \"compute\")]\n    fn current_epoch(&self) -> Result<u64, NodeError> ;\n\n    /// Current block height (snapshot at execution).\n    #[cfg(feature = \"compute\")]\n    fn current_block_height(&self) -> Result<u64, NodeError> ;\n\n    /// Snapshot of the chain-config policies the compute executor must\n    /// enforce. The default returns a fail-closed policy: empty resolver\n    /// allowlist (no challenge resolution permitted) and TEE verification\n    /// disabled. Production backends override this from genesis.\n    #[cfg(feature = \"compute\")]\n    fn compute_policy(&self) -> Result<crate::compute_state::ComputePolicy, NodeError> ;\n\n    /// Phase 13 \u2014 return the TEE verifier registry the executor will\n    /// consult on T3 receipt settlement. The default registers the four\n    /// production verifier stubs (each fails closed with\n    /// `FixtureMaterialRequired`). Backends that need to override (e.g.\n    /// tests using `TestAcceptor`, or ops that have plugged in real\n    /// vendor reference material) provide a custom registry.\n    ///\n    /// Only available when the `tee-verify` feature is compiled in;\n    /// production builds without `tee-verify` reject all T3 settlement\n    /// upstream of the verifier check.\n    #[cfg(feature = \"tee-verify\")]\n    fn tee_verifier(&self) -> Result<crate::tee_verify::TeeVerifierRegistry, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_compute_provider(\n        &self,\n        _provider_did: &str,\n    ) -> Result<Option<crate::compute_state::ComputeProvider>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_compute_provider(\n        &self,\n        _provider: crate::compute_state::ComputeProvider,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_compute_providers(\n        &self,\n    ) -> Result<Vec<crate::compute_state::ComputeProvider>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_compute_escrow(\n        &self,\n        _owner_did: &str,\n    ) -> Result<Option<crate::compute_state::ComputeEscrow>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_compute_escrow(\n        &self,\n        _escrow: crate::compute_state::ComputeEscrow,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_compute_job(\n        &self,\n        _job_id: &str,\n    ) -> Result<Option<crate::compute_state::ComputeJob>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_compute_job(&self, _job: crate::compute_state::ComputeJob) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_compute_jobs(\n        &self,\n        _filter: &crate::compute_state::JobIndexFilter,\n    ) -> Result<Vec<crate::compute_state::ComputeJob>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_compute_receipt(\n        &self,\n        _receipt_id: &str,\n    ) -> Result<Option<crate::compute_state::ComputeReceiptRecord>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_compute_receipt(\n        &self,\n        _record: crate::compute_state::ComputeReceiptRecord,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn is_receipt_settled(&self, _receipt_id: &str) -> Result<bool, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn is_receipt_tuple_settled(\n        &self,\n        receipt_id: &str,\n        _job_id: &str,\n        _task_id: Option<&str>,\n    ) -> Result<bool, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_compute_challenge(\n        &self,\n        _challenge_id: &str,\n    ) -> Result<Option<crate::compute_state::ComputeChallenge>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_compute_challenge(\n        &self,\n        _challenge: crate::compute_state::ComputeChallenge,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_compute_challenges_by_receipt(\n        &self,\n        _receipt_id: &str,\n    ) -> Result<Vec<crate::compute_state::ComputeChallenge>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn append_compute_audit_event(\n        &self,\n        _event: crate::compute_state::ComputeAuditEvent,\n    ) -> Result<u64, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_compute_audit_events(\n        &self,\n        _query: &crate::compute_state::AuditQuery,\n    ) -> Result<Vec<crate::compute_state::ComputeAuditEvent>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn append_compute_reputation_signal(\n        &self,\n        _signal: crate::compute_state::ComputeReputationSignal,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_compute_reputation_signals(\n        &self,\n        _provider_did: &str,\n    ) -> Result<Vec<crate::compute_state::ComputeReputationSignal>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_maca_work_claim(\n        &self,\n        _claim: crate::compute_state::MacaWorkClaim,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_maca_work_claim(\n        &self,\n        _work_id: &sigil_core::hash::SigilHash,\n    ) -> Result<Option<crate::compute_state::MacaWorkClaim>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_maca_validation_record(\n        &self,\n        _record: crate::compute_state::MacaValidationRecord,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_maca_validation_records(\n        &self,\n        _work_id: &sigil_core::hash::SigilHash,\n    ) -> Result<Vec<crate::compute_state::MacaValidationRecord>, NodeError> ;\n\n    // -- MACA epoch / quorum aggregation (Phase 12) ------------------\n\n    #[cfg(feature = \"compute\")]\n    fn get_validator_agent(\n        &self,\n        _agent_did: &str,\n    ) -> Result<Option<crate::compute_state::ValidatorAgentRecord>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_validator_agent(\n        &self,\n        _record: crate::compute_state::ValidatorAgentRecord,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_validator_agents(\n        &self,\n    ) -> Result<Vec<crate::compute_state::ValidatorAgentRecord>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_maca_beacon(\n        &self,\n        _epoch_id: u64,\n    ) -> Result<Option<crate::compute_state::BeaconRecord>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_maca_beacon(\n        &self,\n        _record: crate::compute_state::BeaconRecord,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_maca_epoch(\n        &self,\n        _epoch_id: u64,\n    ) -> Result<Option<crate::compute_state::MacaEpoch>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_maca_epoch(&self, _epoch: crate::compute_state::MacaEpoch) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_maca_epochs(\n        &self,\n        _query: &crate::compute_state::EpochQuery,\n    ) -> Result<Vec<crate::compute_state::MacaEpoch>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn get_maca_quorum_proof(\n        &self,\n        _epoch_id: u64,\n        _work_id: &sigil_core::hash::SigilHash,\n    ) -> Result<Option<crate::compute_state::MacaQuorumProof>, NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn put_maca_quorum_proof(\n        &self,\n        _proof: crate::compute_state::MacaQuorumProof,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"compute\")]\n    fn list_maca_quorum_proofs(\n        &self,\n        _epoch_id: u64,\n    ) -> Result<Vec<crate::compute_state::MacaQuorumProof>, NodeError> ;\n\n    /// Returns all `MacaValidationRecord`s submitted under a given epoch\n    /// + work_id pair. Used by `MacaFinalizeEpoch` to aggregate.\n    #[cfg(feature = \"compute\")]\n    fn list_maca_attestations_for_epoch_work(\n        &self,\n        _epoch_id: u64,\n        _work_id: &sigil_core::hash::SigilHash,\n    ) -> Result<Vec<crate::compute_state::MacaValidationRecord>, NodeError> ;\n\n    // -- DAO Work OS state (Phase 3) ---------------------------------\n    //\n    // Mandate / labor-contract storage backing the validators in\n    // `sigil_state::dao_validators`. Default implementations fail\n    // closed when the backend has not wired DAO state \u2014 protected\n    // transactions then produce typed `Failed` receipts rather than\n    // silently no-op'ing.\n\n    /// Fetch a Mandate by its `mandate_id` (DID), or `None` if absent.\n    #[cfg(feature = \"dao-validators\")]\n    fn get_mandate(&self, _mandate_id: &str) -> Result<Option<sigil_core::Mandate>, NodeError> ;\n\n    /// Insert or update a Mandate. Replaces any existing record at the\n    /// same `mandate_id`.\n    #[cfg(feature = \"dao-validators\")]\n    fn put_mandate(&self, _mandate: sigil_core::Mandate) -> Result<(), NodeError> ;\n\n    /// Return active mandates for state-derived DAO validator snapshots.\n    #[cfg(feature = \"dao-validators\")]\n    fn list_active_mandates(&self) -> Result<Vec<sigil_core::Mandate>, NodeError> ;\n\n    /// Fetch a `LaborJob` posting by its `job_id`, or `None` if absent.\n    fn get_labor_job(&self, _job_id: &str) -> Result<Option<sigil_core::LaborJob>, NodeError> ;\n\n    /// Insert or update a `LaborJob`. Replaces any existing record at the\n    /// same `job_id`.\n    fn put_labor_job(&self, _job: sigil_core::LaborJob) -> Result<(), NodeError> ;\n\n    /// Fetch a `LaborBid` by its `bid_id`, or `None` if absent.\n    fn get_labor_bid(&self, _bid_id: &str) -> Result<Option<sigil_core::LaborBid>, NodeError> ;\n\n    /// Insert or update a `LaborBid`. Replaces any existing record at the\n    /// same `bid_id`.\n    fn put_labor_bid(&self, _bid: sigil_core::LaborBid) -> Result<(), NodeError> ;\n\n    /// Return all `bid_id` strings for bids submitted against `job_id`.\n    fn list_labor_bids_for_job(&self, _job_id: &str) -> Result<Vec<String>, NodeError> ;\n\n    /// Look up the `contract_id` associated with `dispute_id`.\n    /// Returns `None` if the dispute index entry does not exist.\n    fn get_labor_dispute_contract_id(\n        &self,\n        _dispute_id: &str,\n    ) -> Result<Option<String>, NodeError> ;\n\n    /// Fetch a LaborContract by its `contract_id`, or `None` if absent.\n    fn get_labor_contract(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Option<sigil_core::LaborContract>, NodeError> ;\n\n    /// Insert or update a LaborContract. Replaces any existing record\n    /// at the same `contract_id`.\n    fn put_labor_contract(&self, _contract: sigil_core::LaborContract) -> Result<(), NodeError> ;\n\n    /// Return labor contracts for state-derived DAO validator snapshots.\n    fn list_labor_contracts(&self) -> Result<Vec<sigil_core::LaborContract>, NodeError> ;\n\n    /// Fetch a single durable labor milestone.\n    fn get_labor_milestone(\n        &self,\n        _contract_id: &str,\n        _milestone_index: u32,\n    ) -> Result<Option<sigil_core::Milestone>, NodeError> ;\n\n    /// List milestones for a labor contract.\n    fn list_labor_milestones(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Vec<sigil_core::Milestone>, NodeError> ;\n\n    /// Return all labor jobs known to this state backend.\n    fn list_labor_jobs(&self) -> Result<Vec<sigil_core::LaborJob>, NodeError> ;\n\n    /// Return all labor bids known to this state backend.\n    fn list_labor_bids(&self) -> Result<Vec<sigil_core::LaborBid>, NodeError> ;\n\n    /// Fetch exact labor escrow accounting for a contract.\n    fn get_labor_escrow(\n        &self,\n        _contract_id: &str,\n    ) -> Result<Option<sigil_core::LaborEscrow>, NodeError> ;\n\n    /// Insert or update exact labor escrow accounting.\n    fn put_labor_escrow(&self, _escrow: sigil_core::LaborEscrow) -> Result<(), NodeError> ;\n\n    /// Fetch a full labor dispute record.\n    fn get_labor_dispute(\n        &self,\n        _dispute_id: &str,\n    ) -> Result<Option<sigil_core::Dispute>, NodeError> ;\n\n    /// Insert or update a full labor dispute record.\n    fn put_labor_dispute(&self, _dispute: sigil_core::Dispute) -> Result<(), NodeError> ;\n\n    /// List full labor dispute records.\n    fn list_labor_disputes(\n        &self,\n        _state: Option<sigil_core::DisputeState>,\n    ) -> Result<Vec<sigil_core::Dispute>, NodeError> ;\n\n    /// Fetch an open bounty offer by ID.\n    fn get_labor_offer(\n        &self,\n        _offer_id: &str,\n    ) -> Result<Option<sigil_core::BountyOffer>, NodeError> ;\n\n    /// List open bounty offers, optionally filtered by state.\n    fn list_labor_offers(\n        &self,\n        _state: Option<sigil_core::BountyState>,\n    ) -> Result<Vec<sigil_core::BountyOffer>, NodeError> ;\n\n    /// Fetch an open bounty claim by ID.\n    fn get_labor_claim(\n        &self,\n        _claim_id: &str,\n    ) -> Result<Option<sigil_core::BountyClaim>, NodeError> ;\n\n    /// List open bounty claims, optionally filtered by offer and claimant.\n    fn list_labor_claims(\n        &self,\n        _offer_id: Option<&str>,\n        _claimant_did: Option<&str>,\n    ) -> Result<Vec<sigil_core::BountyClaim>, NodeError> ;\n\n    /// Replay/equivocation guard for claimant deliverables.\n    fn get_labor_claim_index(\n        &self,\n        _offer_id: &str,\n        _claimant_did: &str,\n        _deliverable_hash: &str,\n    ) -> Result<Option<String>, NodeError> ;\n\n    /// Fetch an attestation by ID.\n    fn get_labor_claim_attestation(\n        &self,\n        _attestation_id: &str,\n    ) -> Result<Option<sigil_core::ClaimAttestation>, NodeError> ;\n\n    /// List attestations for one claim.\n    fn list_labor_claim_attestations(\n        &self,\n        _claim_id: &str,\n    ) -> Result<Vec<sigil_core::ClaimAttestation>, NodeError> ;\n\n    /// Fetch durable Labor audit events in a block-height range.\n    fn list_labor_events(\n        &self,\n        _from_height: u64,\n        _to_height: u64,\n    ) -> Result<Vec<crate::labor_durable::LaborEvent>, NodeError> ;\n\n    // -- Agent Contract Zones (Phase 15) ------------------------------\n    //\n    // `contracts` feature surface. Default implementations fail closed\n    // so that the four contract transactions (DeployContract,\n    // CallContract, UpgradeContract, SetContractPolicy) cannot silently\n    // no-op when the backend has not wired contract storage.\n\n    /// Get a contract record by DID. Returns `None` if not deployed.\n    #[cfg(feature = \"contracts\")]\n    fn get_contract(\n        &self,\n        _contract_did: &str,\n    ) -> Result<Option<sigil_execution::ContractRecord>, NodeError> ;\n\n    /// Insert or replace a contract record.\n    #[cfg(feature = \"contracts\")]\n    fn put_contract(&self, _record: sigil_execution::ContractRecord) -> Result<(), NodeError> ;\n\n    /// List all contracts deployed in `zone_id`.\n    #[cfg(feature = \"contracts\")]\n    fn list_zone_contracts(\n        &self,\n        _zone_id: &str,\n    ) -> Result<Vec<sigil_execution::ContractRecord>, NodeError> ;\n\n    /// List all known Organization Zones in deterministic order.\n    #[cfg(feature = \"contracts\")]\n    fn list_contract_zones(&self) -> Result<Vec<sigil_execution::OrganizationZone>, NodeError> ;\n\n    /// Get an `OrganizationZone` by id.\n    #[cfg(feature = \"contracts\")]\n    fn get_zone(\n        &self,\n        _zone_id: &str,\n    ) -> Result<Option<sigil_execution::OrganizationZone>, NodeError> ;\n\n    /// Insert or replace an `OrganizationZone`.\n    #[cfg(feature = \"contracts\")]\n    fn put_zone(&self, _zone: sigil_execution::OrganizationZone) -> Result<(), NodeError> ;\n\n    /// Read a single key from a contract's keyed state. Returns `None`\n    /// if the key is unset.\n    #[cfg(feature = \"contracts\")]\n    fn get_contract_state(\n        &self,\n        _contract_did: &str,\n        _key: &[u8],\n    ) -> Result<Option<Vec<u8>>, NodeError> ;\n\n    /// Write a single key into a contract's keyed state.\n    #[cfg(feature = \"contracts\")]\n    fn put_contract_state(\n        &self,\n        _contract_did: &str,\n        _key: &[u8],\n        _value: &[u8],\n    ) -> Result<(), NodeError> ;\n\n    /// Delete a single key from a contract's keyed state.\n    #[cfg(feature = \"contracts\")]\n    fn delete_contract_state(&self, _contract_did: &str, _key: &[u8]) -> Result<(), NodeError> ;\n\n    /// Compute a deterministic state-root for a contract over its\n    /// keyed state. Default returns `SigilHash::ZERO`. Production\n    /// backends override with a Merkle-style root.\n    #[cfg(feature = \"contracts\")]\n    fn contract_state_root(\n        &self,\n        _contract_did: &str,\n    ) -> Result<sigil_core::hash::SigilHash, NodeError> ;\n\n    /// Append a contract event. Returns the assigned monotonic seq.\n    #[cfg(feature = \"contracts\")]\n    fn append_contract_event(\n        &self,\n        _event: sigil_execution::ContractEvent,\n    ) -> Result<u64, NodeError> ;\n\n    /// List contract events matching `query`. Default returns empty.\n    #[cfg(feature = \"contracts\")]\n    fn list_contract_events(\n        &self,\n        _query: &sigil_execution::ContractEventQuery,\n    ) -> Result<Vec<sigil_execution::ContractEvent>, NodeError> ;\n\n    /// Get the WASM bytecode blob keyed by its content-addressed hash.\n    /// `None` if no blob has been registered for `code_hash`.\n    #[cfg(feature = \"contracts\")]\n    fn get_code_blob(\n        &self,\n        _code_hash: &sigil_core::hash::SigilHash,\n    ) -> Result<Option<Vec<u8>>, NodeError> ;\n\n    /// Insert a content-addressed WASM bytecode blob. The hash MUST\n    /// match `SigilHash::digest(bytes)`; backends MUST verify before\n    /// persisting.\n    #[cfg(feature = \"contracts\")]\n    fn put_code_blob(\n        &self,\n        _code_hash: &sigil_core::hash::SigilHash,\n        _bytes: &[u8],\n    ) -> Result<(), NodeError> ;\n\n    // -- Cross-zone messaging (Phase 15-K) --\n    //\n    // The contract host fn `send_zone_message` enqueues messages here.\n    // The target zone's executor drains them in a subsequent block via\n    // `list_pending_zone_messages` + `mark_zone_message_delivered`.\n    // Inline cross-zone delivery is deliberately out of scope \u2014 message\n    // delivery is a separate consensus step, in line with the design\n    // doc.\n\n    #[cfg(feature = \"contracts\")]\n    fn enqueue_zone_message(\n        &self,\n        _msg: sigil_execution::CrossZoneMessage,\n    ) -> Result<(), NodeError> ;\n\n    #[cfg(feature = \"contracts\")]\n    fn list_pending_zone_messages(\n        &self,\n        _target_zone: &str,\n    ) -> Result<Vec<sigil_execution::CrossZoneMessage>, NodeError> ;\n\n    #[cfg(feature = \"contracts\")]\n    fn mark_zone_message_delivered(\n        &self,\n        _msg_id: &str,\n        _status: sigil_execution::MessageStatus,\n    ) -> Result<(), NodeError> ;\n\n    // -- Native NFT state (unconditional \u2014 NFTs are core, not optional) -------\n    //\n    // Default implementations fail closed so that callers never silently\n    // no-op on backends without NFT storage.\n    // `MemoryExecutionState` overrides all of these below.\n\n    /// Fetch an NFT collection by id, or `None` if not found.\n    fn get_nft_collection(\n        &self,\n        _collection_id: &sigil_core::nft::CollectionId,\n    ) -> Result<Option<sigil_core::nft::NftCollection>, NodeError> ;\n\n    /// Insert or replace an NFT collection record.\n    fn put_nft_collection(\n        &self,\n        _collection: sigil_core::nft::NftCollection,\n    ) -> Result<(), NodeError> ;\n\n    /// Fetch an individual NFT token, or `None` if not found.\n    fn get_nft_token(\n        &self,\n        _collection_id: &sigil_core::nft::CollectionId,\n        _token_id: sigil_core::nft::TokenId,\n    ) -> Result<Option<sigil_core::nft::NftToken>, NodeError> ;\n\n    /// Insert or replace an NFT token record.\n    fn put_nft_token(&self, _token: sigil_core::nft::NftToken) -> Result<(), NodeError> ;\n\n    /// Delete a token record (used on burn). No-op if already absent.\n    fn delete_nft_token(\n        &self,\n        _collection_id: &sigil_core::nft::CollectionId,\n        _token_id: sigil_core::nft::TokenId,\n    ) -> Result<(), NodeError> ;\n\n    /// Return all `OwnerIndexEntry` records for `owner_did`, paged.\n    ///\n    /// `limit = 0` means \"return all\". Entries are returned in insertion order.\n    fn list_nfts_by_owner(\n        &self,\n        _owner_did: &str,\n        _limit: usize,\n        _offset: usize,\n    ) -> Result<Vec<sigil_core::nft::OwnerIndexEntry>, NodeError> ;\n\n    /// Upsert the owner-index entry for `(collection_id, owner_did)`.\n    fn put_owner_index_entry(\n        &self,\n        _entry: sigil_core::nft::OwnerIndexEntry,\n    ) -> Result<(), NodeError> ;\n\n    /// Remove a token from the owner-index entry for `(collection_id, owner_did)`.\n    ///\n    /// If the resulting token list is empty, the entry may be deleted.\n    fn remove_owner_index_entry(\n        &self,\n        _collection_id: &sigil_core::nft::CollectionId,\n        _owner_did: &str,\n        _token_id: sigil_core::nft::TokenId,\n    ) -> Result<(), NodeError> ;\n\n    /// Fetch the DID-identity index for `subject_did`, or `None`.\n    fn get_did_identity_nft(\n        &self,\n        _subject_did: &str,\n    ) -> Result<Option<sigil_core::nft::DidIdentityIndex>, NodeError> ;\n\n    /// Upsert the DID-identity index for a subject.\n    fn put_did_identity_nft(\n        &self,\n        _index: sigil_core::nft::DidIdentityIndex,\n    ) -> Result<(), NodeError> ;\n\n    /// Remove a `(collection_id, token_id)` pair from the DID-identity index.\n    ///\n    /// Used on burn of an identity token. No-op if not present.\n    fn remove_did_identity_nft(\n        &self,\n        _subject_did: &str,\n        _collection_id: &sigil_core::nft::CollectionId,\n        _token_id: sigil_core::nft::TokenId,\n    ) -> Result<(), NodeError> ;\n\n    /// Append an NFT lifecycle event to the event log. Returns the\n    /// assigned monotonic sequence number.\n    fn append_nft_event(&self, _event: sigil_core::nft::NftEvent) -> Result<u64, NodeError> ;\n\n    /// List NFT events, optionally filtered by collection. Default returns\n    /// empty.\n    fn list_nft_events(\n        &self,\n        _collection_id: Option<&sigil_core::nft::CollectionId>,\n    ) -> Result<Vec<sigil_core::nft::NftEvent>, NodeError> ;\n\n    /// Commit a [`crate::nft_durable::NftWriteBatch`] atomically.\n    ///\n    /// This is the **only** write path that NFT transaction handlers must use.\n    /// All mutations accumulated inside the batch are applied in a single MVCC\n    /// transaction (when backed by AkashaKV) so a crash mid-handler leaves no\n    /// partial state behind.\n    ///\n    /// Default implementation: **fail closed** \u2014 callers must explicitly\n    /// override this method for any backend that actually persists NFT state.\n    /// `MemoryExecutionState` overrides it to dispatch through the durable\n    /// store when one is installed, or to apply ops sequentially in-memory.\n    fn commit_nft_tx(&self, _batch: crate::nft_durable::NftWriteBatch) -> Result<(), NodeError> ;\n\n    /// Commit a [`crate::compute_durable::ComputeWriteBatch`] atomically.\n    ///\n    /// This is the **only** write path that compute marketplace transaction\n    /// handlers must use. All mutations accumulated inside the batch are\n    /// applied in a single AkashaKV MVCC transaction so a crash mid-handler\n    /// leaves no partial state behind.\n    ///\n    /// Default implementation: **fail closed** \u2014 callers must explicitly\n    /// override this method for any backend that actually persists compute\n    /// state. `MemoryExecutionState` overrides it to dispatch through the\n    /// durable store when one is installed, or to apply ops sequentially\n    /// in-memory.\n    #[cfg(feature = \"compute\")]\n    fn commit_compute_tx(\n        &self,\n        _batch: crate::compute_durable::ComputeWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    /// Commit a [`crate::contract_durable::ContractWriteBatch`] atomically.\n    ///\n    /// This is the **only** write path that contract transaction handlers must\n    /// use. All mutations accumulated in the batch (contract records, keyed\n    /// state, code blobs, zones, events, cross-zone messages) are applied in a\n    /// single AkashaKV MVCC transaction so a crash mid-handler leaves no\n    /// partial state behind.\n    ///\n    /// Default implementation: **fail closed** \u2014 callers must explicitly\n    /// override this method for any backend that actually persists contract\n    /// state. `MemoryExecutionState` overrides it to dispatch through the\n    /// AkashaKV durable store when one is installed, or to apply ops\n    /// sequentially in-memory (test/dev only, no crash-safety guarantee).\n    #[cfg(feature = \"contracts\")]\n    fn commit_contract_tx(\n        &self,\n        _batch: crate::contract_durable::ContractWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    // -- Tower (Casper FFG epoch finality) \u2014 core consensus, unconditional ----\n    //\n    // Tower is not feature-gated. Every node must be able to read and write\n    // Tower finality state. Default implementations fail closed so that\n    // callers see a clear error rather than silent data loss when the backend\n    // has not yet wired Tower storage. `MemoryExecutionState` overrides all\n    // of these to dispatch through the AkashaKV durable store when one is\n    // installed, or to return the fail-closed error otherwise.\n\n    /// Fetch a Tower validator record by DID. Returns `None` if not found.\n    fn get_tower_validator(\n        &self,\n        _did: &str,\n    ) -> Result<Option<sigil_tower::types::ValidatorRecord>, NodeError> ;\n\n    /// Insert or replace a Tower validator record.\n    fn put_tower_validator(\n        &self,\n        _record: sigil_tower::types::ValidatorRecord,\n    ) -> Result<(), NodeError> ;\n\n    /// Return all Tower validator records.\n    fn list_tower_validators(&self) -> Result<Vec<sigil_tower::types::ValidatorRecord>, NodeError> ;\n\n    /// Fetch accepted Tower slashing evidence by evidence hash.\n    fn get_tower_evidence(\n        &self,\n        _evidence_hash: &SigilHash,\n    ) -> Result<Option<sigil_tower::types::SlashingEvidence>, NodeError> ;\n\n    /// Fetch a finality checkpoint by epoch. Returns `None` if not found.\n    fn get_tower_checkpoint(\n        &self,\n        _epoch: u64,\n    ) -> Result<Option<sigil_tower::types::FinalityCheckpoint>, NodeError> ;\n\n    /// Insert or replace a finality checkpoint.\n    fn put_tower_checkpoint(\n        &self,\n        _cp: sigil_tower::types::FinalityCheckpoint,\n    ) -> Result<(), NodeError> ;\n\n    /// Fetch the persisted finality state snapshot (justified/finalized epoch\n    /// highwater marks). Returns `None` on a fresh store.\n    fn get_tower_finality_state(\n        &self,\n    ) -> Result<Option<crate::tower_durable::FinalityStateSnapshot>, NodeError> ;\n\n    /// Persist the finality state snapshot.\n    fn put_tower_finality_state(\n        &self,\n        _snap: crate::tower_durable::FinalityStateSnapshot,\n    ) -> Result<(), NodeError> ;\n\n    /// Store a Casper FFG attestation (vote) for `(target_epoch, voter_did)`.\n    fn put_tower_attestation(\n        &self,\n        _vote: sigil_tower::types::FinalityVote,\n    ) -> Result<(), NodeError> ;\n\n    /// Return all attestations cast for `epoch`.\n    fn list_tower_attestations_for_epoch(\n        &self,\n        _epoch: u64,\n    ) -> Result<Vec<sigil_tower::types::FinalityVote>, NodeError> ;\n\n    /// Mark `epoch` as justified.\n    fn tower_mark_justified(&self, _epoch: u64) -> Result<(), NodeError> ;\n\n    /// Mark `epoch` as finalized.\n    fn tower_mark_finalized(&self, _epoch: u64) -> Result<(), NodeError> ;\n\n    /// Returns `true` if `epoch` has been marked finalized.\n    fn tower_is_epoch_finalized(&self, _epoch: u64) -> Result<bool, NodeError> ;\n\n    /// Return all epoch numbers that have been finalized, in ascending order.\n    fn list_tower_finalized_epochs(&self) -> Result<Vec<u64>, NodeError> ;\n\n    /// Apply all operations in `batch` atomically via a single AkashaKV MVCC\n    /// transaction. Fail closed when no durable Tower store is wired.\n    fn commit_tower_tx(\n        &self,\n        _batch: crate::tower_durable::TowerWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    /// Apply all governance operations in `batch` atomically via a single\n    /// AkashaKV MVCC transaction. Fail closed when no durable Governance store\n    /// is wired \u2014 ensures proposal creation and vote recording never leave\n    /// partial state on disk.\n    fn commit_governance_tx(\n        &self,\n        _batch: crate::governance_durable::GovernanceWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    /// Apply all labor operations in `batch` atomically via a single AkashaKV\n    /// MVCC transaction. Fail closed when no durable Labor store is wired \u2014\n    /// ensures contract creation and milestone release never leave partial\n    /// state on disk.\n    fn commit_labor_tx(\n        &self,\n        _batch: crate::labor_durable::LaborWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    // -- Username state -----------------------------------------------------\n    //\n    // Default impls return None / empty / default-params / fail-closed so that\n    // every existing test backend keeps compiling. Production\n    // `MemoryExecutionState` overrides these to route through\n    // `DurableUsernameStore` and the in-memory mirror.\n\n    /// Username system parameters (length-tier prices, multipliers, reserved\n    /// list, dispute multisig DIDs). Default returns\n    /// `UsernameParams::default()` for backward compatibility.\n    fn username_params(&self) -> sigil_core::username::UsernameParams ;\n\n    /// Fetch a username record by canonical name. Default returns `None`.\n    fn username_get(\n        &self,\n        _canonical_name: &str,\n    ) -> Result<Option<sigil_core::username::UsernameRecord>, NodeError> ;\n\n    /// Look up a DID's primary `@username`. Default returns `None`.\n    fn username_lookup_reverse(&self, _owner_did: &str) -> Result<Option<String>, NodeError> ;\n\n    /// List all username records owned by `owner_did`. Default returns empty.\n    fn username_list_for_owner(\n        &self,\n        _owner_did: &str,\n    ) -> Result<Vec<sigil_core::username::UsernameRecord>, NodeError> ;\n\n    /// Search usernames by ASCII prefix, returning up to `limit` rows. The\n    /// default returns empty so backends without a username index do not\n    /// silently return wrong data.\n    fn username_search_prefix(\n        &self,\n        _prefix: &str,\n        _limit: usize,\n    ) -> Result<Vec<sigil_core::username::UsernameRecord>, NodeError> ;\n\n    /// Fetch a premium-name auction by canonical name. Default returns `None`.\n    fn username_auction_get(\n        &self,\n        _canonical_name: &str,\n    ) -> Result<Option<sigil_core::username::UsernameAuction>, NodeError> ;\n\n    /// List all open premium-name auctions. Default returns empty.\n    fn username_auctions_list_open(\n        &self,\n    ) -> Result<Vec<sigil_core::username::UsernameAuction>, NodeError> ;\n\n    /// Fetch a username dispute by deterministic dispute ID. Default returns\n    /// `None` so backends without username disputes fail closed in handlers.\n    fn username_dispute_get(\n        &self,\n        _dispute_id: &str,\n    ) -> Result<Option<sigil_core::username::UsernameDispute>, NodeError> ;\n\n    /// List all currently-filed (unresolved) username disputes. Default empty.\n    fn username_disputes_list_open(\n        &self,\n    ) -> Result<Vec<sigil_core::username::UsernameDispute>, NodeError> ;\n\n    /// Apply all username operations in `batch` atomically. Fail closed when\n    /// no username state is wired so the executor cannot silently no-op.\n    fn commit_username_tx(\n        &self,\n        _batch: crate::username_durable::UsernameWriteBatch,\n    ) -> Result<(), NodeError> ;\n\n    // -- Sigil Mail + SNS state --------------------------------------------\n    //\n    // Defaults return empty/fail-closed so tests with custom state backends\n    // keep compiling while production `MemoryExecutionState` wires durable\n    // AkashaKV-backed storage.\n\n    fn mail_get_mailbox(\n        &self,\n        _mailbox_id: &str,\n    ) -> Result<Option<sigil_core::mail::MailboxCapabilityRecord>, NodeError> ;\n\n    fn mail_list_mailboxes_by_owner(\n        &self,\n        _subject_did: &str,\n    ) -> Result<Vec<sigil_core::mail::MailboxCapabilityRecord>, NodeError> ;\n\n    fn mail_get_policy(\n        &self,\n        _mailbox_id: &str,\n        _version: Option<u64>,\n    ) -> Result<Option<sigil_core::mail::MailboxPolicyRecord>, NodeError> ;\n\n    fn mail_get_keys(\n        &self,\n        _mailbox_id: &str,\n        _purpose: Option<&str>,\n    ) -> Result<Vec<sigil_core::mail::MailPublicKeyRecord>, NodeError> ;\n\n    fn mail_get_delivery(\n        &self,\n        _delivery_commitment_id: &str,\n    ) -> Result<Option<sigil_core::mail::DeliveryCommitmentRecord>, NodeError> ;\n\n    fn mail_has_nonce(&self, _actor_did: &str, _nonce: &str) -> Result<bool, NodeError> ;\n\n    fn mail_list_deliveries_by_recipient(\n        &self,\n        _mailbox_id: &str,\n    ) -> Result<Vec<sigil_core::mail::DeliveryCommitmentRecord>, NodeError> ;\n\n    fn mail_list_deliveries_by_sender(\n        &self,\n        _sender_route_id: &str,\n    ) -> Result<Vec<sigil_core::mail::DeliveryCommitmentRecord>, NodeError> ;\n\n    fn mail_get_delegation(\n        &self,\n        _grant_id: &str,\n    ) -> Result<Option<sigil_core::mail::MailDelegationGrant>, NodeError> ;\n\n    fn mail_list_delegations(\n        &self,\n        _mailbox_id: &str,\n    ) -> Result<Vec<sigil_core::mail::MailDelegationGrant>, NodeError> ;\n\n    fn mail_get_abuse_report(\n        &self,\n        _abuse_report_id: &str,\n    ) -> Result<Option<sigil_core::mail::AbuseReport>, NodeError> ;\n\n    fn sns_get_name(\n        &self,\n        _name_hash: &str,\n    ) -> Result<Option<sigil_core::sns::SnsNameRecord>, NodeError> ;\n\n    fn sns_get_records(\n        &self,\n        _name_hash: &str,\n    ) -> Result<Vec<sigil_core::sns::SnsResolverRecord>, NodeError> ;\n\n    fn sns_get_registration_commitment(\n        &self,\n        _commitment: &str,\n    ) -> Result<Option<sigil_core::sns::SnsNameRegistrationCommitment>, NodeError> ;\n\n    fn sns_get_sealed_bid(\n        &self,\n        _commitment: &str,\n    ) -> Result<Option<sigil_core::sns::SnsSealedBidCommitment>, NodeError> ;\n\n    fn sns_get_auction(\n        &self,\n        _auction_id: &str,\n    ) -> Result<Option<sigil_core::sns::SnsAuctionRecord>, NodeError> ;\n\n    fn commit_mail_tx(&self, _batch: crate::mail_durable::MailWriteBatch) -> Result<(), NodeError> ;\n\n    // -- Recovery state -----------------------------------------------------\n    //\n    // Default impls return None / fail-closed so existing test backends\n    // keep compiling without changes. Production `MemoryExecutionState`\n    // overrides them to route through the durable AkashaKV-backed store\n    // and the in-memory mirror.\n\n    fn recovery_config_get(\n        &self,\n        _subject_did: &str,\n    ) -> Result<Option<sigil_core::recovery::RecoveryConfig>, NodeError> ;\n\n    fn recovery_ceremony_get(\n        &self,\n        _ceremony_id: &str,\n    ) -> Result<Option<sigil_core::recovery::RecoveryCeremony>, NodeError> ;\n\n    fn recovery_active_for(&self, _subject_did: &str) -> Result<Option<String>, NodeError> ;\n\n    fn commit_recovery_tx(\n        &self,\n        _batch: crate::recovery_durable::RecoveryWriteBatch,\n    ) -> Result<(), NodeError> ;\n}",
              "docs": "State interface for the executor.\n\nProvides read/write access to account balances, nonces, identity documents,\nvalidator records, delegation mappings, and governance proposals.",
              "attributes": "",
              "line": 368
            },
            {
              "name": "executor::DaoValidatorBacking",
              "kind": "struct_item",
              "signature": "pub struct DaoValidatorBacking<'a> {\n\n}",
              "docs": "Backing for DAO Work OS state-transition validators. Always\npresent in the type system (so default-feature builds compile and\nalways match the protected transactions explicitly), but only\ncarries a context when the `dao-validators` feature is enabled and\na context was supplied.\n\nDefault = `Disabled` \u2192 protected DAO transactions fail closed.\n`Wired(ctx)` \u2192 protected DAO transactions consume `ctx` to look up\npre-built [`crate::executor_dao::GalSnapshot`]s.",
              "attributes": "#[derive(Clone, Copy)]",
              "line": 2692
            },
            {
              "name": "executor::DaoValidatorBacking<'a>::disabled",
              "kind": "function_item",
              "signature": "pub const fn disabled() -> Self;",
              "docs": "Disabled backing: protected DAO transactions fail closed.",
              "attributes": "",
              "line": 2701
            },
            {
              "name": "executor::DaoValidatorBacking<'a>::wired",
              "kind": "function_item",
              "signature": "pub const fn wired(ctx: &'a crate::executor_dao::DaoValidatorContext) -> Self;",
              "docs": "Wire a DAO validator context. Only available when\n`dao-validators` is enabled.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 2713
            },
            {
              "name": "executor::DaoValidatorBacking<'a>::context",
              "kind": "function_item",
              "signature": "pub const fn context(&self) -> Option<&'a crate::executor_dao::DaoValidatorContext>;",
              "docs": "Borrow the wired context, if any.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 2719
            },
            {
              "name": "executor::build_dao_validator_context",
              "kind": "function_item",
              "signature": "pub fn build_dao_validator_context(\n    state: &dyn ExecutionState,\n) -> Result<crate::executor_dao::DaoValidatorContext, NodeError>;",
              "docs": "Build the deterministic DAO validator context consumed by production block\nexecution. The builder reads only `ExecutionState`; it performs no I/O, no\nRNG, and no clock reads.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 2734
            },
            {
              "name": "executor::execute_block",
              "kind": "function_item",
              "signature": "pub fn execute_block(\n    block: &Block,\n    state: &dyn ExecutionState,\n    expected_chain_id: &str,\n) -> Result<Vec<Receipt>, NodeError>;",
              "docs": "Execute all transactions in a block, producing receipts. Production entry\npoint wires state-derived DAO/labor validator backing when the\n`dao-validators` feature is compiled in.",
              "attributes": "",
              "line": 2743
            },
            {
              "name": "executor::execute_block_with_dao_backing",
              "kind": "function_item",
              "signature": "pub fn execute_block_with_dao_backing(\n    block: &Block,\n    state: &dyn ExecutionState,\n    expected_chain_id: &str,\n    dao: DaoValidatorBacking<'_>,\n) -> Result<Vec<Receipt>, NodeError>;",
              "docs": "Execute all transactions in a block with an explicit DAO validator\nbacking. Use [`DaoValidatorBacking::wired`] (feature-gated) when\nthe block contains protected DAO transactions.",
              "attributes": "",
              "line": 2773
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_compute",
          "source": "sigil/node/sigil-node/src/executor_compute.rs",
          "sha256": "0c6e4c9bbebc01bb07551fd997bff46febe9a0febf758c5bce9ec3f359eeacfe",
          "attributes": "#[cfg(feature = \"compute\")]",
          "items": [
            {
              "name": "executor_compute::execute_provider_register",
              "kind": "function_item",
              "signature": "pub fn execute_provider_register(\n    sender: &str,\n    data: &ComputeProviderRegisterData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 212
            },
            {
              "name": "executor_compute::execute_provider_update",
              "kind": "function_item",
              "signature": "pub fn execute_provider_update(\n    sender: &str,\n    data: &ComputeProviderUpdateData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 295
            },
            {
              "name": "executor_compute::execute_provider_relayer_register",
              "kind": "function_item",
              "signature": "pub fn execute_provider_relayer_register(\n    sender: &str,\n    data: &ComputeProviderRelayerData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 369
            },
            {
              "name": "executor_compute::execute_provider_relayer_revoke",
              "kind": "function_item",
              "signature": "pub fn execute_provider_relayer_revoke(\n    sender: &str,\n    data: &ComputeProviderRelayerData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 428
            },
            {
              "name": "executor_compute::execute_provider_exit",
              "kind": "function_item",
              "signature": "pub fn execute_provider_exit(\n    sender: &str,\n    data: &ComputeProviderExitData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 483
            },
            {
              "name": "executor_compute::execute_escrow_fund",
              "kind": "function_item",
              "signature": "pub fn execute_escrow_fund(\n    sender: &str,\n    data: &ComputeEscrowFundData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 548
            },
            {
              "name": "executor_compute::execute_escrow_withdraw",
              "kind": "function_item",
              "signature": "pub fn execute_escrow_withdraw(\n    sender: &str,\n    data: &ComputeEscrowWithdrawData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 616
            },
            {
              "name": "executor_compute::execute_receipt_settle",
              "kind": "function_item",
              "signature": "pub fn execute_receipt_settle(\n    sender: &str,\n    data: &ComputeReceiptSettleData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 673
            },
            {
              "name": "executor_compute::execute_challenge",
              "kind": "function_item",
              "signature": "pub fn execute_challenge(\n    sender: &str,\n    data: &ComputeChallengeData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 977
            },
            {
              "name": "executor_compute::execute_challenge_resolve",
              "kind": "function_item",
              "signature": "pub fn execute_challenge_resolve(\n    sender: &str,\n    data: &ComputeChallengeResolveData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1072
            },
            {
              "name": "executor_compute::execute_maca_register_validator_agent",
              "kind": "function_item",
              "signature": "pub fn execute_maca_register_validator_agent(\n    sender: &str,\n    data: &sigil_core::transaction::MacaRegisterValidatorAgentData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1338
            },
            {
              "name": "executor_compute::execute_maca_publish_beacon",
              "kind": "function_item",
              "signature": "pub fn execute_maca_publish_beacon(\n    sender: &str,\n    data: &sigil_core::transaction::MacaPublishBeaconData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1390
            },
            {
              "name": "executor_compute::execute_maca_propose_epoch",
              "kind": "function_item",
              "signature": "pub fn execute_maca_propose_epoch(\n    sender: &str,\n    data: &sigil_core::transaction::MacaProposeEpochData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1461
            },
            {
              "name": "executor_compute::execute_maca_submit_attestation",
              "kind": "function_item",
              "signature": "pub fn execute_maca_submit_attestation(\n    sender: &str,\n    data: &sigil_core::transaction::MacaSubmitAttestationData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1590
            },
            {
              "name": "executor_compute::execute_maca_finalize_epoch",
              "kind": "function_item",
              "signature": "pub fn execute_maca_finalize_epoch(\n    sender: &str,\n    data: &sigil_core::transaction::MacaFinalizeEpochData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1687
            },
            {
              "name": "executor_compute::provider_reputation_score",
              "kind": "function_item",
              "signature": "pub fn provider_reputation_score(\n    provider_did: &str,\n    state: &dyn ExecutionState,\n) -> Result<i64, NodeError>;",
              "docs": "Return the cumulative reputation score for a provider summed from signals.",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 1860
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_contract",
          "source": "sigil/node/sigil-node/src/executor_contract.rs",
          "sha256": "7da2d6ddde2cf76977abc880a19b8c2ff6a08736b7102de7f8f63de6c2a7d494",
          "attributes": "#[cfg(feature = \"contracts\")]",
          "items": [
            {
              "name": "executor_contract::CONTRACT_TX_BASE_GAS",
              "kind": "const_item",
              "signature": "pub const CONTRACT_TX_BASE_GAS: u64;",
              "docs": "Gas charged for the structural part of a deploy / call / upgrade\nset-policy transaction (not including any WASM execution fuel).",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 42
            },
            {
              "name": "executor_contract::REGISTER_CODE_BASE_GAS",
              "kind": "const_item",
              "signature": "pub const REGISTER_CODE_BASE_GAS: u64;",
              "docs": "Structural gas charged for registering a code blob.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 44
            },
            {
              "name": "executor_contract::REGISTER_CODE_GAS_PER_KIB",
              "kind": "const_item",
              "signature": "pub const REGISTER_CODE_GAS_PER_KIB: u64;",
              "docs": "Additional gas charged per started KiB of registered code.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 46
            },
            {
              "name": "executor_contract::MAX_CROSS_ZONE_DELIVERIES_PER_BLOCK",
              "kind": "const_item",
              "signature": "pub const MAX_CROSS_ZONE_DELIVERIES_PER_BLOCK: usize;",
              "docs": "Maximum pending cross-zone messages delivered from any one target zone per\nblock. The bound prevents one zone from starving local execution.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 49
            },
            {
              "name": "executor_contract::DEFAULT_CROSS_ZONE_DELIVERY_GAS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_CROSS_ZONE_DELIVERY_GAS: u64;",
              "docs": "Default fuel for cross-zone delivery envelopes when the message did not\ncarry forwarded gas and the envelope does not override it.",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 52
            },
            {
              "name": "executor_contract::CrossZoneDeliveryEnvelope",
              "kind": "struct_item",
              "signature": "pub struct CrossZoneDeliveryEnvelope {\npub contract_did: String,\npub function: String,\n#[serde(default)]\npub args: serde_json::Value,\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub gas_budget: Option<u64>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 55
            },
            {
              "name": "executor_contract::CrossZoneDeliveryReport",
              "kind": "struct_item",
              "signature": "pub struct CrossZoneDeliveryReport {\npub delivered: usize,\npub failed: usize,\npub skipped_inactive_zone: usize\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]",
              "line": 65
            },
            {
              "name": "executor_contract::deliver_cross_zone_messages",
              "kind": "function_item",
              "signature": "pub fn deliver_cross_zone_messages(\n    state: &dyn ExecutionState,\n) -> Result<CrossZoneDeliveryReport, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 393
            },
            {
              "name": "executor_contract::deliver_cross_zone_messages_with_limit",
              "kind": "function_item",
              "signature": "pub fn deliver_cross_zone_messages_with_limit(\n    state: &dyn ExecutionState,\n    per_zone_limit: usize,\n) -> Result<CrossZoneDeliveryReport, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 399
            },
            {
              "name": "executor_contract::register_contract_code_required_fee",
              "kind": "function_item",
              "signature": "pub fn register_contract_code_required_fee(\n    data: &RegisterContractCodeData,\n    _state: &dyn ExecutionState,\n) -> Result<u64, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 465
            },
            {
              "name": "executor_contract::execute_register_contract_code",
              "kind": "function_item",
              "signature": "pub fn execute_register_contract_code(\n    sender_did: &str,\n    data: &RegisterContractCodeData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 499
            },
            {
              "name": "executor_contract::execute_register_contract_code_genesis",
              "kind": "function_item",
              "signature": "pub fn execute_register_contract_code_genesis(\n    data: &RegisterContractCodeData,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 508
            },
            {
              "name": "executor_contract::execute_deploy_contract",
              "kind": "function_item",
              "signature": "pub fn execute_deploy_contract(\n    sender_did: &str,\n    data: &DeployContractData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[allow(clippy::too_many_arguments)]",
              "line": 610
            },
            {
              "name": "executor_contract::execute_call_contract",
              "kind": "function_item",
              "signature": "pub fn execute_call_contract(\n    sender_did: &str,\n    data: &CallContractData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 792
            },
            {
              "name": "executor_contract::execute_upgrade_contract",
              "kind": "function_item",
              "signature": "pub fn execute_upgrade_contract(\n    sender_did: &str,\n    data: &UpgradeContractData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 935
            },
            {
              "name": "executor_contract::execute_set_contract_policy",
              "kind": "function_item",
              "signature": "pub fn execute_set_contract_policy(\n    sender_did: &str,\n    data: &SetContractPolicyData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 1107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_crucible",
          "source": "sigil/node/sigil-node/src/executor_crucible.rs",
          "sha256": "011a8a6c790b444d20071a09fe579b666b85ac043ca8667cb2a73995c6ee0b42",
          "attributes": "",
          "items": [
            {
              "name": "executor_crucible::GAS_TRAIN_OPEN",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_OPEN: u64;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "executor_crucible::GAS_TRAIN_ROLLOUT_BATCH_COMMIT",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_ROLLOUT_BATCH_COMMIT: u64;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "executor_crucible::GAS_TRAIN_REWARD_BATCH_ATTEST",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_REWARD_BATCH_ATTEST: u64;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "executor_crucible::GAS_TRAIN_WEIGHTS_PUBLISH",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_WEIGHTS_PUBLISH: u64;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "executor_crucible::GAS_TRAIN_SLASH",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_SLASH: u64;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "executor_crucible::GAS_TRAIN_CLOSE",
              "kind": "const_item",
              "signature": "pub const GAS_TRAIN_CLOSE: u64;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "executor_crucible::execute_train_open",
              "kind": "function_item",
              "signature": "pub fn execute_train_open(\n    sender_did: &str,\n    data: &TrainOpenData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "executor_crucible::execute_rollout_batch_commit",
              "kind": "function_item",
              "signature": "pub fn execute_rollout_batch_commit(\n    sender_did: &str,\n    data: &TrainRolloutBatchCommitData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 318
            },
            {
              "name": "executor_crucible::execute_reward_batch_attest",
              "kind": "function_item",
              "signature": "pub fn execute_reward_batch_attest(\n    sender_did: &str,\n    data: &TrainRewardBatchAttestData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 376
            },
            {
              "name": "executor_crucible::execute_weights_publish",
              "kind": "function_item",
              "signature": "pub fn execute_weights_publish(\n    sender_did: &str,\n    data: &TrainWeightsPublishData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 534
            },
            {
              "name": "executor_crucible::execute_train_slash",
              "kind": "function_item",
              "signature": "pub fn execute_train_slash(\n    sender_did: &str,\n    data: &TrainSlashData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 596
            },
            {
              "name": "executor_crucible::execute_train_close",
              "kind": "function_item",
              "signature": "pub fn execute_train_close(\n    sender_did: &str,\n    data: &TrainCloseData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 665
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_dao",
          "source": "sigil/node/sigil-node/src/executor_dao.rs",
          "sha256": "5fb53b93a7badced6af96dc9e66c28245afa6b85287dcfbb7a3c2c2f2c0eca79",
          "attributes": "#[cfg(feature = \"dao-validators\")]",
          "items": [
            {
              "name": "executor_dao::DaoValidatorContext",
              "kind": "struct_item",
              "signature": "pub struct DaoValidatorContext {\n\n}",
              "docs": "Per-block bundle of GAL snapshots covering every protected\ntransaction. Built async ahead of execution; consumed sync inside\n[`crate::executor::execute_transaction`].\n\nThe bundle is keyed by transaction hash so each protected tx looks\nup its own snapshot. There is no fallback to a \"default\" snapshot\nor to local checks; if a tx isn't covered, execution fails with\n[`DaoValidatorError::Internal`] mapped to a `Failed` receipt \u2014 the\nconsensus layer that produced the block must populate the context\nfor every protected tx in it.",
              "attributes": "#[cfg(feature = \"dao-validators\")]\n#[derive(Debug, Clone, Default)]",
              "line": 72
            },
            {
              "name": "executor_dao::DaoValidatorContext::empty",
              "kind": "function_item",
              "signature": "pub fn empty() -> Self;",
              "docs": "Empty context. Protected transactions will fail closed.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 79
            },
            {
              "name": "executor_dao::DaoValidatorContext::from_state",
              "kind": "function_item",
              "signature": "pub fn from_state(state: &dyn ExecutionState) -> Result<Self, NodeError>;",
              "docs": "Build the production context directly from execution state.\n\nThis path is synchronous and deterministic: it reads the current DAO\nepoch/block, active mandates, labor contracts, and validator-agent\nregistry from `ExecutionState`; it performs no resolver/GAL I/O and no\nwall-clock/RNG access. Tx-specific contexts built by\n`for_transactions` still override this default snapshot when supplied\nexplicitly by proposer/validator tests.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 91
            },
            {
              "name": "executor_dao::DaoValidatorContext::for_transactions",
              "kind": "function_item",
              "signature": "pub async fn for_transactions<V, G>(\n        transactions: &[SignedTransaction],\n        verifier: &V,\n        gal: &G,\n        snapshot_block: u64,\n        state: &dyn ExecutionState,\n    ) -> Result<Self, DaoValidatorError>\n    where\n        V: IssuerVerifier + ?Sized,\n        G: SigilGalSource + ?Sized,;",
              "docs": "Build a context covering every protected transaction in\n`transactions`. Async because it talks to the GAL.\n\n`verifier` runs the full GAL trust path (Rules 1\u20137) per DID.\n`gal` provides raw revocation lookups for actor / counterparty.\n`snapshot_block` should equal the chain's current finalized\nblock height at the time of snapshot construction; consensus\nreplay must use the same value.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 155
            },
            {
              "name": "executor_dao::DaoValidatorContext::snapshot_for",
              "kind": "function_item",
              "signature": "pub fn snapshot_for(&self, tx_hash: &SigilHash) -> Option<&GalSnapshot>;",
              "docs": "Look up the pre-built snapshot for a given transaction.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 184
            },
            {
              "name": "executor_dao::DaoValidatorContext::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of snapshots in the bundle (for diagnostics).",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 191
            },
            {
              "name": "executor_dao::DaoValidatorContext::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "True if the bundle covers no transactions.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 196
            },
            {
              "name": "executor_dao::execute_record_mandate_spend",
              "kind": "function_item",
              "signature": "pub fn execute_record_mandate_spend(\n    sender_did: &str,\n    data: &RecordMandateSpendData,\n    fee: u64,\n    ctx: &DaoValidatorContext,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Execute `RecordMandateSpend`. Runs `validate_mandate_spend` first;\nonly mutates state on success.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 368
            },
            {
              "name": "executor_dao::execute_release_milestone_payment",
              "kind": "function_item",
              "signature": "pub fn execute_release_milestone_payment(\n    sender_did: &str,\n    data: &ReleaseMilestonePaymentData,\n    fee: u64,\n    ctx: &DaoValidatorContext,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Execute `ReleaseMilestonePayment`. Runs\n`validate_labor_contract_release` first; only mutates state on\nsuccess (mark milestone `Paid`, increment mandate `spent_amount`).",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 471
            },
            {
              "name": "executor_dao::execute_revoke_mandate",
              "kind": "function_item",
              "signature": "pub fn execute_revoke_mandate(\n    sender_did: &str,\n    data: &RevokeMandateData,\n    fee: u64,\n    ctx: &DaoValidatorContext,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Execute `RevokeMandate`. Runs `validate_cascade_revoke` against a\nsynthetic `RevocationRecord` representing the in-flight revocation;\nonly mutates state on success (mandate.status = Revoked).",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 623
            },
            {
              "name": "executor_dao::dao_failure_minimum_gas",
              "kind": "function_item",
              "signature": "pub const fn dao_failure_minimum_gas() -> u64;",
              "docs": "Minimum gas charged when execution of a protected tx fails.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 736
            },
            {
              "name": "executor_dao::GuardedResolverIssuerVerifier",
              "kind": "struct_item",
              "signature": "pub struct GuardedResolverIssuerVerifier<R, G>\nwhere\n    R: oas_resolve::resolver::Resolver,\n    G: SigilGalSource, {\n\n}",
              "docs": "`IssuerVerifier` adapter that runs the live GAL trust path through\nany `oas_resolve::SigilGuardedResolver`. This is the only adapter\nproduction builds use; tests inside this module use the same\nadapter wrapping a `MemoryGalSource` + `InMemoryResolver` pair.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 748
            },
            {
              "name": "executor_dao::GuardedResolverIssuerVerifier<R, G>::new",
              "kind": "function_item",
              "signature": "pub fn new(resolver: oas_resolve::SigilGuardedResolver<R, G>) -> Self;",
              "docs": "Wrap a fully-configured `SigilGuardedResolver`.",
              "attributes": "#[cfg(feature = \"dao-validators\")]",
              "line": 762
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_dex",
          "source": "sigil/node/sigil-node/src/executor_dex.rs",
          "sha256": "1b1e256f8a09912a4653ed6ea50cb443f8268d6e6403edc68a1ce4c42298b871",
          "attributes": "",
          "items": [
            {
              "name": "executor_dex::DEX_NATIVE_ASSET",
              "kind": "const_item",
              "signature": "pub const DEX_NATIVE_ASSET: &str;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "executor_dex::GAS_DEX_CREATE_POOL",
              "kind": "const_item",
              "signature": "pub const GAS_DEX_CREATE_POOL: u64;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "executor_dex::GAS_DEX_ADD_LIQUIDITY",
              "kind": "const_item",
              "signature": "pub const GAS_DEX_ADD_LIQUIDITY: u64;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "executor_dex::GAS_DEX_REMOVE_LIQUIDITY",
              "kind": "const_item",
              "signature": "pub const GAS_DEX_REMOVE_LIQUIDITY: u64;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "executor_dex::GAS_DEX_SWAP",
              "kind": "const_item",
              "signature": "pub const GAS_DEX_SWAP: u64;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "executor_dex::execute_create_pool",
              "kind": "function_item",
              "signature": "pub fn execute_create_pool(\n    sender_did: &str,\n    data: &DexCreatePoolData,\n    tx_fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "executor_dex::execute_add_liquidity",
              "kind": "function_item",
              "signature": "pub fn execute_add_liquidity(\n    sender_did: &str,\n    data: &DexAddLiquidityData,\n    tx_fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "executor_dex::execute_remove_liquidity",
              "kind": "function_item",
              "signature": "pub fn execute_remove_liquidity(\n    sender_did: &str,\n    data: &DexRemoveLiquidityData,\n    tx_fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 208
            },
            {
              "name": "executor_dex::execute_swap_exact_in",
              "kind": "function_item",
              "signature": "pub fn execute_swap_exact_in(\n    sender_did: &str,\n    data: &DexSwapExactInData,\n    tx_fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 315
            },
            {
              "name": "executor_dex::execute_swap_exact_out",
              "kind": "function_item",
              "signature": "pub fn execute_swap_exact_out(\n    sender_did: &str,\n    data: &DexSwapExactOutData,\n    tx_fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 354
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_evidence",
          "source": "sigil/node/sigil-node/src/executor_evidence.rs",
          "sha256": "9da398d743cc8bbebc4fda840e5e5282c7ab7a820f0e54d1c2d15bbc680592ed",
          "attributes": "",
          "items": [
            {
              "name": "executor_evidence::execute_evidence_anchor",
              "kind": "function_item",
              "signature": "pub fn execute_evidence_anchor(\n    sender_did: &str,\n    data: &EvidenceAnchorData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "Execute an evidence anchor transaction.\n\nFails closed on: malformed payload, insufficient balance for the fee, a\nduplicate anchor ID (same chain, sender, digest, and client nonce), or a\nstate backend without evidence storage.",
              "attributes": "",
              "line": 30
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_gal",
          "source": "sigil/node/sigil-node/src/executor_gal.rs",
          "sha256": "c54180d5c310a62b82061b670543900dcb43afcb815df18488e070c76dde00de",
          "attributes": "#[cfg(feature = \"tower\")]",
          "items": [
            {
              "name": "executor_gal::execute_anchor_hmr",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_hmr(\n    sender: &str,\n    anchor: &HmrAnchor,\n    signer_public_key: &[u8],\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 202
            },
            {
              "name": "executor_gal::execute_anchor_hmr_sponsored",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_hmr_sponsored(\n    sponsor: &str,\n    subject: &str,\n    anchor: &HmrAnchor,\n    subject_public_key: &[u8],\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 243
            },
            {
              "name": "executor_gal::execute_anchor_mhr",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_mhr(\n    sender: &str,\n    anchor: &MhrAnchor,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 285
            },
            {
              "name": "executor_gal::execute_anchor_mhr_sponsored",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_mhr_sponsored(\n    sponsor: &str,\n    subject: &str,\n    anchor: &MhrAnchor,\n    subject_public_key: &[u8],\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 346
            },
            {
              "name": "executor_gal::execute_anchor_enr",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_enr(\n    sender: &str,\n    anchor: &EnrAnchor,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 418
            },
            {
              "name": "executor_gal::execute_anchor_enr_sponsored",
              "kind": "function_item",
              "signature": "pub fn execute_anchor_enr_sponsored(\n    sponsor: &str,\n    subject: &str,\n    anchor: &EnrAnchor,\n    subject_public_key: &[u8],\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 474
            },
            {
              "name": "executor_gal::execute_update_org_lineage_root",
              "kind": "function_item",
              "signature": "pub fn execute_update_org_lineage_root(\n    sender: &str,\n    root: &OrgLineageRoot,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 535
            },
            {
              "name": "executor_gal::execute_update_org_lineage_root_sponsored",
              "kind": "function_item",
              "signature": "pub fn execute_update_org_lineage_root_sponsored(\n    sponsor: &str,\n    subject: &str,\n    root: &OrgLineageRoot,\n    subject_public_key: &[u8],\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 577
            },
            {
              "name": "executor_gal::execute_assign_shard",
              "kind": "function_item",
              "signature": "pub fn execute_assign_shard(\n    sender: &str,\n    assignment: &ShardAssignment,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 626
            },
            {
              "name": "executor_gal::execute_record_revocation",
              "kind": "function_item",
              "signature": "pub fn execute_record_revocation(\n    sender: &str,\n    record: &RevocationRecord,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 670
            },
            {
              "name": "executor_gal::execute_apply_topology",
              "kind": "function_item",
              "signature": "pub fn execute_apply_topology(\n    sender: &str,\n    entry: &ShardTopologyEntry,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> ExecResult;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 741
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_labor",
          "source": "sigil/node/sigil-node/src/executor_labor.rs",
          "sha256": "72d7a67dfeb9a64f74263e87aaf160e22c3ce3453cd71c4907347a58d1fde282",
          "attributes": "",
          "items": [
            {
              "name": "executor_labor::GAS_POST_LABOR_JOB",
              "kind": "const_item",
              "signature": "pub const GAS_POST_LABOR_JOB: u64;",
              "docs": "Gas for posting a new labor job (stores job record on-chain).",
              "attributes": "",
              "line": 54
            },
            {
              "name": "executor_labor::GAS_CANCEL_LABOR_JOB",
              "kind": "const_item",
              "signature": "pub const GAS_CANCEL_LABOR_JOB: u64;",
              "docs": "Gas for cancelling a labor job.",
              "attributes": "",
              "line": 56
            },
            {
              "name": "executor_labor::GAS_SUBMIT_LABOR_BID",
              "kind": "const_item",
              "signature": "pub const GAS_SUBMIT_LABOR_BID: u64;",
              "docs": "Gas for submitting a bid (stores bid record + job-bid index entry).",
              "attributes": "",
              "line": 58
            },
            {
              "name": "executor_labor::GAS_WITHDRAW_LABOR_BID",
              "kind": "const_item",
              "signature": "pub const GAS_WITHDRAW_LABOR_BID: u64;",
              "docs": "Gas for withdrawing a bid.",
              "attributes": "",
              "line": 60
            },
            {
              "name": "executor_labor::GAS_ACCEPT_LABOR_BID",
              "kind": "const_item",
              "signature": "pub const GAS_ACCEPT_LABOR_BID: u64;",
              "docs": "Gas for accepting a bid (updates job status).",
              "attributes": "",
              "line": 62
            },
            {
              "name": "executor_labor::GAS_CREATE_LABOR_CONTRACT",
              "kind": "const_item",
              "signature": "pub const GAS_CREATE_LABOR_CONTRACT: u64;",
              "docs": "Gas for creating a contract (stores contract + milestones + worker index).",
              "attributes": "",
              "line": 64
            },
            {
              "name": "executor_labor::GAS_FUND_LABOR_ESCROW",
              "kind": "const_item",
              "signature": "pub const GAS_FUND_LABOR_ESCROW: u64;",
              "docs": "Gas for funding the escrow (updates contract state).",
              "attributes": "",
              "line": 66
            },
            {
              "name": "executor_labor::GAS_LABOR_OPEN_OFFER",
              "kind": "const_item",
              "signature": "pub const GAS_LABOR_OPEN_OFFER: u64;",
              "docs": "Gas for opening and funding an open bounty offer.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "executor_labor::GAS_LABOR_SUBMIT_CLAIM",
              "kind": "const_item",
              "signature": "pub const GAS_LABOR_SUBMIT_CLAIM: u64;",
              "docs": "Gas for submitting an open bounty claim.",
              "attributes": "",
              "line": 70
            },
            {
              "name": "executor_labor::GAS_LABOR_ATTEST_CLAIM",
              "kind": "const_item",
              "signature": "pub const GAS_LABOR_ATTEST_CLAIM: u64;",
              "docs": "Gas for attesting an open bounty claim.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "executor_labor::GAS_LABOR_CANCEL_OFFER",
              "kind": "const_item",
              "signature": "pub const GAS_LABOR_CANCEL_OFFER: u64;",
              "docs": "Gas for cancelling or closing an open bounty offer.",
              "attributes": "",
              "line": 74
            },
            {
              "name": "executor_labor::GAS_SUBMIT_DELIVERABLE",
              "kind": "const_item",
              "signature": "pub const GAS_SUBMIT_DELIVERABLE: u64;",
              "docs": "Gas for submitting a deliverable (updates milestone state).",
              "attributes": "",
              "line": 76
            },
            {
              "name": "executor_labor::GAS_ATTEST_MILESTONE",
              "kind": "const_item",
              "signature": "pub const GAS_ATTEST_MILESTONE: u64;",
              "docs": "Gas for attesting milestone completion.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "executor_labor::GAS_RELEASE_MILESTONE_PAYMENT",
              "kind": "const_item",
              "signature": "pub const GAS_RELEASE_MILESTONE_PAYMENT: u64;",
              "docs": "Gas for releasing a milestone payment.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "executor_labor::GAS_RAISE_LABOR_DISPUTE",
              "kind": "const_item",
              "signature": "pub const GAS_RAISE_LABOR_DISPUTE: u64;",
              "docs": "Gas for raising a dispute.",
              "attributes": "",
              "line": 82
            },
            {
              "name": "executor_labor::GAS_RESOLVE_LABOR_DISPUTE",
              "kind": "const_item",
              "signature": "pub const GAS_RESOLVE_LABOR_DISPUTE: u64;",
              "docs": "Gas for resolving a dispute.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "executor_labor::GAS_SUBMIT_LABOR_REVIEW",
              "kind": "const_item",
              "signature": "pub const GAS_SUBMIT_LABOR_REVIEW: u64;",
              "docs": "Gas for submitting a post-completion review.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "executor_labor::execute_post_labor_job",
              "kind": "function_item",
              "signature": "pub fn execute_post_labor_job(\n    sender_did: &str,\n    data: &PostLaborJobData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "executor_labor::execute_cancel_labor_job",
              "kind": "function_item",
              "signature": "pub fn execute_cancel_labor_job(\n    sender_did: &str,\n    data: &CancelLaborJobData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 344
            },
            {
              "name": "executor_labor::execute_submit_labor_bid",
              "kind": "function_item",
              "signature": "pub fn execute_submit_labor_bid(\n    sender_did: &str,\n    data: &SubmitLaborBidData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 386
            },
            {
              "name": "executor_labor::execute_withdraw_labor_bid",
              "kind": "function_item",
              "signature": "pub fn execute_withdraw_labor_bid(\n    sender_did: &str,\n    data: &WithdrawLaborBidData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 461
            },
            {
              "name": "executor_labor::execute_accept_labor_bid",
              "kind": "function_item",
              "signature": "pub fn execute_accept_labor_bid(\n    sender_did: &str,\n    data: &AcceptLaborBidData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 503
            },
            {
              "name": "executor_labor::execute_create_labor_contract",
              "kind": "function_item",
              "signature": "pub fn execute_create_labor_contract(\n    sender_did: &str,\n    data: &CreateLaborContractData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 583
            },
            {
              "name": "executor_labor::execute_fund_labor_escrow",
              "kind": "function_item",
              "signature": "pub fn execute_fund_labor_escrow(\n    sender_did: &str,\n    data: &FundLaborEscrowData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 676
            },
            {
              "name": "executor_labor::execute_labor_open_offer",
              "kind": "function_item",
              "signature": "pub fn execute_labor_open_offer(\n    sender_did: &str,\n    data: &LaborOpenOfferData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 755
            },
            {
              "name": "executor_labor::execute_labor_submit_claim",
              "kind": "function_item",
              "signature": "pub fn execute_labor_submit_claim(\n    sender_did: &str,\n    data: &LaborSubmitClaimData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 836
            },
            {
              "name": "executor_labor::execute_labor_attest_claim",
              "kind": "function_item",
              "signature": "pub fn execute_labor_attest_claim(\n    sender_did: &str,\n    data: &LaborAttestClaimData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 991
            },
            {
              "name": "executor_labor::execute_labor_cancel_offer",
              "kind": "function_item",
              "signature": "pub fn execute_labor_cancel_offer(\n    sender_did: &str,\n    data: &LaborCancelOfferData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1168
            },
            {
              "name": "executor_labor::execute_submit_deliverable",
              "kind": "function_item",
              "signature": "pub fn execute_submit_deliverable(\n    sender_did: &str,\n    data: &SubmitDeliverableData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1269
            },
            {
              "name": "executor_labor::execute_attest_milestone",
              "kind": "function_item",
              "signature": "pub fn execute_attest_milestone(\n    sender_did: &str,\n    data: &AttestMilestoneData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1347
            },
            {
              "name": "executor_labor::execute_release_milestone_payment",
              "kind": "function_item",
              "signature": "pub fn execute_release_milestone_payment(\n    sender_did: &str,\n    data: &ReleaseMilestonePaymentData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1438
            },
            {
              "name": "executor_labor::execute_raise_labor_dispute",
              "kind": "function_item",
              "signature": "pub fn execute_raise_labor_dispute(\n    sender_did: &str,\n    data: &RaiseLaborDisputeData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1561
            },
            {
              "name": "executor_labor::execute_resolve_labor_dispute",
              "kind": "function_item",
              "signature": "pub fn execute_resolve_labor_dispute(\n    sender_did: &str,\n    data: &ResolveLaborDisputeData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1639
            },
            {
              "name": "executor_labor::execute_submit_labor_review",
              "kind": "function_item",
              "signature": "pub fn execute_submit_labor_review(\n    sender_did: &str,\n    data: &SubmitLaborReviewData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1801
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_mail",
          "source": "sigil/node/sigil-node/src/executor_mail.rs",
          "sha256": "e2ff9f966f673ca4d237d66ddb899395fd9cd21c77440e1d9109ad44fef5af76",
          "attributes": "",
          "items": [
            {
              "name": "executor_mail::execute_create_mailbox",
              "kind": "function_item",
              "signature": "pub fn execute_create_mailbox(\n    sender: &str,\n    data: &MailCreateMailboxData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 298
            },
            {
              "name": "executor_mail::execute_add_alias",
              "kind": "function_item",
              "signature": "pub fn execute_add_alias(\n    sender: &str,\n    data: &MailAddAliasData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 377
            },
            {
              "name": "executor_mail::execute_remove_alias",
              "kind": "function_item",
              "signature": "pub fn execute_remove_alias(\n    sender: &str,\n    data: &MailRemoveAliasData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 436
            },
            {
              "name": "executor_mail::execute_set_primary_alias",
              "kind": "function_item",
              "signature": "pub fn execute_set_primary_alias(\n    sender: &str,\n    data: &MailSetPrimaryAliasData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 483
            },
            {
              "name": "executor_mail::execute_lock_mailbox",
              "kind": "function_item",
              "signature": "pub fn execute_lock_mailbox(\n    sender: &str,\n    data: &MailLockMailboxData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 581
            },
            {
              "name": "executor_mail::execute_unlock_mailbox",
              "kind": "function_item",
              "signature": "pub fn execute_unlock_mailbox(\n    sender: &str,\n    data: &MailUnlockMailboxData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 601
            },
            {
              "name": "executor_mail::execute_deactivate_mailbox",
              "kind": "function_item",
              "signature": "pub fn execute_deactivate_mailbox(\n    sender: &str,\n    data: &MailDeactivateMailboxData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 621
            },
            {
              "name": "executor_mail::execute_recover_mailbox",
              "kind": "function_item",
              "signature": "pub fn execute_recover_mailbox(\n    sender: &str,\n    data: &MailRecoverMailboxData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 641
            },
            {
              "name": "executor_mail::execute_update_policy",
              "kind": "function_item",
              "signature": "pub fn execute_update_policy(\n    sender: &str,\n    data: &MailUpdateReceivePolicyData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 689
            },
            {
              "name": "executor_mail::execute_revoke_policy",
              "kind": "function_item",
              "signature": "pub fn execute_revoke_policy(\n    sender: &str,\n    data: &MailRevokeReceivePolicyData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 747
            },
            {
              "name": "executor_mail::execute_publish_key",
              "kind": "function_item",
              "signature": "pub fn execute_publish_key(\n    sender: &str,\n    data: &MailPublishKeyData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 803
            },
            {
              "name": "executor_mail::execute_rotate_key",
              "kind": "function_item",
              "signature": "pub fn execute_rotate_key(\n    sender: &str,\n    data: &MailRotateKeyData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 864
            },
            {
              "name": "executor_mail::execute_revoke_key",
              "kind": "function_item",
              "signature": "pub fn execute_revoke_key(\n    sender: &str,\n    data: &MailRevokeKeyData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 946
            },
            {
              "name": "executor_mail::execute_expire_keys",
              "kind": "function_item",
              "signature": "pub fn execute_expire_keys(\n    sender: &str,\n    data: &MailExpireKeysData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1004
            },
            {
              "name": "executor_mail::execute_publish_delivery",
              "kind": "function_item",
              "signature": "pub fn execute_publish_delivery(\n    sender: &str,\n    data: &MailPublishDeliveryCommitmentData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1060
            },
            {
              "name": "executor_mail::execute_report_abuse",
              "kind": "function_item",
              "signature": "pub fn execute_report_abuse(\n    sender: &str,\n    data: &MailReportAbuseData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1208
            },
            {
              "name": "executor_mail::execute_resolve_abuse",
              "kind": "function_item",
              "signature": "pub fn execute_resolve_abuse(\n    sender: &str,\n    data: &MailResolveAbuseData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1260
            },
            {
              "name": "executor_mail::execute_grant_permission",
              "kind": "function_item",
              "signature": "pub fn execute_grant_permission(\n    sender: &str,\n    data: &MailGrantPermissionData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1306
            },
            {
              "name": "executor_mail::execute_revoke_permission",
              "kind": "function_item",
              "signature": "pub fn execute_revoke_permission(\n    sender: &str,\n    data: &MailRevokePermissionData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1351
            },
            {
              "name": "executor_mail::execute_register_name",
              "kind": "function_item",
              "signature": "pub fn execute_register_name(\n    sender: &str,\n    data: &RegisterNameData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1402
            },
            {
              "name": "executor_mail::execute_set_name_records",
              "kind": "function_item",
              "signature": "pub fn execute_set_name_records(\n    sender: &str,\n    data: &SetNameRecordsData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1510
            },
            {
              "name": "executor_mail::execute_renew_name",
              "kind": "function_item",
              "signature": "pub fn execute_renew_name(\n    sender: &str,\n    data: &RenewNameData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1562
            },
            {
              "name": "executor_mail::execute_delete_name_records",
              "kind": "function_item",
              "signature": "pub fn execute_delete_name_records(\n    sender: &str,\n    data: &DeleteNameRecordsData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1605
            },
            {
              "name": "executor_mail::execute_delegate_subdomain",
              "kind": "function_item",
              "signature": "pub fn execute_delegate_subdomain(\n    sender: &str,\n    data: &DelegateSubdomainData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1654
            },
            {
              "name": "executor_mail::execute_revoke_delegation",
              "kind": "function_item",
              "signature": "pub fn execute_revoke_delegation(\n    sender: &str,\n    data: &RevokeDelegationData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1724
            },
            {
              "name": "executor_mail::execute_set_primary_name",
              "kind": "function_item",
              "signature": "pub fn execute_set_primary_name(\n    sender: &str,\n    data: &SetPrimaryNameData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1778
            },
            {
              "name": "executor_mail::execute_commit_name_registration",
              "kind": "function_item",
              "signature": "pub fn execute_commit_name_registration(\n    sender: &str,\n    data: &CommitNameRegistrationData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1825
            },
            {
              "name": "executor_mail::execute_commit_sealed_name_bid",
              "kind": "function_item",
              "signature": "pub fn execute_commit_sealed_name_bid(\n    sender: &str,\n    data: &CommitSealedNameBidData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1893
            },
            {
              "name": "executor_mail::execute_reveal_sealed_name_bid",
              "kind": "function_item",
              "signature": "pub fn execute_reveal_sealed_name_bid(\n    sender: &str,\n    data: &RevealSealedNameBidData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 1954
            },
            {
              "name": "executor_mail::execute_finalize_sealed_name_auction",
              "kind": "function_item",
              "signature": "pub fn execute_finalize_sealed_name_auction(\n    sender: &str,\n    data: &FinalizeSealedNameAuctionData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 2077
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_nft",
          "source": "sigil/node/sigil-node/src/executor_nft.rs",
          "sha256": "0eea42880ceed5cb3cb02a03c3cfa94acaaf939614091de60ac280e79d772da3",
          "attributes": "",
          "items": [
            {
              "name": "executor_nft::execute_create_nft_collection",
              "kind": "function_item",
              "signature": "pub fn execute_create_nft_collection(\n    sender_did: &str,\n    data: &CreateNftCollectionData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Create a new NFT collection on-chain.\n\nThe `sender_did` must match `data.issuer_did` (collections may only be\ncreated by the issuer). Duplicate `collection_id`s are rejected.",
              "attributes": "",
              "line": 135
            },
            {
              "name": "executor_nft::execute_mint_nft",
              "kind": "function_item",
              "signature": "pub fn execute_mint_nft(\n    sender_did: &str,\n    data: &MintNftData,\n    fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Mint a new NFT token into a collection.\n\nRules enforced:\n- Collection must exist.\n- Token id must not already exist in the collection (duplicate prevention).\n- For identity collections: `identity` binding must be provided.\n- For identity collections: only one identity token per (subject_did, collection) is allowed.\n- `max_supply` is respected if set on the collection policy.\n- Identity NFTs are always soulbound regardless of policy.\n- Sender must be the collection issuer (or hold a mint-policy permission \u2014\n  simple issuer check used here; policy delegation is a future extension).",
              "attributes": "",
              "line": 230
            },
            {
              "name": "executor_nft::execute_transfer_nft",
              "kind": "function_item",
              "signature": "pub fn execute_transfer_nft(\n    sender_did: &str,\n    data: &TransferNftData,\n    fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Transfer an NFT from one owner to another.\n\nRules enforced (ERC-5192 / identity semantics):\n- Token must exist.\n- Current owner must match `data.from_did` and sender must be the current owner.\n- Token must not be locked (`token.locked == false`).\n- HMR / MHR / ENR identity tokens are always rejected, regardless of lock state.\n- Agent identity tokens respect `token.locked`.",
              "attributes": "",
              "line": 437
            },
            {
              "name": "executor_nft::execute_burn_nft",
              "kind": "function_item",
              "signature": "pub fn execute_burn_nft(\n    sender_did: &str,\n    data: &BurnNftData,\n    fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Burn (destroy) an NFT.\n\nERC-5484 burn authorisation is enforced:\n- `IssuerOnly`: `authorized_by` must be the collection's `issuer_did`.\n- `OwnerOnly`: `authorized_by` must be `token.owner_did`.\n- `Both`: either issuer or owner.\n- `Neither`: always rejected.",
              "attributes": "",
              "line": 587
            },
            {
              "name": "executor_nft::execute_set_nft_metadata",
              "kind": "function_item",
              "signature": "pub fn execute_set_nft_metadata(\n    sender_did: &str,\n    data: &SetNftMetadataData,\n    fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Update per-token metadata URI and/or hash (ERC-4906).\n\n`allow_metadata_updates` must be `true` on the collection policy.\nOnly the collection controller may update metadata.\nEmits a `MetadataUpdate` event with old and new URI/hash values.",
              "attributes": "",
              "line": 718
            },
            {
              "name": "executor_nft::execute_verify_identity_nft",
              "kind": "function_item",
              "signature": "pub fn execute_verify_identity_nft(\n    sender_did: &str,\n    data: &VerifyIdentityNftData,\n    fee: u64,\n    block_height: u64,\n    tx_hash: &SigilHash,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Advance the verification level on an identity NFT.\n\nRules:\n- Token must be in an identity collection.\n- `new_verification_level` must be strictly greater than the current level\n  (monotonically increasing \u2014 cannot decrease).\n- Only the collection issuer may call this (the issuer is the authorised\n  attester for v1; multi-party attestation is a future extension).",
              "attributes": "",
              "line": 854
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_nova",
          "source": "sigil/node/sigil-node/src/executor_nova.rs",
          "sha256": "318927cd833bc1864dc62805fd7a4a10da264baaae3fed0533c5a9692d1758ca",
          "attributes": "",
          "items": [
            {
              "name": "executor_nova::GAS_NOVA_CREATE_WORLD",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_CREATE_WORLD: u64;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "executor_nova::GAS_NOVA_CLAIM_PARCEL",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_CLAIM_PARCEL: u64;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "executor_nova::GAS_NOVA_TRANSFER_PARCEL",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_TRANSFER_PARCEL: u64;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "executor_nova::GAS_NOVA_DEPLOY_BUILDING",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_DEPLOY_BUILDING: u64;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "executor_nova::GAS_NOVA_REMOVE_BUILDING",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_REMOVE_BUILDING: u64;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "executor_nova::GAS_NOVA_UPDATE_AVATAR",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_UPDATE_AVATAR: u64;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "executor_nova::GAS_NOVA_CREATE_AUCTION",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_CREATE_AUCTION: u64;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "executor_nova::GAS_NOVA_AUCTION_BID",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_AUCTION_BID: u64;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "executor_nova::GAS_NOVA_SETTLE_AUCTION",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_SETTLE_AUCTION: u64;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "executor_nova::GAS_NOVA_SET_ZONE_PERMISSIONS",
              "kind": "const_item",
              "signature": "pub const GAS_NOVA_SET_ZONE_PERMISSIONS: u64;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "executor_nova::execute_create_world",
              "kind": "function_item",
              "signature": "pub fn execute_create_world(\n    sender_did: &str,\n    data: &NovaCreateWorldData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "executor_nova::execute_claim_parcel",
              "kind": "function_item",
              "signature": "pub fn execute_claim_parcel(\n    sender_did: &str,\n    data: &NovaClaimParcelData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "executor_nova::execute_transfer_parcel",
              "kind": "function_item",
              "signature": "pub fn execute_transfer_parcel(\n    sender_did: &str,\n    data: &NovaTransferParcelData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 141
            },
            {
              "name": "executor_nova::execute_deploy_building",
              "kind": "function_item",
              "signature": "pub fn execute_deploy_building(\n    sender_did: &str,\n    data: &NovaDeployBuildingData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 185
            },
            {
              "name": "executor_nova::execute_remove_building",
              "kind": "function_item",
              "signature": "pub fn execute_remove_building(\n    sender_did: &str,\n    data: &NovaRemoveBuildingData,\n    tx_fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "executor_nova::execute_update_avatar",
              "kind": "function_item",
              "signature": "pub fn execute_update_avatar(\n    sender_did: &str,\n    data: &NovaUpdateAvatarData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 304
            },
            {
              "name": "executor_nova::execute_create_auction",
              "kind": "function_item",
              "signature": "pub fn execute_create_auction(\n    sender_did: &str,\n    data: &NovaCreateAuctionData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 361
            },
            {
              "name": "executor_nova::execute_auction_bid",
              "kind": "function_item",
              "signature": "pub fn execute_auction_bid(\n    sender_did: &str,\n    data: &NovaAuctionBidData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 443
            },
            {
              "name": "executor_nova::execute_settle_auction",
              "kind": "function_item",
              "signature": "pub fn execute_settle_auction(\n    sender_did: &str,\n    data: &NovaSettleAuctionData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 557
            },
            {
              "name": "executor_nova::execute_set_zone_permissions",
              "kind": "function_item",
              "signature": "pub fn execute_set_zone_permissions(\n    sender_did: &str,\n    data: &NovaSetZonePermissionsData,\n    tx_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 649
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_recovery",
          "source": "sigil/node/sigil-node/src/executor_recovery.rs",
          "sha256": "b89b81d27cd400188cbcf9214d0e4aca7023ff1ef4781450bd5c60c767aee9e9",
          "attributes": "",
          "items": [
            {
              "name": "executor_recovery::execute_register_recovery",
              "kind": "function_item",
              "signature": "pub fn execute_register_recovery(\n    sender: &str,\n    data: &RegisterRecoveryData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 136
            },
            {
              "name": "executor_recovery::execute_register_recovery_sponsored",
              "kind": "function_item",
              "signature": "pub fn execute_register_recovery_sponsored(\n    sponsor: &str,\n    subject: &str,\n    data: &RegisterRecoveryData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 185
            },
            {
              "name": "executor_recovery::execute_initiate_recovery",
              "kind": "function_item",
              "signature": "pub fn execute_initiate_recovery(\n    sender: &str,\n    data: &InitiateRecoveryData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 240
            },
            {
              "name": "executor_recovery::execute_add_recovery_authorization",
              "kind": "function_item",
              "signature": "pub fn execute_add_recovery_authorization(\n    sender: &str,\n    data: &AddRecoveryAuthorizationData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 318
            },
            {
              "name": "executor_recovery::execute_abort_recovery",
              "kind": "function_item",
              "signature": "pub fn execute_abort_recovery(\n    sender: &str,\n    data: &AbortRecoveryData,\n    base_fee: u64,\n    _block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 434
            },
            {
              "name": "executor_recovery::execute_finalize_recovery",
              "kind": "function_item",
              "signature": "pub fn execute_finalize_recovery(\n    sender: &str,\n    data: &FinalizeRecoveryData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 521
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_storage",
          "source": "sigil/node/sigil-node/src/executor_storage.rs",
          "sha256": "56167f44674d1f07a87153ec4a52182fd3b2b4c6a4b044ebf42213b5d4105026",
          "attributes": "",
          "items": [
            {
              "name": "executor_storage::execute_provider_register",
              "kind": "function_item",
              "signature": "pub fn execute_provider_register(\n    sender_did: &str,\n    data: &StorageProviderRegisterData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "executor_storage::execute_provider_update",
              "kind": "function_item",
              "signature": "pub fn execute_provider_update(\n    sender_did: &str,\n    data: &StorageProviderUpdateData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 99
            },
            {
              "name": "executor_storage::execute_provider_exit",
              "kind": "function_item",
              "signature": "pub fn execute_provider_exit(\n    sender_did: &str,\n    data: &StorageProviderExitData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 158
            },
            {
              "name": "executor_storage::execute_pin_request",
              "kind": "function_item",
              "signature": "pub fn execute_pin_request(\n    sender_did: &str,\n    data: &StoragePinRequestData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 197
            },
            {
              "name": "executor_storage::execute_pin_accept",
              "kind": "function_item",
              "signature": "pub fn execute_pin_accept(\n    sender_did: &str,\n    data: &StoragePinAcceptData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 280
            },
            {
              "name": "executor_storage::execute_receipt_settle",
              "kind": "function_item",
              "signature": "pub fn execute_receipt_settle(\n    sender_did: &str,\n    data: &StorageReceiptSettleData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 392
            },
            {
              "name": "executor_storage::execute_challenge",
              "kind": "function_item",
              "signature": "pub fn execute_challenge(\n    sender_did: &str,\n    data: &StorageChallengeData,\n    fee: u64,\n    block_height: u64,\n    chain_id: &str,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 457
            },
            {
              "name": "executor_storage::execute_challenge_resolve",
              "kind": "function_item",
              "signature": "pub fn execute_challenge_resolve(\n    sender_did: &str,\n    data: &StorageChallengeResolveData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<Settlement, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 536
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_username",
          "source": "sigil/node/sigil-node/src/executor_username.rs",
          "sha256": "1c21f60120d95d795d92f2021a06856a40fe8beb62339e83c5f40b527f9b72e0",
          "attributes": "",
          "items": [
            {
              "name": "executor_username::execute_register_username",
              "kind": "function_item",
              "signature": "pub fn execute_register_username(\n    sender: &str,\n    data: &RegisterUsernameData,\n    block_height: u64,\n    base_fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Register a new username for `data.years` years to `data.owner_did`.\n\nAuthority rule: only the owner_did itself can register a name in their\nown name (no third-party registration). This mirrors how transfers/etc\nrequire sender == current owner.",
              "attributes": "",
              "line": 120
            },
            {
              "name": "executor_username::execute_transfer_username",
              "kind": "function_item",
              "signature": "pub fn execute_transfer_username(\n    sender: &str,\n    data: &TransferUsernameData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 238
            },
            {
              "name": "executor_username::execute_release_username",
              "kind": "function_item",
              "signature": "pub fn execute_release_username(\n    sender: &str,\n    data: &ReleaseUsernameData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 305
            },
            {
              "name": "executor_username::execute_set_username_metadata",
              "kind": "function_item",
              "signature": "pub fn execute_set_username_metadata(\n    sender: &str,\n    data: &SetUsernameMetadataData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 374
            },
            {
              "name": "executor_username::execute_set_reverse_username",
              "kind": "function_item",
              "signature": "pub fn execute_set_reverse_username(\n    sender: &str,\n    data: &SetReverseUsernameData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 440
            },
            {
              "name": "executor_username::execute_submit_auction_bid",
              "kind": "function_item",
              "signature": "pub fn execute_submit_auction_bid(\n    sender: &str,\n    data: &UsernameAuctionBidData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Submit a bid against an open premium-name auction.\n\nBehaviour per `docs/specs/USERNAMES.md` \u00a74:\n1. Validate the canonical name and confirm it's eligible for auction\n   (1- to 4-char name, not currently registered, not reserved).\n2. Charge `base_fee` for the transaction itself.\n3. Open the auction lazily on the first bid (no separate `OpenAuction` tx).\n4. Verify the bid is at least the minimum next bid.\n5. Refund the previous high bidder's escrow (if any) by crediting their\n   balance back. Lock the new bid into auction escrow by debiting from\n   the new bidder.\n6. If we land within the anti-snipe window, push `closes_at_height` out.",
              "attributes": "",
              "line": 516
            },
            {
              "name": "executor_username::execute_finalize_auction",
              "kind": "function_item",
              "signature": "pub fn execute_finalize_auction(\n    sender: &str,\n    data: &UsernameAuctionFinalizeData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Finalize an auction whose anti-snipe window has elapsed. Anyone can call\nfinalize \u2014 it's a permissionless cleanup transaction. The winning bidder\nreceives the username; the bid amount is forfeited to the\n`treasury-username-fees` pool.",
              "attributes": "",
              "line": 685
            },
            {
              "name": "executor_username::execute_raise_dispute",
              "kind": "function_item",
              "signature": "pub fn execute_raise_dispute(\n    sender: &str,\n    data: &RaiseUsernameDisputeData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "File a UDRP-style dispute against a registered username.\n\nBehaviour:\n1. Validate that the sender == claimant_did.\n2. Verify the username is currently registered and not already disputed.\n3. Charge the per-tx fee + filing fee.\n4. Set `is_disputed = true` on the username record (locks it from\n   transfer/release/metadata until the multisig resolves).\n5. Insert a `UsernameDispute` record keyed by deterministic dispute_id.",
              "attributes": "",
              "line": 803
            },
            {
              "name": "executor_username::execute_resolve_dispute",
              "kind": "function_item",
              "signature": "pub fn execute_resolve_dispute(\n    sender: &str,\n    data: &ResolveUsernameDisputeData,\n    base_fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "Resolve a previously-filed dispute. Permissionless to submit; the executor\nverifies the threshold-of-N multisig signatures over the canonical\nresolution payload.",
              "attributes": "",
              "line": 914
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor_vigils",
          "source": "sigil/node/sigil-node/src/executor_vigils.rs",
          "sha256": "c9cf6d18974cd597fa3490d72b37c1f7a1c3a72da772990f657333d8a868005d",
          "attributes": "#[cfg(feature = \"vigils-v1\")]",
          "items": [
            {
              "name": "executor_vigils::GAS_REGISTER_VIGIL_SUBSCRIPTION",
              "kind": "const_item",
              "signature": "pub const GAS_REGISTER_VIGIL_SUBSCRIPTION: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 20
            },
            {
              "name": "executor_vigils::GAS_UPDATE_VIGIL_SUBSCRIPTION",
              "kind": "const_item",
              "signature": "pub const GAS_UPDATE_VIGIL_SUBSCRIPTION: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 21
            },
            {
              "name": "executor_vigils::GAS_CANCEL_VIGIL_SUBSCRIPTION",
              "kind": "const_item",
              "signature": "pub const GAS_CANCEL_VIGIL_SUBSCRIPTION: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 22
            },
            {
              "name": "executor_vigils::GAS_VIGIL_GAS_ACCOUNTING",
              "kind": "const_item",
              "signature": "pub const GAS_VIGIL_GAS_ACCOUNTING: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 23
            },
            {
              "name": "executor_vigils::GAS_EVENT_DELIVERY_BASE",
              "kind": "const_item",
              "signature": "pub const GAS_EVENT_DELIVERY_BASE: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 24
            },
            {
              "name": "executor_vigils::GAS_REGISTER_INGESTOR",
              "kind": "const_item",
              "signature": "pub const GAS_REGISTER_INGESTOR: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 25
            },
            {
              "name": "executor_vigils::GAS_UPDATE_INGESTOR",
              "kind": "const_item",
              "signature": "pub const GAS_UPDATE_INGESTOR: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 26
            },
            {
              "name": "executor_vigils::GAS_SLASH_INGESTOR",
              "kind": "const_item",
              "signature": "pub const GAS_SLASH_INGESTOR: u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 27
            },
            {
              "name": "executor_vigils::MAX_CALLBACKS_PER_BLOCK",
              "kind": "const_item",
              "signature": "pub const MAX_CALLBACKS_PER_BLOCK: u32;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 28
            },
            {
              "name": "executor_vigils::IN_ZONE_EVENT_ANCHOR_DOMAIN",
              "kind": "const_item",
              "signature": "pub const IN_ZONE_EVENT_ANCHOR_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 29
            },
            {
              "name": "executor_vigils::compute_completion_payload",
              "kind": "function_item",
              "signature": "pub fn compute_completion_payload(\n    receipt: &sigil_core::transaction::ComputeReceipt,\n) -> Result<serde_json::Value, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]\n#[cfg(feature = \"compute\")]",
              "line": 292
            },
            {
              "name": "executor_vigils::in_zone_event_anchor",
              "kind": "function_item",
              "signature": "pub fn in_zone_event_anchor(\n    block_height: u64,\n    seq: u64,\n    emitter: &str,\n    topic: &str,\n    data: &[u8],\n) -> Result<sigil_core::SigilHash, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 489
            },
            {
              "name": "executor_vigils::execute_register_vigil_subscription",
              "kind": "function_item",
              "signature": "pub fn execute_register_vigil_subscription(\n    sender_did: &str,\n    data: &RegisterVigilSubscriptionData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 573
            },
            {
              "name": "executor_vigils::execute_update_vigil_subscription",
              "kind": "function_item",
              "signature": "pub fn execute_update_vigil_subscription(\n    sender_did: &str,\n    data: &UpdateVigilSubscriptionData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 621
            },
            {
              "name": "executor_vigils::execute_cancel_vigil_subscription",
              "kind": "function_item",
              "signature": "pub fn execute_cancel_vigil_subscription(\n    sender_did: &str,\n    data: &CancelVigilSubscriptionData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 706
            },
            {
              "name": "executor_vigils::execute_deposit_vigil_gas",
              "kind": "function_item",
              "signature": "pub fn execute_deposit_vigil_gas(\n    sender_did: &str,\n    data: &DepositVigilGasData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 738
            },
            {
              "name": "executor_vigils::execute_withdraw_vigil_gas",
              "kind": "function_item",
              "signature": "pub fn execute_withdraw_vigil_gas(\n    sender_did: &str,\n    data: &sigil_core::vigil::WithdrawVigilGasData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 767
            },
            {
              "name": "executor_vigils::execute_register_ingestor",
              "kind": "function_item",
              "signature": "pub fn execute_register_ingestor(\n    sender_did: &str,\n    data: &RegisterIngestorData,\n    fee: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 804
            },
            {
              "name": "executor_vigils::execute_update_ingestor_stake",
              "kind": "function_item",
              "signature": "pub fn execute_update_ingestor_stake(\n    sender_did: &str,\n    data: &UpdateIngestorStakeData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 861
            },
            {
              "name": "executor_vigils::execute_deregister_ingestor",
              "kind": "function_item",
              "signature": "pub fn execute_deregister_ingestor(\n    sender_did: &str,\n    data: &DeregisterIngestorData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 923
            },
            {
              "name": "executor_vigils::execute_slash_ingestor",
              "kind": "function_item",
              "signature": "pub fn execute_slash_ingestor(\n    sender_did: &str,\n    data: &SlashIngestorData,\n    fee: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 964
            },
            {
              "name": "executor_vigils::execute_event_delivery",
              "kind": "function_item",
              "signature": "pub fn execute_event_delivery(\n    sender_did: &str,\n    data: &EventDeliveryData,\n    fee: u64,\n    gas_price: u64,\n    block_height: u64,\n    state: &dyn ExecutionState,\n) -> Result<(u64, Vec<StateChange>, Vec<Event>), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 1002
            },
            {
              "name": "executor_vigils::execute_vigil_callback_pass",
              "kind": "function_item",
              "signature": "pub fn execute_vigil_callback_pass(\n    state: &dyn ExecutionState,\n    block_height: u64,\n) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 1161
            }
          ],
          "parseErrors": false
        },
        {
          "module": "gal_durable",
          "source": "sigil/node/sigil-node/src/gal_durable.rs",
          "sha256": "f0cf838f41a3d993bef89516db57fd852e0b0a6f2d20c14690cc5c3e9023a8d4",
          "attributes": "#[cfg(feature = \"tower\")]",
          "items": [
            {
              "name": "gal_durable::DurableGalStore",
              "kind": "struct_item",
              "signature": "pub struct DurableGalStore {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 97
            },
            {
              "name": "gal_durable::DurableGalStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 103
            },
            {
              "name": "gal_durable::DurableGalStore::put_hmr",
              "kind": "function_item",
              "signature": "pub fn put_hmr(&self, anchor: &HmrAnchor) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 168
            },
            {
              "name": "gal_durable::DurableGalStore::get_hmr",
              "kind": "function_item",
              "signature": "pub fn get_hmr(&self, did: &str) -> Result<Option<HmrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 172
            },
            {
              "name": "gal_durable::DurableGalStore::list_hmrs",
              "kind": "function_item",
              "signature": "pub fn list_hmrs(&self) -> Result<Vec<HmrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 178
            },
            {
              "name": "gal_durable::DurableGalStore::put_mhr",
              "kind": "function_item",
              "signature": "pub fn put_mhr(&self, anchor: &MhrAnchor) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 185
            },
            {
              "name": "gal_durable::DurableGalStore::get_mhr",
              "kind": "function_item",
              "signature": "pub fn get_mhr(&self, did: &str) -> Result<Option<MhrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 189
            },
            {
              "name": "gal_durable::DurableGalStore::list_mhrs",
              "kind": "function_item",
              "signature": "pub fn list_mhrs(&self) -> Result<Vec<MhrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 195
            },
            {
              "name": "gal_durable::DurableGalStore::put_enr",
              "kind": "function_item",
              "signature": "pub fn put_enr(&self, anchor: &EnrAnchor) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 202
            },
            {
              "name": "gal_durable::DurableGalStore::get_enr",
              "kind": "function_item",
              "signature": "pub fn get_enr(&self, did: &str) -> Result<Option<EnrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 206
            },
            {
              "name": "gal_durable::DurableGalStore::list_enrs",
              "kind": "function_item",
              "signature": "pub fn list_enrs(&self) -> Result<Vec<EnrAnchor>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 212
            },
            {
              "name": "gal_durable::DurableGalStore::put_org_root",
              "kind": "function_item",
              "signature": "pub fn put_org_root(&self, root: &OrgLineageRoot) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 219
            },
            {
              "name": "gal_durable::DurableGalStore::get_org_root",
              "kind": "function_item",
              "signature": "pub fn get_org_root(&self, org_did: &str) -> Result<Option<OrgLineageRoot>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 223
            },
            {
              "name": "gal_durable::DurableGalStore::list_org_roots",
              "kind": "function_item",
              "signature": "pub fn list_org_roots(&self) -> Result<Vec<OrgLineageRoot>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 229
            },
            {
              "name": "gal_durable::DurableGalStore::put_shard_assignment",
              "kind": "function_item",
              "signature": "pub fn put_shard_assignment(&self, assignment: &ShardAssignment) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 236
            },
            {
              "name": "gal_durable::DurableGalStore::get_shard_assignment",
              "kind": "function_item",
              "signature": "pub fn get_shard_assignment(&self, did: &str) -> Result<Option<ShardAssignment>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 243
            },
            {
              "name": "gal_durable::DurableGalStore::list_shard_assignments",
              "kind": "function_item",
              "signature": "pub fn list_shard_assignments(&self) -> Result<Vec<ShardAssignment>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 249
            },
            {
              "name": "gal_durable::DurableGalStore::put_revocation",
              "kind": "function_item",
              "signature": "pub fn put_revocation(&self, record: &RevocationRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 256
            },
            {
              "name": "gal_durable::DurableGalStore::get_revocation",
              "kind": "function_item",
              "signature": "pub fn get_revocation(&self, did: &str) -> Result<Option<RevocationRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 260
            },
            {
              "name": "gal_durable::DurableGalStore::list_revocations",
              "kind": "function_item",
              "signature": "pub fn list_revocations(&self) -> Result<Vec<RevocationRecord>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 266
            },
            {
              "name": "gal_durable::DurableGalStore::put_topology",
              "kind": "function_item",
              "signature": "pub fn put_topology(&self, entry: &ShardTopologyEntry) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 273
            },
            {
              "name": "gal_durable::DurableGalStore::list_topology",
              "kind": "function_item",
              "signature": "pub fn list_topology(&self) -> Result<Vec<ShardTopologyEntry>, NodeError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 277
            },
            {
              "name": "gal_durable::ArcGalStore",
              "kind": "type_item",
              "signature": "pub type ArcGalStore = Arc<DurableGalStore>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 293
            }
          ],
          "parseErrors": false
        },
        {
          "module": "genesis_loader",
          "source": "sigil/node/sigil-node/src/genesis_loader.rs",
          "sha256": "8712ecd501685ff1329655cf58e68e87b0598cda670c16460d55dcca4eae7551",
          "attributes": "",
          "items": [
            {
              "name": "genesis_loader::load_genesis",
              "kind": "function_item",
              "signature": "pub fn load_genesis(path: &str) -> Result<GenesisConfig, NodeError>;",
              "docs": "Load and validate a genesis configuration from a JSON file.\n\n# Errors\n\nReturns [`NodeError::GenesisLoadFailed`] if the file cannot be read, the\nJSON cannot be parsed, or the genesis configuration fails validation.",
              "attributes": "",
              "line": 13
            },
            {
              "name": "genesis_loader::load_genesis_from_str",
              "kind": "function_item",
              "signature": "pub fn load_genesis_from_str(json: &str) -> Result<GenesisConfig, NodeError>;",
              "docs": "Load a genesis configuration from a JSON string (useful for testing).\n\n# Errors\n\nSame as [`load_genesis`] but operates on a string instead of a file path.",
              "attributes": "",
              "line": 29
            }
          ],
          "parseErrors": false
        },
        {
          "module": "governance_durable",
          "source": "sigil/node/sigil-node/src/governance_durable.rs",
          "sha256": "6d95456dd9e8a4b65404307b5dfa4152ce7b921caf1b6db9c461bc6cc704d838",
          "attributes": "",
          "items": [
            {
              "name": "governance_durable::DurableGovernanceStore",
              "kind": "struct_item",
              "signature": "pub struct DurableGovernanceStore {\n\n}",
              "docs": "Durable governance store backed by AkashaKV.\n\nPersists proposals, votes, voting tallies, and the execution timelock queue.\nAll multi-write operations must use [`GovernanceWriteBatch`] +\n[`DurableGovernanceStore::commit_batch`] for crash safety.",
              "attributes": "",
              "line": 208
            },
            {
              "name": "governance_durable::DurableGovernanceStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the governance subsystem. Fatal on failure.",
              "attributes": "",
              "line": 216
            },
            {
              "name": "governance_durable::DurableGovernanceStore::get_proposal",
              "kind": "function_item",
              "signature": "pub fn get_proposal(&self, proposal_id: &str) -> Result<Option<Proposal>, NodeError>;",
              "docs": "Fetch a proposal by ID. Returns `None` if not found.",
              "attributes": "",
              "line": 291
            },
            {
              "name": "governance_durable::DurableGovernanceStore::put_proposal",
              "kind": "function_item",
              "signature": "pub fn put_proposal(&self, proposal: &Proposal) -> Result<(), NodeError>;",
              "docs": "Insert or replace a proposal.",
              "attributes": "",
              "line": 299
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_all_proposals",
              "kind": "function_item",
              "signature": "pub fn list_all_proposals(&self) -> Result<Vec<Proposal>, NodeError>;",
              "docs": "Return all proposals in the store (order is lexicographic by id bytes).",
              "attributes": "",
              "line": 305
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_active_proposals",
              "kind": "function_item",
              "signature": "pub fn list_active_proposals(&self) -> Result<Vec<Proposal>, NodeError>;",
              "docs": "Return proposals that are in an active (non-terminal) state.",
              "attributes": "",
              "line": 314
            },
            {
              "name": "governance_durable::DurableGovernanceStore::get_vote",
              "kind": "function_item",
              "signature": "pub fn get_vote(&self, proposal_id: &str, voter_did: &str) -> Result<Option<Vote>, NodeError>;",
              "docs": "Fetch the full [`Vote`] record cast by `voter_did` on `proposal_id`.\nReturns `None` if no vote has been recorded.",
              "attributes": "",
              "line": 323
            },
            {
              "name": "governance_durable::DurableGovernanceStore::put_vote",
              "kind": "function_item",
              "signature": "pub fn put_vote(&self, vote: &Vote) -> Result<(), NodeError>;",
              "docs": "Store a vote record for `(proposal_id, voter_did)`.",
              "attributes": "",
              "line": 331
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_proposal_votes",
              "kind": "function_item",
              "signature": "pub fn list_proposal_votes(&self, proposal_id: &str) -> Result<Vec<Vote>, NodeError>;",
              "docs": "Return all votes cast on a proposal, in lexicographic voter_did order.",
              "attributes": "",
              "line": 338
            },
            {
              "name": "governance_durable::DurableGovernanceStore::has_voted",
              "kind": "function_item",
              "signature": "pub fn has_voted(&self, proposal_id: &str, voter_did: &str) -> Result<bool, NodeError>;",
              "docs": "Returns `true` if `voter_did` has already voted on `proposal_id`.\nUses the lightweight voted-marker key (no full deserialisation).",
              "attributes": "",
              "line": 346
            },
            {
              "name": "governance_durable::DurableGovernanceStore::mark_voted",
              "kind": "function_item",
              "signature": "pub fn mark_voted(&self, proposal_id: &str, voter_did: &str) -> Result<(), NodeError>;",
              "docs": "Record the voted marker for `(proposal_id, voter_did)`. Must be\ncommitted atomically with the corresponding vote write; use\n[`GovernanceWriteBatch`] for this.",
              "attributes": "",
              "line": 353
            },
            {
              "name": "governance_durable::DurableGovernanceStore::get_tally",
              "kind": "function_item",
              "signature": "pub fn get_tally(&self, proposal_id: &str) -> Result<Option<VotingTally>, NodeError>;",
              "docs": "Fetch the current [`VotingTally`] for `proposal_id`.\nReturns `None` if no votes have been tallied yet.",
              "attributes": "",
              "line": 361
            },
            {
              "name": "governance_durable::DurableGovernanceStore::put_tally",
              "kind": "function_item",
              "signature": "pub fn put_tally(&self, tally: &VotingTally) -> Result<(), NodeError>;",
              "docs": "Store the current [`VotingTally`] for a proposal.",
              "attributes": "",
              "line": 369
            },
            {
              "name": "governance_durable::DurableGovernanceStore::enqueue_timelock",
              "kind": "function_item",
              "signature": "pub fn enqueue_timelock(&self, entry: &TimelockEntry) -> Result<(), NodeError>;",
              "docs": "Enqueue a timelock entry. Keyed by `(execution_epoch, proposal_id)` so\nlexicographic scan == chronological execution order.",
              "attributes": "",
              "line": 379
            },
            {
              "name": "governance_durable::DurableGovernanceStore::dequeue_timelock",
              "kind": "function_item",
              "signature": "pub fn dequeue_timelock(\n        &self,\n        execution_epoch: u64,\n        proposal_id: &str,\n    ) -> Result<(), NodeError>;",
              "docs": "Mark a timelock entry as executed (soft-delete).\n\nUpdates the entry's `status` to [`TimelockStatus::Executed`] in-place\nrather than performing a hard delete. This preserves the audit trail\nand sidesteps the AkashaKV memtable-scan tombstone limitation: the\ndelete API writes a tombstone to the active memtable, but the memtable\niterator returns entries in timestamp-ascending order (earliest first),\nso the tombstone is deduplicated away before the engine-level scan can\npromote it. The overwrite approach produces a new version with a higher\ntimestamp that IS returned first by the iterator.\n\n`list_due_timelocks` and `list_all_timelocks` both filter out entries\nwhose status is `Executed` or `Cancelled`.",
              "attributes": "",
              "line": 398
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_due_timelocks",
              "kind": "function_item",
              "signature": "pub fn list_due_timelocks(&self, current_epoch: u64) -> Result<Vec<TimelockEntry>, NodeError>;",
              "docs": "Return all timelock entries whose `execution_epoch <= current_epoch`\n**and** whose status is `Pending`, ordered by epoch ascending\n(ready-first), then by proposal_id within the same epoch (lexicographic).",
              "attributes": "",
              "line": 418
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_all_timelocks",
              "kind": "function_item",
              "signature": "pub fn list_all_timelocks(&self) -> Result<Vec<TimelockEntry>, NodeError>;",
              "docs": "Return all pending timelock entries in the store (any epoch).\n\nEntries whose status is `Executed` or `Cancelled` are excluded.",
              "attributes": "",
              "line": 446
            },
            {
              "name": "governance_durable::DurableGovernanceStore::set_executor_proposal",
              "kind": "function_item",
              "signature": "pub fn set_executor_proposal(\n        &self,\n        proposal: &crate::executor::Proposal,\n    ) -> Result<(), NodeError>;",
              "docs": "Persist the executor-internal [`crate::executor::Proposal`] under its\n`u64` ID.  These records are stored separately from the\n`sigil_governance::Proposal` records so the two data models do not\ninterfere with each other.",
              "attributes": "",
              "line": 467
            },
            {
              "name": "governance_durable::DurableGovernanceStore::get_executor_proposal",
              "kind": "function_item",
              "signature": "pub fn get_executor_proposal(\n        &self,\n        id: u64,\n    ) -> Result<Option<crate::executor::Proposal>, NodeError>;",
              "docs": "Return the executor-internal proposal for `id`, or `None` if absent.",
              "attributes": "",
              "line": 477
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_executor_proposals",
              "kind": "function_item",
              "signature": "pub fn list_executor_proposals(&self) -> Result<Vec<crate::executor::Proposal>, NodeError>;",
              "docs": "Return all executor-internal proposals ordered by numeric ID.",
              "attributes": "",
              "line": 488
            },
            {
              "name": "governance_durable::DurableGovernanceStore::list_executor_votes",
              "kind": "function_item",
              "signature": "pub fn list_executor_votes(&self) -> Result<Vec<(u64, String)>, NodeError>;",
              "docs": "Return all executor voted markers as `(proposal_id, voter_did)`.",
              "attributes": "",
              "line": 499
            },
            {
              "name": "governance_durable::DurableGovernanceStore::record_executor_vote",
              "kind": "function_item",
              "signature": "pub fn record_executor_vote(&self, proposal_id: u64, voter_did: &str) -> Result<(), NodeError>;",
              "docs": "Record that `voter_did` has voted on `proposal_id`.",
              "attributes": "",
              "line": 521
            },
            {
              "name": "governance_durable::DurableGovernanceStore::has_executor_voted",
              "kind": "function_item",
              "signature": "pub fn has_executor_voted(&self, proposal_id: u64, voter_did: &str) -> Result<bool, NodeError>;",
              "docs": "Return `true` if `voter_did` has already voted on `proposal_id`.",
              "attributes": "",
              "line": 526
            },
            {
              "name": "governance_durable::DurableGovernanceStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of AkashaKV memtables to SSTables. Useful in tests.",
              "attributes": "",
              "line": 535
            },
            {
              "name": "governance_durable::DurableGovernanceStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "",
              "line": 542
            },
            {
              "name": "governance_durable::DurableGovernanceStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &GovernanceWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV MVCC\ntransaction.\n\nAtomicity guarantee: if any individual operation fails the transaction\nis dropped (auto-aborted via `Drop`) before commit, leaving zero partial\nstate visible. Either every operation in the batch lands or none do.",
              "attributes": "",
              "line": 556
            },
            {
              "name": "governance_durable::DurableGovernanceStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the root namespace prefix for governance keys.",
              "attributes": "",
              "line": 615
            },
            {
              "name": "governance_durable::ArcGovernanceStore",
              "kind": "type_item",
              "signature": "pub type ArcGovernanceStore = Arc<DurableGovernanceStore>;",
              "docs": "Convenience type alias for a shared durable governance store.",
              "attributes": "",
              "line": 621
            },
            {
              "name": "governance_durable::GovernanceBatchOp",
              "kind": "enum_item",
              "signature": "pub enum GovernanceBatchOp {\n    /// Insert or replace a governance proposal.\n    PutProposal(Proposal),\n    /// Record a full vote payload.\n    PutVote(Vote),\n    /// Set the lightweight voted-marker for `(proposal_id, voter_did)`.\n    MarkVoted {\n        proposal_id: String,\n        voter_did: String,\n    },\n    /// Store the current voting tally for a proposal.\n    PutTally(VotingTally),\n    /// Enqueue a timelock entry for execution.\n    EnqueueTimelock(TimelockEntry),\n    /// Insert or replace an executor-internal [`crate::executor::Proposal`].\n    ///\n    /// Stored in the `gov/exec/proposal/` keyspace so it does not collide\n    /// with `sigil_governance::Proposal` records in `gov/proposal/`.\n    SetExecutorProposal(Box<crate::executor::Proposal>),\n    /// Record that `voter_did` has voted on `proposal_id` (u64 key).\n    ///\n    /// Stored in the `gov/exec/voted/` keyspace.\n    RecordExecutorVote { proposal_id: u64, voter_did: String },\n}",
              "docs": "An individual operation inside a [`GovernanceWriteBatch`].",
              "attributes": "#[derive(Clone)]",
              "line": 629
            },
            {
              "name": "governance_durable::GovernanceWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct GovernanceWriteBatch {\n\n}",
              "docs": "Write batch accumulating all mutations for a single governance transition.\n\nBuild the batch inside the transaction handler, then pass it to\n[`crate::executor::ExecutionState::commit_governance_tx`]. A crash before\n`commit_governance_tx` returns leaves zero partial state on disk.",
              "attributes": "#[derive(Default)]",
              "line": 660
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "",
              "line": 666
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::put_proposal",
              "kind": "function_item",
              "signature": "pub fn put_proposal(&mut self, proposal: Proposal);",
              "docs": "Queue a proposal write.",
              "attributes": "",
              "line": 671
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::put_vote",
              "kind": "function_item",
              "signature": "pub fn put_vote(&mut self, vote: Vote);",
              "docs": "Queue a full vote record write.",
              "attributes": "",
              "line": 676
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::mark_voted",
              "kind": "function_item",
              "signature": "pub fn mark_voted(&mut self, proposal_id: impl Into<String>, voter_did: impl Into<String>);",
              "docs": "Queue a voted-marker write for `(proposal_id, voter_did)`.",
              "attributes": "",
              "line": 681
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::put_tally",
              "kind": "function_item",
              "signature": "pub fn put_tally(&mut self, tally: VotingTally);",
              "docs": "Queue a tally write.",
              "attributes": "",
              "line": 689
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::enqueue_timelock",
              "kind": "function_item",
              "signature": "pub fn enqueue_timelock(&mut self, entry: TimelockEntry);",
              "docs": "Queue a timelock enqueue operation.",
              "attributes": "",
              "line": 694
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::set_executor_proposal",
              "kind": "function_item",
              "signature": "pub fn set_executor_proposal(&mut self, proposal: crate::executor::Proposal);",
              "docs": "Queue an executor-internal proposal write.\n\nUse this (not `put_proposal`) when the proposal is represented by\n[`crate::executor::Proposal`] rather than [`sigil_governance::Proposal`].",
              "attributes": "",
              "line": 702
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::record_executor_vote",
              "kind": "function_item",
              "signature": "pub fn record_executor_vote(&mut self, proposal_id: u64, voter_did: impl Into<String>);",
              "docs": "Queue an executor voted-marker write for `(proposal_id: u64, voter_did)`.",
              "attributes": "",
              "line": 708
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued.",
              "attributes": "",
              "line": 716
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "",
              "line": 721
            },
            {
              "name": "governance_durable::GovernanceWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<GovernanceBatchOp>;",
              "docs": "Consume the batch and return the inner op list.",
              "attributes": "",
              "line": 726
            }
          ],
          "parseErrors": false
        },
        {
          "module": "health",
          "source": "sigil/node/sigil-node/src/health.rs",
          "sha256": "2cd193841fbc67320b80063b3d58ce98c8c1042b06b02fba7df3f885a86a2752",
          "attributes": "",
          "items": [
            {
              "name": "health::HealthStatus",
              "kind": "enum_item",
              "signature": "pub enum HealthStatus {\n    /// Node is healthy, synced, and participating normally.\n    Healthy,\n    /// Node is syncing and not yet caught up to the network tip.\n    Syncing,\n    /// Node is degraded \u2014 operational but experiencing issues.\n    Degraded,\n    /// Node is not operational.\n    Unhealthy,\n}",
              "docs": "Overall health status of the node.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 11
            },
            {
              "name": "health::HealthStatus::is_serving",
              "kind": "function_item",
              "signature": "pub fn is_serving(&self) -> bool;",
              "docs": "Returns `true` if the node is in a state where it can serve requests.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "health::HealthStatus::is_healthy",
              "kind": "function_item",
              "signature": "pub fn is_healthy(&self) -> bool;",
              "docs": "Returns `true` if the node is fully healthy.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "health::SyncState",
              "kind": "struct_item",
              "signature": "pub struct SyncState {\n/// Whether the node has completed initial sync.\n\npub synced: bool,\n/// Current block height on this node.\n\npub current_height: u64,\n/// Highest block height known from peers.\n\npub highest_known_height: u64,\n/// Number of blocks remaining to sync.\n\npub blocks_behind: u64,\n/// Current epoch number.\n\npub current_epoch: u64\n}",
              "docs": "Sync state of the node relative to the network.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "health::SyncState::progress",
              "kind": "function_item",
              "signature": "pub fn progress(&self) -> f64;",
              "docs": "Returns the sync progress as a fraction in `[0.0, 1.0]`.\n\nReturns `1.0` if synced or if the highest known height is 0.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "health::NodeMetrics",
              "kind": "struct_item",
              "signature": "pub struct NodeMetrics {\n/// Total blocks processed (produced + validated + synced).\n\npub blocks_processed: u64,\n/// Total transactions processed across all blocks.\n\npub transactions_processed: u64,\n/// Number of blocks this node proposed (validator/producer modes only).\n\npub blocks_proposed: u64,\n/// Number of consensus votes cast (validator/producer modes only).\n\npub votes_cast: u64,\n/// Number of peers currently connected.\n\npub peer_count: u32,\n/// Number of transactions in the mempool.\n\npub mempool_size: u32,\n/// Total bytes received from the P2P network.\n\npub bytes_received: u64,\n/// Total bytes sent on the P2P network.\n\npub bytes_sent: u64\n}",
              "docs": "Counters tracking node activity since startup.",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 78
            },
            {
              "name": "health::NodeMetrics::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new zeroed metrics instance.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "health::NodeMetrics::record_block",
              "kind": "function_item",
              "signature": "pub fn record_block(&mut self, tx_count: u64);",
              "docs": "Record that a block was processed.",
              "attributes": "",
              "line": 104
            },
            {
              "name": "health::NodeMetrics::record_proposal",
              "kind": "function_item",
              "signature": "pub fn record_proposal(&mut self);",
              "docs": "Record that this node proposed a block.",
              "attributes": "",
              "line": 110
            },
            {
              "name": "health::NodeMetrics::record_vote",
              "kind": "function_item",
              "signature": "pub fn record_vote(&mut self);",
              "docs": "Record that a consensus vote was cast.",
              "attributes": "",
              "line": 115
            },
            {
              "name": "health::TowerMetrics",
              "kind": "struct_item",
              "signature": "pub struct TowerMetrics {\n/// Current Tower slot number.\n\npub current_slot: u64,\n/// Current Tower epoch.\n\npub current_epoch: u64,\n/// Latest finalized epoch via Casper FFG.\n\npub finalized_epoch: u64,\n/// Total finality votes this node has cast.\n\npub finality_votes_cast: u64,\n/// Total committee attestations this node has produced.\n\npub attestations_produced: u64\n}",
              "docs": "Tower chain metrics (only populated in validator/producer/tower modes).",
              "attributes": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 122
            },
            {
              "name": "health::HealthCheck",
              "kind": "struct_item",
              "signature": "pub struct HealthCheck {\n/// Overall health status.\n\npub status: HealthStatus,\n/// Software version.\n\npub version: String,\n/// Chain ID.\n\npub chain_id: String,\n/// Node operating mode.\n\npub node_mode: String,\n/// Sync state relative to the network.\n\npub sync: SyncState,\n/// Activity counters.\n\npub metrics: NodeMetrics,\n/// Tower chain metrics (present only for Tower-aware modes).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub tower: Option<TowerMetrics>,\n/// Unix timestamp of this health check.\n\npub timestamp: u64,\n/// Node uptime in seconds.\n\npub uptime_secs: u64\n}",
              "docs": "Complete health check response combining status, sync, and metrics.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 137
            },
            {
              "name": "health::HealthCheck::compute_status",
              "kind": "function_item",
              "signature": "pub fn compute_status(synced: bool, peer_count: u32) -> HealthStatus;",
              "docs": "Determine the overall health status from the current state.\n\nThe status is derived from:\n- `Healthy`: synced, has peers, no degradation signals\n- `Syncing`: not yet synced\n- `Degraded`: synced but zero peers\n- `Unhealthy`: none of the above",
              "attributes": "",
              "line": 167
            }
          ],
          "parseErrors": false
        },
        {
          "module": "host_backend",
          "source": "sigil/node/sigil-node/src/host_backend.rs",
          "sha256": "da16072dc665dcfde19acd7f02ff72bd9f999a00b52063082521b474e5ca38af",
          "attributes": "#[cfg(feature = \"wasm\")]",
          "items": [
            {
              "name": "host_backend::ChainHostBackend",
              "kind": "struct_item",
              "signature": "pub struct ChainHostBackend<'a> {\n\n}",
              "docs": "Per-call backend. Borrows the chain state, snapshots the contract\nrecord, and stages all mutations in an in-memory overlay until the\nexecutor either `commit()`s the call or drops the backend (trap\nrollback).",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 40
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        state: &'a dyn ExecutionState,\n        record: ContractRecord,\n        caller_did: impl Into<String>,\n    ) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 72
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::with_declared_access",
              "kind": "function_item",
              "signature": "pub fn with_declared_access(mut self, reads: &[StateAccess], writes: &[StateAccess]) -> Self;",
              "docs": "Attach the transaction's declared read/write sets. Contract-local reads\nmust be present in `reads` or `writes`; contract-local writes and\nexternal host effects must be present in `writes`.",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 100
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::with_declared_writes",
              "kind": "function_item",
              "signature": "pub fn with_declared_writes(mut self, writes: &[StateAccess]) -> Self;",
              "docs": "Attach the transaction's declared write set. Host functions with\nside effects outside the contract-local overlay reject undeclared\nwrites before staging any mutation.",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 109
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::dry_run",
              "kind": "function_item",
              "signature": "pub fn dry_run(\n        state: &'a dyn ExecutionState,\n        record: ContractRecord,\n        caller_did: impl Into<String>,\n    ) -> Self;",
              "docs": "Construct a dry-run backend. `commit()` becomes a no-op so any\nstaged mutations are discarded by the caller's drop.",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 116
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::commit",
              "kind": "function_item",
              "signature": "pub fn commit(self) -> Result<(), HostError>;",
              "docs": "Flush staged mutations to the underlying `ExecutionState`. The\nexecutor calls this only on a successful WASM invocation.",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 128
            },
            {
              "name": "host_backend::ChainHostBackend<'a>::record",
              "kind": "function_item",
              "signature": "pub fn record(&self) -> &ContractRecord;",
              "docs": "Used by the executor after a successful run to compute the\npost-call state-root from the merged base + overlay view.",
              "attributes": "#[cfg(feature = \"wasm\")]",
              "line": 215
            }
          ],
          "parseErrors": false
        },
        {
          "module": "labor_durable",
          "source": "sigil/node/sigil-node/src/labor_durable.rs",
          "sha256": "20cb878ad0c83c6bfb6dd421a1a63e3ff4d14302123ae2d2a0b79f795c5153e0",
          "attributes": "",
          "items": [
            {
              "name": "labor_durable::LaborEvent",
              "kind": "struct_item",
              "signature": "pub struct LaborEvent {\n/// Block at which the event was emitted.\n\npub block_height: u64,\n/// Sequence number within the block (for ordering).\n\npub seq: u64,\n/// Contract ID this event relates to.\n\npub contract_id: String,\n/// Kind of event (e.g. `\"contract_created\"`, `\"milestone_released\"`).\n\npub kind: String,\n/// Free-form JSON payload (actor DIDs, amounts, etc.).\n\npub payload: serde_json::Value\n}",
              "docs": "A lightweight audit event appended to the labor event log on every\nstate-changing labor transaction.",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 335
            },
            {
              "name": "labor_durable::DurableLaborStore",
              "kind": "struct_item",
              "signature": "pub struct DurableLaborStore {\n\n}",
              "docs": "Durable labor marketplace store backed by AkashaKV.\n\nPersists [`LaborContract`] records, per-milestone state, worker assignment\nindexes, and an append-only audit event log. All multi-write operations\nmust use [`LaborWriteBatch`] + [`DurableLaborStore::commit_batch`] for\ncrash safety.",
              "attributes": "",
              "line": 358
            },
            {
              "name": "labor_durable::DurableLaborStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the labor subsystem. Fatal on failure.",
              "attributes": "",
              "line": 366
            },
            {
              "name": "labor_durable::DurableLaborStore::get_contract",
              "kind": "function_item",
              "signature": "pub fn get_contract(&self, contract_id: &str) -> Result<Option<LaborContract>, NodeError>;",
              "docs": "Fetch a labor contract by ID. Returns `None` if not found.",
              "attributes": "",
              "line": 435
            },
            {
              "name": "labor_durable::DurableLaborStore::put_contract",
              "kind": "function_item",
              "signature": "pub fn put_contract(&self, contract: &LaborContract) -> Result<(), NodeError>;",
              "docs": "Insert or replace a labor contract (top-level record only, without\npersisting individual milestones separately). Prefer\n[`commit_batch`](Self::commit_batch) for multi-write atomicity.",
              "attributes": "",
              "line": 445
            },
            {
              "name": "labor_durable::DurableLaborStore::list_all_contracts",
              "kind": "function_item",
              "signature": "pub fn list_all_contracts(&self) -> Result<Vec<LaborContract>, NodeError>;",
              "docs": "Return all contracts in the store.",
              "attributes": "",
              "line": 451
            },
            {
              "name": "labor_durable::DurableLaborStore::list_contracts_by_state",
              "kind": "function_item",
              "signature": "pub fn list_contracts_by_state(\n        &self,\n        state: ContractState,\n    ) -> Result<Vec<LaborContract>, NodeError>;",
              "docs": "Return all contracts in a given state.",
              "attributes": "",
              "line": 460
            },
            {
              "name": "labor_durable::DurableLaborStore::get_job",
              "kind": "function_item",
              "signature": "pub fn get_job(&self, job_id: &str) -> Result<Option<LaborJob>, NodeError>;",
              "docs": "Fetch a labor job posting by ID. Returns `None` if not found.",
              "attributes": "",
              "line": 471
            },
            {
              "name": "labor_durable::DurableLaborStore::put_job",
              "kind": "function_item",
              "signature": "pub fn put_job(&self, job: &LaborJob) -> Result<(), NodeError>;",
              "docs": "Insert or replace a job record.",
              "attributes": "",
              "line": 479
            },
            {
              "name": "labor_durable::DurableLaborStore::list_all_jobs",
              "kind": "function_item",
              "signature": "pub fn list_all_jobs(&self) -> Result<Vec<LaborJob>, NodeError>;",
              "docs": "Return all job postings in the store.",
              "attributes": "",
              "line": 485
            },
            {
              "name": "labor_durable::DurableLaborStore::get_bid",
              "kind": "function_item",
              "signature": "pub fn get_bid(&self, bid_id: &str) -> Result<Option<LaborBid>, NodeError>;",
              "docs": "Fetch a labor bid by ID. Returns `None` if not found.",
              "attributes": "",
              "line": 496
            },
            {
              "name": "labor_durable::DurableLaborStore::put_bid",
              "kind": "function_item",
              "signature": "pub fn put_bid(&self, bid: &LaborBid) -> Result<(), NodeError>;",
              "docs": "Insert or replace a bid record.",
              "attributes": "",
              "line": 504
            },
            {
              "name": "labor_durable::DurableLaborStore::list_all_bids",
              "kind": "function_item",
              "signature": "pub fn list_all_bids(&self) -> Result<Vec<LaborBid>, NodeError>;",
              "docs": "Return all bids in the store.",
              "attributes": "",
              "line": 510
            },
            {
              "name": "labor_durable::DurableLaborStore::list_job_bids",
              "kind": "function_item",
              "signature": "pub fn list_job_bids(&self, job_id: &str) -> Result<Vec<String>, NodeError>;",
              "docs": "Return all bid IDs for a given job.",
              "attributes": "",
              "line": 519
            },
            {
              "name": "labor_durable::DurableLaborStore::get_milestone",
              "kind": "function_item",
              "signature": "pub fn get_milestone(\n        &self,\n        contract_id: &str,\n        milestone_index: u32,\n    ) -> Result<Option<Milestone>, NodeError>;",
              "docs": "Fetch a single milestone by contract + index.",
              "attributes": "",
              "line": 542
            },
            {
              "name": "labor_durable::DurableLaborStore::put_milestone",
              "kind": "function_item",
              "signature": "pub fn put_milestone(&self, contract_id: &str, milestone: &Milestone) -> Result<(), NodeError>;",
              "docs": "Store a milestone record.",
              "attributes": "",
              "line": 555
            },
            {
              "name": "labor_durable::DurableLaborStore::list_milestones",
              "kind": "function_item",
              "signature": "pub fn list_milestones(&self, contract_id: &str) -> Result<Vec<Milestone>, NodeError>;",
              "docs": "Return all milestones for a contract, ordered by index (ascending via\nbig-endian key ordering).",
              "attributes": "",
              "line": 563
            },
            {
              "name": "labor_durable::DurableLaborStore::list_milestones_by_state",
              "kind": "function_item",
              "signature": "pub fn list_milestones_by_state(\n        &self,\n        contract_id: &str,\n        state: MilestoneState,\n    ) -> Result<Vec<Milestone>, NodeError>;",
              "docs": "Return all milestones for a contract that are in a given state.",
              "attributes": "",
              "line": 573
            },
            {
              "name": "labor_durable::DurableLaborStore::index_worker_contract",
              "kind": "function_item",
              "signature": "pub fn index_worker_contract(\n        &self,\n        worker_did: &str,\n        contract_id: &str,\n    ) -> Result<(), NodeError>;",
              "docs": "Record that `worker_did` is a party to `contract_id`. Value is\npresence-only (b\"1\"); use [`commit_batch`](Self::commit_batch) to write\nthis atomically with the contract record.",
              "attributes": "",
              "line": 587
            },
            {
              "name": "labor_durable::DurableLaborStore::list_worker_contracts",
              "kind": "function_item",
              "signature": "pub fn list_worker_contracts(&self, worker_did: &str) -> Result<Vec<String>, NodeError>;",
              "docs": "Return all contract IDs for which `worker_did` has an index entry.",
              "attributes": "",
              "line": 597
            },
            {
              "name": "labor_durable::DurableLaborStore::put_dispute_index",
              "kind": "function_item",
              "signature": "pub fn put_dispute_index(&self, dispute_id: &str, contract_id: &str) -> Result<(), NodeError>;",
              "docs": "Write a dispute_id \u2192 contract_id mapping to the dispute index.\nCalled atomically when a dispute is raised.",
              "attributes": "",
              "line": 624
            },
            {
              "name": "labor_durable::DurableLaborStore::get_dispute_contract_id",
              "kind": "function_item",
              "signature": "pub fn get_dispute_contract_id(&self, dispute_id: &str) -> Result<Option<String>, NodeError>;",
              "docs": "Look up the contract_id for a given dispute_id.",
              "attributes": "",
              "line": 630
            },
            {
              "name": "labor_durable::DurableLaborStore::get_dispute",
              "kind": "function_item",
              "signature": "pub fn get_dispute(&self, dispute_id: &str) -> Result<Option<Dispute>, NodeError>;",
              "docs": "Fetch the full durable dispute record.",
              "attributes": "",
              "line": 641
            },
            {
              "name": "labor_durable::DurableLaborStore::put_dispute",
              "kind": "function_item",
              "signature": "pub fn put_dispute(&self, dispute: &Dispute) -> Result<(), NodeError>;",
              "docs": "Insert or replace a durable dispute record.",
              "attributes": "",
              "line": 649
            },
            {
              "name": "labor_durable::DurableLaborStore::list_disputes",
              "kind": "function_item",
              "signature": "pub fn list_disputes(&self, state: Option<DisputeState>) -> Result<Vec<Dispute>, NodeError>;",
              "docs": "Return all disputes, optionally filtered by state.",
              "attributes": "",
              "line": 655
            },
            {
              "name": "labor_durable::DurableLaborStore::get_escrow",
              "kind": "function_item",
              "signature": "pub fn get_escrow(&self, contract_id: &str) -> Result<Option<LaborEscrow>, NodeError>;",
              "docs": "Fetch exact labor escrow accounting for a contract.",
              "attributes": "",
              "line": 670
            },
            {
              "name": "labor_durable::DurableLaborStore::put_escrow",
              "kind": "function_item",
              "signature": "pub fn put_escrow(&self, escrow: &LaborEscrow) -> Result<(), NodeError>;",
              "docs": "Insert or replace a labor escrow accounting record.",
              "attributes": "",
              "line": 678
            },
            {
              "name": "labor_durable::DurableLaborStore::list_all_escrows",
              "kind": "function_item",
              "signature": "pub fn list_all_escrows(&self) -> Result<Vec<LaborEscrow>, NodeError>;",
              "docs": "Return all labor escrow records.",
              "attributes": "",
              "line": 684
            },
            {
              "name": "labor_durable::DurableLaborStore::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&self, event: &LaborEvent) -> Result<(), NodeError>;",
              "docs": "Append an audit event to the event log. Events are immutable once\nwritten; there is no delete.",
              "attributes": "",
              "line": 696
            },
            {
              "name": "labor_durable::DurableLaborStore::list_events_in_range",
              "kind": "function_item",
              "signature": "pub fn list_events_in_range(\n        &self,\n        from_height: u64,\n        to_height: u64,\n    ) -> Result<Vec<LaborEvent>, NodeError>;",
              "docs": "Return events in `[from_height, to_height]` (inclusive), ordered\nchronologically (block height ascending, then seq ascending).",
              "attributes": "",
              "line": 704
            },
            {
              "name": "labor_durable::DurableLaborStore::get_offer",
              "kind": "function_item",
              "signature": "pub fn get_offer(&self, offer_id: &str) -> Result<Option<BountyOffer>, NodeError>;",
              "docs": "Fetch an open bounty offer by ID.",
              "attributes": "",
              "line": 729
            },
            {
              "name": "labor_durable::DurableLaborStore::put_offer",
              "kind": "function_item",
              "signature": "pub fn put_offer(&self, offer: &BountyOffer) -> Result<(), NodeError>;",
              "docs": "Insert or replace a bounty offer record.",
              "attributes": "",
              "line": 737
            },
            {
              "name": "labor_durable::DurableLaborStore::list_offers",
              "kind": "function_item",
              "signature": "pub fn list_offers(&self, state: Option<BountyState>) -> Result<Vec<BountyOffer>, NodeError>;",
              "docs": "Return bounty offers, optionally filtered by state.",
              "attributes": "",
              "line": 743
            },
            {
              "name": "labor_durable::DurableLaborStore::get_claim",
              "kind": "function_item",
              "signature": "pub fn get_claim(&self, claim_id: &str) -> Result<Option<BountyClaim>, NodeError>;",
              "docs": "Fetch a bounty claim by ID.",
              "attributes": "",
              "line": 756
            },
            {
              "name": "labor_durable::DurableLaborStore::put_claim",
              "kind": "function_item",
              "signature": "pub fn put_claim(&self, claim: &BountyClaim) -> Result<(), NodeError>;",
              "docs": "Insert or replace a bounty claim.",
              "attributes": "",
              "line": 764
            },
            {
              "name": "labor_durable::DurableLaborStore::list_claims",
              "kind": "function_item",
              "signature": "pub fn list_claims(\n        &self,\n        offer_id: Option<&str>,\n        claimant_did: Option<&str>,\n    ) -> Result<Vec<BountyClaim>, NodeError>;",
              "docs": "Return bounty claims, optionally filtered by offer and claimant.",
              "attributes": "",
              "line": 770
            },
            {
              "name": "labor_durable::DurableLaborStore::get_claim_index",
              "kind": "function_item",
              "signature": "pub fn get_claim_index(\n        &self,\n        offer_id: &str,\n        claimant_did: &str,\n        deliverable_hash: &str,\n    ) -> Result<Option<String>, NodeError>;",
              "docs": "Lookup the replay/equivocation guard index for claimant deliverables.",
              "attributes": "",
              "line": 806
            },
            {
              "name": "labor_durable::DurableLaborStore::get_claim_attestation",
              "kind": "function_item",
              "signature": "pub fn get_claim_attestation(\n        &self,\n        attestation_id: &str,\n    ) -> Result<Option<ClaimAttestation>, NodeError>;",
              "docs": "Fetch a claim attestation by ID.",
              "attributes": "",
              "line": 825
            },
            {
              "name": "labor_durable::DurableLaborStore::put_claim_attestation",
              "kind": "function_item",
              "signature": "pub fn put_claim_attestation(&self, attestation: &ClaimAttestation) -> Result<(), NodeError>;",
              "docs": "Insert or replace a claim attestation.",
              "attributes": "",
              "line": 836
            },
            {
              "name": "labor_durable::DurableLaborStore::list_claim_attestations",
              "kind": "function_item",
              "signature": "pub fn list_claim_attestations(\n        &self,\n        claim_id: &str,\n    ) -> Result<Vec<ClaimAttestation>, NodeError>;",
              "docs": "List attestations for one claim in deterministic ID order.",
              "attributes": "",
              "line": 842
            },
            {
              "name": "labor_durable::DurableLaborStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of AkashaKV memtables to SSTables. Useful in tests.",
              "attributes": "",
              "line": 866
            },
            {
              "name": "labor_durable::DurableLaborStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "",
              "line": 873
            },
            {
              "name": "labor_durable::DurableLaborStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &LaborWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV MVCC\ntransaction.\n\nAtomicity guarantee: if any individual operation fails, the transaction\nis dropped (auto-aborted) before commit, leaving zero partial state.\nEither every operation in the batch lands or none do.",
              "attributes": "",
              "line": 887
            },
            {
              "name": "labor_durable::DurableLaborStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the root namespace prefix for labor keys.",
              "attributes": "",
              "line": 1007
            },
            {
              "name": "labor_durable::ArcLaborStore",
              "kind": "type_item",
              "signature": "pub type ArcLaborStore = Arc<DurableLaborStore>;",
              "docs": "Convenience type alias for a shared durable labor store.",
              "attributes": "",
              "line": 1013
            },
            {
              "name": "labor_durable::LaborBatchOp",
              "kind": "enum_item",
              "signature": "pub enum LaborBatchOp {\n    /// Insert or replace a labor job posting.\n    ///\n    /// Boxed to reduce enum variant size \u2014 `LaborJob` is large.\n    PutJob(Box<LaborJob>),\n    /// Insert or replace a labor bid.\n    ///\n    /// Boxed to reduce enum variant size \u2014 `LaborBid` is large.\n    PutBid(Box<LaborBid>),\n    /// Write a job\u2192bid index entry (presence marker).\n    IndexJobBid { job_id: String, bid_id: String },\n    /// Insert or replace a labor contract record.\n    ///\n    /// Boxed to reduce enum variant size \u2014 `LaborContract` is large.\n    PutContract(Box<LaborContract>),\n    /// Insert or replace a single milestone for a contract.\n    PutMilestone {\n        contract_id: String,\n        milestone: Milestone,\n    },\n    /// Write a worker\u2192contract index entry (presence marker).\n    IndexWorker {\n        worker_did: String,\n        contract_id: String,\n    },\n    /// Write a dispute_id \u2192 contract_id index entry.\n    IndexDispute {\n        dispute_id: String,\n        contract_id: String,\n    },\n    /// Insert or replace a full dispute record.\n    PutDispute(Box<Dispute>),\n    /// Insert or replace exact escrow accounting for a contract.\n    PutEscrow(Box<LaborEscrow>),\n    /// Append an immutable audit event.\n    AppendEvent(LaborEvent),\n    /// Insert or replace an open bounty offer.\n    PutOffer(Box<BountyOffer>),\n    /// Insert or replace an open bounty claim.\n    PutClaim(Box<BountyClaim>),\n    /// Write the claimant+deliverable replay guard for a claim.\n    IndexClaim {\n        offer_id: String,\n        claimant_did: String,\n        deliverable_hash: String,\n        claim_id: String,\n    },\n    /// Write deterministic per-offer claim ordering.\n    IndexOfferClaim {\n        offer_id: String,\n        claim_sequence: u32,\n        claim_id: String,\n    },\n    /// Insert or replace a claim attestation and its claim index.\n    PutClaimAttestation(Box<ClaimAttestation>),\n}",
              "docs": "An individual operation inside a [`LaborWriteBatch`].",
              "attributes": "#[derive(Clone)]",
              "line": 1021
            },
            {
              "name": "labor_durable::LaborWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct LaborWriteBatch {\n\n}",
              "docs": "Write batch accumulating all mutations for a single labor state transition.\n\nBuild the batch inside the transaction handler, then pass it to\n[`crate::executor::ExecutionState::commit_labor_tx`]. A crash before\n`commit_labor_tx` returns leaves zero partial state on disk \u2014 eliminating\nthe create_contract fund-loss window and milestone_release double-pay window.",
              "attributes": "#[derive(Default)]",
              "line": 1085
            },
            {
              "name": "labor_durable::LaborWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "",
              "line": 1091
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_job",
              "kind": "function_item",
              "signature": "pub fn put_job(&mut self, job: LaborJob);",
              "docs": "Queue a job posting write.",
              "attributes": "",
              "line": 1096
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_bid",
              "kind": "function_item",
              "signature": "pub fn put_bid(&mut self, bid: LaborBid);",
              "docs": "Queue a bid write.",
              "attributes": "",
              "line": 1101
            },
            {
              "name": "labor_durable::LaborWriteBatch::index_job_bid",
              "kind": "function_item",
              "signature": "pub fn index_job_bid(&mut self, job_id: impl Into<String>, bid_id: impl Into<String>);",
              "docs": "Queue a job\u2192bid index write.",
              "attributes": "",
              "line": 1106
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_contract",
              "kind": "function_item",
              "signature": "pub fn put_contract(&mut self, contract: LaborContract);",
              "docs": "Queue a contract record write.",
              "attributes": "",
              "line": 1114
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_milestone",
              "kind": "function_item",
              "signature": "pub fn put_milestone(&mut self, contract_id: impl Into<String>, milestone: Milestone);",
              "docs": "Queue a milestone write for `contract_id`.",
              "attributes": "",
              "line": 1119
            },
            {
              "name": "labor_durable::LaborWriteBatch::index_worker",
              "kind": "function_item",
              "signature": "pub fn index_worker(&mut self, worker_did: impl Into<String>, contract_id: impl Into<String>);",
              "docs": "Queue a worker\u2192contract index write.",
              "attributes": "",
              "line": 1127
            },
            {
              "name": "labor_durable::LaborWriteBatch::index_dispute",
              "kind": "function_item",
              "signature": "pub fn index_dispute(&mut self, dispute_id: impl Into<String>, contract_id: impl Into<String>);",
              "docs": "Queue a dispute_id \u2192 contract_id index write.",
              "attributes": "",
              "line": 1135
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_dispute",
              "kind": "function_item",
              "signature": "pub fn put_dispute(&mut self, dispute: Dispute);",
              "docs": "Queue a full dispute record write.",
              "attributes": "",
              "line": 1143
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_escrow",
              "kind": "function_item",
              "signature": "pub fn put_escrow(&mut self, escrow: LaborEscrow);",
              "docs": "Queue an escrow accounting write.",
              "attributes": "",
              "line": 1148
            },
            {
              "name": "labor_durable::LaborWriteBatch::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&mut self, event: LaborEvent);",
              "docs": "Queue an audit event append.",
              "attributes": "",
              "line": 1153
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_offer",
              "kind": "function_item",
              "signature": "pub fn put_offer(&mut self, offer: BountyOffer);",
              "docs": "Queue an open bounty offer write.",
              "attributes": "",
              "line": 1158
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_claim",
              "kind": "function_item",
              "signature": "pub fn put_claim(&mut self, claim: BountyClaim);",
              "docs": "Queue an open bounty claim write.",
              "attributes": "",
              "line": 1163
            },
            {
              "name": "labor_durable::LaborWriteBatch::index_claim",
              "kind": "function_item",
              "signature": "pub fn index_claim(\n        &mut self,\n        offer_id: impl Into<String>,\n        claimant_did: impl Into<String>,\n        deliverable_hash: impl Into<String>,\n        claim_id: impl Into<String>,\n    );",
              "docs": "Queue the claimant+deliverable replay guard.",
              "attributes": "",
              "line": 1168
            },
            {
              "name": "labor_durable::LaborWriteBatch::index_offer_claim",
              "kind": "function_item",
              "signature": "pub fn index_offer_claim(\n        &mut self,\n        offer_id: impl Into<String>,\n        claim_sequence: u32,\n        claim_id: impl Into<String>,\n    );",
              "docs": "Queue deterministic per-offer claim ordering.",
              "attributes": "",
              "line": 1184
            },
            {
              "name": "labor_durable::LaborWriteBatch::put_claim_attestation",
              "kind": "function_item",
              "signature": "pub fn put_claim_attestation(&mut self, attestation: ClaimAttestation);",
              "docs": "Queue a claim attestation write.",
              "attributes": "",
              "line": 1198
            },
            {
              "name": "labor_durable::LaborWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued.",
              "attributes": "",
              "line": 1204
            },
            {
              "name": "labor_durable::LaborWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "",
              "line": 1209
            },
            {
              "name": "labor_durable::LaborWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<LaborBatchOp>;",
              "docs": "Consume the batch and return the inner op list.",
              "attributes": "",
              "line": 1214
            }
          ],
          "parseErrors": false
        },
        {
          "module": "logging",
          "source": "sigil/node/sigil-node/src/logging.rs",
          "sha256": "9b239c22d4f4685b1db0edff6d11e9e9fdfc29239d324a1ea9460680a7c9aa55",
          "attributes": "",
          "items": [
            {
              "name": "logging::print_banner",
              "kind": "function_item",
              "signature": "pub fn print_banner(version: &str);",
              "docs": "Print the SIGIL ASCII art banner and version string.\n\nSilently skipped when stdout is not a terminal (e.g. piped to a file).",
              "attributes": "",
              "line": 38
            },
            {
              "name": "logging::section",
              "kind": "function_item",
              "signature": "pub fn section(title: &str);",
              "docs": "Print a section header with a green bullet.\n\n```text\n  \u25cf Loading genesis\n```",
              "attributes": "",
              "line": 58
            },
            {
              "name": "logging::item",
              "kind": "function_item",
              "signature": "pub fn item(label: &str, value: &str);",
              "docs": "Print a tree item (non-last).\n\n```text\n    \u251c\u2500 Chain ID            sigil-testnet-1\n```",
              "attributes": "",
              "line": 67
            },
            {
              "name": "logging::last_item",
              "kind": "function_item",
              "signature": "pub fn last_item(label: &str, value: &str);",
              "docs": "Print the last tree item.\n\n```text\n    \u2514\u2500 Data Directory      /tmp/sigil-testnet\n```",
              "attributes": "",
              "line": 76
            },
            {
              "name": "logging::success",
              "kind": "function_item",
              "signature": "pub fn success(msg: &str);",
              "docs": "Print a success message with a green checkmark.\n\n```text\n  \u2713 Genesis loaded\n```",
              "attributes": "",
              "line": 85
            },
            {
              "name": "logging::subsystem_ok",
              "kind": "function_item",
              "signature": "pub fn subsystem_ok(label: &str, detail: &str);",
              "docs": "Print a subsystem that started successfully (non-last).\n\n```text\n    \u251c\u2500 \u2713 Mempool (capacity: 10,000 txs)\n```",
              "attributes": "",
              "line": 96
            },
            {
              "name": "logging::subsystem_ok_last",
              "kind": "function_item",
              "signature": "pub fn subsystem_ok_last(label: &str, detail: &str);",
              "docs": "Print the last subsystem that started successfully.\n\n```text\n    \u2514\u2500 \u2713 Block production (enabled)\n```",
              "attributes": "",
              "line": 107
            },
            {
              "name": "logging::subsystem_skip",
              "kind": "function_item",
              "signature": "pub fn subsystem_skip(label: &str, reason: &str);",
              "docs": "Print a skipped/disabled subsystem (always last).\n\n```text\n    \u2514\u2500 \u25cb Block production (rpc mode)\n```",
              "attributes": "",
              "line": 118
            },
            {
              "name": "logging::ready",
              "kind": "function_item",
              "signature": "pub fn ready();",
              "docs": "Print the \"node ready\" banner with double-line dividers.",
              "attributes": "",
              "line": 123
            },
            {
              "name": "logging::shutdown_begin",
              "kind": "function_item",
              "signature": "pub fn shutdown_begin();",
              "docs": "Print shutdown header.",
              "attributes": "",
              "line": 133
            },
            {
              "name": "logging::shutdown_complete",
              "kind": "function_item",
              "signature": "pub fn shutdown_complete();",
              "docs": "Print shutdown complete message.",
              "attributes": "",
              "line": 139
            },
            {
              "name": "logging::format_number",
              "kind": "function_item",
              "signature": "pub fn format_number(n: u64) -> String;",
              "docs": "Format a u64 with comma separators (e.g. `1,234,567`).",
              "attributes": "",
              "line": 147
            },
            {
              "name": "logging::init_tracing",
              "kind": "function_item",
              "signature": "pub fn init_tracing(log_level: &str);",
              "docs": "Initialize the `tracing` subscriber with a compact, colored format.\n\nRespects the `RUST_LOG` environment variable if set; otherwise falls\nback to the provided `log_level` (e.g. \"info\", \"debug\", \"trace\").",
              "attributes": "",
              "line": 170
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mail_durable",
          "source": "sigil/node/sigil-node/src/mail_durable.rs",
          "sha256": "d3fc8654dda4fed777e4aebb1fab38b3dc7cd285e2a429b449718b9e2fe63ca4",
          "attributes": "",
          "items": [
            {
              "name": "mail_durable::ArcMailStore",
              "kind": "type_item",
              "signature": "pub type ArcMailStore = Arc<DurableMailStore>;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "mail_durable::MailEvent",
              "kind": "struct_item",
              "signature": "pub struct MailEvent {\npub block_height: u64,\npub seq: u64,\npub topic: String,\npub actor_did: String,\npub mailbox_id: Option<String>,\npub name: Option<String>,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 83
            },
            {
              "name": "mail_durable::MailBatchOp",
              "kind": "enum_item",
              "signature": "pub enum MailBatchOp {\n    PutMailbox(Arc<MailboxCapabilityRecord>),\n    IndexOwner {\n        owner_did: String,\n        mailbox_id: String,\n    },\n    IndexWallet {\n        wallet_address: String,\n        mailbox_id: String,\n    },\n    PutAlias(Arc<MailAliasRecord>),\n    PutPolicy(Arc<MailboxPolicyRecord>),\n    SetCurrentPolicy {\n        mailbox_id: String,\n        version: u64,\n    },\n    PutKey(Arc<MailPublicKeyRecord>),\n    SetCurrentKey {\n        mailbox_id: String,\n        purpose: String,\n        device_commitment: String,\n        key_id: String,\n    },\n    PutDelivery(Arc<DeliveryCommitmentRecord>),\n    IndexDeliveryRecipient {\n        mailbox_id: String,\n        height: u64,\n        delivery_id: String,\n    },\n    IndexDeliverySender {\n        sender_route_id: String,\n        height: u64,\n        delivery_id: String,\n    },\n    PutEconomics(Arc<SenderEconomicsRecord>),\n    PutDelegation(Arc<MailDelegationGrant>),\n    IndexDelegationMailbox {\n        mailbox_id: String,\n        grant_id: String,\n    },\n    PutAbuse(Arc<AbuseReport>),\n    PutSnsName(Arc<SnsNameRecord>),\n    IndexSnsOwner {\n        owner_did: String,\n        name_hash: String,\n    },\n    SetSnsPrimary {\n        subject_did: String,\n        name_hash: String,\n    },\n    PutSnsRecord(Arc<SnsResolverRecord>),\n    DeleteSnsRecord {\n        name_hash: String,\n        kind: String,\n    },\n    PutSnsDelegation(Arc<NameDelegation>),\n    PutSnsRegistrationCommitment(Arc<SnsNameRegistrationCommitment>),\n    PutSnsSealedBid(Arc<SnsSealedBidCommitment>),\n    PutSnsAuction(Arc<SnsAuctionRecord>),\n    PutNonce {\n        actor_did: String,\n        nonce: String,\n    },\n    AppendEvent(Arc<MailEvent>),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 94
            },
            {
              "name": "mail_durable::MailWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct MailWriteBatch {\npub ops: Vec<MailBatchOp>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default, Clone)]",
              "line": 161
            },
            {
              "name": "mail_durable::MailWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 166
            },
            {
              "name": "mail_durable::MailWriteBatch::push",
              "kind": "function_item",
              "signature": "pub fn push(&mut self, op: MailBatchOp);",
              "docs": "",
              "attributes": "",
              "line": 170
            },
            {
              "name": "mail_durable::DurableMailStore",
              "kind": "struct_item",
              "signature": "pub struct DurableMailStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 198
            },
            {
              "name": "mail_durable::DurableMailStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 204
            },
            {
              "name": "mail_durable::DurableMailStore::get_mailbox",
              "kind": "function_item",
              "signature": "pub fn get_mailbox(\n        &self,\n        mailbox_id: &str,\n    ) -> Result<Option<MailboxCapabilityRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 258
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_mailboxes",
              "kind": "function_item",
              "signature": "pub fn list_all_mailboxes(&self) -> Result<Vec<MailboxCapabilityRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_aliases",
              "kind": "function_item",
              "signature": "pub fn list_all_aliases(&self) -> Result<Vec<MailAliasRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 276
            },
            {
              "name": "mail_durable::DurableMailStore::list_mailboxes_by_owner",
              "kind": "function_item",
              "signature": "pub fn list_mailboxes_by_owner(\n        &self,\n        subject_did: &str,\n    ) -> Result<Vec<MailboxCapabilityRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 285
            },
            {
              "name": "mail_durable::DurableMailStore::get_policy",
              "kind": "function_item",
              "signature": "pub fn get_policy(\n        &self,\n        mailbox_id: &str,\n        version: Option<u64>,\n    ) -> Result<Option<MailboxPolicyRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 302
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_policies",
              "kind": "function_item",
              "signature": "pub fn list_all_policies(&self) -> Result<Vec<MailboxPolicyRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 328
            },
            {
              "name": "mail_durable::DurableMailStore::list_keys",
              "kind": "function_item",
              "signature": "pub fn list_keys(\n        &self,\n        mailbox_id: &str,\n        purpose: Option<&str>,\n    ) -> Result<Vec<MailPublicKeyRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 337
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_keys",
              "kind": "function_item",
              "signature": "pub fn list_all_keys(&self) -> Result<Vec<MailPublicKeyRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 354
            },
            {
              "name": "mail_durable::DurableMailStore::get_key",
              "kind": "function_item",
              "signature": "pub fn get_key(\n        &self,\n        mailbox_id: &str,\n        key_id: &str,\n    ) -> Result<Option<MailPublicKeyRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 363
            },
            {
              "name": "mail_durable::DurableMailStore::get_delivery",
              "kind": "function_item",
              "signature": "pub fn get_delivery(\n        &self,\n        delivery_id: &str,\n    ) -> Result<Option<DeliveryCommitmentRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 373
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_deliveries",
              "kind": "function_item",
              "signature": "pub fn list_all_deliveries(&self) -> Result<Vec<DeliveryCommitmentRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 382
            },
            {
              "name": "mail_durable::DurableMailStore::list_deliveries_by_recipient",
              "kind": "function_item",
              "signature": "pub fn list_deliveries_by_recipient(\n        &self,\n        mailbox_id: &str,\n    ) -> Result<Vec<DeliveryCommitmentRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 391
            },
            {
              "name": "mail_durable::DurableMailStore::list_deliveries_by_sender",
              "kind": "function_item",
              "signature": "pub fn list_deliveries_by_sender(\n        &self,\n        sender_route_id: &str,\n    ) -> Result<Vec<DeliveryCommitmentRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 398
            },
            {
              "name": "mail_durable::DurableMailStore::get_economics",
              "kind": "function_item",
              "signature": "pub fn get_economics(\n        &self,\n        sender_route_id: &str,\n        recipient_mailbox_id: &str,\n    ) -> Result<Option<SenderEconomicsRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 421
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_economics",
              "kind": "function_item",
              "signature": "pub fn list_all_economics(&self) -> Result<Vec<SenderEconomicsRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 434
            },
            {
              "name": "mail_durable::DurableMailStore::get_delegation",
              "kind": "function_item",
              "signature": "pub fn get_delegation(&self, grant_id: &str) -> Result<Option<MailDelegationGrant>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 443
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_delegations",
              "kind": "function_item",
              "signature": "pub fn list_all_delegations(&self) -> Result<Vec<MailDelegationGrant>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 449
            },
            {
              "name": "mail_durable::DurableMailStore::list_delegations",
              "kind": "function_item",
              "signature": "pub fn list_delegations(\n        &self,\n        mailbox_id: &str,\n    ) -> Result<Vec<MailDelegationGrant>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 458
            },
            {
              "name": "mail_durable::DurableMailStore::get_abuse",
              "kind": "function_item",
              "signature": "pub fn get_abuse(&self, abuse_id: &str) -> Result<Option<AbuseReport>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 476
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_abuse",
              "kind": "function_item",
              "signature": "pub fn list_all_abuse(&self) -> Result<Vec<AbuseReport>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 482
            },
            {
              "name": "mail_durable::DurableMailStore::has_nonce",
              "kind": "function_item",
              "signature": "pub fn has_nonce(&self, actor_did: &str, nonce: &str) -> Result<bool, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 491
            },
            {
              "name": "mail_durable::DurableMailStore::get_sns_name",
              "kind": "function_item",
              "signature": "pub fn get_sns_name(&self, name_hash: &str) -> Result<Option<SnsNameRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 497
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_names",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_names(&self) -> Result<Vec<SnsNameRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 503
            },
            {
              "name": "mail_durable::DurableMailStore::get_sns_records",
              "kind": "function_item",
              "signature": "pub fn get_sns_records(&self, name_hash: &str) -> Result<Vec<SnsResolverRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 512
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_records",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_records(&self) -> Result<Vec<SnsResolverRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 522
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_delegations",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_delegations(&self) -> Result<Vec<NameDelegation>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 531
            },
            {
              "name": "mail_durable::DurableMailStore::get_sns_registration_commitment",
              "kind": "function_item",
              "signature": "pub fn get_sns_registration_commitment(\n        &self,\n        commitment: &str,\n    ) -> Result<Option<SnsNameRegistrationCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 540
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_registration_commitments",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_registration_commitments(\n        &self,\n    ) -> Result<Vec<SnsNameRegistrationCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 549
            },
            {
              "name": "mail_durable::DurableMailStore::get_sns_sealed_bid",
              "kind": "function_item",
              "signature": "pub fn get_sns_sealed_bid(\n        &self,\n        commitment: &str,\n    ) -> Result<Option<SnsSealedBidCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 560
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_sealed_bids",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_sealed_bids(&self) -> Result<Vec<SnsSealedBidCommitment>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 569
            },
            {
              "name": "mail_durable::DurableMailStore::get_sns_auction",
              "kind": "function_item",
              "signature": "pub fn get_sns_auction(&self, auction_id: &str) -> Result<Option<SnsAuctionRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 578
            },
            {
              "name": "mail_durable::DurableMailStore::list_all_sns_auctions",
              "kind": "function_item",
              "signature": "pub fn list_all_sns_auctions(&self) -> Result<Vec<SnsAuctionRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 584
            },
            {
              "name": "mail_durable::DurableMailStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &MailWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 593
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mempool",
          "source": "sigil/node/sigil-node/src/mempool.rs",
          "sha256": "c555aae6b9ab47f89fb78cd0c50fd8afeb0fb78b8eadfaedbf5844f148e0446f",
          "attributes": "",
          "items": [
            {
              "name": "mempool::MAX_MEMPOOL_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_MEMPOOL_SIZE: usize;",
              "docs": "Maximum number of transactions the mempool will hold.",
              "attributes": "",
              "line": 13
            },
            {
              "name": "mempool::DEFAULT_MAX_TX_BYTES",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_TX_BYTES: usize;",
              "docs": "Default maximum serialized transaction size: 256 KiB.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "mempool::DEFAULT_MAX_MEMPOOL_BYTES",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_MEMPOOL_BYTES: usize;",
              "docs": "Default total serialized mempool memory cap: 256 MiB.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "mempool::DEFAULT_MIN_GAS_PRICE",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MIN_GAS_PRICE: u64;",
              "docs": "Default minimum gas price accepted into the mempool.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "mempool::DEFAULT_PER_SENDER_TX_PER_WINDOW",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PER_SENDER_TX_PER_WINDOW: u32;",
              "docs": "Default per-sender admission rate in a one-second window.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "mempool::DEFAULT_PER_SENDER_IN_FLIGHT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PER_SENDER_IN_FLIGHT: usize;",
              "docs": "Default per-sender in-flight transaction cap.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "mempool::DEFAULT_RATE_WINDOW",
              "kind": "const_item",
              "signature": "pub const DEFAULT_RATE_WINDOW: Duration;",
              "docs": "Default per-sender rate window.",
              "attributes": "",
              "line": 25
            },
            {
              "name": "mempool::DEFAULT_LOCAL_FEE_MARKET_HOT_ACCOUNT_THRESHOLD",
              "kind": "const_item",
              "signature": "pub const DEFAULT_LOCAL_FEE_MARKET_HOT_ACCOUNT_THRESHOLD: usize;",
              "docs": "Default local fee-market contention threshold per write-locked key.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "mempool::DEFAULT_LOCAL_FEE_MARKET_STEP",
              "kind": "const_item",
              "signature": "pub const DEFAULT_LOCAL_FEE_MARKET_STEP: u64;",
              "docs": "Default local fee-market gas-price increment per threshold step.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "mempool::MempoolConfig",
              "kind": "struct_item",
              "signature": "pub struct MempoolConfig {\n/// Chain ID the mempool accepts. `None` is only for legacy tests/tools.\n\npub expected_chain_id: Option<String>,\n/// Maximum transaction count.\n\npub max_transactions: usize,\n/// Maximum serialized transaction size.\n\npub max_tx_bytes: usize,\n/// Minimum accepted gas price.\n\npub min_gas_price: u64,\n/// Optional maximum gas limit for a single transaction.\n\npub max_tx_gas: Option<u64>,\n/// Per-sender accepted transaction count per `sender_rate_window`.\n\npub per_sender_tx_per_window: u32,\n/// Per-sender in-flight transaction cap.\n\npub per_sender_in_flight: usize,\n/// Total serialized transaction memory cap.\n\npub max_memory_bytes: usize,\n/// Per-sender admission rate window.\n\npub sender_rate_window: Duration,\n/// Enable per-write-key local fee floors.\n\npub local_fee_markets_enabled: bool,\n/// Number of in-flight txs touching the same local fee key before the\n\n/// account-local floor increases by one step.\n\npub local_fee_market_hot_account_threshold: usize,\n/// Gas-price increment per local fee-market threshold step.\n\npub local_fee_market_step: u64,\n/// Stake-weighted sender quota policy for validator/RPC ingress.\n\npub stake_weighted_ingress: StakeWeightedIngressConfig\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 41
            },
            {
              "name": "mempool::MempoolConfig::for_chain_with_block_time",
              "kind": "function_item",
              "signature": "pub fn for_chain_with_block_time(\n        chain_id: impl Into<String>,\n        target_block_time_ms: u64,\n    ) -> Self;",
              "docs": "Create a chain-bound mempool config whose sender admission window tracks\nthe configured block cadence. This keeps the default sender allowance at\n64 tx/sec while making accounting align with proposer drain cadence on\n1.0s/1.5s launch networks.",
              "attributes": "",
              "line": 96
            },
            {
              "name": "mempool::Mempool",
              "kind": "struct_item",
              "signature": "pub struct Mempool {\n\n}",
              "docs": "In-memory transaction pool with fee-ordered draining.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "mempool::Mempool::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty mempool.",
              "attributes": "",
              "line": 182
            },
            {
              "name": "mempool::Mempool::for_chain",
              "kind": "function_item",
              "signature": "pub fn for_chain(chain_id: impl Into<String>) -> Self;",
              "docs": "Create a new mempool bound to a specific chain ID.",
              "attributes": "",
              "line": 187
            },
            {
              "name": "mempool::Mempool::for_chain_with_block_time",
              "kind": "function_item",
              "signature": "pub fn for_chain_with_block_time(\n        chain_id: impl Into<String>,\n        target_block_time_ms: u64,\n    ) -> Self;",
              "docs": "Create a chain-bound mempool whose sender admission window matches the\nconfigured block time.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "mempool::Mempool::with_config",
              "kind": "function_item",
              "signature": "pub fn with_config(config: MempoolConfig) -> Self;",
              "docs": "Create a new mempool with explicit admission limits.",
              "attributes": "",
              "line": 208
            },
            {
              "name": "mempool::Mempool::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&mut self, tx: SignedTransaction) -> Result<(), NodeError>;",
              "docs": "Insert a transaction into the mempool.\n\nReturns an error if the mempool is full or the transaction is a duplicate.\nNote: `tx_hash()` returns `Result<SigilHash, CoreError>` after Task 3 changes.",
              "attributes": "",
              "line": 229
            },
            {
              "name": "mempool::Mempool::insert_with_sender_stake",
              "kind": "function_item",
              "signature": "pub fn insert_with_sender_stake(\n        &mut self,\n        tx: SignedTransaction,\n        sender_effective_stake: u64,\n    ) -> Result<(), NodeError>;",
              "docs": "Insert a transaction with the sender's effective validator stake.\n\nValidator RPC ingress calls this so staked senders receive deterministic\nquota priority under flood. Plain `insert` remains available for tests\nand transports that have not supplied stake metadata yet.",
              "attributes": "",
              "line": 238
            },
            {
              "name": "mempool::Mempool::requeue_transactions",
              "kind": "function_item",
              "signature": "pub fn requeue_transactions<I>(&mut self, txs: I) -> Result<usize, NodeError>\n    where\n        I: IntoIterator<Item = SignedTransaction>,;",
              "docs": "Requeue transactions that were already admitted and drained for a local\nproposal that did not finalize.\n\nRequeue still enforces chain ID, size, gas-price, signature, nonce, and\nmemory limits, but it does not count against the fresh-submission rate\nwindow because these transactions already paid that admission cost.\nDuplicate hashes are skipped because another path may already have\nrestored the same transaction.",
              "attributes": "",
              "line": 255
            },
            {
              "name": "mempool::Mempool::remove",
              "kind": "function_item",
              "signature": "pub fn remove(&mut self, hash: &SigilHash);",
              "docs": "Remove a transaction by hash.",
              "attributes": "",
              "line": 405
            },
            {
              "name": "mempool::Mempool::drain_for_block",
              "kind": "function_item",
              "signature": "pub fn drain_for_block(&mut self, max_gas: u64) -> Vec<SignedTransaction>;",
              "docs": "Drain transactions for block production.\n\nSelection preserves per-sender nonce order by only considering each\nsender's next nonce as a candidate. Across candidate senders it chooses\nhigher fee first, with transaction hash as the deterministic tie-break.\n\nReturns up to `max_gas` worth of transactions.",
              "attributes": "",
              "line": 523
            },
            {
              "name": "mempool::Mempool::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Returns the number of transactions in the mempool.",
              "attributes": "",
              "line": 625
            },
            {
              "name": "mempool::Mempool::current_bytes",
              "kind": "function_item",
              "signature": "pub fn current_bytes(&self) -> usize;",
              "docs": "Returns approximate serialized transaction bytes currently held.",
              "attributes": "",
              "line": 630
            },
            {
              "name": "mempool::Mempool::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns true if the mempool is empty.",
              "attributes": "",
              "line": 635
            },
            {
              "name": "mempool::Mempool::contains",
              "kind": "function_item",
              "signature": "pub fn contains(&self, hash: &SigilHash) -> bool;",
              "docs": "Returns true if the mempool contains a transaction with the given hash.",
              "attributes": "",
              "line": 640
            },
            {
              "name": "mempool::Mempool::local_fee_floor",
              "kind": "function_item",
              "signature": "pub fn local_fee_floor(&self, account: &str) -> u64;",
              "docs": "Current account-local admission floor for a write-locked key.",
              "attributes": "",
              "line": 645
            },
            {
              "name": "mempool::Mempool::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, hash: &SigilHash) -> Option<&SignedTransaction>;",
              "docs": "Returns the transaction with the given hash, if present.",
              "attributes": "",
              "line": 653
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/node/sigil-node/src/metrics.rs",
          "sha256": "bcf1a6b4ba89d75b14520d279d1b3ead20f924a29619219019381e0f2d9e1e8d",
          "attributes": "",
          "items": [
            {
              "name": "metrics::REGISTRY",
              "kind": "static_item",
              "signature": "pub static REGISTRY: Lazy<Registry>;",
              "docs": "Global metrics registry. Cloned cheaply via `Arc` semantics inside\n`prometheus::Registry`; one process-wide instance is sufficient.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "metrics::CURRENT_HEIGHT",
              "kind": "static_item",
              "signature": "pub static CURRENT_HEIGHT: Lazy<IntGauge>;",
              "docs": "Local block height as observed by this node's persistent block store.",
              "attributes": "",
              "line": 50
            },
            {
              "name": "metrics::HIGHEST_KNOWN_HEIGHT",
              "kind": "static_item",
              "signature": "pub static HIGHEST_KNOWN_HEIGHT: Lazy<IntGauge>;",
              "docs": "Highest peer-reported height observed via libp2p block-sync.\n\nUntil Agent 05 D5 wires the peer-height path, this gauge mirrors\n`CURRENT_HEIGHT` and `peer_height_available` is exposed separately\nin `sigil_getSyncStatus` so consumers can detect the limitation.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "metrics::SYNC_STATE",
              "kind": "static_item",
              "signature": "pub static SYNC_STATE: Lazy<IntGaugeVec>;",
              "docs": "Sync state as a one-hot gauge by `state` label.\n\nExactly one of `synced|syncing|halted` is `1` at any moment; the\nothers are `0`. Alertmanager rules key on `synced{state=\"halted\"}`.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "metrics::LAST_BLOCK_TIME_SECS",
              "kind": "static_item",
              "signature": "pub static LAST_BLOCK_TIME_SECS: Lazy<IntGauge>;",
              "docs": "Unix timestamp (seconds) of the most recent finalized block.\n\nSet by `record_block_finalized`. The `/health` probe compares\n`now() - LAST_BLOCK_TIME_SECS` against `5 \u00d7 TARGET_BLOCK_TIME_SECS`\nto decide whether the node is healthy. `0` means no block has\nbeen finalized yet (or the engine has not booted).",
              "attributes": "",
              "line": 106
            },
            {
              "name": "metrics::TARGET_BLOCK_TIME_SECS",
              "kind": "static_item",
              "signature": "pub static TARGET_BLOCK_TIME_SECS: Lazy<Gauge>;",
              "docs": "Configured target block time, in seconds, from genesis.\n\nSet once at node startup from `genesis.params.target_block_time_seconds()`.\nRead by `/health` to compute the staleness tolerance window.",
              "attributes": "",
              "line": 122
            },
            {
              "name": "metrics::BLOCK_PRODUCTION_DURATION_SECONDS",
              "kind": "static_item",
              "signature": "pub static BLOCK_PRODUCTION_DURATION_SECONDS: Lazy<Gauge>;",
              "docs": "Observed interval, in seconds, between the two most recent block\ntimestamp updates seen by this process.\n\nValidators update this on finalized blocks; RPC pods update it on\nimported blocks. It is intentionally process-local because the alert\nanswers \"is this pod seeing blocks at the expected cadence?\".",
              "attributes": "",
              "line": 140
            },
            {
              "name": "metrics::BLOCKS_FINALIZED_TOTAL",
              "kind": "static_item",
              "signature": "pub static BLOCKS_FINALIZED_TOTAL: Lazy<prometheus::IntCounter>;",
              "docs": "Total finalized blocks since process start.",
              "attributes": "",
              "line": 153
            },
            {
              "name": "metrics::BLOCKS_IMPORTED_TOTAL",
              "kind": "static_item",
              "signature": "pub static BLOCKS_IMPORTED_TOTAL: Lazy<prometheus::IntCounter>;",
              "docs": "Total blocks imported from peers via the RPC archive-sync loop.\n\nDistinct from `BLOCKS_FINALIZED_TOTAL` (which the engine\nincrements on locally-produced blocks) because RPC pods do not\nfinalize \u2014 they import. Operators correlate this against\n`BLOCKS_FINALIZED_TOTAL` on validators to spot sync drift.",
              "attributes": "",
              "line": 171
            },
            {
              "name": "metrics::PEER_COUNT",
              "kind": "static_item",
              "signature": "pub static PEER_COUNT: Lazy<IntGauge>;",
              "docs": "Number of peers the sync task observed responding successfully on\nthe most recent tick. Zero means we are running blind.",
              "attributes": "",
              "line": 185
            },
            {
              "name": "metrics::PEER_HEIGHT_AVAILABLE",
              "kind": "static_item",
              "signature": "pub static PEER_HEIGHT_AVAILABLE: Lazy<IntGauge>;",
              "docs": "`1` once the sync task has observed at least one peer-reported\nheight; `0` otherwise. Surfaced in `sigil_getSyncStatus` as\n`peer_height_available` so callers can detect the limitation\nwithout parsing free-form text.",
              "attributes": "",
              "line": 201
            },
            {
              "name": "metrics::record_block_finalized",
              "kind": "function_item",
              "signature": "pub fn record_block_finalized(height: u64, now_secs: u64);",
              "docs": "Update height gauges and the last-block timestamp.\n\nCalled once per finalized block from `engine::persist_and_advance`.\n`now_secs` is the unix timestamp at which the block was committed;\npassing it explicitly makes the operation deterministic for tests\n(callers in production use `SystemTime::now`).",
              "attributes": "",
              "line": 219
            },
            {
              "name": "metrics::record_block_imported",
              "kind": "function_item",
              "signature": "pub fn record_block_imported(height: u64, now_secs: u64);",
              "docs": "Update height gauges + counters when an RPC pod imports a block\nfrom a peer via the archive-sync loop. Distinct from\n`record_block_finalized` because the RPC sync path does NOT\nre-execute transactions; the executor's `ExecutionState` stays at\ngenesis (this is a known Phase 1 limitation, documented in\n`rpc_sync.rs`). The sync task itself owns the `SYNC_STATE`\nlabel \u2014 this helper does not flip it because catching up is a\nprocess, not an event.",
              "attributes": "",
              "line": 238
            },
            {
              "name": "metrics::init_target_block_time",
              "kind": "function_item",
              "signature": "pub fn init_target_block_time(secs: f64);",
              "docs": "Set the configured target block time at startup.",
              "attributes": "",
              "line": 257
            },
            {
              "name": "metrics::block_production_staleness",
              "kind": "function_item",
              "signature": "pub fn block_production_staleness(now_secs: u64) -> (bool, i64, f64);",
              "docs": "Snapshot of the staleness probe used by `/health`.\n\nReturns `(stale, last_block_age_secs, target_block_time_seconds)`.\n`stale` is `true` if no block has been finalized in the last\n`5 \u00d7 target_block_time_seconds`. The 5-block window matches\n`SYNC_TOLERANCE_BLOCKS_DEFAULT` so `/health` and\n`sigil_getSyncStatus` agree on what \"behind\" means.",
              "attributes": "",
              "line": 268
            },
            {
              "name": "metrics::block_production_staleness_with_fallback",
              "kind": "function_item",
              "signature": "pub fn block_production_staleness_with_fallback(\n    now_secs: u64,\n    persisted_latest_block_time_secs: Option<u64>,\n) -> (bool, i64, f64);",
              "docs": "Snapshot of the staleness probe with a persisted latest block timestamp fallback.\n\nProcess-local gauges start empty after restart. When a node restarts with a\nnon-empty block store but has not finalized a fresh block yet, callers can\npass the persisted tip timestamp so `/health` still reports a stale chain.",
              "attributes": "",
              "line": 277
            },
            {
              "name": "metrics::MEMPOOL_SIZE",
              "kind": "static_item",
              "signature": "pub static MEMPOOL_SIZE: Lazy<IntGauge>;",
              "docs": "Number of transactions currently held in the mempool.",
              "attributes": "",
              "line": 299
            },
            {
              "name": "metrics::MEMPOOL_ADMIT_TOTAL",
              "kind": "static_item",
              "signature": "pub static MEMPOOL_ADMIT_TOTAL: Lazy<IntCounterVec>;",
              "docs": "Mempool admission outcomes by reason.\n\n`result` is enum-bounded by `MempoolAdmitResult`.",
              "attributes": "",
              "line": 314
            },
            {
              "name": "metrics::MempoolAdmitResult",
              "kind": "enum_item",
              "signature": "pub enum MempoolAdmitResult {\n    Ok,\n    RejectChainId,\n    RejectSignature,\n    RejectMalformed,\n    RejectFull,\n}",
              "docs": "Bounded set of mempool-admit results emitted by `handle_send_transaction`.\n\nAdding a variant requires updating the cardinality budget in\n`docs/launch/agent-05/DESIGN.md` \u00a72.1.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 334
            },
            {
              "name": "metrics::MempoolAdmitResult::label",
              "kind": "function_item",
              "signature": "pub fn label(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 343
            },
            {
              "name": "metrics::record_mempool_admit",
              "kind": "function_item",
              "signature": "pub fn record_mempool_admit(result: MempoolAdmitResult);",
              "docs": "",
              "attributes": "",
              "line": 354
            },
            {
              "name": "metrics::RPC_REQUEST_TOTAL",
              "kind": "static_item",
              "signature": "pub static RPC_REQUEST_TOTAL: Lazy<IntCounterVec>;",
              "docs": "Total RPC requests by canonical method name and outcome.\n\n`method` is bounded by the canonical method table in\n`sigil-rpc::RpcMethod`. `result` is `ok|error|method_not_found`.",
              "attributes": "",
              "line": 368
            },
            {
              "name": "metrics::RPC_REQUEST_DURATION",
              "kind": "static_item",
              "signature": "pub static RPC_REQUEST_DURATION: Lazy<HistogramVec>;",
              "docs": "RPC request latency histogram by canonical method name.",
              "attributes": "",
              "line": 384
            },
            {
              "name": "metrics::RPC_REQUEST_ERRORS_TOTAL",
              "kind": "static_item",
              "signature": "pub static RPC_REQUEST_ERRORS_TOTAL: Lazy<prometheus::IntCounter>;",
              "docs": "Total RPC requests that returned an error response.\n\nThis single-series counter backs coarse production alerting. Method-\nlevel breakdown remains available via `sigil_rpc_request_total`.",
              "attributes": "",
              "line": 406
            },
            {
              "name": "metrics::RPC_RATE_LIMITED_TOTAL",
              "kind": "static_item",
              "signature": "pub static RPC_RATE_LIMITED_TOTAL: Lazy<IntCounterVec>;",
              "docs": "RPC requests rejected by the rate limiter (HTTP 429).\n\nWired by D4 hardening; exposed here so dashboards work the moment\nthe middleware lands. Until then this counter stays at 0.",
              "attributes": "",
              "line": 422
            },
            {
              "name": "metrics::record_rpc",
              "kind": "function_item",
              "signature": "pub fn record_rpc(method: &str, ok: bool, elapsed_secs: f64);",
              "docs": "Record an RPC request outcome and elapsed duration.\n\n`method` should be the *canonical* method name. Aliases must be\nnormalized at the dispatch boundary so cardinality stays bounded.",
              "attributes": "",
              "line": 441
            },
            {
              "name": "metrics::CONSENSUS_PROPOSAL_REJECT_TOTAL",
              "kind": "static_item",
              "signature": "pub static CONSENSUS_PROPOSAL_REJECT_TOTAL: Lazy<IntCounterVec>;",
              "docs": "Consensus proposals rejected before this validator signs a prevote.\n\n`reason` must be an enum-shaped label from Agent 01's `RejectedReason`;\nnever pass DIDs, hashes, or free-form error strings.",
              "attributes": "",
              "line": 460
            },
            {
              "name": "metrics::record_consensus_proposal_reject",
              "kind": "function_item",
              "signature": "pub fn record_consensus_proposal_reject(reason: &'static str);",
              "docs": "",
              "attributes": "",
              "line": 475
            },
            {
              "name": "metrics::CROSS_ZONE_DELIVERY_TOTAL",
              "kind": "static_item",
              "signature": "pub static CROSS_ZONE_DELIVERY_TOTAL: Lazy<IntCounterVec>;",
              "docs": "Cross-zone delivery outcomes by bounded result label.",
              "attributes": "",
              "line": 486
            },
            {
              "name": "metrics::CrossZoneDeliveryResult",
              "kind": "enum_item",
              "signature": "pub enum CrossZoneDeliveryResult {\n    Delivered,\n    Failed,\n    InvalidPayload,\n    SkippedInactiveZone,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 502
            },
            {
              "name": "metrics::CrossZoneDeliveryResult::label",
              "kind": "function_item",
              "signature": "pub fn label(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 510
            },
            {
              "name": "metrics::record_cross_zone_delivery",
              "kind": "function_item",
              "signature": "pub fn record_cross_zone_delivery(result: CrossZoneDeliveryResult);",
              "docs": "",
              "attributes": "",
              "line": 520
            },
            {
              "name": "metrics::BUILD_INFO",
              "kind": "static_item",
              "signature": "pub static BUILD_INFO: Lazy<IntGaugeVec>;",
              "docs": "Static gauge always set to 1, with build identity in labels.\n\n`version`, `commit`, `build_time` are bounded \u2014 there is exactly\none combination per binary.",
              "attributes": "",
              "line": 534
            },
            {
              "name": "metrics::init_build_info",
              "kind": "function_item",
              "signature": "pub fn init_build_info(version: &str, commit: &str, build_time: &str);",
              "docs": "Mark the build info gauge with this binary's version and commit.\nCall once at startup. Idempotent if called multiple times.",
              "attributes": "",
              "line": 551
            },
            {
              "name": "metrics::set_sync_state",
              "kind": "function_item",
              "signature": "pub fn set_sync_state(state: SyncStateLabel);",
              "docs": "Set the one-hot sync-state gauge.\n\nSets the named state to 1 and the other two to 0 atomically (well \u2014\nas atomically as three sequential `set` calls can be; transient\ndouble-zero windows during a state flip are acceptable for monitoring).",
              "attributes": "",
              "line": 574
            },
            {
              "name": "metrics::SyncStateLabel",
              "kind": "enum_item",
              "signature": "pub enum SyncStateLabel {\n    Synced,\n    Syncing,\n    Halted,\n}",
              "docs": "Bounded sync-state labels.\n\n`Halted` is reserved for the case where block production has not\nadvanced for `> halt_threshold * target_block_time_seconds`; wiring\nis owned by Agent 01's halt detector. Until then nodes flip\nbetween `Synced` and `Syncing` only.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 589
            },
            {
              "name": "metrics::SyncStateLabel::ALL",
              "kind": "const_item",
              "signature": "pub const ALL: &'static [Self];",
              "docs": "",
              "attributes": "",
              "line": 596
            },
            {
              "name": "metrics::SyncStateLabel::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 598
            },
            {
              "name": "metrics::render",
              "kind": "function_item",
              "signature": "pub fn render() -> Result<(String, &'static str), String>;",
              "docs": "Render the registry to Prometheus text format.\n\nReturns the rendered body and the canonical content-type header.\nErrors stringify any encoder failure rather than panic so a metrics\nscrape never crashes the node.",
              "attributes": "",
              "line": 616
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nft_durable",
          "source": "sigil/node/sigil-node/src/nft_durable.rs",
          "sha256": "47bdcd44a82496345acb259a2987af4f4d3ec60f4f21cb2fd987292750993d22",
          "attributes": "",
          "items": [
            {
              "name": "nft_durable::DurableNftStore",
              "kind": "struct_item",
              "signature": "pub struct DurableNftStore {\n\n}",
              "docs": "Durable NFT state store backed by AkashaKV.\n\nAll public methods are synchronous \u2014 they bridge into the async AkashaKV\nAPI via a dedicated tokio runtime. `block_on` uses a spawn+channel so it\nworks whether or not the caller is inside another tokio runtime.",
              "attributes": "",
              "line": 209
            },
            {
              "name": "nft_durable::DurableNftStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the NFT durable store at `path`.\n\nThe directory becomes the AkashaKV data root for all NFT records.\nMultiple `DurableNftStore` instances must NOT share the same path\nconcurrently.",
              "attributes": "",
              "line": 220
            },
            {
              "name": "nft_durable::DurableNftStore::put_collection",
              "kind": "function_item",
              "signature": "pub fn put_collection(&self, collection: &NftCollection) -> Result<(), NodeError>;",
              "docs": "Write (insert or replace) a collection record.",
              "attributes": "",
              "line": 300
            },
            {
              "name": "nft_durable::DurableNftStore::get_collection",
              "kind": "function_item",
              "signature": "pub fn get_collection(\n        &self,\n        collection_id: &CollectionId,\n    ) -> Result<Option<NftCollection>, NodeError>;",
              "docs": "Fetch a collection by id, or `None` if not found.",
              "attributes": "",
              "line": 307
            },
            {
              "name": "nft_durable::DurableNftStore::put_token",
              "kind": "function_item",
              "signature": "pub fn put_token(&self, token: &NftToken) -> Result<(), NodeError>;",
              "docs": "Write (insert or replace) a token record.",
              "attributes": "",
              "line": 321
            },
            {
              "name": "nft_durable::DurableNftStore::get_token",
              "kind": "function_item",
              "signature": "pub fn get_token(\n        &self,\n        collection_id: &CollectionId,\n        token_id: TokenId,\n    ) -> Result<Option<NftToken>, NodeError>;",
              "docs": "Fetch a single token, or `None` if not found.",
              "attributes": "",
              "line": 328
            },
            {
              "name": "nft_durable::DurableNftStore::delete_token",
              "kind": "function_item",
              "signature": "pub fn delete_token(\n        &self,\n        collection_id: &CollectionId,\n        token_id: TokenId,\n    ) -> Result<(), NodeError>;",
              "docs": "Delete a token record. No-op if the token does not exist.",
              "attributes": "",
              "line": 341
            },
            {
              "name": "nft_durable::DurableNftStore::put_owner_index",
              "kind": "function_item",
              "signature": "pub fn put_owner_index(&self, entry: &OwnerIndexEntry) -> Result<(), NodeError>;",
              "docs": "Write (insert or replace) an owner-index entry.",
              "attributes": "",
              "line": 353
            },
            {
              "name": "nft_durable::DurableNftStore::get_owner_index",
              "kind": "function_item",
              "signature": "pub fn get_owner_index(\n        &self,\n        owner_did: &str,\n        collection_id: &CollectionId,\n    ) -> Result<Option<OwnerIndexEntry>, NodeError>;",
              "docs": "Fetch the owner-index entry for `(owner_did, collection_id)`, or `None`.",
              "attributes": "",
              "line": 360
            },
            {
              "name": "nft_durable::DurableNftStore::delete_owner_index",
              "kind": "function_item",
              "signature": "pub fn delete_owner_index(\n        &self,\n        owner_did: &str,\n        collection_id: &CollectionId,\n    ) -> Result<(), NodeError>;",
              "docs": "Delete the owner-index entry for `(owner_did, collection_id)`.",
              "attributes": "",
              "line": 373
            },
            {
              "name": "nft_durable::DurableNftStore::list_owner_index",
              "kind": "function_item",
              "signature": "pub fn list_owner_index(\n        &self,\n        owner_did: &str,\n        limit: usize,\n        offset: usize,\n    ) -> Result<Vec<OwnerIndexEntry>, NodeError>;",
              "docs": "List all owner-index entries for `owner_did`, with optional pagination.\n\n`limit = 0` returns all entries. Results are key-sorted (lexicographic\nby collection_id) because AkashaKV returns keys in sorted order.",
              "attributes": "",
              "line": 386
            },
            {
              "name": "nft_durable::DurableNftStore::put_did_identity",
              "kind": "function_item",
              "signature": "pub fn put_did_identity(&self, index: &DidIdentityIndex) -> Result<(), NodeError>;",
              "docs": "Write (insert or replace) a DID-identity index record.",
              "attributes": "",
              "line": 410
            },
            {
              "name": "nft_durable::DurableNftStore::get_did_identity",
              "kind": "function_item",
              "signature": "pub fn get_did_identity(\n        &self,\n        subject_did: &str,\n    ) -> Result<Option<DidIdentityIndex>, NodeError>;",
              "docs": "Fetch the DID-identity index for `subject_did`, or `None`.",
              "attributes": "",
              "line": 417
            },
            {
              "name": "nft_durable::DurableNftStore::delete_did_identity",
              "kind": "function_item",
              "signature": "pub fn delete_did_identity(&self, subject_did: &str) -> Result<(), NodeError>;",
              "docs": "Delete the DID-identity index for `subject_did`.",
              "attributes": "",
              "line": 429
            },
            {
              "name": "nft_durable::DurableNftStore::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&self, event: &NftEvent) -> Result<u64, NodeError>;",
              "docs": "Append an NFT lifecycle event. The key is derived from\n`block_height`, `token_id`, and `tx_hash`, so repeated appends for\nthe same event are idempotent (last-write-wins on an identical key).\n\nReturns the number of events already present before this write as a\nmonotonic sequence number approximation.",
              "attributes": "",
              "line": 442
            },
            {
              "name": "nft_durable::DurableNftStore::list_events",
              "kind": "function_item",
              "signature": "pub fn list_events(\n        &self,\n        collection_id: Option<&CollectionId>,\n    ) -> Result<Vec<NftEvent>, NodeError>;",
              "docs": "List events, optionally filtered by `collection_id`. Results are\nin block-height order because the key encodes `block_height` as BE.",
              "attributes": "",
              "line": 458
            },
            {
              "name": "nft_durable::DurableNftStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of AkashaKV memtables to SSTables.\n\nUseful in tests that drop and reopen the store at the same path to\nverify durability without waiting for the background flush interval.",
              "attributes": "",
              "line": 479
            },
            {
              "name": "nft_durable::DurableNftStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "",
              "line": 486
            },
            {
              "name": "nft_durable::DurableNftStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &NftWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV\nMVCC transaction.\n\nAtomicity guarantee: if any individual operation fails (encoding error\nor storage error), the transaction is dropped (auto-aborted via `Drop`)\nbefore it can be committed, leaving zero partial state visible. Either\nevery operation in the batch lands or none of them do.",
              "attributes": "",
              "line": 501
            },
            {
              "name": "nft_durable::DurableNftStore::get_account_nonce",
              "kind": "function_item",
              "signature": "pub fn get_account_nonce(&self, sender_did: &str) -> Result<Option<u64>, NodeError>;",
              "docs": "Read the durable per-account nonce written by `commit_batch`. Returns\n`None` for accounts that have never executed an NFT transaction; the\ncaller is expected to fall back to other nonce sources (e.g. the\n`compute_durable` mirror used by Transfer txs) or to 0 for fresh\naccounts. Round-6 P0-I1 read path.",
              "attributes": "",
              "line": 606
            },
            {
              "name": "nft_durable::ArcNftStore",
              "kind": "type_item",
              "signature": "pub type ArcNftStore = Arc<DurableNftStore>;",
              "docs": "Reference-counted handle to a [`DurableNftStore`].",
              "attributes": "",
              "line": 628
            },
            {
              "name": "nft_durable::NftBatchOp",
              "kind": "enum_item",
              "signature": "pub enum NftBatchOp {\n    PutCollection(NftCollection),\n    PutToken(NftToken),\n    DeleteToken(CollectionId, TokenId),\n    PutOwnerIndex(OwnerIndexEntry),\n    RemoveOwnerIndex {\n        collection_id: CollectionId,\n        owner_did: String,\n        token_id: TokenId,\n    },\n    PutDidIdentity(DidIdentityIndex),\n    RemoveDidIdentity {\n        subject_did: String,\n        collection_id: CollectionId,\n        token_id: TokenId,\n    },\n    AppendEvent(NftEvent),\n}",
              "docs": "An individual operation inside a [`NftWriteBatch`].\n\nCloning is cheap because the inner domain types (`NftCollection`,\n`NftToken`, etc.) already derive `Clone`.",
              "attributes": "#[derive(Clone)]",
              "line": 639
            },
            {
              "name": "nft_durable::NftWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct NftWriteBatch {\n\n}",
              "docs": "A write batch that accumulates all mutations for a single NFT\nexecutor handler. Commit the batch via\n[`ExecutionState::commit_nft_tx`] at the end of the handler to\napply all mutations atomically.",
              "attributes": "#[derive(Default)]",
              "line": 663
            },
            {
              "name": "nft_durable::NftWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "",
              "line": 676
            },
            {
              "name": "nft_durable::NftWriteBatch::put_account_nonce",
              "kind": "function_item",
              "signature": "pub fn put_account_nonce(&mut self, sender_did: impl Into<String>, new_nonce: u64);",
              "docs": "Fold an atomic nonce update into the batch. The given `(sender_did,\nnew_nonce)` is committed inside the same AkashaKV transaction as the\nNFT ops, so on success both land together; on failure neither lands.\nRound-6 P0-I1: prevents the post-execution `put_nonce` race where\nstate could commit while the nonce write was lost to a crash.",
              "attributes": "",
              "line": 688
            },
            {
              "name": "nft_durable::NftWriteBatch::put_collection",
              "kind": "function_item",
              "signature": "pub fn put_collection(&mut self, col: NftCollection);",
              "docs": "",
              "attributes": "",
              "line": 692
            },
            {
              "name": "nft_durable::NftWriteBatch::put_token",
              "kind": "function_item",
              "signature": "pub fn put_token(&mut self, tok: NftToken);",
              "docs": "",
              "attributes": "",
              "line": 696
            },
            {
              "name": "nft_durable::NftWriteBatch::delete_token",
              "kind": "function_item",
              "signature": "pub fn delete_token(&mut self, collection_id: CollectionId, token_id: TokenId);",
              "docs": "",
              "attributes": "",
              "line": 700
            },
            {
              "name": "nft_durable::NftWriteBatch::put_owner_index",
              "kind": "function_item",
              "signature": "pub fn put_owner_index(&mut self, entry: OwnerIndexEntry);",
              "docs": "",
              "attributes": "",
              "line": 705
            },
            {
              "name": "nft_durable::NftWriteBatch::remove_owner_index",
              "kind": "function_item",
              "signature": "pub fn remove_owner_index(\n        &mut self,\n        collection_id: CollectionId,\n        owner_did: String,\n        token_id: TokenId,\n    );",
              "docs": "",
              "attributes": "",
              "line": 709
            },
            {
              "name": "nft_durable::NftWriteBatch::put_did_identity",
              "kind": "function_item",
              "signature": "pub fn put_did_identity(&mut self, idx: DidIdentityIndex);",
              "docs": "",
              "attributes": "",
              "line": 722
            },
            {
              "name": "nft_durable::NftWriteBatch::remove_did_identity",
              "kind": "function_item",
              "signature": "pub fn remove_did_identity(\n        &mut self,\n        subject_did: String,\n        collection_id: CollectionId,\n        token_id: TokenId,\n    );",
              "docs": "",
              "attributes": "",
              "line": 726
            },
            {
              "name": "nft_durable::NftWriteBatch::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&mut self, evt: NftEvent);",
              "docs": "",
              "attributes": "",
              "line": 739
            },
            {
              "name": "nft_durable::NftWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued in this batch.",
              "attributes": "",
              "line": 744
            },
            {
              "name": "nft_durable::NftWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "",
              "line": 749
            },
            {
              "name": "nft_durable::NftWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<NftBatchOp>;",
              "docs": "Consume the batch and return the inner op list.\n\nUsed by the in-memory `MemoryExecutionState::commit_nft_tx` path to\niterate over ops without an extra clone.",
              "attributes": "",
              "line": 757
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nova_durable",
          "source": "sigil/node/sigil-node/src/nova_durable.rs",
          "sha256": "e5ff087a5b96cee60eac839afc139e34b8153dd275217bda8c38d13b15c1b87f",
          "attributes": "",
          "items": [
            {
              "name": "nova_durable::DurableNovaStore",
              "kind": "struct_item",
              "signature": "pub struct DurableNovaStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 115
            },
            {
              "name": "nova_durable::DurableNovaStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 121
            },
            {
              "name": "nova_durable::DurableNovaStore::get_world",
              "kind": "function_item",
              "signature": "pub fn get_world(&self, world_id: &str) -> Result<Option<NovaWorldConfig>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 193
            },
            {
              "name": "nova_durable::DurableNovaStore::put_world",
              "kind": "function_item",
              "signature": "pub fn put_world(&self, world: &NovaWorldConfig) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 200
            },
            {
              "name": "nova_durable::DurableNovaStore::list_worlds",
              "kind": "function_item",
              "signature": "pub fn list_worlds(&self) -> Result<Vec<NovaWorldConfig>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 204
            },
            {
              "name": "nova_durable::DurableNovaStore::get_parcel",
              "kind": "function_item",
              "signature": "pub fn get_parcel(&self, parcel_id: &str) -> Result<Option<NovaParcelRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 213
            },
            {
              "name": "nova_durable::DurableNovaStore::put_parcel",
              "kind": "function_item",
              "signature": "pub fn put_parcel(&self, parcel: &NovaParcelRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 220
            },
            {
              "name": "nova_durable::DurableNovaStore::list_parcels_in_region",
              "kind": "function_item",
              "signature": "pub fn list_parcels_in_region(\n        &self,\n        world_id: &str,\n        region_x: i32,\n        region_z: i32,\n    ) -> Result<Vec<NovaParcelRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 226
            },
            {
              "name": "nova_durable::DurableNovaStore::list_parcels",
              "kind": "function_item",
              "signature": "pub fn list_parcels(&self) -> Result<Vec<NovaParcelRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 246
            },
            {
              "name": "nova_durable::DurableNovaStore::get_building",
              "kind": "function_item",
              "signature": "pub fn get_building(&self, building_id: &str) -> Result<Option<NovaBuildingRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 255
            },
            {
              "name": "nova_durable::DurableNovaStore::put_building",
              "kind": "function_item",
              "signature": "pub fn put_building(&self, building: &NovaBuildingRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "nova_durable::DurableNovaStore::delete_building",
              "kind": "function_item",
              "signature": "pub fn delete_building(&self, building_id: &str) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 266
            },
            {
              "name": "nova_durable::DurableNovaStore::list_buildings",
              "kind": "function_item",
              "signature": "pub fn list_buildings(&self) -> Result<Vec<NovaBuildingRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 270
            },
            {
              "name": "nova_durable::DurableNovaStore::get_avatar",
              "kind": "function_item",
              "signature": "pub fn get_avatar(&self, avatar_id: &str) -> Result<Option<NovaAvatarRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 279
            },
            {
              "name": "nova_durable::DurableNovaStore::put_avatar",
              "kind": "function_item",
              "signature": "pub fn put_avatar(&self, avatar: &NovaAvatarRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 286
            },
            {
              "name": "nova_durable::DurableNovaStore::list_avatars",
              "kind": "function_item",
              "signature": "pub fn list_avatars(&self) -> Result<Vec<NovaAvatarRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 290
            },
            {
              "name": "nova_durable::DurableNovaStore::get_auction",
              "kind": "function_item",
              "signature": "pub fn get_auction(&self, auction_id: &str) -> Result<Option<NovaAuctionRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 299
            },
            {
              "name": "nova_durable::DurableNovaStore::put_auction",
              "kind": "function_item",
              "signature": "pub fn put_auction(&self, auction: &NovaAuctionRecord) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 306
            },
            {
              "name": "nova_durable::DurableNovaStore::list_auctions",
              "kind": "function_item",
              "signature": "pub fn list_auctions(&self) -> Result<Vec<NovaAuctionRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 310
            },
            {
              "name": "nova_durable::DurableNovaStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &NovaWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 319
            },
            {
              "name": "nova_durable::ArcNovaStore",
              "kind": "type_item",
              "signature": "pub type ArcNovaStore = Arc<DurableNovaStore>;",
              "docs": "",
              "attributes": "",
              "line": 365
            },
            {
              "name": "nova_durable::NovaBatchOp",
              "kind": "enum_item",
              "signature": "pub enum NovaBatchOp {\n    PutWorld(NovaWorldConfig),\n    PutParcel(NovaParcelRecord),\n    PutBuilding(NovaBuildingRecord),\n    DeleteBuilding(String),\n    PutAvatar(NovaAvatarRecord),\n    PutAuction(NovaAuctionRecord),\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 368
            },
            {
              "name": "nova_durable::NovaWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct NovaWriteBatch {\n\n}",
              "docs": "",
              "attributes": "#[derive(Default)]",
              "line": 378
            },
            {
              "name": "nova_durable::NovaWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 383
            },
            {
              "name": "nova_durable::NovaWriteBatch::put_world",
              "kind": "function_item",
              "signature": "pub fn put_world(&mut self, world: NovaWorldConfig);",
              "docs": "",
              "attributes": "",
              "line": 387
            },
            {
              "name": "nova_durable::NovaWriteBatch::put_parcel",
              "kind": "function_item",
              "signature": "pub fn put_parcel(&mut self, parcel: NovaParcelRecord);",
              "docs": "",
              "attributes": "",
              "line": 391
            },
            {
              "name": "nova_durable::NovaWriteBatch::put_building",
              "kind": "function_item",
              "signature": "pub fn put_building(&mut self, building: NovaBuildingRecord);",
              "docs": "",
              "attributes": "",
              "line": 395
            },
            {
              "name": "nova_durable::NovaWriteBatch::delete_building",
              "kind": "function_item",
              "signature": "pub fn delete_building(&mut self, building_id: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 399
            },
            {
              "name": "nova_durable::NovaWriteBatch::put_avatar",
              "kind": "function_item",
              "signature": "pub fn put_avatar(&mut self, avatar: NovaAvatarRecord);",
              "docs": "",
              "attributes": "",
              "line": 404
            },
            {
              "name": "nova_durable::NovaWriteBatch::put_auction",
              "kind": "function_item",
              "signature": "pub fn put_auction(&mut self, auction: NovaAuctionRecord);",
              "docs": "",
              "attributes": "",
              "line": 408
            }
          ],
          "parseErrors": false
        },
        {
          "module": "recovery_durable",
          "source": "sigil/node/sigil-node/src/recovery_durable.rs",
          "sha256": "96b5b247a098db1812015948d221104a00453bc9d53884ea28209a078f96af0e",
          "attributes": "",
          "items": [
            {
              "name": "recovery_durable::DurableRecoveryStore",
              "kind": "struct_item",
              "signature": "pub struct DurableRecoveryStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::get_config",
              "kind": "function_item",
              "signature": "pub fn get_config(&self, subject_did: &str) -> Result<Option<RecoveryConfig>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 187
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::get_ceremony",
              "kind": "function_item",
              "signature": "pub fn get_ceremony(&self, ceremony_id: &str) -> Result<Option<RecoveryCeremony>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 194
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::get_active_ceremony_id",
              "kind": "function_item",
              "signature": "pub fn get_active_ceremony_id(&self, subject_did: &str) -> Result<Option<String>, NodeError>;",
              "docs": "Look up the active ceremony (if any) for a subject DID.",
              "attributes": "",
              "line": 202
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &RecoveryWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 213
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::put_config",
              "kind": "function_item",
              "signature": "pub fn put_config(&self, config: &RecoveryConfig) -> Result<(), NodeError>;",
              "docs": "One-op convenience write \u2014 used for tests and bootstrap; production\nalways batches via `commit_batch`.",
              "attributes": "",
              "line": 263
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::put_ceremony",
              "kind": "function_item",
              "signature": "pub fn put_ceremony(&self, ceremony: &RecoveryCeremony) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::delete_config",
              "kind": "function_item",
              "signature": "pub fn delete_config(&self, subject_did: &str) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 271
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::delete_ceremony",
              "kind": "function_item",
              "signature": "pub fn delete_ceremony(&self, ceremony_id: &str) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 275
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 279
            },
            {
              "name": "recovery_durable::DurableRecoveryStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "",
              "attributes": "",
              "line": 285
            },
            {
              "name": "recovery_durable::ArcRecoveryStore",
              "kind": "type_item",
              "signature": "pub type ArcRecoveryStore = Arc<DurableRecoveryStore>;",
              "docs": "",
              "attributes": "",
              "line": 290
            },
            {
              "name": "recovery_durable::RecoveryBatchOp",
              "kind": "enum_item",
              "signature": "pub enum RecoveryBatchOp {\n    PutConfig(Box<RecoveryConfig>),\n    DeleteConfig {\n        subject_did: String,\n    },\n    PutCeremony(Box<RecoveryCeremony>),\n    DeleteCeremony {\n        ceremony_id: String,\n    },\n    SetActiveCeremony {\n        subject_did: String,\n        ceremony_id: String,\n    },\n    ClearActiveCeremony {\n        subject_did: String,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 297
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct RecoveryWriteBatch {\n\n}",
              "docs": "",
              "attributes": "#[derive(Default)]",
              "line": 316
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 321
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::put_config",
              "kind": "function_item",
              "signature": "pub fn put_config(&mut self, config: RecoveryConfig);",
              "docs": "",
              "attributes": "",
              "line": 325
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::delete_config",
              "kind": "function_item",
              "signature": "pub fn delete_config(&mut self, subject_did: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 329
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::put_ceremony",
              "kind": "function_item",
              "signature": "pub fn put_ceremony(&mut self, ceremony: RecoveryCeremony);",
              "docs": "",
              "attributes": "",
              "line": 335
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::delete_ceremony",
              "kind": "function_item",
              "signature": "pub fn delete_ceremony(&mut self, ceremony_id: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 340
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::set_active_ceremony",
              "kind": "function_item",
              "signature": "pub fn set_active_ceremony(\n        &mut self,\n        subject_did: impl Into<String>,\n        ceremony_id: impl Into<String>,\n    );",
              "docs": "",
              "attributes": "",
              "line": 346
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::clear_active_ceremony",
              "kind": "function_item",
              "signature": "pub fn clear_active_ceremony(&mut self, subject_did: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 357
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 363
            },
            {
              "name": "recovery_durable::RecoveryWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 367
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_compute",
          "source": "sigil/node/sigil-node/src/rpc_compute.rs",
          "sha256": "b75c4730486fd631b067002d098f4310af09a50036921b483fb66abbb29dc14f",
          "attributes": "#[cfg(feature = \"compute\")]",
          "items": [
            {
              "name": "rpc_compute::handle_get_provider",
              "kind": "function_item",
              "signature": "pub async fn handle_get_provider(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 75
            },
            {
              "name": "rpc_compute::handle_list_providers",
              "kind": "function_item",
              "signature": "pub async fn handle_list_providers(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 91
            },
            {
              "name": "rpc_compute::handle_get_provider_reputation",
              "kind": "function_item",
              "signature": "pub async fn handle_get_provider_reputation(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 108
            },
            {
              "name": "rpc_compute::handle_get_escrow_balance",
              "kind": "function_item",
              "signature": "pub async fn handle_get_escrow_balance(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 137
            },
            {
              "name": "rpc_compute::handle_get_compute_job",
              "kind": "function_item",
              "signature": "pub async fn handle_get_compute_job(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 177
            },
            {
              "name": "rpc_compute::handle_list_compute_jobs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_compute_jobs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 192
            },
            {
              "name": "rpc_compute::handle_get_compute_receipt",
              "kind": "function_item",
              "signature": "pub async fn handle_get_compute_receipt(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 227
            },
            {
              "name": "rpc_compute::handle_get_compute_proof",
              "kind": "function_item",
              "signature": "pub async fn handle_get_compute_proof(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 251
            },
            {
              "name": "rpc_compute::handle_verify_lumen_attestation",
              "kind": "function_item",
              "signature": "pub async fn handle_verify_lumen_attestation(_state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 291
            },
            {
              "name": "rpc_compute::handle_get_compute_challenge",
              "kind": "function_item",
              "signature": "pub async fn handle_get_compute_challenge(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 345
            },
            {
              "name": "rpc_compute::handle_list_compute_challenges",
              "kind": "function_item",
              "signature": "pub async fn handle_list_compute_challenges(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 364
            },
            {
              "name": "rpc_compute::handle_get_compute_audit_trail",
              "kind": "function_item",
              "signature": "pub async fn handle_get_compute_audit_trail(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 404
            },
            {
              "name": "rpc_compute::handle_get_maca_work_claim",
              "kind": "function_item",
              "signature": "pub async fn handle_get_maca_work_claim(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 439
            },
            {
              "name": "rpc_compute::handle_list_maca_validation_records",
              "kind": "function_item",
              "signature": "pub async fn handle_list_maca_validation_records(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 460
            },
            {
              "name": "rpc_compute::handle_select_compute_provider",
              "kind": "function_item",
              "signature": "pub async fn handle_select_compute_provider(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 495
            },
            {
              "name": "rpc_compute::handle_get_validator_agent",
              "kind": "function_item",
              "signature": "pub async fn handle_get_validator_agent(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 561
            },
            {
              "name": "rpc_compute::handle_get_maca_epoch",
              "kind": "function_item",
              "signature": "pub async fn handle_get_maca_epoch(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 576
            },
            {
              "name": "rpc_compute::handle_list_maca_epochs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_maca_epochs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 593
            },
            {
              "name": "rpc_compute::handle_get_maca_quorum_proof",
              "kind": "function_item",
              "signature": "pub async fn handle_get_maca_quorum_proof(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 625
            },
            {
              "name": "rpc_compute::handle_list_maca_quorum_proofs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_maca_quorum_proofs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"compute\")]",
              "line": 656
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_contract",
          "source": "sigil/node/sigil-node/src/rpc_contract.rs",
          "sha256": "d0ea2e91a6f82c3a2ed76338adb1d10462899046ab0c51aafbaabd50d51ac285",
          "attributes": "#[cfg(feature = \"contracts\")]",
          "items": [
            {
              "name": "rpc_contract::handle_register_contract_code",
              "kind": "function_item",
              "signature": "pub async fn handle_register_contract_code(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 123
            },
            {
              "name": "rpc_contract::handle_get_contract",
              "kind": "function_item",
              "signature": "pub async fn handle_get_contract(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 226
            },
            {
              "name": "rpc_contract::handle_get_contract_state",
              "kind": "function_item",
              "signature": "pub async fn handle_get_contract_state(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 246
            },
            {
              "name": "rpc_contract::handle_get_contract_events",
              "kind": "function_item",
              "signature": "pub async fn handle_get_contract_events(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 277
            },
            {
              "name": "rpc_contract::handle_list_zone_contracts",
              "kind": "function_item",
              "signature": "pub async fn handle_list_zone_contracts(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 311
            },
            {
              "name": "rpc_contract::handle_get_zone",
              "kind": "function_item",
              "signature": "pub async fn handle_get_zone(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]",
              "line": 336
            },
            {
              "name": "rpc_contract::handle_call_contract_dry_run",
              "kind": "function_item",
              "signature": "pub async fn handle_call_contract_dry_run(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[cfg(feature = \"wasm\")]",
              "line": 369
            },
            {
              "name": "rpc_contract::handle_call_contract_dry_run",
              "kind": "function_item",
              "signature": "pub async fn handle_call_contract_dry_run(_state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"contracts\")]\n#[cfg(not(feature = \"wasm\"))]",
              "line": 496
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_crucible",
          "source": "sigil/node/sigil-node/src/rpc_crucible.rs",
          "sha256": "6dda18bc2876ca4f59138551c8012e88d6667520de5f1bea919e5fc627fb564c",
          "attributes": "",
          "items": [
            {
              "name": "rpc_crucible::handle_get_training_run",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_run(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "rpc_crucible::handle_list_training_runs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_training_runs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "rpc_crucible::handle_get_training_rollout_batch",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_rollout_batch(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "rpc_crucible::handle_get_training_weights",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_weights(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "rpc_crucible::handle_get_training_rewards",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_rewards(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 113
            },
            {
              "name": "rpc_crucible::handle_get_training_slashes",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_slashes(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 131
            },
            {
              "name": "rpc_crucible::handle_get_training_events",
              "kind": "function_item",
              "signature": "pub async fn handle_get_training_events(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 149
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_dex",
          "source": "sigil/node/sigil-node/src/rpc_dex.rs",
          "sha256": "6fed58a1a7a38c394037619429cd2c69cd218bb83a41d78b53152f29702a3254",
          "attributes": "",
          "items": [
            {
              "name": "rpc_dex::handle_get_dex_pool",
              "kind": "function_item",
              "signature": "pub async fn handle_get_dex_pool(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "rpc_dex::handle_list_dex_pools",
              "kind": "function_item",
              "signature": "pub async fn handle_list_dex_pools(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "rpc_dex::handle_quote_dex_swap_exact_in",
              "kind": "function_item",
              "signature": "pub async fn handle_quote_dex_swap_exact_in(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 111
            },
            {
              "name": "rpc_dex::handle_quote_dex_swap_exact_out",
              "kind": "function_item",
              "signature": "pub async fn handle_quote_dex_swap_exact_out(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 143
            },
            {
              "name": "rpc_dex::handle_get_dex_position",
              "kind": "function_item",
              "signature": "pub async fn handle_get_dex_position(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 182
            },
            {
              "name": "rpc_dex::handle_list_dex_positions",
              "kind": "function_item",
              "signature": "pub async fn handle_list_dex_positions(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 206
            },
            {
              "name": "rpc_dex::handle_get_dex_events",
              "kind": "function_item",
              "signature": "pub async fn handle_get_dex_events(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 223
            },
            {
              "name": "rpc_dex::handle_list_dex_pairs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_dex_pairs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 242
            },
            {
              "name": "rpc_dex::handle_get_token_class",
              "kind": "function_item",
              "signature": "pub async fn handle_get_token_class(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 268
            },
            {
              "name": "rpc_dex::handle_get_token_balance",
              "kind": "function_item",
              "signature": "pub async fn handle_get_token_balance(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 288
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_evidence",
          "source": "sigil/node/sigil-node/src/rpc_evidence.rs",
          "sha256": "fa5fedd769aa5762daddc7c52153a4512c602983a34bc19426d5ec581ef5788e",
          "attributes": "",
          "items": [
            {
              "name": "rpc_evidence::handle_get_evidence_anchor",
              "kind": "function_item",
              "signature": "pub async fn handle_get_evidence_anchor(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getEvidenceAnchor` \u2014 fetch one anchor record by deterministic\nanchor ID (`evidence:anchor:<hex>`). Returns `null` when not found.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "rpc_evidence::handle_list_evidence_anchors_by_digest",
              "kind": "function_item",
              "signature": "pub async fn handle_list_evidence_anchors_by_digest(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "`sigil_listEvidenceAnchorsByDigest` \u2014 list every anchor record for a\nlowercase hex BLAKE3 digest. Returns an empty array when none exist.",
              "attributes": "",
              "line": 33
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_gal",
          "source": "sigil/node/sigil-node/src/rpc_gal.rs",
          "sha256": "695c37f381a227929ce1c0daed93e5d8125682de2b68fe6a0ea21f14f8c52ba9",
          "attributes": "#[cfg(feature = \"tower\")]",
          "items": [
            {
              "name": "rpc_gal::handle_get_hmr",
              "kind": "function_item",
              "signature": "pub async fn handle_get_hmr(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 20
            },
            {
              "name": "rpc_gal::handle_get_mhr",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mhr(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 36
            },
            {
              "name": "rpc_gal::handle_get_enr",
              "kind": "function_item",
              "signature": "pub async fn handle_get_enr(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 52
            },
            {
              "name": "rpc_gal::handle_get_org_root",
              "kind": "function_item",
              "signature": "pub async fn handle_get_org_root(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 68
            },
            {
              "name": "rpc_gal::handle_get_shard",
              "kind": "function_item",
              "signature": "pub async fn handle_get_shard(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 88
            },
            {
              "name": "rpc_gal::handle_check_revocation",
              "kind": "function_item",
              "signature": "pub async fn handle_check_revocation(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 104
            },
            {
              "name": "rpc_gal::handle_get_shard_topology",
              "kind": "function_item",
              "signature": "pub async fn handle_get_shard_topology(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tower\")]",
              "line": 123
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_labor",
          "source": "sigil/node/sigil-node/src/rpc_labor.rs",
          "sha256": "19f0d2421f74a05b1ebff1aa1eb4a71c80facf89ad927d47d9b9769b121c0494",
          "attributes": "",
          "items": [
            {
              "name": "rpc_labor::handle_get_labor_job",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_job(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "rpc_labor::handle_list_labor_jobs",
              "kind": "function_item",
              "signature": "pub async fn handle_list_labor_jobs(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "rpc_labor::handle_get_labor_bid",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_bid(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "rpc_labor::handle_list_labor_bids",
              "kind": "function_item",
              "signature": "pub async fn handle_list_labor_bids(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "rpc_labor::handle_get_labor_contract",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_contract(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "rpc_labor::handle_get_labor_milestones",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_milestones(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 127
            },
            {
              "name": "rpc_labor::handle_get_labor_escrow",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_escrow(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 145
            },
            {
              "name": "rpc_labor::handle_get_labor_dispute",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_dispute(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 160
            },
            {
              "name": "rpc_labor::handle_get_account_labor_history",
              "kind": "function_item",
              "signature": "pub async fn handle_get_account_labor_history(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 175
            },
            {
              "name": "rpc_labor::handle_get_labor_offer",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_offer(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 235
            },
            {
              "name": "rpc_labor::handle_list_labor_offers",
              "kind": "function_item",
              "signature": "pub async fn handle_list_labor_offers(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 250
            },
            {
              "name": "rpc_labor::handle_get_labor_claim",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_claim(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "rpc_labor::handle_list_labor_claims",
              "kind": "function_item",
              "signature": "pub async fn handle_list_labor_claims(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 293
            },
            {
              "name": "rpc_labor::handle_get_labor_offer_events",
              "kind": "function_item",
              "signature": "pub async fn handle_get_labor_offer_events(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 309
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_mail",
          "source": "sigil/node/sigil-node/src/rpc_mail.rs",
          "sha256": "f04b51f7ddb83e08e95e2754576b8c8d5c80c246a907627c621c13b0ede5fefc",
          "attributes": "",
          "items": [
            {
              "name": "rpc_mail::handle_get_mailbox",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mailbox(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "rpc_mail::handle_list_mailboxes_by_owner",
              "kind": "function_item",
              "signature": "pub async fn handle_list_mailboxes_by_owner(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "rpc_mail::handle_get_mail_policy",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mail_policy(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "rpc_mail::handle_get_mail_keys",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mail_keys(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "rpc_mail::handle_get_mail_delivery",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mail_delivery(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 90
            },
            {
              "name": "rpc_mail::handle_list_mail_deliveries_by_recipient",
              "kind": "function_item",
              "signature": "pub async fn handle_list_mail_deliveries_by_recipient(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "rpc_mail::handle_list_mail_deliveries_by_sender",
              "kind": "function_item",
              "signature": "pub async fn handle_list_mail_deliveries_by_sender(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 137
            },
            {
              "name": "rpc_mail::handle_get_mail_delegation",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mail_delegation(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 168
            },
            {
              "name": "rpc_mail::handle_list_mail_delegations",
              "kind": "function_item",
              "signature": "pub async fn handle_list_mail_delegations(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 191
            },
            {
              "name": "rpc_mail::handle_get_mail_abuse_report",
              "kind": "function_item",
              "signature": "pub async fn handle_get_mail_abuse_report(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 214
            },
            {
              "name": "rpc_mail::handle_resolve_name",
              "kind": "function_item",
              "signature": "pub async fn handle_resolve_name(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 233
            },
            {
              "name": "rpc_mail::handle_get_name_records",
              "kind": "function_item",
              "signature": "pub async fn handle_get_name_records(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 248
            },
            {
              "name": "rpc_mail::handle_resolve_mail",
              "kind": "function_item",
              "signature": "pub async fn handle_resolve_mail(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "rpc_mail::handle_resolve_website",
              "kind": "function_item",
              "signature": "pub async fn handle_resolve_website(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 284
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_middleware",
          "source": "sigil/node/sigil-node/src/rpc_middleware.rs",
          "sha256": "8755b619728b188efb35ba9400439c077a6f4127ed3eb8d89099178815076bb8",
          "attributes": "",
          "items": [
            {
              "name": "rpc_middleware::RpcProfile",
              "kind": "enum_item",
              "signature": "pub enum RpcProfile {\n    /// Public, read-only profile served at `rpc.sigil.ml`. Rejects\n    /// validator-internal methods (`sigil_consensus_*`,\n    /// `sigil_tower_attestation`) with `MethodNotFound`.\n    Public,\n    /// Full validator profile \u2014 every dispatched method is callable.\n    #[default]\n    Validator,\n}",
              "docs": "RPC profile \u2014 public read-only or full validator.\n\nDefault: `Validator` so existing single-binary deployments are\nunchanged. Public-RPC pods set `--rpc-profile public` explicitly\nin `30-rpc-service.yaml`.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]",
              "line": 39
            },
            {
              "name": "rpc_middleware::RpcProfile::allows",
              "kind": "function_item",
              "signature": "pub fn allows(self, method: &str) -> bool;",
              "docs": "Returns `true` if the given canonical method name is allowed\nto be served on this profile. Methods not in the canonical\ntable are caller-checked elsewhere.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "rpc_middleware::RPC_BODY_LIMIT_BYTES",
              "kind": "const_item",
              "signature": "pub const RPC_BODY_LIMIT_BYTES: usize;",
              "docs": "Application-layer body cap on the JSON-RPC envelope.\n\n4 MiB. The *per-method* tightening (64 KiB default, 4 MiB only on\n`sigil_sendTransaction`) is enforced inside the handlers in\n`rpc_server.rs` \u2014 once the request body has been parsed we know\nthe method, so we can reject oversized non-write requests with a\nJSON-RPC error rather than an HTTP 413.\n\nWhy 4 MiB at the envelope: `MAX_CODE_SIZE = 2 MiB`\n(`sigil-wasm/engine.rs:11`); a contract-deploy `sigil_sendTransaction`\nis `MAX_CODE_SIZE` plus envelope plus signature, ~2.3 MiB worst case.\nDoubling that gives 4 MiB of headroom before the request is\nrejected at the HTTP layer.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "rpc_middleware::RPC_DEFAULT_REQUEST_LIMIT_BYTES",
              "kind": "const_item",
              "signature": "pub const RPC_DEFAULT_REQUEST_LIMIT_BYTES: usize;",
              "docs": "Default per-request body cap when the method is not\n`sigil_sendTransaction`. Enforced inside handlers, not at the HTTP\nlayer (which only sees the outer envelope).",
              "attributes": "",
              "line": 118
            },
            {
              "name": "rpc_middleware::RPC_BATCH_LIMIT_BYTES",
              "kind": "const_item",
              "signature": "pub const RPC_BATCH_LIMIT_BYTES: usize;",
              "docs": "Per-batch envelope cap. Matches the dispatched D4.3 batch size cap\n(32 requests \u00d7 4 MiB / 8 = 16 MiB).",
              "attributes": "",
              "line": 122
            },
            {
              "name": "rpc_middleware::RateLimitConfig",
              "kind": "struct_item",
              "signature": "pub struct RateLimitConfig {\n/// Sustained requests per second per IP.\n\npub per_ip_rps: u32,\n/// Burst capacity per IP.\n\npub per_ip_burst: u32\n}",
              "docs": "Rate-limit configuration for the public RPC surface.\n\nDefaults reject the dispatched 100/500 (botnet ceiling) per\ncounterargument CA-1; benchmarked against Alchemy 25 req/s,\nInfura ~10 req/s, QuickNode 25 req/s, Solana public RPC ~4 req/s.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 134
            },
            {
              "name": "rpc_middleware::RateLimitConfig::PUBLIC_DEFAULT",
              "kind": "const_item",
              "signature": "pub const PUBLIC_DEFAULT: Self;",
              "docs": "Public unauth defaults from CA-1.",
              "attributes": "",
              "line": 143
            },
            {
              "name": "rpc_middleware::RateLimitConfig::VALIDATOR_DEFAULT",
              "kind": "const_item",
              "signature": "pub const VALIDATOR_DEFAULT: Self;",
              "docs": "Validator profile default \u2014 effectively unlimited inside the\nk8s control plane. Operators can override via env if needed.",
              "attributes": "",
              "line": 150
            },
            {
              "name": "rpc_middleware::RateLimitConfig::from_env",
              "kind": "function_item",
              "signature": "pub fn from_env(profile: RpcProfile) -> Self;",
              "docs": "Resolve from env vars, falling back to the profile default.",
              "attributes": "",
              "line": 156
            },
            {
              "name": "rpc_middleware::RateLimitConfig::replenish_period",
              "kind": "function_item",
              "signature": "pub fn replenish_period(self) -> Duration;",
              "docs": "Convert requests-per-second into tower-governor's token\nreplenishment period.\n\n`tower_governor::GovernorConfigBuilder::per_second(n)` means\n\"add one token every n seconds\", not \"allow n requests per\nsecond\". Keep the env/config model expressed as RPS and convert\nexplicitly before wiring the layer.",
              "attributes": "",
              "line": 182
            },
            {
              "name": "rpc_middleware::cors_layer",
              "kind": "function_item",
              "signature": "pub fn cors_layer(profile: RpcProfile) -> tower_http::cors::CorsLayer;",
              "docs": "The hosts allowed to make cross-origin RPC calls.\n\nReplaces `tower_http::cors::CorsLayer::permissive()`. Configured\nvia `SIGIL_RPC_CORS_ORIGINS` env var (comma-separated). When unset,\nthe public profile uses the canonical Sigil hosts; the validator\nprofile defaults to permissive because validator-to-validator\ntraffic is on the cluster's private network anyway.",
              "attributes": "",
              "line": 199
            },
            {
              "name": "rpc_middleware::sanitize_error_message",
              "kind": "function_item",
              "signature": "pub fn sanitize_error_message(message: &str) -> String;",
              "docs": "Strip likely-internal substrings from a JSON-RPC error message\nbefore it leaves the process.\n\nHeuristic, not a security boundary on its own \u2014 handlers must\nalso be careful what they put in error messages. This is the\nlast-line defence per `docs/launch/agent-05/DESIGN.md` \u00a72.4.7.",
              "attributes": "",
              "line": 249
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_nft",
          "source": "sigil/node/sigil-node/src/rpc_nft.rs",
          "sha256": "fb53a370a92106c3027aa28fb80dec8df28e5bc056e0344b7f666fa8fbbba3b7",
          "attributes": "",
          "items": [
            {
              "name": "rpc_nft::handle_get_nft_collection",
              "kind": "function_item",
              "signature": "pub async fn handle_get_nft_collection(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getNftCollection` \u2014 fetch a collection by its string ID.\n\nParams: `{ \"collection_id\": \"<id>\" }` or positional `[\"<id>\"]`.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "rpc_nft::handle_get_nft_token",
              "kind": "function_item",
              "signature": "pub async fn handle_get_nft_token(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getNftToken` \u2014 fetch a single token within a collection.\n\nParams: `{ \"collection_id\": \"<id>\", \"token_id\": \"<u128 string>\" }`.",
              "attributes": "",
              "line": 74
            },
            {
              "name": "rpc_nft::handle_get_owner_nfts",
              "kind": "function_item",
              "signature": "pub async fn handle_get_owner_nfts(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getOwnerNfts` \u2014 list all NFTs owned by a DID.\n\nParams: `{ \"owner_did\": \"<did>\", \"limit\": <N>, \"offset\": <N> }` or\n        positional `[\"<did>\", <limit>, <offset>]`.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "rpc_nft::handle_get_did_identity_nft",
              "kind": "function_item",
              "signature": "pub async fn handle_get_did_identity_nft(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getDidIdentityNft` \u2014 fetch DID-identity index for a subject DID.\n\nParams: `{ \"subject_did\": \"<did>\" }` or positional `[\"<did>\"]`.",
              "attributes": "",
              "line": 185
            },
            {
              "name": "rpc_nft::handle_get_nft_events",
              "kind": "function_item",
              "signature": "pub async fn handle_get_nft_events(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getNftEvents` \u2014 list NFT lifecycle events with optional filters.\n\nParams: an [`NftEventFilter`] object or `{}` for all events.\n\nThe `list_nft_events` trait method accepts an optional `collection_id`\nfilter. Client-side filtering for `owner_did` and `kind` is applied after\nretrieval, since the `ExecutionState` trait only exposes collection-level\nfiltering.",
              "attributes": "",
              "line": 222
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_nova",
          "source": "sigil/node/sigil-node/src/rpc_nova.rs",
          "sha256": "c54bfcd19f58a398a637ec59eb621f3e4d37d3ced833dd1d11daa4ff6771c297",
          "attributes": "",
          "items": [
            {
              "name": "rpc_nova::handle_get_parcel",
              "kind": "function_item",
              "signature": "pub async fn handle_get_parcel(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "rpc_nova::handle_get_building",
              "kind": "function_item",
              "signature": "pub async fn handle_get_building(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "rpc_nova::handle_get_avatar",
              "kind": "function_item",
              "signature": "pub async fn handle_get_avatar(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "rpc_nova::handle_get_world_config",
              "kind": "function_item",
              "signature": "pub async fn handle_get_world_config(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 100
            },
            {
              "name": "rpc_nova::handle_list_parcels_in_region",
              "kind": "function_item",
              "signature": "pub async fn handle_list_parcels_in_region(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 120
            },
            {
              "name": "rpc_nova::handle_get_auction_status",
              "kind": "function_item",
              "signature": "pub async fn handle_get_auction_status(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 147
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_server",
          "source": "sigil/node/sigil-node/src/rpc_server.rs",
          "sha256": "41199e81730e6a55193ebc3d9503a2fe660313d46c295eb2a81ecf62023d6882",
          "attributes": "",
          "items": [
            {
              "name": "rpc_server::RpcRequest",
              "kind": "struct_item",
              "signature": "pub struct RpcRequest {\n/// JSON-RPC version (always \"2.0\").\n\npub jsonrpc: String,\n/// Method name.\n\npub method: String,\n/// Request parameters (optional).\n\n#[serde(default)]\npub params: serde_json::Value,\n/// Request ID.\n\npub id: serde_json::Value\n}",
              "docs": "JSON-RPC request envelope.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 18
            },
            {
              "name": "rpc_server::RpcResponse",
              "kind": "struct_item",
              "signature": "pub struct RpcResponse {\n/// JSON-RPC version.\n\npub jsonrpc: String,\n/// Result (mutually exclusive with error).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub result: Option<Box<serde_json::Value>>,\n/// Error (mutually exclusive with result).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub error: Option<Box<RpcError>>,\n/// Request ID echoed back.\n\npub id: Box<serde_json::Value>\n}",
              "docs": "JSON-RPC response envelope.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 32
            },
            {
              "name": "rpc_server::RpcError",
              "kind": "struct_item",
              "signature": "pub struct RpcError {\npub code: i64,\npub message: String,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub data: Option<serde_json::Value>\n}",
              "docs": "JSON-RPC error object.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 47
            },
            {
              "name": "rpc_server::StateQueryGate",
              "kind": "struct_item",
              "signature": "pub struct StateQueryGate(std::sync::Arc<std::sync::atomic::AtomicBool>);",
              "docs": "Shared fail-closed gate for state-backed RPC queries.",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 80
            },
            {
              "name": "rpc_server::StateQueryGate::new",
              "kind": "function_item",
              "signature": "pub fn new(safe: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "rpc_server::StateQueryGate::is_safe",
              "kind": "function_item",
              "signature": "pub fn is_safe(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "rpc_server::StateQueryGate::set_safe",
              "kind": "function_item",
              "signature": "pub fn set_safe(&self, safe: bool);",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "rpc_server::RpcState",
              "kind": "struct_item",
              "signature": "pub struct RpcState {\npub mempool: Arc<RwLock<Mempool>>,\npub chain_id: String,\npub node_version: String,\n/// Optional execution state for query methods (identity, validator, etc.).\n\npub execution_state: Option<Arc<dyn crate::executor::ExecutionState>>,\n/// Whether state-backed RPC queries may be served from `execution_state`.\n\n///\n\n/// Validator/producer nodes execute the canonical chain locally, so this is\n\n/// true there. RPC/archive mirrors that only pulled block headers/bodies but\n\n/// have not replayed state must set this false and fail closed.\n\npub state_queries_safe: StateQueryGate,\n/// Channel for forwarding consensus messages to the coordinator.\n\npub consensus_tx:\n        Option<tokio::sync::mpsc::Sender<crate::consensus_coordinator::InboundConsensusMsg>>,\n/// Optional block store for block queries.\n\npub block_store: Option<Arc<dyn sigil_storage::BlockStore>>,\n/// Local Weft publish/fetch/serve substrate for off-chain artifacts.\n\npub weft_store: Arc<crate::weave::LocalWeftArtifactStore>,\n/// Engine reference for Tower attestation dispatch.\n\n///\n\n/// When set, the `sigil_tower_attestation` RPC method delivers inbound\n\n/// attestations directly into `BlockEngine::on_tower_attestation_received`,\n\n/// which verifies the signature and advances the Casper FFG finality state.\n\npub tower_engine: Option<Arc<crate::engine::BlockEngine>>,\n/// Agent 05 D4 \u2014 RPC profile (`public` or `validator`). Defaults to\n\n/// `Validator` for backwards compatibility with existing single-binary\n\n/// deployments. Public-RPC pods set `--rpc-profile public` so\n\n/// validator-internal methods (`sigil_consensus_*`,\n\n/// `sigil_tower_attestation`) return `MethodNotFound`.\n\npub rpc_profile: crate::rpc_middleware::RpcProfile\n}",
              "docs": "Shared state for RPC handlers.",
              "attributes": "#[derive(Clone)]",
              "line": 106
            },
            {
              "name": "rpc_server::serve",
              "kind": "function_item",
              "signature": "pub async fn serve(addr: String, state: RpcState) -> Result<(), NodeError>;",
              "docs": "Start the RPC server on the given address.\n\nThis function blocks until the server is shut down.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "rpc_server::bind",
              "kind": "function_item",
              "signature": "pub async fn bind(addr: &str) -> Result<tokio::net::TcpListener, NodeError>;",
              "docs": "Bind the RPC listener before spawning the server task.\n\n`sigil-node` uses this in `main.rs` so startup fails if the configured\naddress is already occupied.",
              "attributes": "",
              "line": 168
            },
            {
              "name": "rpc_server::serve_listener",
              "kind": "function_item",
              "signature": "pub async fn serve_listener(\n    listener: tokio::net::TcpListener,\n    state: RpcState,\n) -> Result<(), NodeError>;",
              "docs": "Serve RPC traffic on an already-bound listener.\n\nSplitting bind from serve lets startup propagate bind failures while still\nrunning the HTTP server concurrently with the node engine.",
              "attributes": "",
              "line": 178
            },
            {
              "name": "rpc_server::router",
              "kind": "function_item",
              "signature": "pub fn router(state: RpcState) -> Result<Router, NodeError>;",
              "docs": "Build the axum `Router` for the Sigil RPC surface.\n\nExtracted from `serve_listener` so the conformance test in\n`tests/rpc_conformance.rs` can exercise the dispatcher without\nbinding a TCP listener. Returns an `Err` only if the rate-limit\nconfiguration is invalid (`per_second \u00d7 burst_size` rejects).",
              "attributes": "",
              "line": 206
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_storage_market",
          "source": "sigil/node/sigil-node/src/rpc_storage_market.rs",
          "sha256": "640a7ea869026cc196760a266f8ae7a767dd2e27b341c41fbab6e05b228e47b0",
          "attributes": "",
          "items": [
            {
              "name": "rpc_storage_market::handle_list_storage_providers",
              "kind": "function_item",
              "signature": "pub async fn handle_list_storage_providers(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "rpc_storage_market::handle_get_storage_provider",
              "kind": "function_item",
              "signature": "pub async fn handle_get_storage_provider(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "rpc_storage_market::handle_get_storage_pin_request",
              "kind": "function_item",
              "signature": "pub async fn handle_get_storage_pin_request(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "rpc_storage_market::handle_list_storage_pin_requests_by_owner",
              "kind": "function_item",
              "signature": "pub async fn handle_list_storage_pin_requests_by_owner(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "rpc_storage_market::handle_get_storage_pin_contract",
              "kind": "function_item",
              "signature": "pub async fn handle_get_storage_pin_contract(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "rpc_storage_market::handle_list_storage_pin_contracts_by_provider",
              "kind": "function_item",
              "signature": "pub async fn handle_list_storage_pin_contracts_by_provider(\n    state: &RpcState,\n    req: &RpcRequest,\n) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 108
            },
            {
              "name": "rpc_storage_market::handle_get_storage_pin_receipt",
              "kind": "function_item",
              "signature": "pub async fn handle_get_storage_pin_receipt(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "rpc_storage_market::handle_get_storage_challenge",
              "kind": "function_item",
              "signature": "pub async fn handle_get_storage_challenge(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "",
              "line": 154
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_sync",
          "source": "sigil/node/sigil-node/src/rpc_sync.rs",
          "sha256": "6af5449c2c1e49e760696ff72c02cec61cfbc0ecfa7df91dbbddc14615485eaa",
          "attributes": "",
          "items": [
            {
              "name": "rpc_sync::SyncTaskConfig",
              "kind": "struct_item",
              "signature": "pub struct SyncTaskConfig {\n/// Full URLs of peer JSON-RPC endpoints to poll, e.g.\n\n/// `[\"http://sigil-val-1:26657/rpc\"]`. Order matters: peers are\n\n/// tried in order until one responds successfully.\n\npub peer_urls: Vec<String>,\n/// How often to poll for new blocks. Defaults to 2 s \u2014 well\n\n/// inside the 6 s canary block time, so an RPC pod typically\n\n/// observes a new block within 2\u20134 s of its finalization.\n\npub poll_interval: Duration,\n/// HTTP request timeout for a single RPC call. Defaults to 5 s.\n\npub request_timeout: Duration,\n/// Maximum number of blocks pulled in a single batch when\n\n/// catching up. Larger batches reduce RPC overhead during\n\n/// initial sync; smaller batches keep memory bounded.\n\npub max_batch_blocks: u64,\n/// Trusted parent hash for height 1. Sigil stores genesis as an initial\n\n/// state root, not as a height-0 block, so first-block continuity needs\n\n/// this root explicitly.\n\npub initial_parent_hash: Option<SigilHash>\n}",
              "docs": "Per-task configuration.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 51
            },
            {
              "name": "rpc_sync::SyncTaskConfig::from_peers_env",
              "kind": "function_item",
              "signature": "pub fn from_peers_env() -> Self;",
              "docs": "Construct from `SIGIL_PEERS` (comma-separated `host:port` list,\nmatching the validator gossip env var) by appending `/rpc`.",
              "attributes": "",
              "line": 87
            },
            {
              "name": "rpc_sync::SyncTaskConfig::with_initial_parent_hash",
              "kind": "function_item",
              "signature": "pub fn with_initial_parent_hash(mut self, hash: SigilHash) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 168
            },
            {
              "name": "rpc_sync::StateReplayConfig",
              "kind": "struct_item",
              "signature": "pub struct StateReplayConfig {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 175
            },
            {
              "name": "rpc_sync::StateReplayConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        state: Arc<dyn ExecutionState>,\n        expected_chain_id: String,\n        state_queries_safe: StateQueryGate,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 182
            },
            {
              "name": "rpc_sync::spawn_sync_task",
              "kind": "function_item",
              "signature": "pub fn spawn_sync_task(store: Arc<dyn BlockStore>, config: SyncTaskConfig) -> JoinHandle<()>;",
              "docs": "Spawn the sync task. Returns the JoinHandle so the caller can\nabort it on shutdown. If `config.peer_urls` is empty the task\nlogs a warning and exits immediately.",
              "attributes": "",
              "line": 231
            },
            {
              "name": "rpc_sync::spawn_state_replay_sync_task",
              "kind": "function_item",
              "signature": "pub fn spawn_state_replay_sync_task(\n    store: Arc<dyn BlockStore>,\n    state: Arc<dyn ExecutionState>,\n    expected_chain_id: String,\n    state_queries_safe: StateQueryGate,\n    config: SyncTaskConfig,\n) -> JoinHandle<()>;",
              "docs": "",
              "attributes": "",
              "line": 245
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_username",
          "source": "sigil/node/sigil-node/src/rpc_username.rs",
          "sha256": "140f03080ea6f535a4f751136436743bd96e3fd16d91d3eb42d3f5c5f8bf2322",
          "attributes": "",
          "items": [
            {
              "name": "rpc_username::handle_resolve_username",
              "kind": "function_item",
              "signature": "pub async fn handle_resolve_username(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_resolveUsername` \u2014 return the canonical record for a name.\n\nParams: `{ \"name\": \"<canonical>\" }` or positional `[\"<canonical>\"]`.\nReturns `null` if the name is not registered.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "rpc_username::handle_lookup_username",
              "kind": "function_item",
              "signature": "pub async fn handle_lookup_username(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_lookupUsername` \u2014 reverse-lookup a DID's primary `@username`.\n\nParams: `{ \"did\": \"did:oas:...\" }` or positional `[\"did:oas:...\"]`.\nReturns the canonical username string, or `null` if no primary is set.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "rpc_username::handle_list_usernames",
              "kind": "function_item",
              "signature": "pub async fn handle_list_usernames(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_listUsernames` \u2014 return all usernames owned by a DID.\n\nParams: `{ \"owner_did\": \"did:oas:...\" }` or positional `[\"did:oas:...\"]`.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "rpc_username::handle_search_username",
              "kind": "function_item",
              "signature": "pub async fn handle_search_username(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_searchUsername` \u2014 prefix search the username space.\n\nParams: `{ \"prefix\": \"ali\", \"limit\": 50 }` or positional `[\"ali\", 50]`.\nLimit defaults to 50 and caps at 200. Returns up to `limit` records whose\ncanonical name starts with the (canonicalized) prefix.",
              "attributes": "",
              "line": 110
            },
            {
              "name": "rpc_username::handle_get_username_auction",
              "kind": "function_item",
              "signature": "pub async fn handle_get_username_auction(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_getUsernameAuction` \u2014 fetch a single premium-name auction.\n\nParams: `{ \"name\": \"<canonical>\" }` or positional `[\"<canonical>\"]`.\nReturns `null` if no auction exists for that name.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "rpc_username::handle_list_open_auctions",
              "kind": "function_item",
              "signature": "pub async fn handle_list_open_auctions(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "`sigil_listOpenUsernameAuctions` \u2014 return all currently-open auctions.",
              "attributes": "",
              "line": 194
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_vigils",
          "source": "sigil/node/sigil-node/src/rpc_vigils.rs",
          "sha256": "4d4be28363a25a54b172f3a9431589cf33099a1e7c880f6ea2baae24395bbf41",
          "attributes": "#[cfg(feature = \"vigils-v1\")]",
          "items": [
            {
              "name": "rpc_vigils::handle_get_vigil_subscription",
              "kind": "function_item",
              "signature": "pub async fn handle_get_vigil_subscription(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 11
            },
            {
              "name": "rpc_vigils::handle_list_vigil_subscriptions",
              "kind": "function_item",
              "signature": "pub async fn handle_list_vigil_subscriptions(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 33
            },
            {
              "name": "rpc_vigils::handle_get_vigil_delivery_history",
              "kind": "function_item",
              "signature": "pub async fn handle_get_vigil_delivery_history(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 53
            },
            {
              "name": "rpc_vigils::handle_list_ingestors",
              "kind": "function_item",
              "signature": "pub async fn handle_list_ingestors(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 76
            },
            {
              "name": "rpc_vigils::handle_get_ingestor",
              "kind": "function_item",
              "signature": "pub async fn handle_get_ingestor(state: &RpcState, req: &RpcRequest) -> RpcResponse;",
              "docs": "",
              "attributes": "#[cfg(feature = \"vigils-v1\")]",
              "line": 90
            }
          ],
          "parseErrors": false
        },
        {
          "module": "snapshot",
          "source": "sigil/node/sigil-node/src/snapshot.rs",
          "sha256": "597583224e0430ac01045fa4e9be21904462f2e39529bd55a93862753fab7cc6",
          "attributes": "",
          "items": [
            {
              "name": "snapshot::SnapshotManifest",
              "kind": "struct_item",
              "signature": "pub struct SnapshotManifest {\n/// Manifest schema version. Version 1 is the launch format.\n\npub schema_version: u32,\n/// Chain ID this snapshot belongs to.\n\npub chain_id: String,\n/// Finalized block height captured by the snapshot.\n\npub height: u64,\n/// Hex-encoded state root at `height`.\n\npub state_root: String,\n/// Optional canonical block hash at `height`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub block_hash: Option<String>,\n/// Optional archive payload URI, used by `latest.json` indirection.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub payload_uri: Option<String>,\n/// Snapshot components present in the payload.\n\n#[serde(default)]\npub components: Vec<String>\n}",
              "docs": "Manifest committed next to every published snapshot.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 31
            },
            {
              "name": "snapshot::SnapshotRestoreOutcome",
              "kind": "struct_item",
              "signature": "pub struct SnapshotRestoreOutcome {\n/// Restored snapshot manifest.\n\npub manifest: SnapshotManifest,\n/// Final data directory populated by the restore.\n\npub data_dir: PathBuf\n}",
              "docs": "Result returned after a successful restore.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 53
            },
            {
              "name": "snapshot::SnapshotManifest::validate_for_chain",
              "kind": "function_item",
              "signature": "pub fn validate_for_chain(&self, chain_id: &str) -> Result<(), NodeError>;",
              "docs": "Validate static manifest fields before trusting payload bytes.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "snapshot::restore_snapshot_from_uri",
              "kind": "function_item",
              "signature": "pub async fn restore_snapshot_from_uri(\n    uri: &str,\n    data_dir: &Path,\n    chain_id: &str,\n    genesis: &GenesisConfig,\n) -> Result<SnapshotRestoreOutcome, NodeError>;",
              "docs": "Restore a snapshot URI into `data_dir` and verify its committed state root.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "snapshot::data_dir_empty_or_missing",
              "kind": "function_item",
              "signature": "pub fn data_dir_empty_or_missing(data_dir: &Path) -> Result<bool, NodeError>;",
              "docs": "Return true when startup may safely auto-restore into `data_dir`.",
              "attributes": "",
              "line": 99
            }
          ],
          "parseErrors": false
        },
        {
          "module": "staking",
          "source": "sigil/node/sigil-node/src/staking.rs",
          "sha256": "2a8b60b540bdf5d2110c261c729b80c8d17844c00bbec6fdeff8a7b3374d136a",
          "attributes": "",
          "items": [
            {
              "name": "staking::NetworkActivationPolicy",
              "kind": "struct_item",
              "signature": "pub struct NetworkActivationPolicy {\npub required_validators: usize,\npub required_block_producers: usize,\npub required_block_validators: usize,\npub min_block_producer_self_bond: u64,\npub min_block_validator_self_bond: u64,\npub min_total_eligible_stake: u64,\npub min_independent_stake_bps: Option<u16>,\npub l1fe_validator_dids: HashSet<String>,\npub protocol_upgrade_activation_height: Option<u64>,\npub enforce_activation_gate: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 219
            }
          ],
          "parseErrors": false
        },
        {
          "module": "storage_market_durable",
          "source": "sigil/node/sigil-node/src/storage_market_durable.rs",
          "sha256": "8fc26fa367e5859cf4e89035eb1f4830f5c349e8bd4b6e4eb8e0024ad83810b7",
          "attributes": "",
          "items": [
            {
              "name": "storage_market_durable::ArcStorageMarketStore",
              "kind": "type_item",
              "signature": "pub type ArcStorageMarketStore = Arc<DurableStorageMarketStore>;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "storage_market_durable::StorageMarketEvent",
              "kind": "struct_item",
              "signature": "pub struct StorageMarketEvent {\npub block_height: u64,\npub seq: u64,\npub topic: String,\npub actor_did: String,\npub provider_did: Option<String>,\npub request_id: Option<String>,\npub contract_id: Option<String>,\npub payload: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 65
            },
            {
              "name": "storage_market_durable::StorageMarketBatchOp",
              "kind": "enum_item",
              "signature": "pub enum StorageMarketBatchOp {\n    PutProvider(Arc<StorageProviderRecord>),\n    PutRequest(Arc<StoragePinRequest>),\n    IndexRequestOwner {\n        owner_did: String,\n        request_id: String,\n    },\n    PutContract(Arc<StoragePinContract>),\n    IndexContractProvider {\n        provider_did: String,\n        contract_id: String,\n    },\n    IndexContractRequest {\n        request_id: String,\n        contract_id: String,\n    },\n    PutReceipt(Arc<StoragePinReceipt>),\n    IndexReceiptContract {\n        contract_id: String,\n        receipt_id: String,\n    },\n    PutChallenge(Arc<StorageChallengeRecord>),\n    IndexChallengeContract {\n        contract_id: String,\n        challenge_id: String,\n    },\n    AppendEvent(Arc<StorageMarketEvent>),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 77
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct StorageMarketWriteBatch {\npub ops: Vec<StorageMarketBatchOp>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default, Clone)]",
              "line": 107
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::push",
              "kind": "function_item",
              "signature": "pub fn push(&mut self, op: StorageMarketBatchOp);",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::put_provider",
              "kind": "function_item",
              "signature": "pub fn put_provider(&mut self, record: StorageProviderRecord);",
              "docs": "",
              "attributes": "",
              "line": 120
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::put_request",
              "kind": "function_item",
              "signature": "pub fn put_request(&mut self, record: StoragePinRequest);",
              "docs": "",
              "attributes": "",
              "line": 124
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::put_contract",
              "kind": "function_item",
              "signature": "pub fn put_contract(&mut self, record: StoragePinContract);",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::put_receipt",
              "kind": "function_item",
              "signature": "pub fn put_receipt(&mut self, record: StoragePinReceipt);",
              "docs": "",
              "attributes": "",
              "line": 144
            },
            {
              "name": "storage_market_durable::StorageMarketWriteBatch::put_challenge",
              "kind": "function_item",
              "signature": "pub fn put_challenge(&mut self, record: StorageChallengeRecord);",
              "docs": "",
              "attributes": "",
              "line": 152
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore",
              "kind": "struct_item",
              "signature": "pub struct DurableStorageMarketStore {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 184
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 190
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::get_provider",
              "kind": "function_item",
              "signature": "pub fn get_provider(\n        &self,\n        provider_did: &str,\n    ) -> Result<Option<StorageProviderRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 245
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_providers",
              "kind": "function_item",
              "signature": "pub fn list_providers(&self) -> Result<Vec<StorageProviderRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 254
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::get_request",
              "kind": "function_item",
              "signature": "pub fn get_request(&self, request_id: &str) -> Result<Option<StoragePinRequest>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 263
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_requests_by_owner",
              "kind": "function_item",
              "signature": "pub fn list_requests_by_owner(\n        &self,\n        owner_did: &str,\n    ) -> Result<Vec<StoragePinRequest>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 269
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::get_contract",
              "kind": "function_item",
              "signature": "pub fn get_contract(&self, contract_id: &str) -> Result<Option<StoragePinContract>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 286
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_contracts_by_provider",
              "kind": "function_item",
              "signature": "pub fn list_contracts_by_provider(\n        &self,\n        provider_did: &str,\n    ) -> Result<Vec<StoragePinContract>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 292
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_contracts_by_request",
              "kind": "function_item",
              "signature": "pub fn list_contracts_by_request(\n        &self,\n        request_id: &str,\n    ) -> Result<Vec<StoragePinContract>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 311
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::get_receipt",
              "kind": "function_item",
              "signature": "pub fn get_receipt(&self, receipt_id: &str) -> Result<Option<StoragePinReceipt>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 328
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_receipts_by_contract",
              "kind": "function_item",
              "signature": "pub fn list_receipts_by_contract(\n        &self,\n        contract_id: &str,\n    ) -> Result<Vec<StoragePinReceipt>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 334
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::get_challenge",
              "kind": "function_item",
              "signature": "pub fn get_challenge(\n        &self,\n        challenge_id: &str,\n    ) -> Result<Option<StorageChallengeRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 353
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_challenges_by_contract",
              "kind": "function_item",
              "signature": "pub fn list_challenges_by_contract(\n        &self,\n        contract_id: &str,\n    ) -> Result<Vec<StorageChallengeRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 362
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_all_requests",
              "kind": "function_item",
              "signature": "pub fn list_all_requests(&self) -> Result<Vec<StoragePinRequest>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 381
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_all_contracts",
              "kind": "function_item",
              "signature": "pub fn list_all_contracts(&self) -> Result<Vec<StoragePinContract>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 390
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_all_receipts",
              "kind": "function_item",
              "signature": "pub fn list_all_receipts(&self) -> Result<Vec<StoragePinReceipt>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 399
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::list_all_challenges",
              "kind": "function_item",
              "signature": "pub fn list_all_challenges(&self) -> Result<Vec<StorageChallengeRecord>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 408
            },
            {
              "name": "storage_market_durable::DurableStorageMarketStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &StorageMarketWriteBatch) -> Result<(), NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 417
            }
          ],
          "parseErrors": false
        },
        {
          "module": "storage_migration",
          "source": "sigil/node/sigil-node/src/storage_migration.rs",
          "sha256": "288ce6a54dfc2b8676f0d081658e64f05dff186fc8760732020adcc75e9106ec",
          "attributes": "",
          "items": [
            {
              "name": "storage_migration::StorageMigrationManifest",
              "kind": "struct_item",
              "signature": "pub struct StorageMigrationManifest {\npub from_backend: String,\npub to_backend: String,\npub source_height: u64,\npub source_block_hash: String,\npub source_state_root: String,\npub migrated_state_root: String,\npub akashakv_revision: String,\npub migration_started_at: String,\npub migration_completed_at: String,\npub migration_tool_version: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "storage_migration::StorageStatus",
              "kind": "struct_item",
              "signature": "pub struct StorageStatus {\npub backend: String,\npub version: String,\npub migration_status: String,\npub source_backend: Option<String>,\npub state_root: Option<String>,\npub latest_verified_height: u64,\npub akashakv_revision: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee_verify",
          "source": "sigil/node/sigil-node/src/tee_verify/mod.rs",
          "sha256": "e8aaa931f756a68434130a608ad88f92d26d2ec19ab323ab6c1f7bf616f224f4",
          "attributes": "#[cfg(feature = \"tee-verify\")]",
          "items": [
            {
              "name": "tee_verify::arm_cca",
              "kind": "module",
              "signature": "pub mod arm_cca;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 35
            },
            {
              "name": "tee_verify::sev_snp",
              "kind": "module",
              "signature": "pub mod sev_snp;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 36
            },
            {
              "name": "tee_verify::sgx_dcap",
              "kind": "module",
              "signature": "pub mod sgx_dcap;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 37
            },
            {
              "name": "tee_verify::tdx",
              "kind": "module",
              "signature": "pub mod tdx;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 38
            },
            {
              "name": "tee_verify::TeeVerifyOk",
              "kind": "struct_item",
              "signature": "pub struct TeeVerifyOk {\npub vendor: &'static str,\n/// Hex-decoded measurement bytes (e.g. MRENCLAVE for SGX, MRTD for\n\n/// TDX, measurement digest for SEV-SNP, RIM/RPM for Arm CCA).\n\npub measurement: Vec<u8>,\n/// Optional freshness deadline (chain epoch). When set, the\n\n/// executor will reject the receipt if `current_epoch > expiry`.\n\npub expiry_epoch: Option<u64>\n}",
              "docs": "Outcome of a successful vendor verification. The executor uses this\nto anchor the verified measurement and (optionally) an expiry epoch\nonto the on-chain audit trail.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 44
            },
            {
              "name": "tee_verify::TeeVerifyError",
              "kind": "enum_item",
              "signature": "pub enum TeeVerifyError {\n    #[error(\"tee-verify: vendor {vendor:?} not supported\")]\n    UnsupportedVendor { vendor: String },\n    #[error(\"tee-verify: {vendor} report malformed: {detail}\")]\n    MalformedReport {\n        vendor: &'static str,\n        detail: String,\n    },\n    #[error(\"tee-verify: {vendor} signature invalid: {detail}\")]\n    InvalidSignature {\n        vendor: &'static str,\n        detail: String,\n    },\n    #[error(\"tee-verify: {vendor} certificate chain invalid: {detail}\")]\n    InvalidCertChain {\n        vendor: &'static str,\n        detail: String,\n    },\n    #[error(\"tee-verify: {vendor} attestation expired/stale: {detail}\")]\n    ExpiredOrStale {\n        vendor: &'static str,\n        detail: String,\n    },\n    #[error(\"tee-verify: {vendor} measurement does not match policy expectation: {detail}\")]\n    WrongMeasurement {\n        vendor: &'static str,\n        detail: String,\n    },\n    /// Production verifier could not run because the vendor reference\n    /// material (root certs, reference measurements, vendor SDK) has\n    /// not been plugged in. Production builds MUST treat this as a\n    /// hard rejection \u2014 under no circumstances does the executor\n    /// silently fall back to \"accept\".\n    #[error(\n        \"tee-verify: {vendor} verification blocked: real vendor fixture material not yet bundled \u2014 \\\n         do not enable T3 settlement for this vendor on mainnet until reference signing keys, \\\n         root certificates, and reference measurements are wired\"\n    )]\n    FixtureMaterialRequired { vendor: &'static str },\n    #[error(\"tee-verify: {vendor} internal: {detail}\")]\n    Internal {\n        vendor: &'static str,\n        detail: String,\n    },\n}",
              "docs": "Per-vendor failure modes. Every variant carries the failing vendor so\nthe executor's typed error / audit trail can attribute the rejection.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]",
              "line": 57
            },
            {
              "name": "tee_verify::TeeVerifier",
              "kind": "trait_item",
              "signature": "pub trait TeeVerifier: Send + Sync {\n    /// Vendor identifier as it appears on `TeeAttestation::vendor`.\n    fn vendor(&self) -> &'static str;\n\n    /// Verify the attestation. `now_epoch` is the chain epoch the\n    /// executor is operating in (used for freshness checks).\n    fn verify(\n        &self,\n        attestation: &TeeAttestation,\n        now_epoch: u64,\n    ) -> Result<TeeVerifyOk, TeeVerifyError>;\n}",
              "docs": "Vendor verifier contract. One instance per vendor.",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 104
            },
            {
              "name": "tee_verify::TeeVerifierRegistry",
              "kind": "struct_item",
              "signature": "pub struct TeeVerifierRegistry {\n\n}",
              "docs": "Registry of vendor verifiers, keyed by vendor string.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Clone)]",
              "line": 119
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 130
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::production",
              "kind": "function_item",
              "signature": "pub fn production() -> Self;",
              "docs": "Production registry: real verifier per vendor. Each fails closed\nwith `FixtureMaterialRequired` until reference material is wired.\nSGX DCAP, TDX, Arm CCA remain Phase 13 stubs. SEV-SNP also stays\nin stub mode here because no policy is being passed; callers\nthat have a `ComputePolicy` should use\n[`production_with_policy`] to activate the real SEV-SNP\nverifier.",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 143
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::production_with_policy",
              "kind": "function_item",
              "signature": "pub fn production_with_policy(policy: &crate::compute_state::ComputePolicy) -> Self;",
              "docs": "Phase 14a / 14b \u2014 production registry that pulls per-vendor\ntrust anchors from the chain config. Each vendor's real verifier\nis feature-gated; when its feature is off, the vendor falls back\nto the Phase 13 fail-closed stub.\n\nSGX DCAP: real when `tee-verify-sgx-dcap` is on **and\n`policy.sgx_dcap_trust_anchors` is `Some`.\nSEV-SNP:  real when `tee-verify-sev-snp` is on **and\n`policy.sev_snp_trust_anchors` is `Some`.\nTDX / Arm CCA: Phase 13 stubs.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[cfg(any(\n        feature = \"tee-verify-sev-snp\",\n        feature = \"tee-verify-sgx-dcap\",\n        feature = \"tee-verify-tdx\",\n        feature = \"tee-verify-arm-cca\"\n    ))]",
              "line": 168
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, verifier: Arc<dyn TeeVerifier>);",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 229
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::verify",
              "kind": "function_item",
              "signature": "pub fn verify(\n        &self,\n        attestation: &TeeAttestation,\n        now_epoch: u64,\n    ) -> Result<TeeVerifyOk, TeeVerifyError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 233
            },
            {
              "name": "tee_verify::TeeVerifierRegistry::supports_vendor",
              "kind": "function_item",
              "signature": "pub fn supports_vendor(&self, vendor: &str) -> bool;",
              "docs": "Returns true when the vendor has a registered verifier.",
              "attributes": "#[cfg(feature = \"tee-verify\")]",
              "line": 249
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee_verify::arm_cca",
          "source": "sigil/node/sigil-node/src/tee_verify/arm_cca.rs",
          "sha256": "1905d07ff90174d91dfaacbf2672c990857d76a4f15d72b420753e6776ae7cf4",
          "attributes": "#[cfg(feature = \"tee-verify\")]",
          "items": [
            {
              "name": "tee_verify::arm_cca::ArmCcaVerifier",
              "kind": "struct_item",
              "signature": "pub struct ArmCcaVerifier {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Default)]",
              "line": 94
            },
            {
              "name": "tee_verify::arm_cca::ArmCcaVerifier::with_anchors",
              "kind": "function_item",
              "signature": "pub fn with_anchors(anchors: ArmCcaTrustAnchors) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[cfg(feature = \"tee-verify-arm-cca\")]",
              "line": 101
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee_verify::sev_snp",
          "source": "sigil/node/sigil-node/src/tee_verify/sev_snp.rs",
          "sha256": "f3dc7ce356f8bd64a952a51db09ae3ef7a8084c86dce103b1b6104f924cbfc94",
          "attributes": "#[cfg(feature = \"tee-verify\")]",
          "items": [
            {
              "name": "tee_verify::sev_snp::SevSnpVerifier",
              "kind": "struct_item",
              "signature": "pub struct SevSnpVerifier {\n\n}",
              "docs": "Default verifier (no anchors). Fails closed for every well-formed\nattestation with `FixtureMaterialRequired` \u2014 preserves Phase 13\nbehaviour for builds that don't enable `tee-verify-sev-snp` or that\nleave `sev_snp_trust_anchors = None` in genesis.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Default)]",
              "line": 127
            },
            {
              "name": "tee_verify::sev_snp::SevSnpVerifier::with_anchors",
              "kind": "function_item",
              "signature": "pub fn with_anchors(anchors: SevSnpTrustAnchors) -> Self;",
              "docs": "Construct a real-verification SevSnpVerifier. The verifier\naccepts a report iff its signature verifies against one of\n`anchors.acceptable_vcek_pubkeys` AND the report's MEASUREMENT\nfield is on `anchors.measurement_allowlist`.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[cfg(feature = \"tee-verify-sev-snp\")]",
              "line": 138
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee_verify::sgx_dcap",
          "source": "sigil/node/sigil-node/src/tee_verify/sgx_dcap.rs",
          "sha256": "d180e57a32504468166d7cd36e363b6440142d100dab7422e5213cd9646cd829",
          "attributes": "#[cfg(feature = \"tee-verify\")]",
          "items": [
            {
              "name": "tee_verify::sgx_dcap::SgxDcapVerifier",
              "kind": "struct_item",
              "signature": "pub struct SgxDcapVerifier {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Default)]",
              "line": 142
            },
            {
              "name": "tee_verify::sgx_dcap::SgxDcapVerifier::with_anchors",
              "kind": "function_item",
              "signature": "pub fn with_anchors(anchors: SgxDcapTrustAnchors) -> Self;",
              "docs": "Construct a real-verification SgxDcapVerifier. The verifier\naccepts a quote iff every gate (chain, signatures, MR allowlist,\nREPORT_DATA, freshness, TCB) passes.",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[cfg(feature = \"tee-verify-sgx-dcap\")]",
              "line": 152
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee_verify::tdx",
          "source": "sigil/node/sigil-node/src/tee_verify/tdx.rs",
          "sha256": "fa692e3fd95e6822f4343c25a69647767ebaa2f725c1fcfe40c55b6cc07b95ac",
          "attributes": "#[cfg(feature = \"tee-verify\")]",
          "items": [
            {
              "name": "tee_verify::tdx::TdxVerifier",
              "kind": "struct_item",
              "signature": "pub struct TdxVerifier {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[derive(Default)]",
              "line": 140
            },
            {
              "name": "tee_verify::tdx::TdxVerifier::with_anchors",
              "kind": "function_item",
              "signature": "pub fn with_anchors(anchors: TdxTrustAnchors) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"tee-verify\")]\n#[cfg(feature = \"tee-verify-tdx\")]",
              "line": 147
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tower_durable",
          "source": "sigil/node/sigil-node/src/tower_durable.rs",
          "sha256": "efdbd6312c2e97e03c6160ebeb1c7566e4420d3a2a1a36a06fd28239e4582cb6",
          "attributes": "",
          "items": [
            {
              "name": "tower_durable::FinalityStateSnapshot",
              "kind": "struct_item",
              "signature": "pub struct FinalityStateSnapshot {\n/// Latest epoch that reached 2/3 supermajority (justified).\n\npub justified_epoch: u64,\n/// Latest epoch that was finalized (justified epoch + 1 also justified).\n\npub finalized_epoch: u64\n}",
              "docs": "Minimal persisted snapshot of the in-memory `FinalityState`.\n\nWe store only the justified and finalized epoch highwater marks; the full\nvote set is rebuilt from individual attestation entries on restart.",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 73
            },
            {
              "name": "tower_durable::DurableTowerStore",
              "kind": "struct_item",
              "signature": "pub struct DurableTowerStore {\n\n}",
              "docs": "Durable Tower finality store backed by AkashaKV.\n\nStores validator registry records, per-epoch finality checkpoints,\nattestations (Casper FFG votes), and justified/finalized epoch markers.\nAll multi-write operations should go through [`TowerWriteBatch`] +\n[`DurableTowerStore::commit_batch`] for crash safety.",
              "attributes": "",
              "line": 195
            },
            {
              "name": "tower_durable::DurableTowerStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the Tower subsystem.",
              "attributes": "",
              "line": 203
            },
            {
              "name": "tower_durable::DurableTowerStore::get_validator",
              "kind": "function_item",
              "signature": "pub fn get_validator(&self, did: &str) -> Result<Option<ValidatorRecord>, NodeError>;",
              "docs": "Fetch a validator record by DID. Returns `None` if not registered.",
              "attributes": "",
              "line": 272
            },
            {
              "name": "tower_durable::DurableTowerStore::put_validator",
              "kind": "function_item",
              "signature": "pub fn put_validator(&self, record: &ValidatorRecord) -> Result<(), NodeError>;",
              "docs": "Insert or replace a validator record.",
              "attributes": "",
              "line": 281
            },
            {
              "name": "tower_durable::DurableTowerStore::list_all_validators",
              "kind": "function_item",
              "signature": "pub fn list_all_validators(&self) -> Result<Vec<ValidatorRecord>, NodeError>;",
              "docs": "Return all validator records in the store.",
              "attributes": "",
              "line": 288
            },
            {
              "name": "tower_durable::DurableTowerStore::get_evidence",
              "kind": "function_item",
              "signature": "pub fn get_evidence(\n        &self,\n        evidence_hash: &sigil_core::hash::SigilHash,\n    ) -> Result<Option<SlashingEvidence>, NodeError>;",
              "docs": "Fetch accepted slashing evidence by evidence hash.",
              "attributes": "",
              "line": 299
            },
            {
              "name": "tower_durable::DurableTowerStore::put_evidence",
              "kind": "function_item",
              "signature": "pub fn put_evidence(&self, evidence: &SlashingEvidence) -> Result<(), NodeError>;",
              "docs": "Persist accepted slashing evidence.",
              "attributes": "",
              "line": 310
            },
            {
              "name": "tower_durable::DurableTowerStore::get_checkpoint",
              "kind": "function_item",
              "signature": "pub fn get_checkpoint(&self, epoch: u64) -> Result<Option<FinalityCheckpoint>, NodeError>;",
              "docs": "Fetch a finality checkpoint by epoch. Returns `None` if not found.",
              "attributes": "",
              "line": 319
            },
            {
              "name": "tower_durable::DurableTowerStore::put_checkpoint",
              "kind": "function_item",
              "signature": "pub fn put_checkpoint(&self, cp: &FinalityCheckpoint) -> Result<(), NodeError>;",
              "docs": "Insert or replace a finality checkpoint.",
              "attributes": "",
              "line": 328
            },
            {
              "name": "tower_durable::DurableTowerStore::list_checkpoints",
              "kind": "function_item",
              "signature": "pub fn list_checkpoints(&self) -> Result<Vec<FinalityCheckpoint>, NodeError>;",
              "docs": "Return all checkpoints ordered by epoch (ascending \u2014 big-endian key).",
              "attributes": "",
              "line": 335
            },
            {
              "name": "tower_durable::DurableTowerStore::get_finality_state",
              "kind": "function_item",
              "signature": "pub fn get_finality_state(&self) -> Result<Option<FinalityStateSnapshot>, NodeError>;",
              "docs": "Fetch the persisted finality state snapshot (justified/finalized epoch\nhighwater marks). Returns `None` if the node has never committed\nfinality state \u2014 callers should initialize from genesis in that case.",
              "attributes": "",
              "line": 348
            },
            {
              "name": "tower_durable::DurableTowerStore::put_finality_state",
              "kind": "function_item",
              "signature": "pub fn put_finality_state(&self, snap: &FinalityStateSnapshot) -> Result<(), NodeError>;",
              "docs": "Persist the finality state snapshot.",
              "attributes": "",
              "line": 356
            },
            {
              "name": "tower_durable::DurableTowerStore::put_attestation",
              "kind": "function_item",
              "signature": "pub fn put_attestation(&self, vote: &FinalityVote) -> Result<(), NodeError>;",
              "docs": "Store a finality vote for `(target_epoch, voter_did)`.\nOverwrites any previous vote by the same validator for the same epoch.",
              "attributes": "",
              "line": 365
            },
            {
              "name": "tower_durable::DurableTowerStore::get_attestation",
              "kind": "function_item",
              "signature": "pub fn get_attestation(\n        &self,\n        epoch: u64,\n        voter_did: &str,\n    ) -> Result<Option<FinalityVote>, NodeError>;",
              "docs": "Fetch the attestation cast by `voter_did` for `epoch`. Returns `None`\nif no vote has been recorded.",
              "attributes": "",
              "line": 373
            },
            {
              "name": "tower_durable::DurableTowerStore::list_attestations_for_epoch",
              "kind": "function_item",
              "signature": "pub fn list_attestations_for_epoch(&self, epoch: u64) -> Result<Vec<FinalityVote>, NodeError>;",
              "docs": "Return all attestations cast for `epoch`.",
              "attributes": "",
              "line": 386
            },
            {
              "name": "tower_durable::DurableTowerStore::mark_justified",
              "kind": "function_item",
              "signature": "pub fn mark_justified(&self, epoch: u64) -> Result<(), NodeError>;",
              "docs": "Mark `epoch` as justified.",
              "attributes": "",
              "line": 398
            },
            {
              "name": "tower_durable::DurableTowerStore::is_epoch_justified",
              "kind": "function_item",
              "signature": "pub fn is_epoch_justified(&self, epoch: u64) -> Result<bool, NodeError>;",
              "docs": "Returns `true` if `epoch` has been marked justified.",
              "attributes": "",
              "line": 403
            },
            {
              "name": "tower_durable::DurableTowerStore::mark_finalized",
              "kind": "function_item",
              "signature": "pub fn mark_finalized(&self, epoch: u64) -> Result<(), NodeError>;",
              "docs": "Mark `epoch` as finalized.",
              "attributes": "",
              "line": 408
            },
            {
              "name": "tower_durable::DurableTowerStore::is_epoch_finalized",
              "kind": "function_item",
              "signature": "pub fn is_epoch_finalized(&self, epoch: u64) -> Result<bool, NodeError>;",
              "docs": "Returns `true` if `epoch` has been marked finalized.",
              "attributes": "",
              "line": 413
            },
            {
              "name": "tower_durable::DurableTowerStore::list_finalized_epochs",
              "kind": "function_item",
              "signature": "pub fn list_finalized_epochs(&self) -> Result<Vec<u64>, NodeError>;",
              "docs": "Return all epoch numbers that have been marked finalized, in\nascending order.",
              "attributes": "",
              "line": 419
            },
            {
              "name": "tower_durable::DurableTowerStore::flush",
              "kind": "function_item",
              "signature": "pub fn flush(&self) -> Result<(), NodeError>;",
              "docs": "Force a flush of AkashaKV memtables to SSTables. Useful in tests.",
              "attributes": "",
              "line": 437
            },
            {
              "name": "tower_durable::DurableTowerStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Graceful shutdown \u2014 flushes memtables and stops background tasks.",
              "attributes": "",
              "line": 444
            },
            {
              "name": "tower_durable::DurableTowerStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &TowerWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically via a single AkashaKV MVCC\ntransaction.\n\nAtomicity guarantee: if any individual operation fails the transaction\nis dropped (auto-aborted via `Drop`) before commit, leaving zero\npartial state visible. Either every operation in the batch lands or\nnone do.",
              "attributes": "",
              "line": 459
            },
            {
              "name": "tower_durable::DurableTowerStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the namespace prefix used by every Tower key.",
              "attributes": "",
              "line": 511
            },
            {
              "name": "tower_durable::ArcTowerStore",
              "kind": "type_item",
              "signature": "pub type ArcTowerStore = Arc<DurableTowerStore>;",
              "docs": "Convenience type alias for a shared durable Tower store.",
              "attributes": "",
              "line": 517
            },
            {
              "name": "tower_durable::TowerBatchOp",
              "kind": "enum_item",
              "signature": "pub enum TowerBatchOp {\n    /// Insert or replace a validator record.\n    PutValidator(ValidatorRecord),\n    /// Persist accepted slashing evidence.\n    PutEvidence(SlashingEvidence),\n    /// Insert or replace a finality checkpoint.\n    PutCheckpoint(FinalityCheckpoint),\n    /// Persist the finality state snapshot.\n    PutFinalityState(FinalityStateSnapshot),\n    /// Record a Casper FFG attestation.\n    PutAttestation(FinalityVote),\n    /// Mark an epoch as justified.\n    MarkJustified(u64),\n    /// Mark an epoch as finalized.\n    MarkFinalized(u64),\n}",
              "docs": "An individual operation inside a [`TowerWriteBatch`].",
              "attributes": "#[derive(Clone)]",
              "line": 525
            },
            {
              "name": "tower_durable::TowerWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct TowerWriteBatch {\n\n}",
              "docs": "Write batch accumulating all mutations for a single Tower consensus step.\n\nBuild the batch during the step handler, then call\n[`crate::executor::ExecutionState::commit_tower_tx`] at the end to apply\nall mutations atomically. A crash before `commit_tower_tx` leaves zero\npartial state on disk.",
              "attributes": "#[derive(Default)]",
              "line": 549
            },
            {
              "name": "tower_durable::TowerWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty write batch.",
              "attributes": "",
              "line": 555
            },
            {
              "name": "tower_durable::TowerWriteBatch::put_validator",
              "kind": "function_item",
              "signature": "pub fn put_validator(&mut self, record: ValidatorRecord);",
              "docs": "Queue a validator record write.",
              "attributes": "",
              "line": 560
            },
            {
              "name": "tower_durable::TowerWriteBatch::put_evidence",
              "kind": "function_item",
              "signature": "pub fn put_evidence(&mut self, evidence: SlashingEvidence);",
              "docs": "Queue accepted slashing evidence.",
              "attributes": "",
              "line": 565
            },
            {
              "name": "tower_durable::TowerWriteBatch::put_checkpoint",
              "kind": "function_item",
              "signature": "pub fn put_checkpoint(&mut self, cp: FinalityCheckpoint);",
              "docs": "Queue a finality checkpoint write.",
              "attributes": "",
              "line": 570
            },
            {
              "name": "tower_durable::TowerWriteBatch::put_finality_state",
              "kind": "function_item",
              "signature": "pub fn put_finality_state(&mut self, snap: FinalityStateSnapshot);",
              "docs": "Queue a finality state snapshot write.",
              "attributes": "",
              "line": 575
            },
            {
              "name": "tower_durable::TowerWriteBatch::put_attestation",
              "kind": "function_item",
              "signature": "pub fn put_attestation(&mut self, vote: FinalityVote);",
              "docs": "Queue an attestation write.",
              "attributes": "",
              "line": 580
            },
            {
              "name": "tower_durable::TowerWriteBatch::mark_justified",
              "kind": "function_item",
              "signature": "pub fn mark_justified(&mut self, epoch: u64);",
              "docs": "Queue a justified-epoch marker write.",
              "attributes": "",
              "line": 585
            },
            {
              "name": "tower_durable::TowerWriteBatch::mark_finalized",
              "kind": "function_item",
              "signature": "pub fn mark_finalized(&mut self, epoch: u64);",
              "docs": "Queue a finalized-epoch marker write.",
              "attributes": "",
              "line": 590
            },
            {
              "name": "tower_durable::TowerWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of operations queued.",
              "attributes": "",
              "line": 595
            },
            {
              "name": "tower_durable::TowerWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns `true` if no operations have been queued.",
              "attributes": "",
              "line": 600
            },
            {
              "name": "tower_durable::TowerWriteBatch::into_ops",
              "kind": "function_item",
              "signature": "pub fn into_ops(self) -> Vec<TowerBatchOp>;",
              "docs": "Consume the batch and return the inner op list.",
              "attributes": "",
              "line": 605
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tower_runtime",
          "source": "sigil/node/sigil-node/src/tower_runtime.rs",
          "sha256": "8831e5419118b5cf96167a2aedd6ee29e33624051e4cb2cb132a61532e1bd13e",
          "attributes": "",
          "items": [
            {
              "name": "tower_runtime::AttestationSender",
              "kind": "type_item",
              "signature": "pub type AttestationSender = mpsc::UnboundedSender<TowerAttestationMessage>;",
              "docs": "A queued outbound attestation waiting to be gossiped.\n\n`BlockEngine::run` drains this channel and dispatches the message to the\nnetwork layer (or logs it until the gossip transport is connected).",
              "attributes": "",
              "line": 39
            },
            {
              "name": "tower_runtime::AttestationReceiver",
              "kind": "type_item",
              "signature": "pub type AttestationReceiver = mpsc::UnboundedReceiver<TowerAttestationMessage>;",
              "docs": "Receiver side \u2014 held by the gossip transport task.",
              "attributes": "",
              "line": 41
            },
            {
              "name": "tower_runtime::TowerRuntime",
              "kind": "struct_item",
              "signature": "pub struct TowerRuntime {\n\n}",
              "docs": "Drives Tower attestation gossip for one node.\n\n# Thread safety\n\n`TowerRuntime` is intended to be constructed once during `BlockEngine::new`\nand then used via shared `Arc<dyn ExecutionState>`. All methods are\n`&self` and interact with execution state through the sync trait, which is\n`Send + Sync`.",
              "attributes": "",
              "line": 143
            },
            {
              "name": "tower_runtime::TowerRuntime::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        validator_did: String,\n        signing_key: SigningKey,\n        state: Arc<dyn ExecutionState>,\n        region: String,\n    ) -> (Self, AttestationReceiver);",
              "docs": "Create a new `TowerRuntime`.\n\nReturns `(runtime, receiver)`. The caller should store the `receiver`\nand drain it to forward attestations to the gossip transport.",
              "attributes": "",
              "line": 161
            },
            {
              "name": "tower_runtime::TowerRuntime::on_epoch_boundary",
              "kind": "function_item",
              "signature": "pub fn on_epoch_boundary(&self, epoch: u64, block_hash: SigilHash) -> Result<(), NodeError>;",
              "docs": "Called from the block production loop at every epoch boundary.\n\nIf this validator is a Tower committee member, produces and emits a\nsigned attestation, then applies it locally so the node's own vote is\ncounted without waiting for a gossip round-trip.\n\n`block_hash` is the hash of the last block in the completing epoch\n(i.e. the epoch-boundary block that is the attestation target).",
              "attributes": "",
              "line": 186
            },
            {
              "name": "tower_runtime::TowerRuntime::on_attestation_received",
              "kind": "function_item",
              "signature": "pub fn on_attestation_received(&self, msg: TowerAttestationMessage) -> Result<(), NodeError>;",
              "docs": "Called when a peer's attestation arrives on [`GossipTopic::TowerAttestations`].\n\nSteps:\n1. Validate that `target_epoch > source_epoch`.\n2. Look up the sender's public key from the Tower registry.\n3. Verify the Ed25519 signature.\n4. Persist via [`commit_tower_tx`] and advance [`FinalityState`].",
              "attributes": "",
              "line": 269
            }
          ],
          "parseErrors": false
        },
        {
          "module": "username_durable",
          "source": "sigil/node/sigil-node/src/username_durable.rs",
          "sha256": "5e5694245d3926a18b0218daae8f43c4b02989d27c932af6936ceab4a2d5a41e",
          "attributes": "",
          "items": [
            {
              "name": "username_durable::UsernameEvent",
              "kind": "struct_item",
              "signature": "pub struct UsernameEvent {\npub block_height: u64,\npub seq: u64,\npub kind: String,\npub name: String,\npub actor_did: String,\npub payload: serde_json::Value\n}",
              "docs": "Lightweight audit event appended on every username state transition.",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 174
            },
            {
              "name": "username_durable::DurableUsernameStore",
              "kind": "struct_item",
              "signature": "pub struct DurableUsernameStore {\n\n}",
              "docs": "Durable on-chain username registry.\n\nAll multi-write operations must use [`UsernameWriteBatch`] +\n[`commit_batch`](Self::commit_batch). A crash before commit returns\nleaves zero partial state.",
              "attributes": "",
              "line": 219
            },
            {
              "name": "username_durable::DurableUsernameStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &Path) -> Result<Self, NodeError>;",
              "docs": "Open (or create) the store at `path`. The directory becomes the\nAkashaKV data root for the username subsystem.",
              "attributes": "",
              "line": 227
            },
            {
              "name": "username_durable::DurableUsernameStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, canonical_name: &str) -> Result<Option<UsernameRecord>, NodeError>;",
              "docs": "Fetch a username record by canonical name. Returns `None` if not found.",
              "attributes": "",
              "line": 305
            },
            {
              "name": "username_durable::DurableUsernameStore::lookup_reverse",
              "kind": "function_item",
              "signature": "pub fn lookup_reverse(&self, owner_did: &str) -> Result<Option<String>, NodeError>;",
              "docs": "Look up the primary username for a DID. Returns `None` if no primary\nis set.",
              "attributes": "",
              "line": 314
            },
            {
              "name": "username_durable::DurableUsernameStore::get_reverse_record",
              "kind": "function_item",
              "signature": "pub fn get_reverse_record(\n        &self,\n        owner_did: &str,\n    ) -> Result<Option<ReverseUsernameRecord>, NodeError>;",
              "docs": "Fetch the full reverse-lookup record (DID + primary). Convenience for\ncallers that need the typed shape.",
              "attributes": "",
              "line": 325
            },
            {
              "name": "username_durable::DurableUsernameStore::list_for_owner",
              "kind": "function_item",
              "signature": "pub fn list_for_owner(&self, owner_did: &str) -> Result<Vec<UsernameRecord>, NodeError>;",
              "docs": "Return all username records owned by `did`.",
              "attributes": "",
              "line": 337
            },
            {
              "name": "username_durable::DurableUsernameStore::list_all",
              "kind": "function_item",
              "signature": "pub fn list_all(&self) -> Result<Vec<UsernameRecord>, NodeError>;",
              "docs": "Return every username record in the store. O(n); for explorer use.",
              "attributes": "",
              "line": 370
            },
            {
              "name": "username_durable::DurableUsernameStore::get_auction",
              "kind": "function_item",
              "signature": "pub fn get_auction(&self, canonical_name: &str) -> Result<Option<UsernameAuction>, NodeError>;",
              "docs": "Fetch an auction by canonical name. Returns `None` if no auction\nexists for that name.",
              "attributes": "",
              "line": 382
            },
            {
              "name": "username_durable::DurableUsernameStore::list_all_auctions",
              "kind": "function_item",
              "signature": "pub fn list_all_auctions(&self) -> Result<Vec<UsernameAuction>, NodeError>;",
              "docs": "Return every auction in the store. O(n); for explorer use.",
              "attributes": "",
              "line": 390
            },
            {
              "name": "username_durable::DurableUsernameStore::get_dispute",
              "kind": "function_item",
              "signature": "pub fn get_dispute(&self, dispute_id: &str) -> Result<Option<UsernameDispute>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 400
            },
            {
              "name": "username_durable::DurableUsernameStore::list_all_disputes",
              "kind": "function_item",
              "signature": "pub fn list_all_disputes(&self) -> Result<Vec<UsernameDispute>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 407
            },
            {
              "name": "username_durable::DurableUsernameStore::commit_batch",
              "kind": "function_item",
              "signature": "pub fn commit_batch(&self, batch: &UsernameWriteBatch) -> Result<(), NodeError>;",
              "docs": "Apply all operations in `batch` atomically inside one AkashaKV\nMVCC transaction.",
              "attributes": "",
              "line": 419
            },
            {
              "name": "username_durable::DurableUsernameStore::put_record",
              "kind": "function_item",
              "signature": "pub fn put_record(&self, record: &UsernameRecord) -> Result<(), NodeError>;",
              "docs": "Convenience: register a username via a one-op batch. Used by tests\nand simple scripts; production executor uses `commit_batch` directly.",
              "attributes": "",
              "line": 485
            },
            {
              "name": "username_durable::DurableUsernameStore::delete_record",
              "kind": "function_item",
              "signature": "pub fn delete_record(&self, canonical_name: &str, owner_did: &str) -> Result<(), NodeError>;",
              "docs": "Convenience for tests: drop a record + owner-index outside of a batch.",
              "attributes": "",
              "line": 495
            },
            {
              "name": "username_durable::DurableUsernameStore::namespace_prefix",
              "kind": "function_item",
              "signature": "pub fn namespace_prefix() -> &'static [u8];",
              "docs": "Test helper: return the root namespace prefix.",
              "attributes": "",
              "line": 502
            },
            {
              "name": "username_durable::DurableUsernameStore::close",
              "kind": "function_item",
              "signature": "pub fn close(&self) -> Result<(), NodeError>;",
              "docs": "Close the underlying KV. Test helper only \u2014 the production lifecycle\ndrops the store with the runtime.",
              "attributes": "",
              "line": 508
            },
            {
              "name": "username_durable::ArcUsernameStore",
              "kind": "type_item",
              "signature": "pub type ArcUsernameStore = Arc<DurableUsernameStore>;",
              "docs": "Convenience type alias for a shared durable username store.",
              "attributes": "",
              "line": 516
            },
            {
              "name": "username_durable::UsernameBatchOp",
              "kind": "enum_item",
              "signature": "pub enum UsernameBatchOp {\n    /// Insert or replace a username record.\n    PutRecord(Box<UsernameRecord>),\n    /// Add an owner-index entry (presence marker).\n    IndexOwner { owner_did: String, name: String },\n    /// Remove an owner-index entry.\n    DeindexOwner { owner_did: String, name: String },\n    /// Delete the record (release / forfeit / expiry-reclaim).\n    DeleteRecord { name: String },\n    /// Set the reverse-lookup primary for a DID.\n    SetReverse { owner_did: String, primary: String },\n    /// Clear the reverse-lookup primary for a DID.\n    ClearReverse { owner_did: String },\n    /// Append an immutable audit event.\n    AppendEvent(UsernameEvent),\n    /// Insert or replace an auction record.\n    PutAuction(Box<UsernameAuction>),\n    /// Delete an auction record (after settlement).\n    DeleteAuction { name: String },\n    /// Insert or replace a dispute record.\n    PutDispute(Box<UsernameDispute>),\n    /// Delete a dispute record (after resolution + grace).\n    DeleteDispute { dispute_id: String },\n}",
              "docs": "One operation inside a [`UsernameWriteBatch`].",
              "attributes": "#[derive(Clone)]",
              "line": 524
            },
            {
              "name": "username_durable::UsernameWriteBatch",
              "kind": "struct_item",
              "signature": "pub struct UsernameWriteBatch {\n\n}",
              "docs": "Mutation accumulator for one username transaction.",
              "attributes": "#[derive(Default)]",
              "line": 551
            },
            {
              "name": "username_durable::UsernameWriteBatch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 556
            },
            {
              "name": "username_durable::UsernameWriteBatch::put_record",
              "kind": "function_item",
              "signature": "pub fn put_record(&mut self, record: UsernameRecord);",
              "docs": "",
              "attributes": "",
              "line": 560
            },
            {
              "name": "username_durable::UsernameWriteBatch::index_owner",
              "kind": "function_item",
              "signature": "pub fn index_owner(&mut self, owner_did: impl Into<String>, name: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 564
            },
            {
              "name": "username_durable::UsernameWriteBatch::deindex_owner",
              "kind": "function_item",
              "signature": "pub fn deindex_owner(&mut self, owner_did: impl Into<String>, name: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 571
            },
            {
              "name": "username_durable::UsernameWriteBatch::delete_record",
              "kind": "function_item",
              "signature": "pub fn delete_record(&mut self, name: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 578
            },
            {
              "name": "username_durable::UsernameWriteBatch::set_reverse",
              "kind": "function_item",
              "signature": "pub fn set_reverse(&mut self, owner_did: impl Into<String>, primary: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 583
            },
            {
              "name": "username_durable::UsernameWriteBatch::clear_reverse",
              "kind": "function_item",
              "signature": "pub fn clear_reverse(&mut self, owner_did: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 590
            },
            {
              "name": "username_durable::UsernameWriteBatch::append_event",
              "kind": "function_item",
              "signature": "pub fn append_event(&mut self, event: UsernameEvent);",
              "docs": "",
              "attributes": "",
              "line": 596
            },
            {
              "name": "username_durable::UsernameWriteBatch::put_auction",
              "kind": "function_item",
              "signature": "pub fn put_auction(&mut self, auction: UsernameAuction);",
              "docs": "",
              "attributes": "",
              "line": 600
            },
            {
              "name": "username_durable::UsernameWriteBatch::delete_auction",
              "kind": "function_item",
              "signature": "pub fn delete_auction(&mut self, name: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 605
            },
            {
              "name": "username_durable::UsernameWriteBatch::put_dispute",
              "kind": "function_item",
              "signature": "pub fn put_dispute(&mut self, dispute: UsernameDispute);",
              "docs": "",
              "attributes": "",
              "line": 610
            },
            {
              "name": "username_durable::UsernameWriteBatch::delete_dispute",
              "kind": "function_item",
              "signature": "pub fn delete_dispute(&mut self, dispute_id: impl Into<String>);",
              "docs": "",
              "attributes": "",
              "line": 615
            },
            {
              "name": "username_durable::UsernameWriteBatch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 621
            },
            {
              "name": "username_durable::UsernameWriteBatch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 625
            }
          ],
          "parseErrors": false
        },
        {
          "module": "validator_agent",
          "source": "sigil/node/sigil-node/src/validator_agent.rs",
          "sha256": "2dc94cb294981f784f917b3bde3045fedcfd8b1fe088727c6aab89cf9692c1e7",
          "attributes": "",
          "items": [
            {
              "name": "validator_agent::ValidatorAgent",
              "kind": "struct_item",
              "signature": "pub struct ValidatorAgent {\n\n}",
              "docs": "A single validator agent with an OAS identity and Ed25519 keypair.\n\nFollows the Forge `ForgeAgentIdentity` pattern: each agent has an OAS DID,\na signing key, and a lineage reference back to a human root.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "validator_agent::ValidatorAgent::did",
              "kind": "function_item",
              "signature": "pub fn did(&self) -> &str;",
              "docs": "The agent's OAS DID (e.g., `\"did:oas:sigil:agent:testnet-validator-0\"`).",
              "attributes": "",
              "line": 118
            },
            {
              "name": "validator_agent::ValidatorAgent::human_root_did",
              "kind": "function_item",
              "signature": "pub fn human_root_did(&self) -> &str;",
              "docs": "The human root DID that anchors this agent's lineage chain.",
              "attributes": "",
              "line": 123
            },
            {
              "name": "validator_agent::ValidatorAgent::generation",
              "kind": "function_item",
              "signature": "pub fn generation(&self) -> u32;",
              "docs": "Lineage generation depth (1 = direct child of human root).",
              "attributes": "",
              "line": 128
            },
            {
              "name": "validator_agent::ValidatorAgent::is_producer",
              "kind": "function_item",
              "signature": "pub fn is_producer(&self) -> bool;",
              "docs": "Whether this agent is a block producer (Coordinator role).",
              "attributes": "",
              "line": 133
            },
            {
              "name": "validator_agent::ValidatorAgent::mode",
              "kind": "function_item",
              "signature": "pub fn mode(&self) -> ValidatorGenesisMode;",
              "docs": "The agent's validator mode.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "validator_agent::ValidatorAgent::stake",
              "kind": "function_item",
              "signature": "pub fn stake(&self) -> u64;",
              "docs": "The agent's stake in micro-MINT.",
              "attributes": "",
              "line": 143
            },
            {
              "name": "validator_agent::ValidatorAgent::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, message: &[u8]) -> Option<Signature>;",
              "docs": "Sign a message with the agent's Ed25519 key.",
              "attributes": "",
              "line": 148
            },
            {
              "name": "validator_agent::ValidatorAgent::verifying_key_bytes",
              "kind": "function_item",
              "signature": "pub fn verifying_key_bytes(&self) -> [u8; 32];",
              "docs": "The agent's verifying (public) key as 32 bytes.",
              "attributes": "",
              "line": 153
            },
            {
              "name": "validator_agent::ValidatorAgent::short_id",
              "kind": "function_item",
              "signature": "pub fn short_id(&self) -> String;",
              "docs": "Short display identifier for logging (DID truncated).",
              "attributes": "",
              "line": 158
            },
            {
              "name": "validator_agent::BootstrapTeam",
              "kind": "struct_item",
              "signature": "pub struct BootstrapTeam {\n\n}",
              "docs": "The bootstrap agent team that runs the testnet from genesis.\n\nManages the initial set of validator agents created from genesis config.\nHandles proposer rotation and provides agent identities for block production.\nExternal validators can register to join the team later.\n\nFollows the Forge collaboration model:\n- Block Producers \u2192 Coordinator role (propose blocks)\n- Block Validators \u2192 Worker role (validate and vote)",
              "attributes": "",
              "line": 189
            },
            {
              "name": "validator_agent::BootstrapTeam::from_genesis",
              "kind": "function_item",
              "signature": "pub fn from_genesis(genesis: &GenesisConfig) -> Result<Self, NodeError>;",
              "docs": "Assemble the bootstrap team from genesis validators.\n\nEach genesis validator gets an Ed25519 public identity from its genesis\nconsensus key. Block Producers form the proposer rotation.",
              "attributes": "",
              "line": 205
            },
            {
              "name": "validator_agent::BootstrapTeam::current_proposer",
              "kind": "function_item",
              "signature": "pub fn current_proposer(&self) -> &str;",
              "docs": "Get the current block proposer's DID (round-robin rotation).",
              "attributes": "",
              "line": 262
            },
            {
              "name": "validator_agent::BootstrapTeam::advance_proposer",
              "kind": "function_item",
              "signature": "pub fn advance_proposer(&self) -> &str;",
              "docs": "Advance to the next proposer in the rotation. Returns the new proposer DID.",
              "attributes": "",
              "line": 269
            },
            {
              "name": "validator_agent::BootstrapTeam::proposer_agent",
              "kind": "function_item",
              "signature": "pub fn proposer_agent(&self) -> Option<&ValidatorAgent>;",
              "docs": "Get the agent for the current proposer.",
              "attributes": "",
              "line": 276
            },
            {
              "name": "validator_agent::BootstrapTeam::proposer_sign",
              "kind": "function_item",
              "signature": "pub fn proposer_sign(&self, data: &[u8]) -> Option<Signature>;",
              "docs": "Sign data with the current proposer's key.",
              "attributes": "",
              "line": 282
            },
            {
              "name": "validator_agent::BootstrapTeam::agent_count",
              "kind": "function_item",
              "signature": "pub fn agent_count(&self) -> usize;",
              "docs": "Number of agents in the team.",
              "attributes": "",
              "line": 287
            },
            {
              "name": "validator_agent::BootstrapTeam::producer_count",
              "kind": "function_item",
              "signature": "pub fn producer_count(&self) -> usize;",
              "docs": "Number of block producers in the rotation.",
              "attributes": "",
              "line": 292
            },
            {
              "name": "validator_agent::BootstrapTeam::total_stake",
              "kind": "function_item",
              "signature": "pub fn total_stake(&self) -> u64;",
              "docs": "Total staked amount across all agents.",
              "attributes": "",
              "line": 297
            },
            {
              "name": "validator_agent::BootstrapTeam::agent_dids",
              "kind": "function_item",
              "signature": "pub fn agent_dids(&self) -> Vec<&str>;",
              "docs": "All agent DIDs.",
              "attributes": "",
              "line": 302
            },
            {
              "name": "validator_agent::BootstrapTeam::agent_by_did",
              "kind": "function_item",
              "signature": "pub fn agent_by_did(&self, did: &str) -> Option<&ValidatorAgent>;",
              "docs": "Look up an agent by DID.",
              "attributes": "",
              "line": 307
            },
            {
              "name": "validator_agent::BootstrapTeam::validator_agents",
              "kind": "function_item",
              "signature": "pub fn validator_agents(&self) -> Vec<&ValidatorAgent>;",
              "docs": "Get all block validator agents (non-producers).",
              "attributes": "",
              "line": 312
            },
            {
              "name": "validator_agent::BootstrapTeam::rotation_order",
              "kind": "function_item",
              "signature": "pub fn rotation_order(&self) -> &[String];",
              "docs": "The proposer rotation order (DIDs of block producers).",
              "attributes": "",
              "line": 317
            }
          ],
          "parseErrors": false
        },
        {
          "module": "weave",
          "source": "sigil/node/sigil-node/src/weave.rs",
          "sha256": "6bf11846dbe99d002a296a6921e1fb13f2419245f04a25cbd7177ef9d7bcefdf",
          "attributes": "",
          "items": [
            {
              "name": "weave::ArtifactMetadata",
              "kind": "struct_item",
              "signature": "pub struct ArtifactMetadata {\npub media_type: String,\npub schema: String,\npub producer_did: String,\npub signature: Vec<u8>,\npub created_height: u64\n}",
              "docs": "Metadata supplied when publishing an off-chain artifact.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "weave::WeaveArtifactStore",
              "kind": "trait_item",
              "signature": "pub trait WeaveArtifactStore: Send + Sync {\n    fn put_artifact(\n        &self,\n        bytes: &[u8],\n        metadata: ArtifactMetadata,\n    ) -> Result<ArtifactCommitment, NodeError>;\n    fn get_artifact(&self, cid_or_hash: &str) -> Result<Vec<u8>, NodeError>;\n    fn verify_artifact(&self, commitment: &ArtifactCommitment, bytes: &[u8]) -> bool;\n    fn pin_artifact(&self, commitment: &ArtifactCommitment) -> Result<(), NodeError>;\n    fn mirror_artifact(&self, commitment: &ArtifactCommitment) -> Result<(), NodeError>;\n}",
              "docs": "Explicit boundary for Weave-backed content-addressed artifacts.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "weave::WeftArtifactPublication",
              "kind": "struct_item",
              "signature": "pub struct WeftArtifactPublication {\npub commitment: ArtifactCommitment,\npub manifest: weave_weft::manifest::WeftManifest,\npub manifest_bytes: Vec<u8>,\npub root_cid: String\n}",
              "docs": "Published Weft artifact returned by the local Sigil adapter.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 38
            },
            {
              "name": "weave::LocalWeftArtifactStore",
              "kind": "struct_item",
              "signature": "pub struct LocalWeftArtifactStore {\n\n}",
              "docs": "Concrete local Weft store used by Sigil RPC nodes.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 47
            },
            {
              "name": "weave::LocalWeftArtifactStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: impl AsRef<Path>, peer_id: impl Into<String>) -> Result<Self, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "weave::LocalWeftArtifactStore::publish_weft_artifact",
              "kind": "function_item",
              "signature": "pub fn publish_weft_artifact(\n        &self,\n        bytes: &[u8],\n        metadata: ArtifactMetadata,\n        chunk_size: Option<usize>,\n    ) -> Result<WeftArtifactPublication, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "weave::LocalWeftArtifactStore::publish_weft_artifact_reader",
              "kind": "function_item",
              "signature": "pub fn publish_weft_artifact_reader<R: Read>(\n        &self,\n        reader: R,\n        metadata: ArtifactMetadata,\n        chunk_size: Option<usize>,\n    ) -> Result<WeftArtifactPublication, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "weave::LocalWeftArtifactStore::fetch_weft_payload",
              "kind": "function_item",
              "signature": "pub async fn fetch_weft_payload(\n        &self,\n        root: weave_weft::WeftHash,\n    ) -> Result<Vec<u8>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 178
            },
            {
              "name": "weave::LocalWeftArtifactStore::manifest_bytes",
              "kind": "function_item",
              "signature": "pub fn manifest_bytes(&self, root: weave_weft::WeftHash) -> Result<Option<Vec<u8>>, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 188
            },
            {
              "name": "weave::LocalWeftArtifactStore::status",
              "kind": "function_item",
              "signature": "pub fn status(&self) -> Result<weave_weft::local::LocalWeftStatus, NodeError>;",
              "docs": "",
              "attributes": "",
              "line": 194
            },
            {
              "name": "weave::CommitmentOnlyWeaveStore",
              "kind": "struct_item",
              "signature": "pub struct CommitmentOnlyWeaveStore;",
              "docs": "Commitment-only verifier used when the Weave model package is not linked\ninto the node binary. Retrieval/pin/mirror fail closed.",
              "attributes": "#[derive(Debug, Default, Clone, Copy)]",
              "line": 306
            },
            {
              "name": "weave::commitment_for_bytes",
              "kind": "function_item",
              "signature": "pub fn commitment_for_bytes(bytes: &[u8], metadata: ArtifactMetadata) -> ArtifactCommitment;",
              "docs": "Build a commitment without storing bytes. Useful for tests, RPC helpers,\nand future domain-specific transaction/RPC surfaces that already carry\nartifact metadata fields.",
              "attributes": "",
              "line": 357
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ws",
          "source": "sigil/node/sigil-node/src/ws.rs",
          "sha256": "447f928444a41a8f618d616faf200d6abd801ce50049a89c422369a17fe5f9c9",
          "attributes": "",
          "items": [
            {
              "name": "ws::BlockHeaderEvent",
              "kind": "struct_item",
              "signature": "pub struct BlockHeaderEvent {\npub height: u64,\npub hash: String,\npub parent_hash: String,\npub proposer_did: String,\npub tx_count: usize,\npub finalized_at: u64\n}",
              "docs": "A finalized block header \u2014 the event broadcast to `newBlock`.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 79
            },
            {
              "name": "ws::TxAdmittedEvent",
              "kind": "struct_item",
              "signature": "pub struct TxAdmittedEvent {\npub hash: String,\npub kind: String,\npub fee: u64,\npub accepted_at: u64\n}",
              "docs": "A mempool-admitted transaction header \u2014 `newTx` event.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 90
            },
            {
              "name": "ws::ConsensusEvent",
              "kind": "struct_item",
              "signature": "pub struct ConsensusEvent {\npub event: String,\npub round: Option<u64>,\npub at: u64\n}",
              "docs": "A redacted consensus event \u2014 `consensus` topic.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 99
            },
            {
              "name": "ws::AccountDeltaEvent",
              "kind": "struct_item",
              "signature": "pub struct AccountDeltaEvent {\npub did: String,\npub tx_hash: String,\npub block_height: u64,\npub tx_index: u32,\npub status: String,\npub topics: Vec<String>,\npub state_partitions: Vec<String>\n}",
              "docs": "Identity-bound receipt summary delivered only on `/ws-private`.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 107
            },
            {
              "name": "ws::ContractWsEvent",
              "kind": "struct_item",
              "signature": "pub struct ContractWsEvent {\npub contract: String,\npub tx_hash: String,\npub block_height: u64,\npub tx_index: u32,\npub source: String,\npub topic: String,\npub data_hash: String\n}",
              "docs": "Contract event envelope delivered only on `/ws-private`.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 119
            },
            {
              "name": "ws::WsBroadcaster",
              "kind": "struct_item",
              "signature": "pub struct WsBroadcaster {\npub new_block: broadcast::Sender<BlockHeaderEvent>,\npub new_tx: broadcast::Sender<TxAdmittedEvent>,\npub consensus: broadcast::Sender<ConsensusEvent>,\npub account_delta: broadcast::Sender<AccountDeltaEvent>,\npub contract_event: broadcast::Sender<ContractWsEvent>\n}",
              "docs": "Shared broadcaster the node uses to fan events out to WebSocket\nsubscribers. Cloned cheaply via `Arc`.",
              "attributes": "#[derive(Clone)]",
              "line": 136
            },
            {
              "name": "ws::WsBroadcaster::publish_block",
              "kind": "function_item",
              "signature": "pub fn publish_block(&self, ev: BlockHeaderEvent);",
              "docs": "Publish a finalized block. Called from the engine when a block\nreaches finality. No-op if no subscribers are connected.",
              "attributes": "",
              "line": 157
            },
            {
              "name": "ws::WsBroadcaster::publish_tx",
              "kind": "function_item",
              "signature": "pub fn publish_tx(&self, ev: TxAdmittedEvent);",
              "docs": "Publish a mempool-admit event. Called from\n`handle_send_transaction` after admission.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "ws::WsBroadcaster::publish_consensus",
              "kind": "function_item",
              "signature": "pub fn publish_consensus(&self, ev: ConsensusEvent);",
              "docs": "Publish a (redacted) consensus event.",
              "attributes": "",
              "line": 168
            },
            {
              "name": "ws::WsBroadcaster::publish_account_delta",
              "kind": "function_item",
              "signature": "pub fn publish_account_delta(&self, ev: AccountDeltaEvent);",
              "docs": "Publish a private account delta. Called after a block has been\npersisted so subscribers never see events for uncommitted state.",
              "attributes": "",
              "line": 174
            },
            {
              "name": "ws::WsBroadcaster::publish_contract_event",
              "kind": "function_item",
              "signature": "pub fn publish_contract_event(&self, ev: ContractWsEvent);",
              "docs": "Publish a private contract event envelope.",
              "attributes": "",
              "line": 179
            },
            {
              "name": "ws::BROADCASTER",
              "kind": "static_item",
              "signature": "pub static BROADCASTER: Lazy<Arc<WsBroadcaster>>;",
              "docs": "Process-wide broadcaster. Built lazily so tests and headless boot\nphases do not pay the cost.",
              "attributes": "",
              "line": 186
            },
            {
              "name": "ws::public_ws_handler",
              "kind": "function_item",
              "signature": "pub async fn public_ws_handler(\n    State(_state): State<crate::rpc_server::RpcState>,\n    ws: WebSocketUpgrade,\n) -> impl IntoResponse;",
              "docs": "`GET /ws` \u2014 public read-only subscription endpoint.",
              "attributes": "",
              "line": 224
            },
            {
              "name": "ws::private_ws_handler",
              "kind": "function_item",
              "signature": "pub async fn private_ws_handler(\n    State(state): State<crate::rpc_server::RpcState>,\n    headers: axum::http::HeaderMap,\n    ws: WebSocketUpgrade,\n) -> axum::response::Response;",
              "docs": "`GET /ws-private` \u2014 identity-bound subscriptions (validator profile,\nbearer-token authenticated).\n\nPer CA-3, identity-bound subscriptions live on a separate endpoint\nfrom the public read-only `/ws`. Authentication is a bearer token\nmatched against the `SIGIL_WS_PRIVATE_TOKEN` env var.\n\n**Caveat \u2014 token vs. mTLS:** the dispatched D9 prompt called for\nmTLS or OAS DID-signed handshake. Bearer-token auth ships now\nbecause mTLS in the Sigil k8s cluster requires a validator-cert\nbootstrap pipeline that is not yet operational. When that lands\n(Phase C), the bearer check gets replaced \u2014 the endpoint surface\nstays the same so wallets and operators do not break.",
              "attributes": "",
              "line": 245
            },
            {
              "name": "ws::publish_private_receipt_events",
              "kind": "function_item",
              "signature": "pub fn publish_private_receipt_events(receipts: &[Receipt]);",
              "docs": "Publish identity-bound and contract-bound events from committed receipts.\n\nThis is called after block persistence succeeds. The public `/ws`\nendpoint never sees these messages; only `/ws-private` subscribers with a\nvalid operator token can subscribe to `account.<did>` or\n`contract.<address>`.",
              "attributes": "",
              "line": 307
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-tower",
      "version": "0.1.0",
      "source": "sigil/node/sigil-tower",
      "manifestSha256": "bc4f3d6f19bb3a82eb3f20ffaab05d63ad9a74b8e8fceec6b2f78191abb7f43d",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-tower",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-tower/src/lib.rs",
          "sha256": "a2b911e2da29573e2e9fa930dd7843c77623846e1985671cf930cc4071c10143",
          "attributes": "",
          "items": [
            {
              "name": "committee",
              "kind": "module",
              "signature": "pub mod committee;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "evidence",
              "kind": "module",
              "signature": "pub mod evidence;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "finality",
              "kind": "module",
              "signature": "pub mod finality;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "inclusion",
              "kind": "module",
              "signature": "pub mod inclusion;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "registry",
              "kind": "module",
              "signature": "pub mod registry;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "slot",
              "kind": "module",
              "signature": "pub mod slot;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "tower_committee",
              "kind": "module",
              "signature": "pub mod tower_committee;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "types",
              "kind": "module",
              "signature": "pub mod types;",
              "docs": "",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        },
        {
          "module": "committee",
          "source": "sigil/node/sigil-tower/src/committee.rs",
          "sha256": "e701e78f509a14fcfd8164d98ad64aa5e7e160d5946c0151136fc06c8686c722",
          "attributes": "",
          "items": [
            {
              "name": "committee::Committee",
              "kind": "struct_item",
              "signature": "pub struct Committee {\n/// Slot number this committee is assigned to.\n\npub slot: u64,\n/// DIDs of the 21 Block Producers.\n\npub block_producers: Vec<String>,\n/// DIDs of the 100 Block Validators.\n\npub block_validators: Vec<String>\n}",
              "docs": "A committee assigned to a specific slot.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "committee::CommitteeSelector",
              "kind": "struct_item",
              "signature": "pub struct CommitteeSelector {\n/// Minimum number of Block Producers required (default: 21).\n\npub min_producers: usize,\n/// Minimum number of Block Validators required (default: 100).\n\npub min_validators: usize,\n/// Maximum validators per human root DID in a single committee (default: 2).\n\npub max_per_human_root: usize,\n/// Minimum distinct geographic regions in a committee (default: 3).\n\npub min_regions: usize\n}",
              "docs": "Configuration for the committee selection algorithm.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "committee::CommitteeSelector::select",
              "kind": "function_item",
              "signature": "pub fn select(\n        &self,\n        registry: &ValidatorRegistry,\n        slot: u64,\n        randomness: &[u8; 32],\n    ) -> Result<Committee, TowerError>;",
              "docs": "Select a committee for the given slot using the provided randomness.\n\nThe algorithm:\n1. Gather all active validators and sort by inclusion score (descending)\n2. Shuffle using Fisher-Yates with a deterministic seed derived from\n   slot number and provided randomness\n3. Greedily select BPs: highest-scored first, enforcing human root limit\n   and geographic diversity\n4. Greedily select BVs from remaining validators with same constraints",
              "attributes": "",
              "line": 64
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-tower/src/error.rs",
          "sha256": "37b92148281baf5bee8af05929f32c0b7712fb27af6534a9853e6a7e08e46f31",
          "attributes": "",
          "items": [
            {
              "name": "error::TowerError",
              "kind": "enum_item",
              "signature": "pub enum TowerError {\n    #[error(\"invalid validator: {0}\")]\n    InvalidValidator(String),\n    #[error(\"duplicate validator: {0}\")]\n    DuplicateValidator(String),\n    #[error(\"validator not found: {0}\")]\n    ValidatorNotFound(String),\n    #[error(\"slot error: {0}\")]\n    SlotError(String),\n    #[error(\"committee error: {0}\")]\n    CommitteeError(String),\n    #[error(\"finality error: {0}\")]\n    FinalityError(String),\n    #[error(\"evidence error: {0}\")]\n    EvidenceError(String),\n    #[error(\"tower committee error: {0}\")]\n    TowerCommitteeError(String),\n    #[error(\"serialization error: {0}\")]\n    SerializationError(String),\n}",
              "docs": "Errors that can occur in Tower operations.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, thiserror::Error)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "evidence",
          "source": "sigil/node/sigil-tower/src/evidence.rs",
          "sha256": "1df5575a476b477625728b72c07ae4938cd1816b41bc90d2fd5cc834f9f46044",
          "attributes": "",
          "items": [
            {
              "name": "evidence::validate_evidence",
              "kind": "function_item",
              "signature": "pub fn validate_evidence(evidence: &SlashingEvidence) -> Result<bool, TowerError>;",
              "docs": "Validate that slashing evidence is internally consistent.\n\nReturns `Ok(true)` if the evidence is valid, `Ok(false)` if it's invalid\nbut parseable, or `Err` if the evidence is malformed.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "evidence::calculate_penalty",
              "kind": "function_item",
              "signature": "pub fn calculate_penalty(evidence_type: &EvidenceType, validator_stake: u64) -> u64;",
              "docs": "Calculate the penalty amount for a slashing evidence type.\n\n- Double sign: 100% slash\n- Surround vote: 100% slash\n- Invalid block: 50% slash\n- Downtime: 1% per missed epoch (missed_slots / SLOTS_PER_EPOCH)",
              "attributes": "",
              "line": 98
            },
            {
              "name": "evidence::compute_evidence_hash",
              "kind": "function_item",
              "signature": "pub fn compute_evidence_hash(evidence: &SlashingEvidence) -> Result<SigilHash, TowerError>;",
              "docs": "Compute the evidence hash for a piece of evidence.\n\nSECURITY: Returns an error instead of silently hashing an empty byte\narray on serialization failure. Hashing empty bytes would produce a\nfixed, predictable hash that could collide across unrelated evidence,\nenabling duplicate-evidence suppression attacks.",
              "attributes": "",
              "line": 127
            }
          ],
          "parseErrors": false
        },
        {
          "module": "finality",
          "source": "sigil/node/sigil-tower/src/finality.rs",
          "sha256": "bab1ac1f3f5ad74f8d93b95bce5090274f698ef4016b6dfb21ec1d6c558ccc63",
          "attributes": "",
          "items": [
            {
              "name": "finality::FinalityUpdate",
              "kind": "enum_item",
              "signature": "pub enum FinalityUpdate {\n    /// No state change resulted from this vote.\n    NoChange,\n    /// A checkpoint was justified at the given epoch.\n    Justified(u64),\n    /// A checkpoint was finalized at the given epoch.\n    Finalized(u64),\n}",
              "docs": "Result of adding a finality vote.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "finality::FinalityState",
              "kind": "struct_item",
              "signature": "pub struct FinalityState {\n/// The most recently justified checkpoint.\n\npub justified_checkpoint: FinalityCheckpoint,\n/// The most recently finalized checkpoint.\n\npub finalized_checkpoint: FinalityCheckpoint,\n/// Votes for the current target epoch, keyed by voter DID.\n\npub votes: HashMap<String, FinalityVote>\n}",
              "docs": "The finality state machine tracking justification and finalization progress.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "finality::FinalityState::new",
              "kind": "function_item",
              "signature": "pub fn new(genesis_checkpoint: FinalityCheckpoint) -> Self;",
              "docs": "Create a new finality state rooted at the given genesis checkpoint.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "finality::FinalityState::add_vote",
              "kind": "function_item",
              "signature": "pub fn add_vote(\n        &mut self,\n        vote: FinalityVote,\n        total_stake: u64,\n    ) -> Result<FinalityUpdate, TowerError>;",
              "docs": "Add a finality vote and check whether it triggers justification or finalization.\n\nReturns `FinalityUpdate` indicating what changed.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "finality::FinalityState::is_justified",
              "kind": "function_item",
              "signature": "pub fn is_justified(&self, epoch: u64) -> bool;",
              "docs": "Whether the given epoch has been justified.",
              "attributes": "",
              "line": 136
            },
            {
              "name": "finality::FinalityState::is_finalized",
              "kind": "function_item",
              "signature": "pub fn is_finalized(&self, epoch: u64) -> bool;",
              "docs": "Whether the given epoch has been finalized.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "finality::FinalityState::required_stake_for_justification",
              "kind": "function_item",
              "signature": "pub fn required_stake_for_justification(&self, total_stake: u64) -> u64;",
              "docs": "Returns the minimum stake required for justification (2/3 of total stake).\n\nSECURITY: Uses u128 intermediate arithmetic to prevent overflow when\ntotal_stake is large (e.g., > u64::MAX / 2). Without this, the\nmultiplication `total_stake * 2` would silently wrap, potentially\nallowing justification with far less than 2/3 stake -- a consensus\nsafety violation that could enable finality attacks.",
              "attributes": "",
              "line": 152
            },
            {
              "name": "finality::FinalityState::clear_votes",
              "kind": "function_item",
              "signature": "pub fn clear_votes(&mut self);",
              "docs": "Clear votes for a new voting period (e.g., epoch transition).",
              "attributes": "",
              "line": 163
            }
          ],
          "parseErrors": false
        },
        {
          "module": "inclusion",
          "source": "sigil/node/sigil-tower/src/inclusion.rs",
          "sha256": "0589e0afc403dc8b62d9128b06d9c7d8149e7d5c1be3c221f3efcd7baf038d67",
          "attributes": "",
          "items": [
            {
              "name": "inclusion::InclusionScorer",
              "kind": "struct_item",
              "signature": "pub struct InclusionScorer {\n/// Weight for normalized stake (default 0.25).\n\npub w_stake: f64,\n/// Weight for OATS trust score (default 0.25).\n\npub w_oats: f64,\n/// Weight for uptime ratio (default 0.20).\n\npub w_uptime: f64,\n/// Weight for lineage quality (default 0.15).\n\npub w_lineage: f64,\n/// Weight for liveness / recent participation (default 0.15).\n\npub w_liveness: f64,\n/// Weight for concentration penalty (default 0.10, subtracted).\n\npub w_concentration: f64\n}",
              "docs": "Weights for the 6-component inclusion scoring formula.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "inclusion::ValidatorMetrics",
              "kind": "struct_item",
              "signature": "pub struct ValidatorMetrics {\n/// Validator's stake as a fraction of total stake.\n\npub normalized_stake: f64,\n/// OATS composite trust score (0.0 - 1.0).\n\npub oats_score: f64,\n/// Uptime ratio over recent window (0.0 - 1.0).\n\npub uptime_ratio: f64,\n/// Normalized lineage quality / depth (0.0 - 1.0).\n\npub lineage_depth: f64,\n/// Recent participation / liveness rate (0.0 - 1.0).\n\npub liveness_score: f64,\n/// Concentration ratio: how much this validator dominates stake (0.0 - 1.0).\n\npub concentration_ratio: f64\n}",
              "docs": "Metrics for a single validator used in inclusion scoring.\nAll values should be in [0.0, 1.0].",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "inclusion::ValidatorMetrics::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), String>;",
              "docs": "Validate that all metric fields are within the expected [0.0, 1.0] range\nand contain no NaN or infinite values.\n\nSECURITY: Unbounded or NaN metrics could produce nonsensical inclusion\nscores, allowing a malicious validator to game committee selection by\ninjecting out-of-range values that inflate their score.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "inclusion::InclusionScorer::score",
              "kind": "function_item",
              "signature": "pub fn score(&self, metrics: &ValidatorMetrics) -> f64;",
              "docs": "Compute the inclusion score for a single validator's metrics.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "inclusion::InclusionScorer::score_all",
              "kind": "function_item",
              "signature": "pub fn score_all(\n        &self,\n        validators: &[(&ValidatorRecord, &ValidatorMetrics)],\n    ) -> Vec<(String, f64)>;",
              "docs": "Score all validators, returning a vec of (DID, score) pairs sorted\nby score descending.",
              "attributes": "",
              "line": 106
            }
          ],
          "parseErrors": false
        },
        {
          "module": "registry",
          "source": "sigil/node/sigil-tower/src/registry.rs",
          "sha256": "7a32975ff883a4e3f931a9889f3a68f6f0fe6f96868eb19f19a250adb47be2a3",
          "attributes": "",
          "items": [
            {
              "name": "registry::ValidatorRegistry",
              "kind": "struct_item",
              "signature": "pub struct ValidatorRegistry {\n\n}",
              "docs": "The Tower validator registry, supporting unbounded validator sets with\nefficient lookups by status, region, and human root lineage.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "registry::ValidatorRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty registry.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "registry::ValidatorRegistry::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, record: ValidatorRecord) -> Result<(), TowerError>;",
              "docs": "Register a new validator. Returns an error if the DID is already registered.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "registry::ValidatorRegistry::update",
              "kind": "function_item",
              "signature": "pub fn update(&mut self, did: &str, update: ValidatorUpdate) -> Result<(), TowerError>;",
              "docs": "Apply a `ValidatorUpdate` to an existing validator.",
              "attributes": "",
              "line": 73
            },
            {
              "name": "registry::ValidatorRegistry::exit",
              "kind": "function_item",
              "signature": "pub fn exit(&mut self, did: &str) -> Result<(), TowerError>;",
              "docs": "Exit a validator from the active set, transitioning to `Exited` status.",
              "attributes": "",
              "line": 120
            },
            {
              "name": "registry::ValidatorRegistry::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, did: &str) -> Option<&ValidatorRecord>;",
              "docs": "Look up a validator by DID.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "registry::ValidatorRegistry::active_validators",
              "kind": "function_item",
              "signature": "pub fn active_validators(&self) -> Vec<&ValidatorRecord>;",
              "docs": "Returns all validators with `Active` status.",
              "attributes": "",
              "line": 164
            },
            {
              "name": "registry::ValidatorRegistry::validators_in_region",
              "kind": "function_item",
              "signature": "pub fn validators_in_region(&self, region: GeographicRegion) -> Vec<&ValidatorRecord>;",
              "docs": "Returns all validators in the given geographic region.",
              "attributes": "",
              "line": 176
            },
            {
              "name": "registry::ValidatorRegistry::validators_by_human_root",
              "kind": "function_item",
              "signature": "pub fn validators_by_human_root(&self, human_root_did: &str) -> Vec<&ValidatorRecord>;",
              "docs": "Returns all validators that share the given human root DID.",
              "attributes": "",
              "line": 188
            },
            {
              "name": "registry::ValidatorRegistry::total_active_stake",
              "kind": "function_item",
              "signature": "pub fn total_active_stake(&self) -> u64;",
              "docs": "Total staked amount across all active validators.\n\nSECURITY: Uses saturating_add to prevent overflow when summing stakes\nacross many validators. Without this, a large number of high-stake\nvalidators could cause the sum to wrap to a small value, which would\ncorrupt the finality threshold calculation and potentially allow\njustification with insufficient stake.",
              "attributes": "",
              "line": 206
            },
            {
              "name": "registry::ValidatorRegistry::active_count",
              "kind": "function_item",
              "signature": "pub fn active_count(&self) -> usize;",
              "docs": "Number of active validators.",
              "attributes": "",
              "line": 213
            },
            {
              "name": "registry::ValidatorRegistry::total_count",
              "kind": "function_item",
              "signature": "pub fn total_count(&self) -> usize;",
              "docs": "Total number of validators in the registry (all statuses).",
              "attributes": "",
              "line": 220
            }
          ],
          "parseErrors": false
        },
        {
          "module": "slot",
          "source": "sigil/node/sigil-tower/src/slot.rs",
          "sha256": "522b4cb6ae50e40f48b825aa18d78c5fb9735c43cde89a0549cb2e0749202d84",
          "attributes": "",
          "items": [
            {
              "name": "slot::SLOT_DURATION_SECS",
              "kind": "const_item",
              "signature": "pub const SLOT_DURATION_SECS: u64;",
              "docs": "Duration of a single slot in seconds.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "slot::SLOTS_PER_EPOCH",
              "kind": "const_item",
              "signature": "pub const SLOTS_PER_EPOCH: u64;",
              "docs": "Number of slots per epoch (~24 hours at 12s/slot).",
              "attributes": "",
              "line": 15
            },
            {
              "name": "slot::SlotClock",
              "kind": "struct_item",
              "signature": "pub struct SlotClock {\n\n}",
              "docs": "Slot clock that derives all timing from a genesis timestamp.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "slot::SlotClock::new",
              "kind": "function_item",
              "signature": "pub fn new(genesis_time: u64) -> Self;",
              "docs": "Create a new slot clock anchored to the given genesis timestamp.",
              "attributes": "",
              "line": 26
            },
            {
              "name": "slot::SlotClock::genesis_time",
              "kind": "function_item",
              "signature": "pub fn genesis_time(&self) -> u64;",
              "docs": "Returns the genesis time.",
              "attributes": "",
              "line": 31
            },
            {
              "name": "slot::SlotClock::current_slot",
              "kind": "function_item",
              "signature": "pub fn current_slot(&self, now: u64) -> u64;",
              "docs": "Returns the current slot number given the current Unix timestamp.\n\nIf `now` is before genesis, returns 0.",
              "attributes": "",
              "line": 38
            },
            {
              "name": "slot::SlotClock::slot_start_time",
              "kind": "function_item",
              "signature": "pub fn slot_start_time(&self, slot: u64) -> u64;",
              "docs": "Returns the start time (Unix timestamp) of the given slot.\n\nSECURITY: Uses saturating arithmetic to prevent overflow for very large\nslot numbers. Without this, an attacker could supply a slot value that\noverflows `slot * SLOT_DURATION_SECS`, wrapping the timestamp to a\npast value and confusing consensus timing checks.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "slot::SlotClock::slot_epoch",
              "kind": "function_item",
              "signature": "pub fn slot_epoch(&self, slot: u64) -> u64;",
              "docs": "Returns the epoch number that the given slot belongs to.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "slot::SlotClock::epoch_start_slot",
              "kind": "function_item",
              "signature": "pub fn epoch_start_slot(&self, epoch: u64) -> u64;",
              "docs": "Returns the first slot of the given epoch.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "slot::SlotClock::is_first_slot_of_epoch",
              "kind": "function_item",
              "signature": "pub fn is_first_slot_of_epoch(&self, slot: u64) -> bool;",
              "docs": "Returns true if the given slot is the first slot of its epoch.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "slot::SlotClock::slots_since_epoch_start",
              "kind": "function_item",
              "signature": "pub fn slots_since_epoch_start(&self, slot: u64) -> u64;",
              "docs": "Returns how many slots have elapsed since the start of the given slot's epoch.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "slot::SlotClock::is_slot_missed",
              "kind": "function_item",
              "signature": "pub fn is_slot_missed(&self, slot: u64, now: u64) -> bool;",
              "docs": "Returns true if the given slot has been missed (its time window has passed).\n\nA slot is considered missed if `now` is past the end of the slot's time window\n(i.e., past `slot_start_time(slot) + SLOT_DURATION_SECS`).",
              "attributes": "",
              "line": 80
            },
            {
              "name": "slot::SlotClock::slot_info",
              "kind": "function_item",
              "signature": "pub fn slot_info(&self, slot: u64) -> SlotInfo;",
              "docs": "Build a `SlotInfo` for the given slot.",
              "attributes": "",
              "line": 87
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tower_committee",
          "source": "sigil/node/sigil-tower/src/tower_committee.rs",
          "sha256": "cf7e9e000838232daa293ec0163c170cdbc4cdb9a20ee8ebf853bb15a98fd878",
          "attributes": "",
          "items": [
            {
              "name": "tower_committee::COMMITTEE_QUORUM",
              "kind": "const_item",
              "signature": "pub const COMMITTEE_QUORUM: usize;",
              "docs": "The required supermajority for committee decisions (7 of 11).",
              "attributes": "",
              "line": 14
            },
            {
              "name": "tower_committee::COMMITTEE_SIZE",
              "kind": "const_item",
              "signature": "pub const COMMITTEE_SIZE: usize;",
              "docs": "Default committee size.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "tower_committee::DEFAULT_TERM_EPOCHS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_TERM_EPOCHS: u64;",
              "docs": "Default term length in epochs (~30 days at 1 epoch/day).",
              "attributes": "",
              "line": 20
            },
            {
              "name": "tower_committee::TowerCommittee",
              "kind": "struct_item",
              "signature": "pub struct TowerCommittee {\n/// DIDs of the 11 committee members.\n\npub members: Vec<String>,\n/// Epoch at which this committee's term began.\n\npub term_start_epoch: u64,\n/// Length of the committee's term in epochs.\n\npub term_length_epochs: u64\n}",
              "docs": "The 11-member Tower Committee.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 24
            },
            {
              "name": "tower_committee::TowerCommittee::is_member",
              "kind": "function_item",
              "signature": "pub fn is_member(&self, did: &str) -> bool;",
              "docs": "Whether the given DID is a member of this committee.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "tower_committee::TowerCommittee::is_term_expired",
              "kind": "function_item",
              "signature": "pub fn is_term_expired(&self, current_epoch: u64) -> bool;",
              "docs": "Whether the committee's term has expired given the current epoch.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "tower_committee::PendingDecision",
              "kind": "struct_item",
              "signature": "pub struct PendingDecision {\n/// What kind of decision this is.\n\npub decision_type: DecisionType,\n/// Votes from committee members (DID -> approve/reject).\n\npub votes: HashMap<String, bool>\n}",
              "docs": "A pending governance decision awaiting votes.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 47
            },
            {
              "name": "tower_committee::DecisionType",
              "kind": "enum_item",
              "signature": "pub enum DecisionType {\n    /// Confirm slashing of a validator (DID of the validator to slash).\n    SlashValidator(String),\n    /// Change a protocol parameter (parameter name, new value).\n    ParameterChange(String, String),\n}",
              "docs": "Types of governance decisions the Tower Committee can make.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 56
            },
            {
              "name": "tower_committee::DecisionResult",
              "kind": "enum_item",
              "signature": "pub enum DecisionResult {\n    /// The decision was approved.\n    Approved(DecisionType),\n    /// The decision was rejected.\n    Rejected(DecisionType),\n}",
              "docs": "Result of a completed decision.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 65
            },
            {
              "name": "tower_committee::TowerCommitteeState",
              "kind": "struct_item",
              "signature": "pub struct TowerCommitteeState {\n/// The current Tower Committee.\n\npub current_committee: TowerCommittee,\n/// Pending decisions awaiting votes.\n\npub pending_decisions: Vec<PendingDecision>\n}",
              "docs": "State tracking all pending decisions and the current committee.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 74
            },
            {
              "name": "tower_committee::TowerCommitteeState::new",
              "kind": "function_item",
              "signature": "pub fn new(committee: TowerCommittee) -> Self;",
              "docs": "Create a new state with the given committee and no pending decisions.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "tower_committee::TowerCommitteeState::propose",
              "kind": "function_item",
              "signature": "pub fn propose(&mut self, decision_type: DecisionType) -> usize;",
              "docs": "Propose a new decision for the committee to vote on.\nReturns the index of the new decision.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "tower_committee::TowerCommitteeState::vote",
              "kind": "function_item",
              "signature": "pub fn vote(\n        &mut self,\n        decision_id: usize,\n        voter_did: &str,\n        approve: bool,\n    ) -> Result<Option<DecisionResult>, TowerError>;",
              "docs": "Cast a vote on a pending decision.\n\nReturns `Some(DecisionResult)` if the vote caused the decision to be\nresolved (approved or rejected), or `None` if more votes are needed.",
              "attributes": "",
              "line": 105
            },
            {
              "name": "tower_committee::TowerCommitteeState::is_approved",
              "kind": "function_item",
              "signature": "pub fn is_approved(&self, decision_id: usize) -> bool;",
              "docs": "Check if a specific decision has been approved (has >= 7 approvals).",
              "attributes": "",
              "line": 162
            },
            {
              "name": "tower_committee::TowerCommitteeState::pending_count",
              "kind": "function_item",
              "signature": "pub fn pending_count(&self) -> usize;",
              "docs": "Number of pending decisions.",
              "attributes": "",
              "line": 170
            }
          ],
          "parseErrors": false
        },
        {
          "module": "types",
          "source": "sigil/node/sigil-tower/src/types.rs",
          "sha256": "55e774bf3e1fb1f78ddd5e84b20a0c5ec97c1da9f250fc9dee14fce54e62e054",
          "attributes": "",
          "items": [
            {
              "name": "types::TowerBlock",
              "kind": "struct_item",
              "signature": "pub struct TowerBlock {\npub header: TowerBlockHeader,\npub body: TowerBlockBody\n}",
              "docs": "A block on the Tower validator coordination chain.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "types::TowerBlock::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> SigilHash;",
              "docs": "Compute the hash of this block by hashing the serialized header.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "types::TowerBlockHeader",
              "kind": "struct_item",
              "signature": "pub struct TowerBlockHeader {\n/// Hash of the parent Tower block.\n\npub parent_hash: SigilHash,\n/// Slot number for this block.\n\npub slot: u64,\n/// Epoch this slot belongs to.\n\npub epoch: u64,\n/// OAS DID of the block proposer.\n\npub proposer_did: String,\n/// Merkle root of committee assignments for this slot.\n\npub committee_root: SigilHash,\n/// Optional finality checkpoint included in this block.\n\npub finality_checkpoint: Option<FinalityCheckpoint>,\n/// Unix timestamp when this block was produced.\n\npub timestamp: u64,\n/// Chain identifier.\n\npub chain_id: String\n}",
              "docs": "Header of a Tower block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "types::TowerBlockBody",
              "kind": "struct_item",
              "signature": "pub struct TowerBlockBody {\n/// Committee votes for previous slots.\n\npub committee_votes: Vec<CommitteeVote>,\n/// Finality votes (Casper FFG attestations).\n\npub finality_votes: Vec<FinalityVote>,\n/// Slashing evidence submitted in this block.\n\npub evidence: Vec<SlashingEvidence>,\n/// Validator set updates (registrations, exits, etc.).\n\npub validator_updates: Vec<ValidatorUpdate>\n}",
              "docs": "Body of a Tower block containing votes, evidence, and updates.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 53
            },
            {
              "name": "types::ValidatorRecord",
              "kind": "struct_item",
              "signature": "pub struct ValidatorRecord {\n/// OAS DID of this validator entity.\n\npub did: String,\n/// Ed25519 consensus public key.\n\npub public_key: Vec<u8>,\n/// Staked amount in micro-MINT.\n\npub stake: u64,\n/// Whether this validator is a Block Producer or Block Validator.\n\npub mode: ValidatorMode,\n/// Geographic region for diversity enforcement.\n\npub geographic_region: GeographicRegion,\n/// Composite inclusion score (computed from 6 components).\n\npub inclusion_score: f64,\n/// Current lifecycle status.\n\npub status: ValidatorStatus,\n/// Epoch at which this validator became active.\n\npub activation_epoch: u64,\n/// Epoch at which this validator exited (if exited).\n\npub exit_epoch: Option<u64>,\n/// Epoch through which a slashed validator is jailed and excluded.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub slashed_until_epoch: Option<u64>,\n/// OAS DID of the human root in the lineage chain.\n\npub human_root_did: Option<String>\n}",
              "docs": "A validator registered in the Tower chain.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 70
            },
            {
              "name": "types::ValidatorStatus",
              "kind": "enum_item",
              "signature": "pub enum ValidatorStatus {\n    /// Awaiting activation (e.g., pending epoch boundary).\n    Pending,\n    /// Actively participating in consensus.\n    Active,\n    /// Has requested exit; still active until epoch boundary.\n    Exiting,\n    /// Fully exited; no longer in active set.\n    Exited,\n    /// Slashed and removed from active set.\n    Slashed,\n}",
              "docs": "Lifecycle status of a validator in the Tower registry.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 98
            },
            {
              "name": "types::GeographicRegion",
              "kind": "enum_item",
              "signature": "pub enum GeographicRegion {\n    NorthAmerica,\n    SouthAmerica,\n    Europe,\n    Asia,\n    Africa,\n    Oceania,\n    MiddleEast,\n}",
              "docs": "Geographic region for committee diversity enforcement.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 113
            },
            {
              "name": "types::FinalityCheckpoint",
              "kind": "struct_item",
              "signature": "pub struct FinalityCheckpoint {\n/// The epoch this checkpoint covers.\n\npub epoch: u64,\n/// Hash of the block at the checkpoint boundary.\n\npub block_hash: SigilHash,\n/// Whether this checkpoint has been justified (2/3 supermajority).\n\npub justified: bool,\n/// Whether this checkpoint has been finalized.\n\npub finalized: bool\n}",
              "docs": "A finality checkpoint in the Casper FFG protocol.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 129
            },
            {
              "name": "types::FinalityVote",
              "kind": "struct_item",
              "signature": "pub struct FinalityVote {\n/// OAS DID of the voting validator.\n\npub voter_did: String,\n/// Source epoch (must be a justified checkpoint).\n\npub source_epoch: u64,\n/// Target epoch being voted for.\n\npub target_epoch: u64,\n/// Hash of the target block.\n\npub target_hash: SigilHash,\n/// Stake weight of this vote.\n\npub stake: u64,\n/// Ed25519 signature over the vote content.\n\npub signature: Vec<u8>\n}",
              "docs": "A finality vote (Casper FFG attestation) from a validator.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 142
            },
            {
              "name": "types::SlotInfo",
              "kind": "struct_item",
              "signature": "pub struct SlotInfo {\n/// Slot number.\n\npub slot: u64,\n/// Epoch this slot belongs to.\n\npub epoch: u64,\n/// Unix timestamp of the slot start.\n\npub timestamp: u64,\n/// OAS DID of the assigned proposer, if any.\n\npub proposer_did: Option<String>\n}",
              "docs": "Information about a specific slot.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 163
            },
            {
              "name": "types::CommitteeVote",
              "kind": "struct_item",
              "signature": "pub struct CommitteeVote {\n/// OAS DID of the voter.\n\npub voter_did: String,\n/// The slot being voted on.\n\npub slot: u64,\n/// Hash of the block being attested.\n\npub block_hash: SigilHash,\n/// Ed25519 signature.\n\npub signature: Vec<u8>\n}",
              "docs": "A committee member's vote on a slot's block.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 180
            },
            {
              "name": "types::EvidenceType",
              "kind": "enum_item",
              "signature": "pub enum EvidenceType {\n    /// Validator signed two different blocks at the same slot.\n    DoubleSign {\n        slot: u64,\n        block_hash_a: SigilHash,\n        block_hash_b: SigilHash,\n    },\n    /// Validator proposed an invalid block.\n    InvalidBlock {\n        slot: u64,\n        block_hash: SigilHash,\n        reason: String,\n    },\n    /// Validator was offline for an extended period.\n    Downtime {\n        validator_did: String,\n        missed_slots: u64,\n    },\n    /// Validator cast two conflicting finality votes (surround vote).\n    SurroundVote {\n        vote_a: FinalityVote,\n        vote_b: FinalityVote,\n    },\n}",
              "docs": "Types of slashable offenses with attached proof data.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 197
            },
            {
              "name": "types::SlashingEvidence",
              "kind": "struct_item",
              "signature": "pub struct SlashingEvidence {\n/// The type and proof data of the offense.\n\npub evidence_type: EvidenceType,\n/// OAS DID of the offending validator.\n\npub subject_did: String,\n/// OAS DID of the entity submitting the evidence.\n\npub submitter_did: String,\n/// Unix timestamp when the evidence was created.\n\npub timestamp: u64,\n/// BLAKE3 hash of the evidence payload.\n\npub evidence_hash: SigilHash\n}",
              "docs": "Evidence of a slashable offense submitted to the Tower chain.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 224
            },
            {
              "name": "types::ValidatorUpdate",
              "kind": "enum_item",
              "signature": "pub enum ValidatorUpdate {\n    /// Register a new validator.\n    Register(ValidatorRecord),\n    /// Update an existing validator's stake.\n    StakeChange { did: String, new_stake: u64 },\n    /// Update an existing validator's status.\n    StatusChange {\n        did: String,\n        new_status: ValidatorStatus,\n    },\n    /// Update an existing validator's inclusion score.\n    ScoreUpdate { did: String, new_score: f64 },\n    /// Exit a validator from the active set.\n    Exit { did: String, exit_epoch: u64 },\n}",
              "docs": "An update to a validator's record in the registry.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 243
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-czac",
      "version": "0.1.0",
      "source": "sigil/node/sigil-czac",
      "manifestSha256": "1fde842ebf1e6eaeb84e38d22325fb3a6545407718c39afefb80588dd1f71a40",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-czac",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-czac/src/lib.rs",
          "sha256": "fa84c49445ca82dbac816bbb3e209a8079a92d7e779e9ebe4b596d582321e2cc",
          "attributes": "",
          "items": [
            {
              "name": "channel",
              "kind": "module",
              "signature": "pub mod channel;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "envelope",
              "kind": "module",
              "signature": "pub mod envelope;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "flow",
              "kind": "module",
              "signature": "pub mod flow;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "payment",
              "kind": "module",
              "signature": "pub mod payment;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "routing",
              "kind": "module",
              "signature": "pub mod routing;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "session",
              "kind": "module",
              "signature": "pub mod session;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "settlement",
              "kind": "module",
              "signature": "pub mod settlement;",
              "docs": "",
              "attributes": "",
              "line": 16
            }
          ],
          "parseErrors": false
        },
        {
          "module": "channel",
          "source": "sigil/node/sigil-czac/src/channel.rs",
          "sha256": "b8a5b579ba269b40c30c72bdf9f5ba9c1d307832106c0402ba892689d03f89be",
          "attributes": "",
          "items": [
            {
              "name": "channel::ChannelType",
              "kind": "enum_item",
              "signature": "pub enum ChannelType {\n    /// Short-lived channel that auto-closes after inactivity.\n    Ephemeral {\n        /// Seconds of inactivity before auto-close (default: 300).\n        auto_close_secs: u64,\n    },\n    /// Long-lived channel with periodic heartbeats.\n    Persistent {\n        /// Seconds between heartbeats.\n        heartbeat_interval: u64,\n    },\n    /// Pub/sub channel for one-to-many messaging.\n    Broadcast {\n        /// Maximum number of subscribers.\n        max_subscribers: u32,\n    },\n    /// Payment channel with escrow for economic transactions.\n    Payment {\n        /// Escrow amount in micro-MINT.\n        escrow_amount: u64,\n    },\n}",
              "docs": "Channel type determines the lifecycle and behavior of the channel.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 43
            },
            {
              "name": "channel::ChannelState",
              "kind": "enum_item",
              "signature": "pub enum ChannelState {\n    /// Initial state \u2014 channel created, handshake not started.\n    Init,\n    /// Challenge issued by the responder; awaiting signed response.\n    ChallengeIssued {\n        /// The 32-byte random challenge.\n        challenge: [u8; 32],\n    },\n    /// Initiator has responded with an Ed25519 signature over the transcript.\n    ///\n    /// The 64-byte signature is stored (as bytes) so the responder can include\n    /// it in audit logs and so future verification paths can re-check the proof.\n    ChallengeResponded {\n        /// The 64-byte Ed25519 signature from the initiator, serialized as bytes.\n        signature: Vec<u8>,\n    },\n    /// Handshake confirmed by both parties.\n    Confirmed,\n    /// Channel is open and ready for message exchange.\n    Open {\n        /// Unix timestamp when the channel was opened.\n        opened_at: u64,\n    },\n    /// Channel close has been requested.\n    Closing {\n        /// Unix timestamp when close was requested.\n        close_requested_at: u64,\n    },\n    /// Channel is closed and no longer usable.\n    Closed,\n}",
              "docs": "Channel state machine states.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "channel::Channel",
              "kind": "struct_item",
              "signature": "pub struct Channel {\n/// Unique channel identifier (UUID v4).\n\npub channel_id: String,\n/// The channel type and its parameters.\n\npub channel_type: ChannelType,\n/// OAS DID of the channel initiator.\n\npub initiator_did: String,\n/// OAS DID of the channel responder.\n\npub responder_did: String,\n/// Source organization zone.\n\npub source_zone: String,\n/// Target organization zone.\n\npub target_zone: String,\n/// Current channel state.\n\npub state: ChannelState,\n/// Unix timestamp when the channel was created.\n\npub created_at: u64,\n/// Unix timestamp of the last activity on this channel.\n\npub last_activity: u64,\n/// Number of messages sent on this channel.\n\npub messages_sent: u64,\n/// Number of messages received on this channel.\n\npub messages_received: u64\n}",
              "docs": "A cross-zone communication channel.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 117
            },
            {
              "name": "channel::HandshakeMessage",
              "kind": "enum_item",
              "signature": "pub enum HandshakeMessage {\n    /// Step 1: Channel open request from the initiator.\n    Request {\n        /// Requested channel type.\n        channel_type: ChannelType,\n        /// OAS DID of the initiator.\n        initiator_did: String,\n        /// Source zone of the initiator.\n        source_zone: String,\n    },\n    /// Step 2: Challenge from the responder.\n    Challenge {\n        /// 32-byte cryptographic random challenge.\n        challenge: [u8; 32],\n    },\n    /// Step 3: Challenge response from the initiator.\n    Response {\n        /// 64-byte Ed25519 signature over the domain-separated transcript.\n        ///\n        /// Signed by the initiator's long-term Ed25519 key (resolved via DID).\n        /// The responder verifies this against the initiator's published key.\n        /// Serialized as bytes (Vec<u8>) because serde only derives [u8; N] for N <= 32.\n        challenge_response: Vec<u8>,\n        /// Key material for session key derivation.\n        session_key_material: Vec<u8>,\n    },\n    /// Step 4: Confirmation from the responder.\n    Confirm {\n        /// Key material for session key derivation.\n        session_key_material: Vec<u8>,\n    },\n    /// Step 5: Channel is now open.\n    Open,\n}",
              "docs": "Handshake messages exchanged during channel establishment.\n\nThe 5-step handshake:\n1. Initiator sends `Request`\n2. Responder sends `Challenge`\n3. Initiator sends `Response` (Ed25519 signature over domain-separated transcript)\n4. Responder sends `Confirm`\n5. Either party sends `Open`",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 151
            },
            {
              "name": "channel::ChannelManager",
              "kind": "struct_item",
              "signature": "pub struct ChannelManager {\n\n}",
              "docs": "Manages all active channels and their state transitions.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 188
            },
            {
              "name": "channel::ChannelManager::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new, empty channel manager.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "channel::ChannelManager::initiate",
              "kind": "function_item",
              "signature": "pub fn initiate(\n        &mut self,\n        channel_type: ChannelType,\n        initiator_did: String,\n        responder_did: String,\n        source_zone: String,\n        target_zone: String,\n    ) -> Result<(String, HandshakeMessage), CzacError>;",
              "docs": "Initiate a new channel handshake.\n\nCreates a channel in `Init` state and returns the channel ID and the\nfirst handshake message (`Request`) to send to the responder.",
              "attributes": "",
              "line": 208
            },
            {
              "name": "channel::ChannelManager::handle_handshake",
              "kind": "function_item",
              "signature": "pub fn handle_handshake(\n        &mut self,\n        channel_id: &str,\n        message: HandshakeMessage,\n    ) -> Result<Option<HandshakeMessage>, CzacError>;",
              "docs": "Process a handshake message for a given channel.\n\nReturns `Ok(Some(reply))` if a reply handshake message should be sent,\nor `Ok(None)` if the handshake step was terminal (e.g., `Open`).\n\n# Signature-based challenge verification (steps 2 \u2192 3)\n\nWhen the responder processes a `Response` message, it verifies the\nEd25519 signature using [`verify_handshake_signature`].  Verification\nfailure causes an immediate `HandshakeError` \u2014 the channel is NOT\nadvanced to `Confirmed`.\n\nIn the test-only path (via [`handle_handshake_with_key`]) the caller\nsupplies the verifying key directly.  In the production path the key\nwould be resolved via DID; the signature API is identical.",
              "attributes": "",
              "line": 287
            },
            {
              "name": "channel::ChannelManager::handle_handshake_with_signing_key",
              "kind": "function_item",
              "signature": "pub fn handle_handshake_with_signing_key(\n        &mut self,\n        channel_id: &str,\n        received_challenge: [u8; 32],\n        signing_key: &SigningKey,\n    ) -> Result<HandshakeMessage, CzacError>;",
              "docs": "Process a step-2\u21923 `Challenge` message using a caller-supplied signing key.\n\nThis is the **production entry point** for the initiator side of the\nhandshake: the caller resolves the signing key from the DID store and\npasses it here.  The signature is created over the full domain-separated\ntranscript so the responder can verify it against the published verifying key.\n\n# Errors\n\nReturns [`CzacError::HandshakeError`] if the channel is not in\n`ChallengeIssued` state or if the challenge does not match.",
              "attributes": "",
              "line": 411
            },
            {
              "name": "channel::ChannelManager::handle_handshake_with_verifying_key",
              "kind": "function_item",
              "signature": "pub fn handle_handshake_with_verifying_key(\n        &mut self,\n        channel_id: &str,\n        challenge: [u8; 32],\n        challenge_response: Vec<u8>,\n        verifying_key_bytes: &[u8; 32],\n        session_key_material: Vec<u8>,\n    ) -> Result<HandshakeMessage, CzacError>;",
              "docs": "Process a step-3\u21924 `Response` message and verify the Ed25519 signature.\n\nThis is the **production entry point** for the responder side: the caller\nresolves the initiator's verifying key from its DID document and passes it\nhere.  The signature is verified against the full domain-separated\ntranscript reconstructed from the channel's stored state.\n\n# Errors\n\nReturns [`CzacError::HandshakeError`] immediately on signature failure \u2014\nthe channel state is **not** advanced.",
              "attributes": "",
              "line": 469
            },
            {
              "name": "channel::ChannelManager::close",
              "kind": "function_item",
              "signature": "pub fn close(&mut self, channel_id: &str) -> Result<(), CzacError>;",
              "docs": "Close a channel.\n\nTransitions the channel to `Closing` if open, or directly to `Closed`\nif it was in a handshake state.",
              "attributes": "",
              "line": 506
            },
            {
              "name": "channel::ChannelManager::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, channel_id: &str) -> Option<&Channel>;",
              "docs": "Get a reference to a channel by its ID.",
              "attributes": "",
              "line": 538
            },
            {
              "name": "channel::ChannelManager::get_mut",
              "kind": "function_item",
              "signature": "pub fn get_mut(&mut self, channel_id: &str) -> Option<&mut Channel>;",
              "docs": "Get a mutable reference to a channel by its ID.",
              "attributes": "",
              "line": 543
            },
            {
              "name": "channel::ChannelManager::channels_for_zone_pair",
              "kind": "function_item",
              "signature": "pub fn channels_for_zone_pair(&self, source: &str, target: &str) -> Vec<&Channel>;",
              "docs": "Find all channels between a source and target zone.",
              "attributes": "",
              "line": 548
            },
            {
              "name": "channel::ChannelManager::cleanup_expired",
              "kind": "function_item",
              "signature": "pub fn cleanup_expired(&mut self, now: u64) -> Vec<String>;",
              "docs": "Remove expired ephemeral channels. Returns the IDs of removed channels.",
              "attributes": "",
              "line": 556
            },
            {
              "name": "channel::ChannelManager::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Returns the total number of channels (all states).",
              "attributes": "",
              "line": 595
            },
            {
              "name": "channel::ChannelManager::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns true if there are no channels.",
              "attributes": "",
              "line": 600
            },
            {
              "name": "channel::build_handshake_transcript",
              "kind": "function_item",
              "signature": "pub fn build_handshake_transcript(\n    channel_id: &str,\n    source_zone: &str,\n    target_zone: &str,\n    challenge: &[u8; 32],\n) -> Vec<u8>;",
              "docs": "Build the domain-separated transcript that the initiator signs during step 3.\n\n```text\ntranscript = DOMAIN_TAG\n             || channel_id || \"\\n\"\n             || source_zone || \"\\n\"\n             || target_zone || \"\\n\"\n             || challenge (32 bytes, raw)\n```\n\nEach text field is separated by a newline byte so the encoding is\nunambiguous regardless of field content.",
              "attributes": "",
              "line": 627
            },
            {
              "name": "channel::verify_handshake_signature",
              "kind": "function_item",
              "signature": "pub fn verify_handshake_signature(\n    verifying_key_bytes: &[u8; 32],\n    transcript: &[u8],\n    signature_bytes: &[u8],\n) -> Result<(), CzacError>;",
              "docs": "Verify an Ed25519 handshake signature.\n\nReturns `Ok(())` if the signature is valid. Returns\n[`CzacError::HandshakeError`] on any failure \u2014 including invalid key bytes,\ninvalid signature bytes, or verification mismatch. The error message does\nnot reveal whether the failure was due to a key parse error or a signature\nmismatch to avoid oracle attacks.",
              "attributes": "",
              "line": 661
            }
          ],
          "parseErrors": false
        },
        {
          "module": "envelope",
          "source": "sigil/node/sigil-czac/src/envelope.rs",
          "sha256": "7b6f48a76d700190d4280147ebeb2a80be76901017a3f8b858c2e86169c89278",
          "attributes": "",
          "items": [
            {
              "name": "envelope::CZAC_PROTOCOL_VERSION",
              "kind": "const_item",
              "signature": "pub const CZAC_PROTOCOL_VERSION: u8;",
              "docs": "Protocol version for CZAC envelopes.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "envelope::DEFAULT_TTL_SECS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_TTL_SECS: u64;",
              "docs": "Default TTL for envelopes: 5 minutes.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "envelope::ENVELOPE_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const ENVELOPE_DOMAIN_TAG: &[u8];",
              "docs": "Domain separation tag for CZAC envelope signatures.\n\nPrefixes every signed transcript so that an Ed25519 signature produced for\na CZAC envelope **cannot** be replayed against the handshake path (which uses\n`b\"sigil/czac/handshake/v1\\n\"`) or any other context.\n\n# Field ordering (canonical bytes)\n\nThe signed transcript is:\n\n```text\nENVELOPE_DOMAIN_TAG\n|| u8:version\n|| u32-le:len(message_id) || message_id\n|| u32-le:len(channel_id) || channel_id\n|| u64-le:sequence\n|| u32-le:len(sender_did) || sender_did\n|| u32-le:len(recipient_did) || recipient_did\n|| u32-le:len(source_zone) || source_zone\n|| u32-le:len(target_zone) || target_zone\n|| u64-le:timestamp\n|| u64-le:ttl\n|| nonce (12 bytes, raw)\n|| u32-le:len(payload) || payload\n```\n\n**This ordering must not be changed without bumping the domain tag version.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "envelope::CzacEnvelope",
              "kind": "struct_item",
              "signature": "pub struct CzacEnvelope {\n/// Protocol version (currently 1).\n\npub version: u8,\n/// Unique message identifier (UUID v4).\n\npub message_id: String,\n/// Channel this message belongs to.\n\npub channel_id: String,\n/// Per-channel monotonic sequence number.\n\npub sequence: u64,\n/// OAS DID of the sender.\n\npub sender_did: String,\n/// OAS DID of the recipient (or zone DID for broadcast).\n\npub recipient_did: String,\n/// Source organization zone ID.\n\npub source_zone: String,\n/// Target organization zone ID.\n\npub target_zone: String,\n/// Unix timestamp (seconds) when the envelope was created.\n\npub timestamp: u64,\n/// Time-to-live in seconds.\n\npub ttl: u64,\n/// Unique nonce for replay protection.\n\npub nonce: [u8; 12],\n/// Encrypted or plaintext payload.\n\npub payload: Vec<u8>,\n/// Ed25519 signature (64 bytes) over the domain-separated transcript.\n\npub signature: Vec<u8>\n}",
              "docs": "A signed message envelope for cross-zone agent communication.\n\nThe envelope carries all metadata needed for routing, replay protection,\nand signature verification. The `payload` field contains the encrypted\nor plaintext application data.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 72
            },
            {
              "name": "envelope::CzacEnvelope::canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_bytes(&self) -> Vec<u8>;",
              "docs": "Compute the canonical byte representation for signing.\n\nUses length-prefixed (u32 LE) encoding for variable-length string and\nbyte fields, and little-endian encoding for all integer fields.\nThe ordering is fixed by [`ENVELOPE_DOMAIN_TAG`] \u2014 do not reorder.\n\nThe `signature` field is **excluded** from the canonical bytes; this is\nwhat makes it safe to call after signing.",
              "attributes": "",
              "line": 110
            },
            {
              "name": "envelope::CzacEnvelope::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> [u8; 32];",
              "docs": "Compute the BLAKE3 digest of the domain-separated transcript.\n\nThis 32-byte value is what Ed25519 signs / verifies.",
              "attributes": "",
              "line": 141
            },
            {
              "name": "envelope::CzacEnvelope::sign",
              "kind": "function_item",
              "signature": "pub fn sign(envelope: &mut CzacEnvelope, signing_key: &SigningKey) -> Result<(), CzacError>;",
              "docs": "Sign this envelope with the given Ed25519 signing key.\n\nComputes `BLAKE3(ENVELOPE_DOMAIN_TAG || canonical_bytes())` and signs\nthe resulting 32-byte digest with Ed25519.  The resulting 64-byte\nsignature is stored in `envelope.signature`.\n\n# Errors\n\nReturns [`CzacError::InvalidSignature`] if the signing key bytes are\nnot a valid 32-byte Ed25519 seed.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "envelope::CzacEnvelope::sign_from_bytes",
              "kind": "function_item",
              "signature": "pub fn sign_from_bytes(\n        envelope: &mut CzacEnvelope,\n        seed_bytes: &[u8],\n    ) -> Result<(), CzacError>;",
              "docs": "Sign this envelope from raw 32-byte Ed25519 seed bytes.\n\nConvenience wrapper around [`sign`] for callers that hold key material\nas raw bytes rather than a typed [`SigningKey`].\n\n# Errors\n\nReturns [`CzacError::InvalidSignature`] if `seed_bytes` is not exactly\n32 bytes.",
              "attributes": "",
              "line": 171
            },
            {
              "name": "envelope::CzacEnvelope::verify_signature",
              "kind": "function_item",
              "signature": "pub fn verify_signature(&self, verifying_key: &VerifyingKey) -> Result<(), CzacError>;",
              "docs": "Verify the envelope signature against an Ed25519 verifying key.\n\nRecomputes `BLAKE3(ENVELOPE_DOMAIN_TAG || canonical_bytes())` and\nverifies the stored 64-byte signature against it using the supplied key.\n\nReturns `Ok(())` on success.  Returns [`CzacError::InvalidSignature`]\nfor any failure (empty signature, wrong key, tampered fields, etc.) \u2014\nthe error message does **not** distinguish between a key parse failure\nand a signature mismatch to avoid oracle attacks.",
              "attributes": "",
              "line": 194
            },
            {
              "name": "envelope::CzacEnvelope::verify_signature_from_bytes",
              "kind": "function_item",
              "signature": "pub fn verify_signature_from_bytes(\n        &self,\n        verifying_key_bytes: &[u8; 32],\n    ) -> Result<(), CzacError>;",
              "docs": "Verify from a raw 32-byte Ed25519 compressed point.\n\nConvenience wrapper around [`verify_signature`] for callers that hold\nkey material as raw bytes.\n\n# Errors\n\nReturns [`CzacError::InvalidSignature`] if the key bytes are not a\nvalid compressed Ed25519 point, the signature is empty, or verification\nfails.",
              "attributes": "",
              "line": 221
            },
            {
              "name": "envelope::CzacEnvelope::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self, now: u64) -> bool;",
              "docs": "Check whether this envelope has expired given the current time.",
              "attributes": "",
              "line": 231
            },
            {
              "name": "envelope::new_envelope",
              "kind": "function_item",
              "signature": "pub fn new_envelope(\n    channel_id: String,\n    sequence: u64,\n    sender_did: String,\n    recipient_did: String,\n    source_zone: String,\n    target_zone: String,\n    payload: Vec<u8>,\n) -> CzacEnvelope;",
              "docs": "Create a new envelope builder for convenience.",
              "attributes": "",
              "line": 248
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-czac/src/error.rs",
          "sha256": "a5e03869ecccc65a95e64b60deb12a4ed1b7113f62b9b6d22663042d7bd19fc5",
          "attributes": "",
          "items": [
            {
              "name": "error::CzacError",
              "kind": "enum_item",
              "signature": "pub enum CzacError {\n    // -- Envelope (4) -------------------------------------------------------\n    /// Envelope signature verification failed.\n    #[error(\"envelope: invalid signature \u2014 {0}\")]\n    InvalidSignature(String),\n\n    /// Envelope has expired (TTL exceeded).\n    #[error(\"envelope: message expired \u2014 age {age_secs}s exceeds ttl {ttl_secs}s\")]\n    MessageExpired { age_secs: u64, ttl_secs: u64 },\n\n    /// Envelope nonce has already been seen (replay attempt).\n    #[error(\"envelope: replay detected \u2014 nonce already consumed\")]\n    ReplayDetected,\n\n    /// Envelope serialization or deserialization failed.\n    #[error(\"envelope: serialization error \u2014 {0}\")]\n    SerializationError(String),\n\n    // -- Routing (3) --------------------------------------------------------\n    /// The requested zone was not found in the routing table.\n    #[error(\"routing: zone not found \u2014 {zone_id}\")]\n    ZoneNotFound { zone_id: String },\n\n    /// A zone endpoint registration was invalid or conflicting.\n    #[error(\"routing: invalid endpoint \u2014 {0}\")]\n    InvalidEndpoint(String),\n\n    /// No route exists to the target zone.\n    #[error(\"routing: no route to zone {zone_id}\")]\n    NoRoute { zone_id: String },\n\n    // -- Channel (5) --------------------------------------------------------\n    /// The channel was not found.\n    #[error(\"channel: not found \u2014 {channel_id}\")]\n    ChannelNotFound { channel_id: String },\n\n    /// The channel is in an unexpected state for the requested operation.\n    #[error(\"channel: invalid state transition from {from} to {to}\")]\n    InvalidChannelState { from: String, to: String },\n\n    /// The handshake message is out of order or unexpected.\n    #[error(\"channel: unexpected handshake step \u2014 {0}\")]\n    HandshakeError(String),\n\n    /// A duplicate channel initiation was attempted.\n    #[error(\"channel: duplicate initiation \u2014 channel {channel_id} already exists\")]\n    DuplicateChannel { channel_id: String },\n\n    /// The channel has timed out (no activity within threshold).\n    #[error(\"channel: timed out \u2014 channel {channel_id} idle for {idle_secs}s\")]\n    ChannelTimeout { channel_id: String, idle_secs: u64 },\n\n    // -- Session (2) --------------------------------------------------------\n    /// Session encryption or decryption failed.\n    #[error(\"session: crypto error \u2014 {0}\")]\n    SessionCryptoError(String),\n\n    /// Session keys need rekeying (nonce counter exhausted).\n    #[error(\"session: rekey required \u2014 {messages_sent} messages sent, limit {limit}\")]\n    RekeyRequired { messages_sent: u64, limit: u64 },\n\n    // -- Flow Control (3) ---------------------------------------------------\n    /// No send credits available (backpressured).\n    #[error(\"flow: no credits available \u2014 {available} of {required} credits\")]\n    NoCredits { available: u64, required: u64 },\n\n    /// The priority queue is full.\n    #[error(\"flow: queue full \u2014 {queue_depth} messages queued\")]\n    QueueFull { queue_depth: usize },\n\n    /// Invalid priority value.\n    #[error(\"flow: invalid priority \u2014 {0}\")]\n    InvalidPriority(String),\n\n    // -- Payment (3) --------------------------------------------------------\n    /// Payment channel balance invariant violated (a + b != escrow).\n    #[error(\n        \"payment: balance invariant violated \u2014 a={balance_a} + b={balance_b} != escrow={escrow}\"\n    )]\n    BalanceInvariant {\n        balance_a: u64,\n        balance_b: u64,\n        escrow: u64,\n    },\n\n    /// The payment channel is in an invalid state for the requested operation.\n    #[error(\"payment: invalid state \u2014 {0}\")]\n    InvalidPaymentState(String),\n\n    /// The balance update sequence is stale or out of order.\n    #[error(\"payment: stale update \u2014 got seq {got}, expected > {expected}\")]\n    StaleUpdate { got: u64, expected: u64 },\n\n    // -- Settlement (2) -----------------------------------------------------\n    /// Settlement proof verification failed.\n    #[error(\"settlement: invalid proof \u2014 {0}\")]\n    InvalidProof(String),\n\n    /// The dispute window has not yet elapsed.\n    #[error(\"settlement: dispute window active \u2014 {blocks_remaining} blocks remaining\")]\n    DisputeWindowActive { blocks_remaining: u64 },\n}",
              "docs": "Error types for the Cross-Zone Agent Communication protocol.\n\n22 error codes covering all CZAC protocol layers: envelope, routing,\nchannel, session, flow control, payment, and settlement.\nAll errors produced by the CZAC protocol stack.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "flow",
          "source": "sigil/node/sigil-czac/src/flow.rs",
          "sha256": "ef935128d1b14110dc355f149051894b62bb46de0488715086f84ab105ac2785",
          "attributes": "",
          "items": [
            {
              "name": "flow::DEFAULT_INITIAL_CREDITS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_INITIAL_CREDITS: u64;",
              "docs": "Default initial credits per channel.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "flow::DEFAULT_MAX_CREDITS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_CREDITS: u64;",
              "docs": "Default maximum credits per channel.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "flow::Priority",
              "kind": "enum_item",
              "signature": "pub enum Priority {\n    /// Highest priority \u2014 system-critical messages.\n    Critical = 0,\n    /// High priority \u2014 time-sensitive messages.\n    High = 1,\n    /// Normal priority \u2014 default for application messages.\n    Normal = 2,\n    /// Low priority \u2014 background/bulk transfers.\n    Low = 3,\n}",
              "docs": "Message priority levels.\n\nLower numeric value = higher priority. Critical messages are always\ndequeued before High, High before Normal, Normal before Low.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 31
            },
            {
              "name": "flow::Priority::COUNT",
              "kind": "const_item",
              "signature": "pub const COUNT: usize;",
              "docs": "Number of priority levels.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "flow::Priority::from_index",
              "kind": "function_item",
              "signature": "pub fn from_index(idx: usize) -> Result<Self, CzacError>;",
              "docs": "Convert from a numeric index.",
              "attributes": "",
              "line": 47
            },
            {
              "name": "flow::FlowController",
              "kind": "struct_item",
              "signature": "pub struct FlowController {\n/// Initial credits assigned when the channel opens.\n\npub initial_credits: u64,\n/// Currently available send credits.\n\npub available_credits: u64,\n/// Maximum credits that can be accumulated.\n\npub max_credits: u64,\n/// Congestion window (for adaptive flow control).\n\npub window_size: u64,\n/// Four priority queues: [Critical, High, Normal, Low].\n\npub priority_queues: [VecDeque<Vec<u8>>; 4]\n}",
              "docs": "Credit-based flow controller with priority queues.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "flow::FlowController::new",
              "kind": "function_item",
              "signature": "pub fn new(initial_credits: u64, max_credits: u64) -> Self;",
              "docs": "Create a new flow controller with the given credit limits.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "flow::FlowController::can_send",
              "kind": "function_item",
              "signature": "pub fn can_send(&self) -> bool;",
              "docs": "Check whether there are credits available to send.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "flow::FlowController::consume_credit",
              "kind": "function_item",
              "signature": "pub fn consume_credit(&mut self) -> Result<(), CzacError>;",
              "docs": "Consume one send credit.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "flow::FlowController::replenish",
              "kind": "function_item",
              "signature": "pub fn replenish(&mut self, amount: u64);",
              "docs": "Replenish credits (called when the remote acknowledges messages).\n\nCredits are capped at `max_credits`.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "flow::FlowController::enqueue",
              "kind": "function_item",
              "signature": "pub fn enqueue(&mut self, data: Vec<u8>, priority: Priority) -> Result<(), CzacError>;",
              "docs": "Enqueue a message at the given priority.\n\nReturns an error if the total queue depth exceeds the maximum.",
              "attributes": "",
              "line": 122
            },
            {
              "name": "flow::FlowController::dequeue",
              "kind": "function_item",
              "signature": "pub fn dequeue(&mut self) -> Option<(Priority, Vec<u8>)>;",
              "docs": "Dequeue the highest-priority message.\n\nReturns `None` if all queues are empty.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "flow::FlowController::queue_depth",
              "kind": "function_item",
              "signature": "pub fn queue_depth(&self) -> usize;",
              "docs": "Total number of messages across all priority queues.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "flow::FlowController::is_backpressured",
              "kind": "function_item",
              "signature": "pub fn is_backpressured(&self) -> bool;",
              "docs": "Check whether backpressure should be applied.\n\nReturns `true` if either credits are exhausted or queues are deep.",
              "attributes": "",
              "line": 153
            },
            {
              "name": "flow::FlowController::queue_depth_for",
              "kind": "function_item",
              "signature": "pub fn queue_depth_for(&self, priority: Priority) -> usize;",
              "docs": "Returns the number of messages in a specific priority queue.",
              "attributes": "",
              "line": 158
            }
          ],
          "parseErrors": false
        },
        {
          "module": "payment",
          "source": "sigil/node/sigil-czac/src/payment.rs",
          "sha256": "4034bf3daff47fd3728e90dc3e7a9e60817915ad7ad3288744e8082f3870d46c",
          "attributes": "",
          "items": [
            {
              "name": "payment::DEFAULT_DISPUTE_WINDOW",
              "kind": "const_item",
              "signature": "pub const DEFAULT_DISPUTE_WINDOW: u64;",
              "docs": "Default dispute window in blocks.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "payment::BALANCE_UPDATE_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const BALANCE_UPDATE_DOMAIN_TAG: &[u8];",
              "docs": "Domain separator for signed CZAC payment-channel balance updates.\n\nThe signed transcript is:\n\n```text\nBALANCE_UPDATE_DOMAIN_TAG\n|| u32-le:len(channel_id) || channel_id\n|| u64-le:sequence\n|| u64-le:balance_a\n|| u64-le:balance_b\n|| u64-le:escrow_amount\n```\n\n`escrow_amount` is included to bind the update to the funded channel size.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "payment::PaymentChannelState",
              "kind": "enum_item",
              "signature": "pub enum PaymentChannelState {\n    /// Channel has been funded and is ready for use.\n    Funded,\n    /// Channel is actively exchanging balance updates.\n    Active,\n    /// Both parties agreed to close cooperatively.\n    CooperativeClose,\n    /// One party initiated a unilateral close.\n    UnilateralClose {\n        /// DID of the party who initiated the close.\n        closer_did: String,\n        /// Block height at which the close was initiated.\n        close_height: u64,\n    },\n    /// A dispute has been filed against a unilateral close.\n    Disputed {\n        /// DID of the party who filed the dispute.\n        disputer_did: String,\n        /// Block height at which the dispute was filed.\n        dispute_height: u64,\n    },\n    /// Channel has been settled on-chain.\n    Settled,\n}",
              "docs": "Payment channel state.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "payment::BalanceUpdate",
              "kind": "struct_item",
              "signature": "pub struct BalanceUpdate {\n/// Channel this update belongs to.\n\npub channel_id: String,\n/// Monotonically increasing sequence number.\n\npub sequence: u64,\n/// Party A's balance after this update.\n\npub balance_a: u64,\n/// Party B's balance after this update.\n\npub balance_b: u64,\n/// Party A's signature over (channel_id, sequence, balance_a, balance_b).\n\npub signature_a: Vec<u8>,\n/// Party B's signature over (channel_id, sequence, balance_a, balance_b).\n\npub signature_b: Vec<u8>\n}",
              "docs": "A signed balance update exchanged between channel parties.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "payment::PaymentChannel",
              "kind": "struct_item",
              "signature": "pub struct PaymentChannel {\n/// Unique channel identifier.\n\npub channel_id: String,\n/// OAS DID of party A (typically the initiator).\n\npub party_a_did: String,\n/// OAS DID of party B (typically the responder).\n\npub party_b_did: String,\n/// Total escrow amount locked in the channel.\n\npub escrow_amount: u64,\n/// Party A's current balance.\n\npub balance_a: u64,\n/// Party B's current balance.\n\npub balance_b: u64,\n/// Current state update sequence number.\n\npub sequence: u64,\n/// Current channel state.\n\npub state: PaymentChannelState,\n/// Dispute window in blocks.\n\npub dispute_window: u64\n}",
              "docs": "A payment channel between two parties.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 85
            },
            {
              "name": "payment::PaymentChannel::new",
              "kind": "function_item",
              "signature": "pub fn new(channel_id: String, party_a: String, party_b: String, escrow: u64) -> Self;",
              "docs": "Create a new payment channel in the `Funded` state.\n\nInitially, all funds belong to party A.",
              "attributes": "",
              "line": 110
            },
            {
              "name": "payment::PaymentChannel::update_balance",
              "kind": "function_item",
              "signature": "pub fn update_balance(&mut self, update: BalanceUpdate) -> Result<(), CzacError>;",
              "docs": "Apply a balance update to the channel.\n\nThe update must:\n1. Reference this channel.\n2. Have a sequence > current sequence.\n3. Preserve the balance invariant (a + b == escrow).\n4. Have non-empty signatures from both parties.",
              "attributes": "",
              "line": 131
            },
            {
              "name": "payment::PaymentChannel::update_balance_with_keys",
              "kind": "function_item",
              "signature": "pub fn update_balance_with_keys(\n        &mut self,\n        update: BalanceUpdate,\n        party_a_verifying_key_bytes: &[u8; 32],\n        party_b_verifying_key_bytes: &[u8; 32],\n    ) -> Result<(), CzacError>;",
              "docs": "Apply a balance update after verifying both party signatures.\n\nThe verifying keys must be resolved from the channel participants by the\ncaller. They are deliberately not stored in the update payload, so an\nupdate cannot authorize itself with attacker-chosen keys.",
              "attributes": "",
              "line": 195
            },
            {
              "name": "payment::PaymentChannel::cooperative_close",
              "kind": "function_item",
              "signature": "pub fn cooperative_close(&mut self) -> Result<(u64, u64), CzacError>;",
              "docs": "Close the channel cooperatively.\n\nReturns the final balances `(balance_a, balance_b)`.",
              "attributes": "",
              "line": 245
            },
            {
              "name": "payment::PaymentChannel::unilateral_close",
              "kind": "function_item",
              "signature": "pub fn unilateral_close(\n        &mut self,\n        closer_did: &str,\n        current_height: u64,\n    ) -> Result<(), CzacError>;",
              "docs": "Initiate a unilateral close.\n\nThe closer publishes their latest known state. The other party has\n`dispute_window` blocks to dispute with a newer state.",
              "attributes": "",
              "line": 263
            },
            {
              "name": "payment::PaymentChannel::dispute",
              "kind": "function_item",
              "signature": "pub fn dispute(\n        &mut self,\n        disputer_did: &str,\n        newer_update: BalanceUpdate,\n        current_height: u64,\n    ) -> Result<(), CzacError>;",
              "docs": "Dispute a unilateral close by providing a newer balance update.\n\nThe disputer must provide a state with a higher sequence number\nthan the current state, and must file during the dispute window.",
              "attributes": "",
              "line": 295
            },
            {
              "name": "payment::PaymentChannel::can_settle",
              "kind": "function_item",
              "signature": "pub fn can_settle(&self, current_height: u64) -> bool;",
              "docs": "Check whether the channel can be settled on-chain.\n\nFor unilateral closes: the dispute window must have elapsed.\nFor cooperative closes: always true.\nFor disputes: the dispute window from the dispute height must have elapsed.",
              "attributes": "",
              "line": 361
            },
            {
              "name": "payment::PaymentChannel::settle",
              "kind": "function_item",
              "signature": "pub fn settle(&mut self, current_height: u64) -> Result<(u64, u64), CzacError>;",
              "docs": "Settle the channel, returning the final balances.\n\nSECURITY: Enforces `can_settle(current_height)` to prevent premature\nsettlement. Without this check, a party could publish a stale state\nvia unilateral close and settle before the counterparty has time to\ndispute, effectively stealing funds.",
              "attributes": "",
              "line": 380
            },
            {
              "name": "payment::create_signed_balance_update",
              "kind": "function_item",
              "signature": "pub fn create_signed_balance_update(\n    channel_id: String,\n    sequence: u64,\n    balance_a: u64,\n    balance_b: u64,\n    escrow_amount: u64,\n    signing_key_a: &SigningKey,\n    signing_key_b: &SigningKey,\n) -> Result<BalanceUpdate, CzacError>;",
              "docs": "Create a balance update signed by both channel parties.",
              "attributes": "",
              "line": 418
            },
            {
              "name": "payment::verify_balance_update_signatures",
              "kind": "function_item",
              "signature": "pub fn verify_balance_update_signatures(\n    update: &BalanceUpdate,\n    escrow_amount: u64,\n    party_a_verifying_key_bytes: &[u8; 32],\n    party_b_verifying_key_bytes: &[u8; 32],\n) -> Result<(), CzacError>;",
              "docs": "Verify both signatures on a balance update.",
              "attributes": "",
              "line": 445
            },
            {
              "name": "payment::balance_update_digest",
              "kind": "function_item",
              "signature": "pub fn balance_update_digest(update: &BalanceUpdate, escrow_amount: u64) -> [u8; 32];",
              "docs": "Compute the canonical digest signed by channel parties for balance updates.",
              "attributes": "",
              "line": 468
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routing",
          "source": "sigil/node/sigil-czac/src/routing.rs",
          "sha256": "1d6fb16ae6411c0cd764e687dae5a9397e292d3ec0ab24308f272db2c023fb6d",
          "attributes": "",
          "items": [
            {
              "name": "routing::ZoneEndpoint",
              "kind": "struct_item",
              "signature": "pub struct ZoneEndpoint {\n/// Unique zone identifier.\n\npub zone_id: String,\n/// OAS DID of the organization that owns this zone.\n\npub org_did: String,\n/// Multiaddresses where this zone can be reached.\n\npub addresses: Vec<String>,\n/// Capabilities this zone advertises (e.g., \"czac.payment\", \"czac.broadcast\").\n\npub capabilities: Vec<String>,\n/// Unix timestamp when this endpoint was last seen / refreshed.\n\npub last_seen: u64,\n/// Time-to-live in seconds before this entry is considered stale.\n\npub ttl: u64\n}",
              "docs": "A zone endpoint registration in the routing table.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "routing::ZoneEndpoint::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self, now: u64) -> bool;",
              "docs": "Check whether this endpoint has expired at the given time.",
              "attributes": "",
              "line": 33
            },
            {
              "name": "routing::RoutingTable",
              "kind": "struct_item",
              "signature": "pub struct RoutingTable {\n\n}",
              "docs": "Routing table for zone endpoint discovery.\n\nProvides O(1) lookup by zone ID and O(n) lookup by org DID.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "routing::RoutingTable::new",
              "kind": "function_item",
              "signature": "pub fn new(cache_ttl: u64) -> Self;",
              "docs": "Create a new routing table with the given default cache TTL.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "routing::RoutingTable::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, endpoint: ZoneEndpoint) -> Result<(), CzacError>;",
              "docs": "Register or update a zone endpoint.\n\nReturns an error if the endpoint has no zone ID or no addresses.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "routing::RoutingTable::lookup",
              "kind": "function_item",
              "signature": "pub fn lookup(&self, zone_id: &str) -> Option<&ZoneEndpoint>;",
              "docs": "Look up a zone endpoint by zone ID.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "routing::RoutingTable::lookup_by_org",
              "kind": "function_item",
              "signature": "pub fn lookup_by_org(&self, org_did: &str) -> Vec<&ZoneEndpoint>;",
              "docs": "Look up all zone endpoints belonging to a given organization.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "routing::RoutingTable::remove_expired",
              "kind": "function_item",
              "signature": "pub fn remove_expired(&mut self, now: u64) -> usize;",
              "docs": "Remove all expired endpoints. Returns the number of entries removed.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "routing::RoutingTable::all_zones",
              "kind": "function_item",
              "signature": "pub fn all_zones(&self) -> Vec<&str>;",
              "docs": "Return zone IDs of all registered endpoints.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "routing::RoutingTable::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Returns the number of registered endpoints.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "routing::RoutingTable::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Returns true if the routing table is empty.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "routing::RoutingTable::cache_ttl",
              "kind": "function_item",
              "signature": "pub fn cache_ttl(&self) -> u64;",
              "docs": "Returns the default cache TTL.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "routing::RoutingTable::remove",
              "kind": "function_item",
              "signature": "pub fn remove(&mut self, zone_id: &str) -> Option<ZoneEndpoint>;",
              "docs": "Remove a specific zone endpoint by zone ID.",
              "attributes": "",
              "line": 118
            }
          ],
          "parseErrors": false
        },
        {
          "module": "session",
          "source": "sigil/node/sigil-czac/src/session.rs",
          "sha256": "09f9716637b09055431b19d296c252c0d554087d9e7ff92d4c32cbcc4666b9dd",
          "attributes": "",
          "items": [
            {
              "name": "session::DEFAULT_REKEY_AFTER",
              "kind": "const_item",
              "signature": "pub const DEFAULT_REKEY_AFTER: u64;",
              "docs": "Default number of messages before rekeying is required.\n\n2^20 \u2248 1M messages. ChaCha20-Poly1305 with a 96-bit nonce allows up to\n2^32 unique nonces per key before the birthday bound becomes significant;\nwe rekey at 2^20 to provide a conservative safety margin and ensure\nforward secrecy through frequent key rotation.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "session::SessionKeys",
              "kind": "struct_item",
              "signature": "pub struct SessionKeys {\n/// Local encryption key (ChaCha20-Poly1305, 32 bytes).\n\npub local_key: [u8; 32],\n/// Remote encryption key for decrypting incoming messages.\n\npub remote_key: [u8; 32],\n/// Nonce counter for outgoing messages.\n\npub local_nonce_counter: u64,\n/// Nonce counter for incoming messages (next expected value).\n\npub remote_nonce_counter: u64,\n/// Number of messages before rekeying (default: 2^20).\n\npub rekey_after: u64,\n/// Unix timestamp when these keys were derived.\n\npub created_at: u64\n}",
              "docs": "Session keys derived after a successful channel handshake.\n\nThe initiator and responder derive different key pairs from the same\nshared secret to prevent key reuse in both directions.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "session::SessionKeys::derive",
              "kind": "function_item",
              "signature": "pub fn derive(shared_secret: &[u8; 32], initiator: bool) -> Self;",
              "docs": "Derive session keys from a shared secret.\n\nBoth sides call this with the same `shared_secret` but opposite\n`initiator` values, ensuring they agree on which key is local\nvs. remote. Key derivation uses BLAKE3 KDF with distinct context\nstrings so the two keys are cryptographically independent.\n\n# Arguments\n\n* `shared_secret` - 32-byte shared secret from the handshake.\n* `initiator` - `true` if this side initiated the channel.\n\n# Returns\n\nA [`SessionKeys`] ready to encrypt/decrypt with nonce counters at zero.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "session::SessionKeys::needs_rekey",
              "kind": "function_item",
              "signature": "pub fn needs_rekey(&self) -> bool;",
              "docs": "Check whether the session keys need rekeying.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "session::SessionKeys::next_nonce",
              "kind": "function_item",
              "signature": "pub fn next_nonce(&mut self) -> [u8; 12];",
              "docs": "Construct the next nonce from the local counter and increment it.",
              "attributes": "",
              "line": 109
            },
            {
              "name": "session::SessionKeys::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(&mut self, plaintext: &[u8], aad: &[u8]) -> Result<Vec<u8>, CzacError>;",
              "docs": "Encrypt plaintext with the local ChaCha20-Poly1305 key.\n\nOutput format: `[nonce (12 bytes)] [ciphertext + tag (plaintext.len() + 16 bytes)]`\n\nThe `aad` bytes (e.g. the serialized message header) are authenticated\nbut not included in the output; the caller must transmit them alongside\nthe ciphertext and supply identical bytes to [`decrypt`](Self::decrypt).\n\n# Errors\n\nReturns [`CzacError::RekeyRequired`] if the nonce counter has reached\n`rekey_after`. Returns [`CzacError::SessionCryptoError`] on cipher failure.",
              "attributes": "",
              "line": 127
            },
            {
              "name": "session::SessionKeys::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(&mut self, data: &[u8], aad: &[u8]) -> Result<Vec<u8>, CzacError>;",
              "docs": "Decrypt ciphertext with the remote ChaCha20-Poly1305 key.\n\nExpects input format: `[nonce (12 bytes)] [ciphertext + tag]`\n\nThe `aad` must be identical to the bytes passed to [`encrypt`](Self::encrypt)\non the sending side. Any mismatch, ciphertext tampering, or tag failure\ncauses an immediate hard error \u2014 no plaintext is returned on failure.\n\nNonce ordering is enforced: a message with a nonce counter less than the\ncurrent `remote_nonce_counter` is rejected as a replay.\n\n# Errors\n\nReturns [`CzacError::SessionCryptoError`] if:\n- The input is too short (< 12 + 16 bytes)\n- Nonce replay is detected\n- AAD mismatch or ciphertext tampering (authentication tag fails)",
              "attributes": "",
              "line": 174
            }
          ],
          "parseErrors": false
        },
        {
          "module": "settlement",
          "source": "sigil/node/sigil-czac/src/settlement.rs",
          "sha256": "a2702b3b42d029b729dcf3f7e192ca308ee035d165700ae0fd461dab2c22edd8",
          "attributes": "",
          "items": [
            {
              "name": "settlement::SETTLEMENT_DOMAIN_TAG",
              "kind": "const_item",
              "signature": "pub const SETTLEMENT_DOMAIN_TAG: &[u8];",
              "docs": "Domain separator for CZAC settlement signatures.\n\nThe signed transcript is:\n\n```text\nSETTLEMENT_DOMAIN_TAG\n|| u32-le:len(channel_id) || channel_id\n|| u64-le:latest_sequence\n|| u64-le:final_balance_a\n|| u64-le:final_balance_b\n|| u64-le:escrow_amount\n```\n\nThe `signatures` field is excluded. `escrow_amount` is included so a valid\nsignature for one escrow cannot be replayed into a different channel amount\neven if a channel identifier is reused by a caller.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "settlement::SettlementProof",
              "kind": "struct_item",
              "signature": "pub struct SettlementProof {\n/// Payment channel ID being settled.\n\npub channel_id: String,\n/// Final balance for party A.\n\npub final_balance_a: u64,\n/// Final balance for party B.\n\npub final_balance_b: u64,\n/// Latest state update sequence number.\n\npub latest_sequence: u64,\n/// Signatures from both parties over the final state.\n\npub signatures: Vec<Vec<u8>>\n}",
              "docs": "A settlement proof submitted to the consensus layer.\n\nThis proof authorizes the on-chain release of escrowed funds according\nto the final balance distribution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 36
            },
            {
              "name": "settlement::verify_settlement",
              "kind": "function_item",
              "signature": "pub fn verify_settlement(proof: &SettlementProof, escrow_amount: u64) -> Result<bool, CzacError>;",
              "docs": "Verify that a settlement proof is valid against the escrow amount.\n\nChecks:\n1. Balance invariant: `final_balance_a + final_balance_b == escrow_amount`\n2. At least 2 signatures are present (both parties).\n3. Channel ID is non-empty.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "settlement::verify_settlement_with_keys",
              "kind": "function_item",
              "signature": "pub fn verify_settlement_with_keys(\n    proof: &SettlementProof,\n    escrow_amount: u64,\n    party_a_verifying_key_bytes: &[u8; 32],\n    party_b_verifying_key_bytes: &[u8; 32],\n) -> Result<bool, CzacError>;",
              "docs": "Verify that a settlement proof carries valid party signatures.\n\nThe verifying keys must come from the already-resolved channel parties\n(typically via OAS/DID resolution). They are not read from the proof, which\nprevents a proof from self-authorizing with attacker-chosen keys.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "settlement::create_signed_settlement_proof",
              "kind": "function_item",
              "signature": "pub fn create_signed_settlement_proof(\n    channel_id: String,\n    balance_a: u64,\n    balance_b: u64,\n    sequence: u64,\n    escrow_amount: u64,\n    signing_key_a: &SigningKey,\n    signing_key_b: &SigningKey,\n) -> Result<SettlementProof, CzacError>;",
              "docs": "Create a settlement proof signed by both channel parties.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "settlement::settlement_digest",
              "kind": "function_item",
              "signature": "pub fn settlement_digest(proof: &SettlementProof, escrow_amount: u64) -> [u8; 32];",
              "docs": "Compute the canonical digest signed by settlement participants.",
              "attributes": "",
              "line": 127
            },
            {
              "name": "settlement::calculate_settlement_amounts",
              "kind": "function_item",
              "signature": "pub fn calculate_settlement_amounts(proof: &SettlementProof) -> Result<(u64, u64), CzacError>;",
              "docs": "Calculate the settlement amounts from a proof.\n\nReturns `(amount_a, amount_b)` after verifying the balance invariant\nagainst the sum.",
              "attributes": "",
              "line": 219
            },
            {
              "name": "settlement::create_settlement_proof",
              "kind": "function_item",
              "signature": "pub fn create_settlement_proof(\n    channel_id: String,\n    balance_a: u64,\n    balance_b: u64,\n    sequence: u64,\n    signature_a: Vec<u8>,\n    signature_b: Vec<u8>,\n) -> SettlementProof;",
              "docs": "Create a settlement proof from a closed payment channel.",
              "attributes": "",
              "line": 233
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-nova",
      "version": "0.1.0",
      "source": "sigil/node/sigil-nova",
      "manifestSha256": "41bc2076130eb3220749493e95456a194570da5b4be21285c07641afc3e09e51",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-nova",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-nova/src/lib.rs",
          "sha256": "37fd767dca49ccbb3fe38f5d5e85e1542340c9ed43bb6517ea62d3b1a6d30da5",
          "attributes": "",
          "items": [
            {
              "name": "assets",
              "kind": "module",
              "signature": "pub mod assets;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "avatar",
              "kind": "module",
              "signature": "pub mod avatar;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "building",
              "kind": "module",
              "signature": "pub mod building;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "economy",
              "kind": "module",
              "signature": "pub mod economy;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "parcel",
              "kind": "module",
              "signature": "pub mod parcel;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "spatial_zone",
              "kind": "module",
              "signature": "pub mod spatial_zone;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "streaming",
              "kind": "module",
              "signature": "pub mod streaming;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "world",
              "kind": "module",
              "signature": "pub mod world;",
              "docs": "",
              "attributes": "",
              "line": 16
            }
          ],
          "parseErrors": false
        },
        {
          "module": "assets",
          "source": "sigil/node/sigil-nova/src/assets.rs",
          "sha256": "53990d5b199b86bd83e65645a0c7d361d29974513b75a4eb8b8a585957a29fa6",
          "attributes": "",
          "items": [
            {
              "name": "assets::MAX_ASSET_POLYCOUNT",
              "kind": "const_item",
              "signature": "pub const MAX_ASSET_POLYCOUNT: u32;",
              "docs": "Maximum polycount for a single asset.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "assets::MAX_ASSET_FILE_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_ASSET_FILE_SIZE: u64;",
              "docs": "Maximum file size for an asset (100 MB).",
              "attributes": "",
              "line": 18
            },
            {
              "name": "assets::AssetId",
              "kind": "struct_item",
              "signature": "pub struct AssetId(pub String);",
              "docs": "Unique asset identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "assets::AssetType",
              "kind": "enum_item",
              "signature": "pub enum AssetType {\n    GltfModel,\n    Texture,\n    Audio,\n    Environment,\n    AvatarTemplate,\n    Furniture,\n    Vehicle,\n}",
              "docs": "Type of 3D asset.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "assets::ContentRating",
              "kind": "enum_item",
              "signature": "pub enum ContentRating {\n    Safe,\n    Moderate,\n    Restricted,\n}",
              "docs": "Content rating for asset moderation.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 38
            },
            {
              "name": "assets::AssetMetadata",
              "kind": "struct_item",
              "signature": "pub struct AssetMetadata {\npub id: AssetId,\npub asset_type: AssetType,\n/// DID of this asset in the MARS registry.\n\npub mars_did: String,\npub polycount: Option<u32>,\npub lod_levels: Option<u8>,\npub bounding_box: Option<BoundingBox>,\npub file_size_bytes: u64,\npub format: String,\npub creator_did: String,\npub created_at: u64,\npub content_rating: ContentRating\n}",
              "docs": "Metadata for a registered Nova asset.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "assets::AssetRegistry",
              "kind": "struct_item",
              "signature": "pub struct AssetRegistry {\n\n}",
              "docs": "On-chain registry of Nova 3D assets.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 63
            },
            {
              "name": "assets::AssetRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty asset registry.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "assets::AssetRegistry::register_asset",
              "kind": "function_item",
              "signature": "pub fn register_asset(&mut self, metadata: AssetMetadata) -> Result<(), NovaError>;",
              "docs": "Register a new asset after validation.",
              "attributes": "",
              "line": 74
            },
            {
              "name": "assets::AssetRegistry::get_asset",
              "kind": "function_item",
              "signature": "pub fn get_asset(&self, asset_id: &AssetId) -> Option<&AssetMetadata>;",
              "docs": "Look up an asset by ID.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "assets::AssetRegistry::search_assets",
              "kind": "function_item",
              "signature": "pub fn search_assets(\n        &self,\n        asset_type: Option<AssetType>,\n        creator: Option<&str>,\n        max_polycount: Option<u32>,\n    ) -> Vec<&AssetMetadata>;",
              "docs": "Search assets by type, creator, and/or maximum polycount.",
              "attributes": "",
              "line": 89
            },
            {
              "name": "assets::AssetRegistry::deregister_asset",
              "kind": "function_item",
              "signature": "pub fn deregister_asset(&mut self, asset_id: &AssetId) -> Result<AssetMetadata, NovaError>;",
              "docs": "Deregister an asset, returning the removed metadata.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "assets::AssetRegistry::asset_count",
              "kind": "function_item",
              "signature": "pub fn asset_count(&self) -> usize;",
              "docs": "Total number of registered assets.",
              "attributes": "",
              "line": 128
            },
            {
              "name": "assets::validate_asset",
              "kind": "function_item",
              "signature": "pub fn validate_asset(metadata: &AssetMetadata) -> Result<(), NovaError>;",
              "docs": "Validate asset metadata constraints.",
              "attributes": "",
              "line": 134
            }
          ],
          "parseErrors": false
        },
        {
          "module": "avatar",
          "source": "sigil/node/sigil-nova/src/avatar.rs",
          "sha256": "ee8352dcb2778d7ab2357aa9a7e5094e82d162873ae8e498373b8f521663dbeb",
          "attributes": "",
          "items": [
            {
              "name": "avatar::AvatarId",
              "kind": "struct_item",
              "signature": "pub struct AvatarId(pub String);",
              "docs": "Unique avatar identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "avatar::Rotation",
              "kind": "struct_item",
              "signature": "pub struct Rotation {\n/// Rotation around the Y axis (left-right look).\n\npub yaw: f32,\n/// Rotation around the X axis (up-down look).\n\npub pitch: f32,\n/// Rotation around the Z axis (tilt).\n\npub roll: f32\n}",
              "docs": "Euler rotation for avatar orientation.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "avatar::AnimationState",
              "kind": "enum_item",
              "signature": "pub enum AnimationState {\n    Idle,\n    Walking,\n    Running,\n    Sitting,\n    Gesture(String),\n    Custom(String),\n}",
              "docs": "Animation state of an avatar.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 31
            },
            {
              "name": "avatar::PresenceStatus",
              "kind": "enum_item",
              "signature": "pub enum PresenceStatus {\n    Online,\n    Away,\n    Busy,\n    Offline,\n}",
              "docs": "Presence status of an avatar's owner.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "avatar::AvatarRecord",
              "kind": "struct_item",
              "signature": "pub struct AvatarRecord {\npub id: AvatarId,\npub owner_did: String,\npub avatar_asset_did: String,\npub position: WorldPosition,\npub rotation: Rotation,\npub animation_state: AnimationState,\npub presence: PresenceStatus,\npub world_id: WorldId,\npub last_updated: u64\n}",
              "docs": "On-chain record of a spawned avatar.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 51
            },
            {
              "name": "avatar::AvatarRegistry",
              "kind": "struct_item",
              "signature": "pub struct AvatarRegistry {\n\n}",
              "docs": "On-chain registry of all spawned avatars.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 65
            },
            {
              "name": "avatar::AvatarRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty avatar registry.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "avatar::AvatarRegistry::spawn_avatar",
              "kind": "function_item",
              "signature": "pub fn spawn_avatar(\n        &mut self,\n        owner_did: &str,\n        asset_did: &str,\n        position: WorldPosition,\n        world_id: WorldId,\n        timestamp: u64,\n    ) -> Result<AvatarRecord, NovaError>;",
              "docs": "Spawn a new avatar for an agent/human.\n\nEach DID may only have one active avatar at a time.",
              "attributes": "",
              "line": 79
            },
            {
              "name": "avatar::AvatarRegistry::update_position",
              "kind": "function_item",
              "signature": "pub fn update_position(\n        &mut self,\n        avatar_id: &AvatarId,\n        position: WorldPosition,\n        rotation: Rotation,\n        timestamp: u64,\n    ) -> Result<(), NovaError>;",
              "docs": "Update the position and rotation of an avatar.",
              "attributes": "",
              "line": 114
            },
            {
              "name": "avatar::AvatarRegistry::update_animation",
              "kind": "function_item",
              "signature": "pub fn update_animation(\n        &mut self,\n        avatar_id: &AvatarId,\n        state: AnimationState,\n        timestamp: u64,\n    ) -> Result<(), NovaError>;",
              "docs": "Update the animation state of an avatar.",
              "attributes": "",
              "line": 132
            },
            {
              "name": "avatar::AvatarRegistry::set_presence",
              "kind": "function_item",
              "signature": "pub fn set_presence(\n        &mut self,\n        avatar_id: &AvatarId,\n        status: PresenceStatus,\n        timestamp: u64,\n    ) -> Result<(), NovaError>;",
              "docs": "Set the presence status of an avatar.",
              "attributes": "",
              "line": 148
            },
            {
              "name": "avatar::AvatarRegistry::despawn_avatar",
              "kind": "function_item",
              "signature": "pub fn despawn_avatar(&mut self, avatar_id: &AvatarId) -> Result<AvatarRecord, NovaError>;",
              "docs": "Remove an avatar from the world.",
              "attributes": "",
              "line": 164
            },
            {
              "name": "avatar::AvatarRegistry::get_nearby_avatars",
              "kind": "function_item",
              "signature": "pub fn get_nearby_avatars(&self, position: &WorldPosition, radius: f64) -> Vec<&AvatarRecord>;",
              "docs": "Find all avatars within a given radius of a position.",
              "attributes": "",
              "line": 174
            },
            {
              "name": "avatar::AvatarRegistry::get_avatar_by_did",
              "kind": "function_item",
              "signature": "pub fn get_avatar_by_did(&self, owner_did: &str) -> Option<&AvatarRecord>;",
              "docs": "Look up an avatar by its owner DID.",
              "attributes": "",
              "line": 188
            },
            {
              "name": "avatar::AvatarRegistry::get_avatar",
              "kind": "function_item",
              "signature": "pub fn get_avatar(&self, avatar_id: &AvatarId) -> Option<&AvatarRecord>;",
              "docs": "Get an avatar by its ID.",
              "attributes": "",
              "line": 195
            },
            {
              "name": "avatar::AvatarRegistry::avatar_count",
              "kind": "function_item",
              "signature": "pub fn avatar_count(&self) -> usize;",
              "docs": "Total number of spawned avatars.",
              "attributes": "",
              "line": 200
            }
          ],
          "parseErrors": false
        },
        {
          "module": "building",
          "source": "sigil/node/sigil-nova/src/building.rs",
          "sha256": "cc97049d0646da8c424b58c8a4fd92910051c207eac9b911790a028e01f67280",
          "attributes": "",
          "items": [
            {
              "name": "building::MAX_POLYCOUNT",
              "kind": "const_item",
              "signature": "pub const MAX_POLYCOUNT: u32;",
              "docs": "Maximum polycount for a single building (performance budget).",
              "attributes": "",
              "line": 15
            },
            {
              "name": "building::BuildingId",
              "kind": "struct_item",
              "signature": "pub struct BuildingId(pub String);",
              "docs": "Unique building identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "building::BoundingBox",
              "kind": "struct_item",
              "signature": "pub struct BoundingBox {\npub min: WorldPosition,\npub max: WorldPosition\n}",
              "docs": "Axis-aligned bounding box for a building.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "building::BuildingManifest",
              "kind": "struct_item",
              "signature": "pub struct BuildingManifest {\npub id: BuildingId,\npub name: String,\n/// DID of the 3D asset in MARS registry.\n\npub asset_did: String,\npub polycount: u32,\npub bounding_box: BoundingBox,\n/// Number of Level-of-Detail levels.\n\npub lod_levels: u8,\n/// DID of the building creator.\n\npub creator_did: String\n}",
              "docs": "Manifest describing a building asset before placement.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 30
            },
            {
              "name": "building::BuildingPlacement",
              "kind": "struct_item",
              "signature": "pub struct BuildingPlacement {\npub manifest: BuildingManifest,\npub parcel_id: ParcelId,\npub position: WorldPosition,\n/// Rotation in degrees around the Y axis.\n\npub rotation: f32,\npub placed_at: u64,\npub permissions: BuildingPermissions\n}",
              "docs": "A building placed on a specific parcel in the world.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "building::BuildingPermissions",
              "kind": "struct_item",
              "signature": "pub struct BuildingPermissions {\npub owner_did: String,\npub can_enter: AccessLevel,\npub can_modify: AccessLevel\n}",
              "docs": "Access control for a building.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "building::AccessLevel",
              "kind": "enum_item",
              "signature": "pub enum AccessLevel {\n    Public,\n    Members,\n    Owner,\n    Deny,\n}",
              "docs": "Access level for building interactions.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 65
            },
            {
              "name": "building::BuildingRegistry",
              "kind": "struct_item",
              "signature": "pub struct BuildingRegistry {\n\n}",
              "docs": "On-chain registry of deployed buildings.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 74
            },
            {
              "name": "building::BuildingRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty building registry.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "building::BuildingRegistry::deploy_building",
              "kind": "function_item",
              "signature": "pub fn deploy_building(\n        &mut self,\n        manifest: BuildingManifest,\n        parcel_id: ParcelId,\n        position: WorldPosition,\n        rotation: f32,\n        timestamp: u64,\n        owner_did: &str,\n    ) -> Result<BuildingPlacement, NovaError>;",
              "docs": "Deploy a building onto a parcel.\n\nValidates polycount limits. The caller must ensure parcel ownership\nexternally before calling this method.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "building::BuildingRegistry::remove_building",
              "kind": "function_item",
              "signature": "pub fn remove_building(\n        &mut self,\n        building_id: &BuildingId,\n        caller_did: &str,\n    ) -> Result<BuildingPlacement, NovaError>;",
              "docs": "Remove a building. Only the owner may remove it.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "building::BuildingRegistry::get_buildings_in_parcel",
              "kind": "function_item",
              "signature": "pub fn get_buildings_in_parcel(&self, parcel_id: &ParcelId) -> Vec<&BuildingPlacement>;",
              "docs": "Get all buildings placed in a given chunk.\n\nUses a simple linear scan; production would use a spatial index.",
              "attributes": "",
              "line": 188
            },
            {
              "name": "building::BuildingRegistry::update_permissions",
              "kind": "function_item",
              "signature": "pub fn update_permissions(\n        &mut self,\n        building_id: &BuildingId,\n        caller_did: &str,\n        new_perms: BuildingPermissions,\n    ) -> Result<(), NovaError>;",
              "docs": "Update the permissions on an existing building.",
              "attributes": "",
              "line": 196
            },
            {
              "name": "building::BuildingRegistry::get_building",
              "kind": "function_item",
              "signature": "pub fn get_building(&self, building_id: &BuildingId) -> Option<&BuildingPlacement>;",
              "docs": "Get a building by ID.",
              "attributes": "",
              "line": 219
            },
            {
              "name": "building::BuildingRegistry::building_count",
              "kind": "function_item",
              "signature": "pub fn building_count(&self) -> usize;",
              "docs": "Total number of deployed buildings.",
              "attributes": "",
              "line": 224
            }
          ],
          "parseErrors": false
        },
        {
          "module": "economy",
          "source": "sigil/node/sigil-nova/src/economy.rs",
          "sha256": "b840e56e48a5496f89cd2dbc7037482aeec6e7aac78f325ba6fd9194e412cb43",
          "attributes": "",
          "items": [
            {
              "name": "economy::AuctionId",
              "kind": "struct_item",
              "signature": "pub struct AuctionId(pub String);",
              "docs": "Unique auction identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "economy::AuctionStatus",
              "kind": "enum_item",
              "signature": "pub enum AuctionStatus {\n    Active,\n    Ended,\n    Settled,\n    Cancelled,\n}",
              "docs": "Current status of an auction.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "economy::Bid",
              "kind": "struct_item",
              "signature": "pub struct Bid {\npub bidder_did: String,\npub amount: u64,\npub bid_time: u64\n}",
              "docs": "A single bid on an auction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "economy::Auction",
              "kind": "struct_item",
              "signature": "pub struct Auction {\npub id: AuctionId,\npub parcel_id: ParcelId,\npub seller_did: String,\npub min_bid: u64,\npub current_bid: Option<Bid>,\npub end_time: u64,\npub status: AuctionStatus\n}",
              "docs": "A parcel auction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "economy::AuctionResult",
              "kind": "struct_item",
              "signature": "pub struct AuctionResult {\npub auction_id: AuctionId,\npub winner_did: Option<String>,\npub final_amount: Option<u64>\n}",
              "docs": "Result of settling an auction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 54
            },
            {
              "name": "economy::AuctionHouse",
              "kind": "struct_item",
              "signature": "pub struct AuctionHouse {\n\n}",
              "docs": "On-chain auction house.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 62
            },
            {
              "name": "economy::AuctionHouse::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty auction house.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "economy::AuctionHouse::create_auction",
              "kind": "function_item",
              "signature": "pub fn create_auction(\n        &mut self,\n        parcel_id: ParcelId,\n        seller_did: &str,\n        min_bid: u64,\n        duration_epochs: u64,\n        current_time: u64,\n    ) -> Result<Auction, NovaError>;",
              "docs": "Create a new auction for a parcel.",
              "attributes": "",
              "line": 73
            },
            {
              "name": "economy::AuctionHouse::place_bid",
              "kind": "function_item",
              "signature": "pub fn place_bid(\n        &mut self,\n        auction_id: &AuctionId,\n        bidder_did: &str,\n        amount: u64,\n        bid_time: u64,\n    ) -> Result<Bid, NovaError>;",
              "docs": "Place a bid on an active auction.\n\nThe bid must exceed the current bid by at least 5%, or\nmeet the minimum bid if there is no current bid.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "economy::AuctionHouse::settle_auction",
              "kind": "function_item",
              "signature": "pub fn settle_auction(&mut self, auction_id: &AuctionId) -> Result<AuctionResult, NovaError>;",
              "docs": "Settle a completed auction, returning the result.",
              "attributes": "",
              "line": 195
            },
            {
              "name": "economy::AuctionHouse::cancel_auction",
              "kind": "function_item",
              "signature": "pub fn cancel_auction(\n        &mut self,\n        auction_id: &AuctionId,\n        caller_did: &str,\n    ) -> Result<(), NovaError>;",
              "docs": "Cancel an auction. Only possible if no bids have been placed.",
              "attributes": "",
              "line": 217
            },
            {
              "name": "economy::AuctionHouse::get_auction",
              "kind": "function_item",
              "signature": "pub fn get_auction(&self, auction_id: &AuctionId) -> Option<&Auction>;",
              "docs": "Get an auction by ID.",
              "attributes": "",
              "line": 247
            },
            {
              "name": "economy::AuctionHouse::auction_count",
              "kind": "function_item",
              "signature": "pub fn auction_count(&self) -> usize;",
              "docs": "Total number of auctions.",
              "attributes": "",
              "line": 252
            },
            {
              "name": "economy::RentPayment",
              "kind": "struct_item",
              "signature": "pub struct RentPayment {\npub parcel_id: ParcelId,\npub tenant_did: String,\npub amount: u64,\npub period_start: u64,\npub period_end: u64\n}",
              "docs": "A rent payment record.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 259
            },
            {
              "name": "economy::calculate_rent",
              "kind": "function_item",
              "signature": "pub fn calculate_rent(parcel_type: &ParcelType, region: &RegionCoord) -> u64;",
              "docs": "Calculate base rent per epoch for a parcel type and region.\n\nBase rates per type, with a distance multiplier from origin.",
              "attributes": "",
              "line": 270
            },
            {
              "name": "economy::BuildingCost",
              "kind": "struct_item",
              "signature": "pub struct BuildingCost {\npub polycount_fee: u64,\npub compute_fee: u64,\npub storage_fee: u64\n}",
              "docs": "Cost breakdown for deploying a building.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 287
            },
            {
              "name": "economy::BuildingCost::total",
              "kind": "function_item",
              "signature": "pub fn total(&self) -> u64;",
              "docs": "Total cost.",
              "attributes": "",
              "line": 295
            },
            {
              "name": "economy::calculate_building_cost",
              "kind": "function_item",
              "signature": "pub fn calculate_building_cost(manifest: &BuildingManifest) -> BuildingCost;",
              "docs": "Calculate the cost of deploying a building based on its manifest.\n\nFees are proportional to polycount and LOD levels.",
              "attributes": "",
              "line": 305
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-nova/src/error.rs",
          "sha256": "b9888abc6b04ba93f337932d3125b21aeaeab9280c3c212d8635aec81e25dd37",
          "attributes": "",
          "items": [
            {
              "name": "error::NovaError",
              "kind": "enum_item",
              "signature": "pub enum NovaError {\n    // -- World errors --\n    #[error(\"invalid world position: {0}\")]\n    InvalidPosition(String),\n    #[error(\"world not found: {0}\")]\n    WorldNotFound(String),\n\n    // -- Parcel errors --\n    #[error(\"parcel already claimed: {0}\")]\n    ParcelAlreadyClaimed(String),\n    #[error(\"parcel not found: {0}\")]\n    ParcelNotFound(String),\n    #[error(\"not parcel owner: caller {caller}, owner {owner}\")]\n    NotParcelOwner { caller: String, owner: String },\n    #[error(\"invalid parcel id: {0}\")]\n    InvalidParcelId(String),\n\n    // -- Building errors --\n    #[error(\"building not found: {0}\")]\n    BuildingNotFound(String),\n    #[error(\"not building owner: caller {caller}, owner {owner}\")]\n    NotBuildingOwner { caller: String, owner: String },\n    #[error(\"building exceeds parcel bounds: {0}\")]\n    BuildingOutOfBounds(String),\n    #[error(\"polycount limit exceeded: {count} > {limit}\")]\n    PolycountExceeded { count: u32, limit: u32 },\n    #[error(\"building already exists: {0}\")]\n    BuildingAlreadyExists(String),\n\n    // -- Avatar errors --\n    #[error(\"avatar not found: {0}\")]\n    AvatarNotFound(String),\n    #[error(\"avatar already spawned for DID: {0}\")]\n    AvatarAlreadySpawned(String),\n\n    // -- Spatial zone errors --\n    #[error(\"zone not found: {0}\")]\n    ZoneNotFound(String),\n    #[error(\"not zone owner: caller {caller}, owner {owner}\")]\n    NotZoneOwner { caller: String, owner: String },\n    #[error(\"invalid zone boundary: {0}\")]\n    InvalidZoneBoundary(String),\n\n    // -- Asset errors --\n    #[error(\"asset not found: {0}\")]\n    AssetNotFound(String),\n    #[error(\"asset already registered: {0}\")]\n    AssetAlreadyRegistered(String),\n    #[error(\"invalid asset: {0}\")]\n    InvalidAsset(String),\n\n    // -- Economy errors --\n    #[error(\"auction not found: {0}\")]\n    AuctionNotFound(String),\n    #[error(\"auction not active: {0}\")]\n    AuctionNotActive(String),\n    #[error(\"bid too low: offered {offered}, minimum {minimum}\")]\n    BidTooLow { offered: u64, minimum: u64 },\n    #[error(\"not auction seller: caller {caller}, seller {seller}\")]\n    NotAuctionSeller { caller: String, seller: String },\n    #[error(\"auction has bids, cannot cancel\")]\n    AuctionHasBids,\n    #[error(\"auction has expired at time {end_time}, bid placed at {bid_time}\")]\n    AuctionExpired { end_time: u64, bid_time: u64 },\n    #[error(\"seller cannot bid on own auction\")]\n    SelfBidNotAllowed,\n    #[error(\"invalid building data: {0}\")]\n    InvalidBuildingData(String),\n    #[error(\"invalid auction parameters: {0}\")]\n    InvalidAuctionParams(String),\n\n    // -- Streaming errors --\n    #[error(\"stream session not found: {0}\")]\n    StreamNotFound(String),\n    #[error(\"stream already active for agent: {0}\")]\n    StreamAlreadyActive(String),\n    #[error(\"invalid stream state transition: {from} -> {to}\")]\n    InvalidStreamTransition { from: String, to: String },\n\n    // -- General errors --\n    #[error(\"serialization error: {0}\")]\n    SerializationError(String),\n}",
              "docs": "Error types for the Nova metaverse on-chain primitives.\nUnified error type for all Nova subsystems.",
              "attributes": "#[derive(Debug, Clone, thiserror::Error)]",
              "line": 5
            }
          ],
          "parseErrors": false
        },
        {
          "module": "parcel",
          "source": "sigil/node/sigil-nova/src/parcel.rs",
          "sha256": "3729a56942282008c0d008e51511a650fda6efefa6fdaa4b2f79632792eb6bc8",
          "attributes": "",
          "items": [
            {
              "name": "parcel::ParcelId",
              "kind": "struct_item",
              "signature": "pub struct ParcelId {\npub region: RegionCoord,\npub local_x: u16,\npub local_z: u16\n}",
              "docs": "Unique parcel identifier within a region.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "parcel::ParcelType",
              "kind": "enum_item",
              "signature": "pub enum ParcelType {\n    Residential,\n    Commercial,\n    Public,\n    Wilderness,\n    Reserved,\n}",
              "docs": "Type of land parcel determining usage rules.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "parcel::ParcelOwnership",
              "kind": "struct_item",
              "signature": "pub struct ParcelOwnership {\npub parcel_id: ParcelId,\npub owner_did: String,\npub parcel_type: ParcelType,\npub acquired_at: u64,\npub rent_per_epoch: Option<u64>\n}",
              "docs": "Ownership record for a single parcel.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 36
            },
            {
              "name": "parcel::ParcelRegistry",
              "kind": "struct_item",
              "signature": "pub struct ParcelRegistry {\n\n}",
              "docs": "On-chain registry of all parcels with ownership indexes.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 46
            },
            {
              "name": "parcel::ParcelRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty parcel registry.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "parcel::ParcelRegistry::claim_parcel",
              "kind": "function_item",
              "signature": "pub fn claim_parcel(\n        &mut self,\n        parcel_id: ParcelId,\n        owner_did: &str,\n        parcel_type: ParcelType,\n        timestamp: u64,\n    ) -> Result<ParcelOwnership, NovaError>;",
              "docs": "Claim an unowned parcel.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "parcel::ParcelRegistry::transfer_parcel",
              "kind": "function_item",
              "signature": "pub fn transfer_parcel(\n        &mut self,\n        parcel_id: ParcelId,\n        from_did: &str,\n        to_did: &str,\n    ) -> Result<(), NovaError>;",
              "docs": "Transfer parcel ownership from one DID to another.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "parcel::ParcelRegistry::get_parcels_by_owner",
              "kind": "function_item",
              "signature": "pub fn get_parcels_by_owner(&self, owner_did: &str) -> Vec<&ParcelOwnership>;",
              "docs": "Get all parcels owned by a DID.",
              "attributes": "",
              "line": 137
            },
            {
              "name": "parcel::ParcelRegistry::get_parcels_in_region",
              "kind": "function_item",
              "signature": "pub fn get_parcels_in_region(&self, region: &RegionCoord) -> Vec<&ParcelOwnership>;",
              "docs": "Get all parcels within a given region.",
              "attributes": "",
              "line": 145
            },
            {
              "name": "parcel::ParcelRegistry::is_available",
              "kind": "function_item",
              "signature": "pub fn is_available(&self, parcel_id: &ParcelId) -> bool;",
              "docs": "Check whether a parcel is unclaimed.",
              "attributes": "",
              "line": 153
            },
            {
              "name": "parcel::ParcelRegistry::parcel_count",
              "kind": "function_item",
              "signature": "pub fn parcel_count(&self) -> usize;",
              "docs": "Total number of claimed parcels.",
              "attributes": "",
              "line": 158
            },
            {
              "name": "parcel::validate_parcel_id",
              "kind": "function_item",
              "signature": "pub fn validate_parcel_id(id: &ParcelId) -> Result<bool, NovaError>;",
              "docs": "Validate that a parcel ID has local coordinates within bounds.",
              "attributes": "",
              "line": 164
            }
          ],
          "parseErrors": false
        },
        {
          "module": "spatial_zone",
          "source": "sigil/node/sigil-nova/src/spatial_zone.rs",
          "sha256": "6ca893abf32968ea858e27e85e912b9d088428506943168fa5dab7d34ac82f94",
          "attributes": "",
          "items": [
            {
              "name": "spatial_zone::SpatialZoneId",
              "kind": "struct_item",
              "signature": "pub struct SpatialZoneId(pub String);",
              "docs": "Unique spatial zone identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "spatial_zone::ZoneBoundary",
              "kind": "struct_item",
              "signature": "pub struct ZoneBoundary {\npub center: WorldPosition,\npub radius: f64\n}",
              "docs": "Spherical boundary for a spatial zone.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "spatial_zone::SpatialZoneType",
              "kind": "enum_item",
              "signature": "pub enum SpatialZoneType {\n    Organization,\n    Social,\n    Commercial,\n    Arena,\n    Private,\n}",
              "docs": "Type of spatial zone determining default behavior.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "spatial_zone::ZonePermissions",
              "kind": "struct_item",
              "signature": "pub struct ZonePermissions {\npub enter: AccessLevel,\npub interact: AccessLevel,\npub build: AccessLevel\n}",
              "docs": "Permissions governing zone interactions.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 38
            },
            {
              "name": "spatial_zone::SpatialZone",
              "kind": "struct_item",
              "signature": "pub struct SpatialZone {\npub id: SpatialZoneId,\npub org_did: String,\npub boundary: ZoneBoundary,\npub permissions: ZonePermissions,\npub zone_type: SpatialZoneType,\npub created_at: u64\n}",
              "docs": "A spatial zone owned by an organization in the Nova world.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry",
              "kind": "struct_item",
              "signature": "pub struct SpatialZoneRegistry {\n\n}",
              "docs": "On-chain registry of spatial zones.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 57
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty zone registry.",
              "attributes": "",
              "line": 63
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::create_zone",
              "kind": "function_item",
              "signature": "pub fn create_zone(\n        &mut self,\n        org_did: &str,\n        boundary: ZoneBoundary,\n        zone_type: SpatialZoneType,\n        timestamp: u64,\n    ) -> Result<SpatialZone, NovaError>;",
              "docs": "Create a new spatial zone.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::is_in_zone",
              "kind": "function_item",
              "signature": "pub fn is_in_zone(position: &WorldPosition, zone: &SpatialZone) -> bool;",
              "docs": "Check if a position falls within a zone.",
              "attributes": "",
              "line": 115
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::get_zones_at",
              "kind": "function_item",
              "signature": "pub fn get_zones_at(&self, position: &WorldPosition) -> Vec<&SpatialZone>;",
              "docs": "Get all zones that contain the given position.",
              "attributes": "",
              "line": 124
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::update_zone_permissions",
              "kind": "function_item",
              "signature": "pub fn update_zone_permissions(\n        &mut self,\n        zone_id: &SpatialZoneId,\n        caller_did: &str,\n        perms: ZonePermissions,\n    ) -> Result<(), NovaError>;",
              "docs": "Update the permissions on a zone. Only the owner may modify.",
              "attributes": "",
              "line": 132
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::delete_zone",
              "kind": "function_item",
              "signature": "pub fn delete_zone(\n        &mut self,\n        zone_id: &SpatialZoneId,\n        caller_did: &str,\n    ) -> Result<SpatialZone, NovaError>;",
              "docs": "Delete a zone, returning the removed zone.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::get_zone",
              "kind": "function_item",
              "signature": "pub fn get_zone(&self, zone_id: &SpatialZoneId) -> Option<&SpatialZone>;",
              "docs": "Get a zone by ID.",
              "attributes": "",
              "line": 178
            },
            {
              "name": "spatial_zone::SpatialZoneRegistry::zone_count",
              "kind": "function_item",
              "signature": "pub fn zone_count(&self) -> usize;",
              "docs": "Total number of zones.",
              "attributes": "",
              "line": 183
            }
          ],
          "parseErrors": false
        },
        {
          "module": "streaming",
          "source": "sigil/node/sigil-nova/src/streaming.rs",
          "sha256": "d6a7f867f5121d410bd6e05c86c0f62bbdb3b3f87ff42333915ed71848a73aa1",
          "attributes": "",
          "items": [
            {
              "name": "streaming::SurfaceId",
              "kind": "struct_item",
              "signature": "pub struct SurfaceId(pub String);",
              "docs": "In-world screen surface identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "streaming::StreamStatus",
              "kind": "enum_item",
              "signature": "pub enum StreamStatus {\n    Connecting,\n    Active,\n    Paused,\n    Disconnected,\n}",
              "docs": "Status of a streaming session.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "streaming::VideoCodec",
              "kind": "enum_item",
              "signature": "pub enum VideoCodec {\n    H264,\n    Vp9,\n    Av1,\n}",
              "docs": "Video codec for stream encoding.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "streaming::Resolution",
              "kind": "struct_item",
              "signature": "pub struct Resolution {\npub width: u32,\npub height: u32,\npub fps: u8\n}",
              "docs": "Stream resolution and frame rate.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 47
            },
            {
              "name": "streaming::StreamSession",
              "kind": "struct_item",
              "signature": "pub struct StreamSession {\npub id: String,\npub agent_did: String,\npub desktop_session_id: String,\npub channel_id: String,\npub target_surface: SurfaceId,\npub status: StreamStatus,\npub codec: VideoCodec,\npub resolution: Resolution,\npub started_at: u64\n}",
              "docs": "An active streaming session.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 55
            },
            {
              "name": "streaming::StreamRegistry",
              "kind": "struct_item",
              "signature": "pub struct StreamRegistry {\n\n}",
              "docs": "On-chain registry of streaming sessions.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 69
            },
            {
              "name": "streaming::StreamRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty stream registry.",
              "attributes": "",
              "line": 75
            },
            {
              "name": "streaming::StreamRegistry::start_stream",
              "kind": "function_item",
              "signature": "pub fn start_stream(\n        &mut self,\n        agent_did: &str,\n        desktop_session_id: &str,\n        surface: SurfaceId,\n        codec: VideoCodec,\n        resolution: Resolution,\n        timestamp: u64,\n    ) -> Result<StreamSession, NovaError>;",
              "docs": "Start a new streaming session.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "streaming::StreamRegistry::pause_stream",
              "kind": "function_item",
              "signature": "pub fn pause_stream(&mut self, session_id: &str) -> Result<(), NovaError>;",
              "docs": "Pause an active stream.",
              "attributes": "",
              "line": 127
            },
            {
              "name": "streaming::StreamRegistry::resume_stream",
              "kind": "function_item",
              "signature": "pub fn resume_stream(&mut self, session_id: &str) -> Result<(), NovaError>;",
              "docs": "Resume a paused stream.",
              "attributes": "",
              "line": 145
            },
            {
              "name": "streaming::StreamRegistry::stop_stream",
              "kind": "function_item",
              "signature": "pub fn stop_stream(&mut self, session_id: &str) -> Result<StreamSession, NovaError>;",
              "docs": "Stop a stream and remove it from the registry.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "streaming::StreamRegistry::get_active_streams",
              "kind": "function_item",
              "signature": "pub fn get_active_streams(&self) -> Vec<&StreamSession>;",
              "docs": "Get all active (non-disconnected) streams.",
              "attributes": "",
              "line": 173
            },
            {
              "name": "streaming::StreamRegistry::get_streams_by_agent",
              "kind": "function_item",
              "signature": "pub fn get_streams_by_agent(&self, agent_did: &str) -> Vec<&StreamSession>;",
              "docs": "Get all streams belonging to a specific agent.",
              "attributes": "",
              "line": 181
            },
            {
              "name": "streaming::StreamRegistry::get_stream",
              "kind": "function_item",
              "signature": "pub fn get_stream(&self, session_id: &str) -> Option<&StreamSession>;",
              "docs": "Get a stream session by ID.",
              "attributes": "",
              "line": 189
            },
            {
              "name": "streaming::StreamRegistry::session_count",
              "kind": "function_item",
              "signature": "pub fn session_count(&self) -> usize;",
              "docs": "Total number of sessions in the registry.",
              "attributes": "",
              "line": 194
            }
          ],
          "parseErrors": false
        },
        {
          "module": "world",
          "source": "sigil/node/sigil-nova/src/world.rs",
          "sha256": "ddfe4c053287d0058f47f79d3dafe6379709db61d79498bfd5d57645a909643d",
          "attributes": "",
          "items": [
            {
              "name": "world::WorldId",
              "kind": "struct_item",
              "signature": "pub struct WorldId(pub String);",
              "docs": "Unique world identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "world::RegionCoord",
              "kind": "struct_item",
              "signature": "pub struct RegionCoord {\npub x: i32,\npub z: i32\n}",
              "docs": "A 256x256-block region coordinate (top-level spatial partition).",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "world::ChunkCoord",
              "kind": "struct_item",
              "signature": "pub struct ChunkCoord {\npub region: RegionCoord,\npub local_x: u8,\npub local_z: u8\n}",
              "docs": "A 16x16x256-block chunk within a region.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "world::WorldPosition",
              "kind": "struct_item",
              "signature": "pub struct WorldPosition {\npub x: f64,\npub y: f64,\npub z: f64\n}",
              "docs": "A precise 3D position in the world.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]",
              "line": 33
            },
            {
              "name": "world::WorldConfig",
              "kind": "struct_item",
              "signature": "pub struct WorldConfig {\npub id: WorldId,\npub name: String,\n/// Gravity multiplier (1.0 = Earth-like).\n\npub gravity: f32,\n/// Time scale multiplier (1.0 = real-time).\n\npub time_scale: f32,\n/// Maximum height in blocks.\n\npub max_height: u32,\n/// Size of a region in blocks (default 256).\n\npub region_size: u32,\n/// Size of a chunk in blocks (default 16).\n\npub chunk_size: u32\n}",
              "docs": "Configuration for a Nova world instance.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "world::WorldState",
              "kind": "struct_item",
              "signature": "pub struct WorldState {\npub config: WorldConfig,\npub active_regions: HashSet<RegionCoord>,\npub total_parcels: u64,\npub total_buildings: u64,\npub total_avatars: u64\n}",
              "docs": "Runtime state of a Nova world.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 58
            },
            {
              "name": "world::WorldConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(id: WorldId, name: String) -> Self;",
              "docs": "Create a default world config with the given id and name.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "world::WorldState::new",
              "kind": "function_item",
              "signature": "pub fn new(config: WorldConfig) -> Self;",
              "docs": "Create a new world state from a config.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "world::position_to_chunk",
              "kind": "function_item",
              "signature": "pub fn position_to_chunk(pos: &WorldPosition) -> ChunkCoord;",
              "docs": "Convert a precise world position to the chunk it falls within.\n\nUses the world's default chunk size (16) and region size (256).",
              "attributes": "",
              "line": 97
            },
            {
              "name": "world::chunk_to_region",
              "kind": "function_item",
              "signature": "pub fn chunk_to_region(chunk: &ChunkCoord) -> RegionCoord;",
              "docs": "Extract the region coordinate from a chunk.",
              "attributes": "",
              "line": 133
            },
            {
              "name": "world::distance",
              "kind": "function_item",
              "signature": "pub fn distance(a: &WorldPosition, b: &WorldPosition) -> f64;",
              "docs": "Euclidean distance between two world positions.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "world::is_valid_position",
              "kind": "function_item",
              "signature": "pub fn is_valid_position(pos: &WorldPosition, config: &WorldConfig) -> Result<bool, NovaError>;",
              "docs": "Check whether a position is valid within the given world config.\n\nA position is valid if `y` is within `[0, max_height]`.",
              "attributes": "",
              "line": 148
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-wallet-core",
      "version": "0.1.0",
      "source": "sigil/node/sigil-wallet-core",
      "manifestSha256": "c689551ba8c6da5eb9b9a7977afece14622e527abbf3db80b129c911255f44ac",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-wallet-core",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-wallet-core/src/lib.rs",
          "sha256": "9bd22529c7bb78489b72a8e79e464859f8b3cbba04dfeeed6a48b58eb5f8359c",
          "attributes": "",
          "items": [
            {
              "name": "::WalletCoreError",
              "kind": "enum_item",
              "signature": "pub enum WalletCoreError {\n    #[error(\"transaction error: {0}\")]\n    Transaction(String),\n    #[error(\"amount error: {0}\")]\n    Amount(String),\n    #[error(\"identity error: {0}\")]\n    Identity(String),\n    #[error(\"hex error: {0}\")]\n    Hex(#[from] hex::FromHexError),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 10
            },
            {
              "name": "::WalletCoreResult",
              "kind": "type_item",
              "signature": "pub type WalletCoreResult<T> = Result<T, WalletCoreError>;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "::transaction_signing_bytes",
              "kind": "function_item",
              "signature": "pub fn transaction_signing_bytes(tx: &Transaction) -> WalletCoreResult<Vec<u8>>;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "::transaction_digest_hex",
              "kind": "function_item",
              "signature": "pub fn transaction_digest_hex(tx: &Transaction) -> WalletCoreResult<String>;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "::sign_transaction",
              "kind": "function_item",
              "signature": "pub fn sign_transaction(\n    tx: Transaction,\n    signing_key: &SigningKey,\n) -> WalletCoreResult<SignedTransaction>;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "::sign_transaction_with_key_hex",
              "kind": "function_item",
              "signature": "pub fn sign_transaction_with_key_hex(\n    tx: Transaction,\n    signing_key_hex: &str,\n) -> WalletCoreResult<SignedTransaction>;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "::verify_signed_transaction",
              "kind": "function_item",
              "signature": "pub fn verify_signed_transaction(tx: &SignedTransaction) -> WalletCoreResult<()>;",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "::parse_display_amount_to_base_units",
              "kind": "function_item",
              "signature": "pub fn parse_display_amount_to_base_units(\n    input: &str,\n    base_units_per_display: u128,\n) -> WalletCoreResult<u128>;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "::format_base_units",
              "kind": "function_item",
              "signature": "pub fn format_base_units(amount: u128, base_units_per_display: u128) -> WalletCoreResult<String>;",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "::address_hex_from_did",
              "kind": "function_item",
              "signature": "pub fn address_hex_from_did(did: &str) -> WalletCoreResult<String>;",
              "docs": "",
              "attributes": "",
              "line": 136
            },
            {
              "name": "::PublicIdentityBundle",
              "kind": "struct_item",
              "signature": "pub struct PublicIdentityBundle {\npub username: Option<String>,\npub root_did: String,\npub identity_kind: String,\npub public_key_hex: String,\npub recovery_policy: String,\npub signed_genesis_claim: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 143
            },
            {
              "name": "::PublicIdentityBundle::validate_public_only",
              "kind": "function_item",
              "signature": "pub fn validate_public_only(&self) -> WalletCoreResult<()>;",
              "docs": "",
              "attributes": "",
              "line": 153
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-wallet",
      "version": "0.1.0",
      "source": "sigil/node/sigil-wallet",
      "manifestSha256": "9702d7b8dcf3950f196474bb2c924d821b6a5a5312b8dfa17f5a2af5c7d6c95c",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-wallet",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-wallet/src/lib.rs",
          "sha256": "1aef18c8428bdf5243931cf11c85eb906dbe45a7d59f56533991a442af16903d",
          "attributes": "",
          "items": [
            {
              "name": "cli",
              "kind": "module",
              "signature": "pub mod cli;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "display",
              "kind": "module",
              "signature": "pub mod display;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "governance",
              "kind": "module",
              "signature": "pub mod governance;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "keystore",
              "kind": "module",
              "signature": "pub mod keystore;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "nft",
              "kind": "module",
              "signature": "pub mod nft;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "nonce",
              "kind": "module",
              "signature": "pub mod nonce;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "rpc_client",
              "kind": "module",
              "signature": "pub mod rpc_client;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "staking",
              "kind": "module",
              "signature": "pub mod staking;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "wallet",
              "kind": "module",
              "signature": "pub mod wallet;",
              "docs": "",
              "attributes": "",
              "line": 20
            }
          ],
          "parseErrors": false
        },
        {
          "module": "cli",
          "source": "sigil/node/sigil-wallet/src/cli.rs",
          "sha256": "da6cb74804ef0319bf031fdac7fe4f4fbbe315f84a843d5c095cad1f9fca4a38",
          "attributes": "",
          "items": [
            {
              "name": "cli::Cli",
              "kind": "struct_item",
              "signature": "pub struct Cli {\n/// Subcommand to execute.\n\n#[command(subcommand)]\npub command: Commands,\n/// RPC endpoint URL for the Sigil node.\n\n#[arg(long, global = true, env = \"SIGIL_RPC_URL\")]\npub rpc_url: Option<String>,\n/// Chain ID to target.\n\n#[arg(long, global = true, env = \"SIGIL_CHAIN_ID\")]\npub chain_id: Option<String>\n}",
              "docs": "Sigil Wallet -- manage identities, transfer tokens, stake, and govern.\n\nThe Sigil wallet is how agents interact with the Sigil blockchain. Create\nidentities, manage keys, transfer MINT coins, stake as a validator, and\nparticipate in on-chain governance.\n\nExamples:\n  sigil-wallet identity create --namespace sigil --name alice --kind hmr\n  sigil-wallet balance\n  sigil-wallet transfer --to did:oas:sigil:agent:bob --amount 1000000\n  sigil-wallet stake deposit --amount 10000000000 --mode producer\n  sigil-wallet username register --name alice --years 1 --set-primary\n  sigil-wallet gov propose --title \"Raise gas\" --description \"Let us raise the limit\"",
              "attributes": "#[derive(Debug, Clone, Parser)]\n#[command(\n    name = \"sigil-wallet\",\n    version,\n    about = \"Sigil blockchain wallet for agent identity, transfers, staking, and governance\",\n    long_about = None,\n    after_help = \"For more information, visit https://docs.sigil.ml/wallet\"\n)]",
              "line": 26
            },
            {
              "name": "cli::Commands",
              "kind": "enum_item",
              "signature": "pub enum Commands {\n    /// Manage identities (create, derive, list, show, export, import).\n    Identity {\n        #[command(subcommand)]\n        cmd: IdentityCommands,\n    },\n\n    /// Query account balance.\n    ///\n    /// Examples:\n    ///   sigil-wallet balance\n    ///   sigil-wallet balance --did did:oas:sigil:hmr:alice\n    Balance {\n        /// DID to check (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Transfer MINT to another account.\n    ///\n    /// Examples:\n    ///   sigil-wallet transfer --to did:oas:sigil:agent:bob --amount 1000000\n    ///   sigil-wallet transfer --from did:oas:sigil:hmr:alice --to did:oas:sigil:agent:bob --amount 5000000 --memo \"payment\"\n    Transfer {\n        /// Recipient DID.\n        #[arg(long)]\n        to: String,\n        /// Amount in micro-MINT.\n        #[arg(long)]\n        amount: u64,\n        /// Sender DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n        /// Optional memo attached to the transfer.\n        #[arg(long)]\n        memo: Option<String>,\n    },\n\n    /// View transaction history.\n    History {\n        /// DID to query (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n        /// Maximum number of transactions to show.\n        #[arg(long, default_value_t = 20)]\n        limit: u32,\n    },\n\n    /// Staking operations.\n    ///\n    /// Examples:\n    ///   sigil-wallet stake deposit --amount 10000000000 --mode producer\n    ///   sigil-wallet stake withdraw --amount 5000000000\n    ///   sigil-wallet stake delegate --to did:oas:sigil:agent:v1 --amount 1000000000\n    ///   sigil-wallet stake rewards\n    Stake {\n        #[command(subcommand)]\n        cmd: StakeCommands,\n    },\n\n    /// Username registry operations.\n    ///\n    /// Examples:\n    ///   sigil-wallet username register --name alice --years 1 --set-primary\n    ///   sigil-wallet username set-primary --name alice\n    ///   sigil-wallet username show --name alice\n    Username {\n        #[command(subcommand)]\n        cmd: UsernameCommands,\n    },\n\n    /// Governance operations.\n    ///\n    /// Examples:\n    ///   sigil-wallet gov propose --title \"Raise gas limit\" --description \"Proposal to increase gas\"\n    ///   sigil-wallet gov vote --proposal prop-001 --vote yes\n    ///   sigil-wallet gov list\n    ///   sigil-wallet gov show prop-001\n    Gov {\n        #[command(subcommand)]\n        cmd: GovCommands,\n    },\n\n    /// Agent Contract Zone operations.\n    ///\n    /// Examples:\n    ///   sigil-wallet contract register-code --code ./token.wasm --license Apache-2.0\n    ///   sigil-wallet contract deploy --contract-did did:oas:sigil:contract:token --code-hash <hash>\n    Contract {\n        #[command(subcommand)]\n        cmd: ContractCommands,\n    },\n\n    /// Wallet configuration.\n    ///\n    /// Examples:\n    ///   sigil-wallet config set --rpc http://localhost:12618\n    ///   sigil-wallet config set --chain-id sigil-testnet-1\n    ///   sigil-wallet config set --default-identity did:oas:sigil:hmr:alice\n    ///   sigil-wallet config show\n    Config {\n        #[command(subcommand)]\n        cmd: ConfigCommands,\n    },\n\n    /// Query Sigil node status.\n    ///\n    /// Examples:\n    ///   sigil-wallet node status\n    ///   sigil-wallet node info\n    Node {\n        #[command(subcommand)]\n        cmd: NodeCommands,\n    },\n}",
              "docs": "Top-level command groups.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 42
            },
            {
              "name": "cli::IdentityCommands",
              "kind": "enum_item",
              "signature": "pub enum IdentityCommands {\n    /// Create a new identity with a fresh Ed25519 keypair.\n    ///\n    /// Examples:\n    ///   sigil-wallet identity create --namespace sigil --name alice --kind hmr\n    ///   sigil-wallet identity create --namespace sigil --name l1fe-labs --kind enr\n    ///   sigil-wallet identity create --namespace sigil --name my-bot --kind agent\n    Create {\n        /// Namespace for the DID (e.g. \"sigil\").\n        #[arg(long)]\n        namespace: String,\n        /// Name / identifier within the namespace.\n        #[arg(long)]\n        name: String,\n        /// Identity kind: \"hmr\", \"mhr\", \"enr\", or \"agent\".\n        #[arg(long, default_value = \"hmr\")]\n        kind: String,\n    },\n\n    /// Derive a child identity from an existing parent.\n    ///\n    /// Examples:\n    ///   sigil-wallet identity derive --parent did:oas:sigil:hmr:alice --name bot-1 --kind agent\n    Derive {\n        /// Parent DID to derive from.\n        #[arg(long)]\n        parent: String,\n        /// Name for the child identity.\n        #[arg(long)]\n        name: String,\n        /// Kind of child identity: \"hmr\", \"mhr\", \"enr\", or \"agent\".\n        #[arg(long, default_value = \"agent\")]\n        kind: String,\n    },\n\n    /// List all identities in the local keystore.\n    List,\n\n    /// Show details of a specific identity.\n    Show {\n        /// DID of the identity to show.\n        did: String,\n    },\n\n    /// Export an identity to a file (encrypted keystore format).\n    Export {\n        /// DID of the identity to export.\n        did: String,\n        /// Output file path.\n        #[arg(long, short)]\n        output: String,\n    },\n\n    /// Import an identity from an exported file.\n    Import {\n        /// Path to the keystore file to import.\n        file: String,\n    },\n}",
              "docs": "Identity management subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 160
            },
            {
              "name": "cli::StakeCommands",
              "kind": "enum_item",
              "signature": "pub enum StakeCommands {\n    /// Deposit stake to become a validator.\n    ///\n    /// Examples:\n    ///   sigil-wallet stake deposit --amount 10000000000 --mode producer\n    ///   sigil-wallet stake deposit --amount 1000000000 --mode validator --did did:oas:sigil:agent:v1\n    Deposit {\n        /// Amount in micro-MINT.\n        #[arg(long)]\n        amount: u64,\n        /// Validator mode: \"producer\" or \"validator\".\n        #[arg(long)]\n        mode: String,\n        /// Identity DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Withdraw staked tokens (begins unbonding period).\n    Withdraw {\n        /// Amount in micro-MINT.\n        #[arg(long)]\n        amount: u64,\n        /// Identity DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Delegate stake to a validator.\n    Delegate {\n        /// Validator DID to delegate to.\n        #[arg(long)]\n        to: String,\n        /// Amount in micro-MINT.\n        #[arg(long)]\n        amount: u64,\n        /// Delegator identity DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// View accumulated staking rewards.\n    Rewards {\n        /// Identity DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Show staking information for an identity.\n    Info {\n        /// Identity DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n}",
              "docs": "Staking subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 222
            },
            {
              "name": "cli::UsernameCommands",
              "kind": "enum_item",
              "signature": "pub enum UsernameCommands {\n    /// Register a username by paying the chain-defined lease price.\n    Register {\n        /// Username to register. The chain canonicalizes ASCII case.\n        #[arg(long)]\n        name: String,\n        /// Lease duration in years.\n        #[arg(long, default_value_t = 1)]\n        years: u32,\n        /// Owner DID (defaults to configured identity).\n        #[arg(long)]\n        owner: Option<String>,\n        /// Optional 32-byte metadata content hash as hex or blake3:<hex>.\n        #[arg(long)]\n        metadata_cid: Option<String>,\n        /// Submit a follow-up SetReverseUsername transaction after registration.\n        #[arg(long)]\n        set_primary: bool,\n    },\n\n    /// Set a username as the primary reverse lookup for a DID.\n    SetPrimary {\n        /// Username to use as primary.\n        #[arg(long)]\n        name: String,\n        /// Owner DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Transfer a username to another DID.\n    Transfer {\n        /// Username to transfer.\n        #[arg(long)]\n        name: String,\n        /// New owner DID.\n        #[arg(long)]\n        to: String,\n        /// Current owner DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n    },\n\n    /// Release a username.\n    Release {\n        /// Username to release.\n        #[arg(long)]\n        name: String,\n        /// Current owner DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n    },\n\n    /// Set or clear username metadata content hash.\n    SetMetadata {\n        /// Username to update.\n        #[arg(long)]\n        name: String,\n        /// Optional 32-byte metadata content hash as hex or blake3:<hex>. Omit with --clear.\n        #[arg(long)]\n        metadata_cid: Option<String>,\n        /// Clear existing metadata.\n        #[arg(long)]\n        clear: bool,\n        /// Owner DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n    },\n\n    /// Resolve a username record.\n    Show {\n        /// Username to resolve.\n        #[arg(long)]\n        name: String,\n    },\n\n    /// List usernames owned by a DID.\n    List {\n        /// Owner DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n}",
              "docs": "Username registry subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 280
            },
            {
              "name": "cli::GovCommands",
              "kind": "enum_item",
              "signature": "pub enum GovCommands {\n    /// Submit a governance proposal.\n    Propose {\n        /// Proposal title.\n        #[arg(long)]\n        title: String,\n        /// Proposal description.\n        #[arg(long)]\n        description: String,\n        /// Proposer DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// Vote on a governance proposal.\n    Vote {\n        /// Proposal ID.\n        #[arg(long)]\n        proposal: String,\n        /// Vote choice: yes, no, abstain, no_with_veto.\n        #[arg(long = \"vote\")]\n        choice: String,\n        /// Voter DID (defaults to configured identity).\n        #[arg(long)]\n        did: Option<String>,\n    },\n\n    /// List governance proposals.\n    List {\n        /// Filter by status: active, passed, rejected.\n        #[arg(long)]\n        status: Option<String>,\n    },\n\n    /// Show details of a specific proposal.\n    Show {\n        /// Proposal ID.\n        id: String,\n    },\n}",
              "docs": "Governance subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 366
            },
            {
              "name": "cli::ContractCommands",
              "kind": "enum_item",
              "signature": "pub enum ContractCommands {\n    /// Register WASM bytecode by content hash before deployment.\n    RegisterCode {\n        /// Path to a WASM bytecode file.\n        #[arg(long)]\n        code: String,\n        /// SPDX license expression or governance-approved license label.\n        #[arg(long)]\n        license: String,\n        /// Optional source artifact URI.\n        #[arg(long)]\n        source_uri: Option<String>,\n        /// Optional BLAKE3/Sigil hash of the source artifact.\n        #[arg(long)]\n        source_hash: Option<String>,\n        /// Optional audit report URI.\n        #[arg(long)]\n        audit_uri: Option<String>,\n        /// Optional JSON object string for extra deterministic metadata.\n        #[arg(long)]\n        metadata_json: Option<String>,\n        /// Sender/controller DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n    },\n\n    /// Deploy a contract from previously registered bytecode.\n    Deploy {\n        /// Contract DID to create.\n        #[arg(long)]\n        contract_did: String,\n        /// Hex or `blake3:<hex>` code hash registered on-chain.\n        #[arg(long)]\n        code_hash: String,\n        /// Optional Organization Zone ID.\n        #[arg(long)]\n        zone_id: Option<String>,\n        /// Sender/controller DID (defaults to configured identity).\n        #[arg(long)]\n        from: Option<String>,\n    },\n}",
              "docs": "Smart-contract deployment subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 409
            },
            {
              "name": "cli::ConfigCommands",
              "kind": "enum_item",
              "signature": "pub enum ConfigCommands {\n    /// Set a configuration value.\n    Set {\n        /// RPC endpoint URL.\n        #[arg(long)]\n        rpc: Option<String>,\n        /// Chain ID.\n        #[arg(long)]\n        chain_id: Option<String>,\n        /// Default identity DID.\n        #[arg(long)]\n        default_identity: Option<String>,\n    },\n\n    /// Show current configuration.\n    Show,\n}",
              "docs": "Configuration subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 454
            },
            {
              "name": "cli::NodeCommands",
              "kind": "enum_item",
              "signature": "pub enum NodeCommands {\n    /// Show the sync status of the connected node.\n    Status,\n\n    /// Show node information (version, chain ID).\n    Info,\n}",
              "docs": "Node query subcommands.",
              "attributes": "#[derive(Debug, Clone, Subcommand)]",
              "line": 474
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/node/sigil-wallet/src/config.rs",
          "sha256": "3269d576e02006f12cce6a496a95bb36376bd08b2bd2145bf81b327b2ea8aaac",
          "attributes": "",
          "items": [
            {
              "name": "config::NetworkConfig",
              "kind": "struct_item",
              "signature": "pub struct NetworkConfig {\n/// JSON-RPC endpoint URL.\n\npub rpc_url: String,\n/// Chain identifier.\n\npub chain_id: String\n}",
              "docs": "Network connection settings.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "config::WalletConfig",
              "kind": "struct_item",
              "signature": "pub struct WalletConfig {\n/// The default identity DID to use for transactions.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub default_identity: Option<String>\n}",
              "docs": "Wallet identity settings.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 37
            },
            {
              "name": "config::DisplayConfig",
              "kind": "struct_item",
              "signature": "pub struct DisplayConfig {\n/// Output format: \"table\" or \"json\".\n\npub format: String\n}",
              "docs": "Display preferences.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "config::Config",
              "kind": "struct_item",
              "signature": "pub struct Config {\n/// Network connection settings.\n\n#[serde(default)]\npub network: NetworkConfig,\n/// Wallet identity settings.\n\n#[serde(default)]\npub wallet: WalletConfig,\n/// Display preferences.\n\n#[serde(default)]\npub display: DisplayConfig\n}",
              "docs": "Top-level wallet configuration.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 60
            },
            {
              "name": "config::Config::base_dir",
              "kind": "function_item",
              "signature": "pub fn base_dir() -> WalletResult<PathBuf>;",
              "docs": "Returns the base directory for Sigil wallet data (`~/.sigil/`).",
              "attributes": "",
              "line": 74
            },
            {
              "name": "config::Config::config_path",
              "kind": "function_item",
              "signature": "pub fn config_path() -> WalletResult<PathBuf>;",
              "docs": "Returns the path to the configuration file (`~/.sigil/config.toml`).",
              "attributes": "",
              "line": 81
            },
            {
              "name": "config::Config::keystore_dir",
              "kind": "function_item",
              "signature": "pub fn keystore_dir() -> WalletResult<PathBuf>;",
              "docs": "Returns the path to the keystore directory (`~/.sigil/keystore/`).",
              "attributes": "",
              "line": 86
            },
            {
              "name": "config::Config::load",
              "kind": "function_item",
              "signature": "pub fn load() -> WalletResult<Self>;",
              "docs": "Load configuration from the default path. Returns defaults if the file\ndoes not exist.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "config::Config::load_from",
              "kind": "function_item",
              "signature": "pub fn load_from(path: &Path) -> WalletResult<Self>;",
              "docs": "Load configuration from a specific path. Returns defaults if the file\ndoes not exist.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "config::Config::save",
              "kind": "function_item",
              "signature": "pub fn save(&self) -> WalletResult<()>;",
              "docs": "Save configuration to the default path, creating the directory if needed.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "config::Config::save_to",
              "kind": "function_item",
              "signature": "pub fn save_to(&self, path: &Path) -> WalletResult<()>;",
              "docs": "Save configuration to a specific path, creating parent directories if needed.",
              "attributes": "",
              "line": 117
            }
          ],
          "parseErrors": false
        },
        {
          "module": "display",
          "source": "sigil/node/sigil-wallet/src/display.rs",
          "sha256": "d3e9f459017e1fe97c4ae124ed8a3aaec4e6a8d8afe808d43d79a1ec4b4c2602",
          "attributes": "",
          "items": [
            {
              "name": "display::print_header",
              "kind": "function_item",
              "signature": "pub fn print_header(title: &str);",
              "docs": "Print a boxed header line.",
              "attributes": "",
              "line": 38
            },
            {
              "name": "display::print_banner",
              "kind": "function_item",
              "signature": "pub fn print_banner();",
              "docs": "Print the SIGIL emblem banner with wallet subtitle.\n\nSilently skipped when stdout is not a terminal (e.g. piped to a file).",
              "attributes": "",
              "line": 63
            },
            {
              "name": "display::format_sigil",
              "kind": "function_item",
              "signature": "pub fn format_sigil(micro: u64) -> String;",
              "docs": "Format a micro-MINT amount for display.\n\nConverts micro-MINT (u64) to a human-readable string with the MINT unit.\nExamples:\n- 1_000_000 -> \"1.000000 MINT\"\n- 500_000 -> \"0.500000 MINT\"\n- 10_000_000_000 -> \"10,000.000000 MINT\"",
              "attributes": "",
              "line": 85
            },
            {
              "name": "display::format_micro_sigil",
              "kind": "function_item",
              "signature": "pub fn format_micro_sigil(micro: u64) -> String;",
              "docs": "Format a micro-MINT amount as just the micro value with unit label.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "display::print_kv",
              "kind": "function_item",
              "signature": "pub fn print_kv(key: &str, value: &str);",
              "docs": "Print a key-value line with consistent formatting.",
              "attributes": "",
              "line": 117
            },
            {
              "name": "display::print_info",
              "kind": "function_item",
              "signature": "pub fn print_info(msg: &str);",
              "docs": "Print an informational message.",
              "attributes": "",
              "line": 126
            },
            {
              "name": "display::print_success",
              "kind": "function_item",
              "signature": "pub fn print_success(msg: &str);",
              "docs": "Print a success message.",
              "attributes": "",
              "line": 131
            },
            {
              "name": "display::print_error",
              "kind": "function_item",
              "signature": "pub fn print_error(msg: &str);",
              "docs": "Print an error message to stderr.",
              "attributes": "",
              "line": 136
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-wallet/src/error.rs",
          "sha256": "0d5d81a9dffdc68dd30a958de0a77108955ddda30fc3ad55493bca6db0cf6c8f",
          "attributes": "",
          "items": [
            {
              "name": "error::WalletError",
              "kind": "enum_item",
              "signature": "pub enum WalletError {\n    /// Failed to read or write keystore files.\n    #[error(\"keystore error: {0}\")]\n    Keystore(String),\n\n    /// Cryptographic operation failed (encryption, decryption, signing).\n    #[error(\"crypto error: {0}\")]\n    Crypto(String),\n\n    /// RPC communication error with the Sigil node.\n    #[error(\"rpc error: {0}\")]\n    Rpc(String),\n\n    /// Configuration file error (read, write, parse).\n    #[error(\"config error: {0}\")]\n    Config(String),\n\n    /// Identity management error.\n    #[error(\"identity error: {0}\")]\n    Identity(String),\n\n    /// Transaction building or signing error.\n    #[error(\"transaction error: {0}\")]\n    Transaction(String),\n\n    /// IO error.\n    #[error(\"io error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// JSON serialization / deserialization error.\n    #[error(\"json error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    /// HTTP request error.\n    #[error(\"http error: {0}\")]\n    Http(#[from] reqwest::Error),\n\n    /// The user cancelled an interactive prompt.\n    #[error(\"operation cancelled by user\")]\n    Cancelled,\n\n    /// A required identity was not found in the keystore.\n    #[error(\"identity not found: {0}\")]\n    IdentityNotFound(String),\n}",
              "docs": "Error types for the Sigil wallet.\nAll errors produced by the wallet CLI.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 5
            },
            {
              "name": "error::WalletResult",
              "kind": "type_item",
              "signature": "pub type WalletResult<T> = Result<T, WalletError>;",
              "docs": "Convenience alias for wallet results.",
              "attributes": "",
              "line": 52
            }
          ],
          "parseErrors": false
        },
        {
          "module": "governance",
          "source": "sigil/node/sigil-wallet/src/governance.rs",
          "sha256": "c475e7edb12d523010154eb91981ff802577884df8f19e83e0d8ef3715bd98e5",
          "attributes": "",
          "items": [
            {
              "name": "governance::parse_vote_choice",
              "kind": "function_item",
              "signature": "pub fn parse_vote_choice(choice: &str) -> WalletResult<VoteChoice>;",
              "docs": "Parse a vote choice string.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "governance::propose",
              "kind": "function_item",
              "signature": "pub async fn propose(\n    rpc_url: &str,\n    chain_id: &str,\n    did: &str,\n    title: &str,\n    description: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Submit a governance proposal.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "governance::vote",
              "kind": "function_item",
              "signature": "pub async fn vote(\n    rpc_url: &str,\n    chain_id: &str,\n    did: &str,\n    proposal_id: &str,\n    choice: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Vote on a governance proposal.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "governance::print_propose",
              "kind": "function_item",
              "signature": "pub fn print_propose(did: &str, title: &str, tx_hash: &str);",
              "docs": "Print proposal submission confirmation.",
              "attributes": "",
              "line": 127
            },
            {
              "name": "governance::print_vote",
              "kind": "function_item",
              "signature": "pub fn print_vote(did: &str, proposal_id: &str, choice: &str, tx_hash: &str);",
              "docs": "Print vote confirmation.",
              "attributes": "",
              "line": 146
            }
          ],
          "parseErrors": false
        },
        {
          "module": "identity",
          "source": "sigil/node/sigil-wallet/src/identity.rs",
          "sha256": "4c2433ff664132b061bc370713ef2efe6055df5fe015e5875715efb533698fc2",
          "attributes": "",
          "items": [
            {
              "name": "identity::create",
              "kind": "function_item",
              "signature": "pub fn create(\n    namespace: &str,\n    name: &str,\n    kind: IdentityKind,\n    passphrase: &str,\n) -> WalletResult<KeystoreEntry>;",
              "docs": "Create a new root or agent identity with a fresh keypair.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "identity::derive",
              "kind": "function_item",
              "signature": "pub fn derive(\n    parent_did: &str,\n    name: &str,\n    kind: IdentityKind,\n    passphrase: &str,\n) -> WalletResult<KeystoreEntry>;",
              "docs": "Derive a child identity from an existing parent.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "identity::list",
              "kind": "function_item",
              "signature": "pub fn list() -> WalletResult<Vec<KeystoreEntry>>;",
              "docs": "List all identities in the keystore.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "identity::show",
              "kind": "function_item",
              "signature": "pub fn show(did: &str) -> WalletResult<KeystoreEntry>;",
              "docs": "Show a single identity by DID.",
              "attributes": "",
              "line": 48
            },
            {
              "name": "identity::export",
              "kind": "function_item",
              "signature": "pub fn export(did: &str, output: &str) -> WalletResult<()>;",
              "docs": "Export an identity to a file.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "identity::import",
              "kind": "function_item",
              "signature": "pub fn import(input: &str) -> WalletResult<KeystoreEntry>;",
              "docs": "Import an identity from a file.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "identity::resolve_identity",
              "kind": "function_item",
              "signature": "pub fn resolve_identity(explicit: Option<&str>) -> WalletResult<String>;",
              "docs": "Resolve the identity DID to use: explicit argument, config default, or error.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "identity::print_created",
              "kind": "function_item",
              "signature": "pub fn print_created(entry: &KeystoreEntry);",
              "docs": "Print a created identity in a nice format.",
              "attributes": "",
              "line": 82
            },
            {
              "name": "identity::print_list",
              "kind": "function_item",
              "signature": "pub fn print_list(entries: &[KeystoreEntry]);",
              "docs": "Print a table of all identities.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "identity::print_detail",
              "kind": "function_item",
              "signature": "pub fn print_detail(entry: &KeystoreEntry);",
              "docs": "Print detailed view of a single identity.",
              "attributes": "",
              "line": 164
            }
          ],
          "parseErrors": false
        },
        {
          "module": "keystore",
          "source": "sigil/node/sigil-wallet/src/keystore.rs",
          "sha256": "d3e22c1beb0e692b9a79d8cb711b5802d859d42aaf4d53be849e3274df379d3c",
          "attributes": "",
          "items": [
            {
              "name": "keystore::IdentityKind",
              "kind": "enum_item",
              "signature": "pub enum IdentityKind {\n    /// Human root identity.\n    Hmr,\n    /// Multi-human / machine root identity.\n    Mhr,\n    /// Enterprise / entity root identity.\n    Enr,\n    /// Agent identity (derived from a human root).\n    Agent,\n}",
              "docs": "Kind of identity entity.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 42
            },
            {
              "name": "keystore::KdfParams",
              "kind": "struct_item",
              "signature": "pub struct KdfParams {\npub memory_kib: u32,\npub iterations: u32,\npub parallelism: u32\n}",
              "docs": "KDF parameters stored alongside the ciphertext.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "keystore::CryptoEnvelope",
              "kind": "struct_item",
              "signature": "pub struct CryptoEnvelope {\npub cipher: String,\npub kdf: String,\npub kdf_params: KdfParams,\n/// Base64-encoded ciphertext (encrypted 32-byte signing key).\n\npub ciphertext: String,\n/// Base64-encoded nonce (12 bytes).\n\npub nonce: String,\n/// Base64-encoded salt (16 bytes).\n\npub salt: String\n}",
              "docs": "Cryptographic envelope stored in the keystore file.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 100
            },
            {
              "name": "keystore::KeystoreEntry",
              "kind": "struct_item",
              "signature": "pub struct KeystoreEntry {\n/// Format version.\n\npub version: u32,\n/// The DID for this identity.\n\npub did: String,\n/// Kind of identity (hmr or agent).\n\npub kind: IdentityKind,\n/// Parent DID (empty for root HMR identities).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub parent_did: Option<String>,\n/// Lineage generation (0 for HMR, 1+ for derived agents).\n\npub generation: u32,\n/// When this identity was created.\n\npub created_at: DateTime<Utc>,\n/// Encrypted key material.\n\npub crypto: CryptoEnvelope,\n/// Hex-encoded Ed25519 public key.\n\npub public_key: String\n}",
              "docs": "A keystore entry representing one identity on disk.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 114
            },
            {
              "name": "keystore::KeystoreEntry::address_hex",
              "kind": "function_item",
              "signature": "pub fn address_hex(&self) -> WalletResult<String>;",
              "docs": "Derive the stable Sigil wallet address for this identity.\n\nSigil addresses are derived from the canonical DID, not from mutable\nsigning key material, so balances survive key rotation and recovery.",
              "attributes": "",
              "line": 139
            },
            {
              "name": "keystore::Keystore",
              "kind": "struct_item",
              "signature": "pub struct Keystore {\n\n}",
              "docs": "The keystore manages encrypted identity files on disk.",
              "attributes": "",
              "line": 147
            },
            {
              "name": "keystore::Keystore::open_default",
              "kind": "function_item",
              "signature": "pub fn open_default() -> WalletResult<Self>;",
              "docs": "Open the keystore at the default location (`~/.sigil/keystore/`).",
              "attributes": "",
              "line": 153
            },
            {
              "name": "keystore::Keystore::open",
              "kind": "function_item",
              "signature": "pub fn open(dir: &Path) -> WalletResult<Self>;",
              "docs": "Open or create the keystore at the given directory.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "keystore::Keystore::create_identity",
              "kind": "function_item",
              "signature": "pub fn create_identity(\n        &self,\n        namespace: &str,\n        name: &str,\n        kind: IdentityKind,\n        parent_did: Option<&str>,\n        generation: u32,\n        passphrase: &str,\n    ) -> WalletResult<KeystoreEntry>;",
              "docs": "Generate a new identity with a fresh Ed25519 keypair.\n\nThe private key is encrypted with the provided passphrase and stored\non disk. Returns the created [`KeystoreEntry`].",
              "attributes": "",
              "line": 170
            },
            {
              "name": "keystore::Keystore::derive_identity",
              "kind": "function_item",
              "signature": "pub fn derive_identity(\n        &self,\n        parent_did: &str,\n        name: &str,\n        kind: IdentityKind,\n        passphrase: &str,\n    ) -> WalletResult<KeystoreEntry>;",
              "docs": "Derive a child identity from an existing parent identity.\n\nGenerates a fresh keypair for the child. The parent must exist in the\nkeystore; its passphrase is not needed since only the DID lineage is\ntracked, not key derivation.",
              "attributes": "",
              "line": 203
            },
            {
              "name": "keystore::Keystore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> WalletResult<Vec<KeystoreEntry>>;",
              "docs": "List all identities stored in the keystore.",
              "attributes": "",
              "line": 235
            },
            {
              "name": "keystore::Keystore::load_entry",
              "kind": "function_item",
              "signature": "pub fn load_entry(&self, did: &str) -> WalletResult<KeystoreEntry>;",
              "docs": "Load a specific identity by DID.",
              "attributes": "",
              "line": 265
            },
            {
              "name": "keystore::Keystore::decrypt_signing_key",
              "kind": "function_item",
              "signature": "pub fn decrypt_signing_key(&self, did: &str, passphrase: &str) -> WalletResult<SigningKey>;",
              "docs": "Decrypt and return the signing key for the given identity.",
              "attributes": "",
              "line": 274
            },
            {
              "name": "keystore::Keystore::delete",
              "kind": "function_item",
              "signature": "pub fn delete(&self, did: &str) -> WalletResult<()>;",
              "docs": "Delete an identity from the keystore.",
              "attributes": "",
              "line": 280
            },
            {
              "name": "keystore::Keystore::export",
              "kind": "function_item",
              "signature": "pub fn export(&self, did: &str, output: &Path) -> WalletResult<()>;",
              "docs": "Export a keystore entry to an arbitrary path (for backup / transfer).",
              "attributes": "",
              "line": 292
            },
            {
              "name": "keystore::Keystore::import",
              "kind": "function_item",
              "signature": "pub fn import(&self, input: &Path) -> WalletResult<KeystoreEntry>;",
              "docs": "Import a keystore entry from an external file.",
              "attributes": "",
              "line": 300
            },
            {
              "name": "keystore::format_did",
              "kind": "function_item",
              "signature": "pub fn format_did(namespace: &str, kind: IdentityKind, name: &str) -> String;",
              "docs": "Format a DID string from its components.\n\nFormat: `did:oas:{namespace}:{kind}:{name}`",
              "attributes": "",
              "line": 546
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nft",
          "source": "sigil/node/sigil-wallet/src/nft.rs",
          "sha256": "fab50f3119158acfe84b4beeced9896234a2922f12f13ae264c11b9cb22c325d",
          "attributes": "",
          "items": [
            {
              "name": "nft::create_collection",
              "kind": "function_item",
              "signature": "pub async fn create_collection(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    name: &str,\n    symbol: &str,\n    kind: NftKind,\n    issuer_did: &str,\n    controller_did: &str,\n    policy: CollectionPolicy,\n    metadata_uri: Option<&str>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Create a new NFT collection on-chain.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 73
            },
            {
              "name": "nft::mint_nft",
              "kind": "function_item",
              "signature": "pub async fn mint_nft(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    token_id: u128,\n    recipient_did: &str,\n    metadata_uri: Option<&str>,\n    metadata_hash: Option<sigil_core::hash::SigilHash>,\n    locked: Option<bool>,\n    burn_auth: Option<BurnAuth>,\n    identity: Option<IdentityBinding>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Mint a new NFT token.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 107
            },
            {
              "name": "nft::transfer_nft",
              "kind": "function_item",
              "signature": "pub async fn transfer_nft(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    token_id: u128,\n    to_did: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Transfer an NFT token to a new owner.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 140
            },
            {
              "name": "nft::burn_nft",
              "kind": "function_item",
              "signature": "pub async fn burn_nft(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    token_id: u128,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Burn (destroy) an NFT token.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "nft::set_nft_metadata",
              "kind": "function_item",
              "signature": "pub async fn set_nft_metadata(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    token_id: u128,\n    metadata_uri: Option<&str>,\n    metadata_hash: Option<sigil_core::hash::SigilHash>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Update the metadata URI and/or hash of an NFT (ERC-4906).",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 185
            },
            {
              "name": "nft::verify_identity_nft",
              "kind": "function_item",
              "signature": "pub async fn verify_identity_nft(\n    rpc_url: &str,\n    chain_id: &str,\n    sender_did: &str,\n    collection_id: &str,\n    token_id: u128,\n    new_verification_level: u8,\n    note: Option<&str>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Advance the verification level on an identity NFT.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 210
            },
            {
              "name": "nft::print_nft_tx",
              "kind": "function_item",
              "signature": "pub fn print_nft_tx(action: &str, collection: &str, token_id: u128, tx_hash: &str);",
              "docs": "Print an NFT transaction confirmation.",
              "attributes": "",
              "line": 239
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nonce",
          "source": "sigil/node/sigil-wallet/src/nonce.rs",
          "sha256": "e9112dd2c1276a59f44954858361abeff90e07d1a19279eeb02d8dc3a551ce7d",
          "attributes": "",
          "items": [
            {
              "name": "nonce::NonceManager",
              "kind": "struct_item",
              "signature": "pub struct NonceManager {\n\n}",
              "docs": "Manages per-account transaction nonces.\n\nQueries a Sigil node's `sigil_getAccountNonce` RPC method for the\non-chain nonce, then tracks increments locally so that multiple\ntransactions can be built in a single session without round-tripping\nto the node for every one.",
              "attributes": "#[derive(Debug)]",
              "line": 19
            },
            {
              "name": "nonce::NonceManager::new",
              "kind": "function_item",
              "signature": "pub fn new(rpc_url: &str) -> Self;",
              "docs": "Create a new nonce manager targeting the given RPC endpoint.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "nonce::NonceManager::next_nonce",
              "kind": "function_item",
              "signature": "pub async fn next_nonce(&mut self, did: &str) -> WalletResult<u64>;",
              "docs": "Return the next nonce for `did`, querying the node if not cached.\n\nAfter a successful call the internal cache is incremented, so the\nnext call for the same DID will return `nonce + 1` without a\nnetwork round-trip.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "nonce::NonceManager::invalidate",
              "kind": "function_item",
              "signature": "pub fn invalidate(&mut self, did: &str);",
              "docs": "Remove a DID from the local cache.\n\nCall this after a transaction fails or is rejected so that the next\ncall to [`next_nonce`] will re-query the node for the authoritative\nnonce value.",
              "attributes": "",
              "line": 57
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc_client",
          "source": "sigil/node/sigil-wallet/src/rpc_client.rs",
          "sha256": "2fdac48228793a27b395913665cd3f97e6419906161646fa2bb7ad65f34c5c4e",
          "attributes": "",
          "items": [
            {
              "name": "rpc_client::NodeInfo",
              "kind": "struct_item",
              "signature": "pub struct NodeInfo {\n/// Node software version.\n\npub version: String,\n/// Chain identifier.\n\npub chain_id: String,\n/// Protocol version.\n\npub protocol_version: String\n}",
              "docs": "Node information response.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "rpc_client::SyncStatus",
              "kind": "struct_item",
              "signature": "pub struct SyncStatus {\n/// Whether the node is fully synced.\n\npub synced: bool,\n/// Current block height.\n\npub current_height: u64,\n/// Highest known block height.\n\npub highest_known: u64\n}",
              "docs": "Sync status response.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 56
            },
            {
              "name": "rpc_client::MempoolStatus",
              "kind": "struct_item",
              "signature": "pub struct MempoolStatus {\n/// Number of transactions in the mempool.\n\npub size: u64,\n/// Maximum mempool capacity.\n\npub max_size: u64\n}",
              "docs": "Mempool status response.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "rpc_client::SendTransactionResult",
              "kind": "struct_item",
              "signature": "pub struct SendTransactionResult {\n/// The hash of the submitted transaction.\n\npub tx_hash: String\n}",
              "docs": "Transaction submission response.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 76
            },
            {
              "name": "rpc_client::SponsoredSetupPolicy",
              "kind": "struct_item",
              "signature": "pub struct SponsoredSetupPolicy {\npub version: u64,\npub envelope: String,\npub sponsor_signs_full_envelope: bool,\npub subject_proof_required: bool,\npub fees_debited_from: String,\npub replay_key: Vec<String>,\npub max_idempotency_key_bytes: usize,\npub allowed_setup_scopes: Vec<String>,\npub currently_enabled_scopes: Vec<String>,\npub explicitly_disallowed: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 82
            },
            {
              "name": "rpc_client::SponsoredSetupReceipt",
              "kind": "struct_item",
              "signature": "pub struct SponsoredSetupReceipt {\npub hash: String,\n#[serde(default, alias = \"blockHeight\")]\npub block_height: Option<u64>,\npub tx_index: usize,\npub status: String,\npub sponsor_did: String,\npub subject_did: String,\npub setup_scope: String,\npub idempotency_key: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 96
            },
            {
              "name": "rpc_client::BalanceResult",
              "kind": "struct_item",
              "signature": "pub struct BalanceResult {\npub did: String,\npub balance: u64,\npub nonce: u64\n}",
              "docs": "Account balance response from `sigil_getBalance`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 110
            },
            {
              "name": "rpc_client::AccountResult",
              "kind": "struct_item",
              "signature": "pub struct AccountResult {\npub did: String,\npub balance: u64,\npub nonce: u64,\n#[serde(default, alias = \"stakedAmount\")]\npub staked_amount: u64,\n#[serde(default, alias = \"transactionCount\")]\npub transaction_count: u64,\n#[serde(default, alias = \"identityDoc\")]\npub identity_doc: Option<serde_json::Value>\n}",
              "docs": "Account snapshot response from `sigil_getAccount`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 118
            },
            {
              "name": "rpc_client::ValidatorResult",
              "kind": "struct_item",
              "signature": "pub struct ValidatorResult {\npub did: String,\npub stake: u64,\n#[serde(default)]\npub delegated_stake: u64,\n#[serde(default)]\npub total_stake: u64,\npub mode: String,\npub active: bool,\n#[serde(default)]\npub accumulated_rewards: u64,\n#[serde(default)]\npub unbonding_epoch: Option<u64>\n}",
              "docs": "Validator snapshot response from `sigil_getValidator`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 132
            },
            {
              "name": "rpc_client::AccountTransactionsResult",
              "kind": "struct_item",
              "signature": "pub struct AccountTransactionsResult {\npub did: String,\npub latest_height: u64,\npub limit: usize,\npub offset: usize,\n#[serde(default)]\npub transactions: Vec<serde_json::Value>\n}",
              "docs": "Account transaction list response from `sigil_getAccountTransactions`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 149
            },
            {
              "name": "rpc_client::ProposalResult",
              "kind": "struct_item",
              "signature": "pub struct ProposalResult {\n#[serde(default)]\npub proposal: Option<serde_json::Value>,\n#[serde(default)]\npub found: bool\n}",
              "docs": "Governance proposal query response from `sigil_getProposal`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 160
            },
            {
              "name": "rpc_client::ProposalListResult",
              "kind": "struct_item",
              "signature": "pub struct ProposalListResult {\n#[serde(default)]\npub proposals: Vec<serde_json::Value>,\n#[serde(default)]\npub count: usize,\n#[serde(default)]\npub limit: usize,\n#[serde(default)]\npub offset: usize\n}",
              "docs": "Governance proposal list response from `sigil_listProposals`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 169
            },
            {
              "name": "rpc_client::RegisterContractCodeResult",
              "kind": "struct_item",
              "signature": "pub struct RegisterContractCodeResult {\n/// Hash of the submitted transaction.\n\npub tx_hash: String,\n/// Content hash of the registered bytecode.\n\npub code_hash: String,\n/// Bytecode size in bytes.\n\npub code_len: usize,\n/// Required registration fee in micro-MINT.\n\npub required_fee: u64,\n/// Whether the node already had this bytecode hash.\n\n#[serde(default)]\npub already_registered: bool\n}",
              "docs": "Contract-code registration submission response.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 182
            },
            {
              "name": "rpc_client::SigilRpcClient",
              "kind": "struct_item",
              "signature": "pub struct SigilRpcClient {\n\n}",
              "docs": "A typed JSON-RPC client for the Sigil node.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "rpc_client::SigilRpcClient::new",
              "kind": "function_item",
              "signature": "pub fn new(rpc_url: &str) -> WalletResult<Self>;",
              "docs": "Create a new RPC client targeting the given endpoint URL.\n\nThe URL should include the path (e.g. `http://localhost:12618/rpc`).",
              "attributes": "",
              "line": 207
            },
            {
              "name": "rpc_client::SigilRpcClient::get_node_info",
              "kind": "function_item",
              "signature": "pub async fn get_node_info(&self) -> WalletResult<NodeInfo>;",
              "docs": "Retrieve node information (version, chain ID, protocol version).",
              "attributes": "",
              "line": 276
            },
            {
              "name": "rpc_client::SigilRpcClient::get_sync_status",
              "kind": "function_item",
              "signature": "pub async fn get_sync_status(&self) -> WalletResult<SyncStatus>;",
              "docs": "Retrieve the node's sync status.",
              "attributes": "",
              "line": 283
            },
            {
              "name": "rpc_client::SigilRpcClient::get_mempool_status",
              "kind": "function_item",
              "signature": "pub async fn get_mempool_status(&self) -> WalletResult<MempoolStatus>;",
              "docs": "Retrieve mempool status (size, max).",
              "attributes": "",
              "line": 292
            },
            {
              "name": "rpc_client::SigilRpcClient::get_balance",
              "kind": "function_item",
              "signature": "pub async fn get_balance(&self, did: &str) -> WalletResult<BalanceResult>;",
              "docs": "Retrieve an account's balance and nonce.",
              "attributes": "",
              "line": 301
            },
            {
              "name": "rpc_client::SigilRpcClient::get_account",
              "kind": "function_item",
              "signature": "pub async fn get_account(&self, did: &str) -> WalletResult<AccountResult>;",
              "docs": "Retrieve an account snapshot.",
              "attributes": "",
              "line": 310
            },
            {
              "name": "rpc_client::SigilRpcClient::get_account_transactions",
              "kind": "function_item",
              "signature": "pub async fn get_account_transactions(\n        &self,\n        did: &str,\n        limit: u32,\n    ) -> WalletResult<AccountTransactionsResult>;",
              "docs": "Retrieve recent transactions involving an account.",
              "attributes": "",
              "line": 319
            },
            {
              "name": "rpc_client::SigilRpcClient::get_validator",
              "kind": "function_item",
              "signature": "pub async fn get_validator(&self, did: &str) -> WalletResult<Option<ValidatorResult>>;",
              "docs": "Retrieve a validator record. Missing validators are returned as `None`.",
              "attributes": "",
              "line": 335
            },
            {
              "name": "rpc_client::SigilRpcClient::get_proposal",
              "kind": "function_item",
              "signature": "pub async fn get_proposal(&self, id: &str) -> WalletResult<ProposalResult>;",
              "docs": "Retrieve a governance proposal by ID.",
              "attributes": "",
              "line": 349
            },
            {
              "name": "rpc_client::SigilRpcClient::list_proposals",
              "kind": "function_item",
              "signature": "pub async fn list_proposals(\n        &self,\n        status: Option<&str>,\n        limit: u32,\n    ) -> WalletResult<ProposalListResult>;",
              "docs": "List governance proposals.",
              "attributes": "",
              "line": 358
            },
            {
              "name": "rpc_client::SigilRpcClient::resolve_username",
              "kind": "function_item",
              "signature": "pub async fn resolve_username(&self, name: &str) -> WalletResult<Option<serde_json::Value>>;",
              "docs": "Resolve a username record by canonical or user-entered name.",
              "attributes": "",
              "line": 373
            },
            {
              "name": "rpc_client::SigilRpcClient::list_usernames",
              "kind": "function_item",
              "signature": "pub async fn list_usernames(&self, owner_did: &str) -> WalletResult<Vec<serde_json::Value>>;",
              "docs": "List all usernames owned by a DID.",
              "attributes": "",
              "line": 385
            },
            {
              "name": "rpc_client::SigilRpcClient::send_transaction",
              "kind": "function_item",
              "signature": "pub async fn send_transaction(\n        &self,\n        tx: &SignedTransaction,\n    ) -> WalletResult<SendTransactionResult>;",
              "docs": "Submit a signed transaction to the node's mempool.",
              "attributes": "",
              "line": 397
            },
            {
              "name": "rpc_client::SigilRpcClient::send_sponsored_setup_transaction",
              "kind": "function_item",
              "signature": "pub async fn send_sponsored_setup_transaction(\n        &self,\n        tx: &SignedTransaction,\n    ) -> WalletResult<SendTransactionResult>;",
              "docs": "",
              "attributes": "",
              "line": 409
            },
            {
              "name": "rpc_client::SigilRpcClient::get_sponsored_setup_policy",
              "kind": "function_item",
              "signature": "pub async fn get_sponsored_setup_policy(&self) -> WalletResult<SponsoredSetupPolicy>;",
              "docs": "",
              "attributes": "",
              "line": 426
            },
            {
              "name": "rpc_client::SigilRpcClient::get_sponsored_setup_receipt",
              "kind": "function_item",
              "signature": "pub async fn get_sponsored_setup_receipt(\n        &self,\n        hash: &str,\n    ) -> WalletResult<SponsoredSetupReceipt>;",
              "docs": "",
              "attributes": "",
              "line": 434
            },
            {
              "name": "rpc_client::SigilRpcClient::register_contract_code",
              "kind": "function_item",
              "signature": "pub async fn register_contract_code(\n        &self,\n        tx: &SignedTransaction,\n    ) -> WalletResult<RegisterContractCodeResult>;",
              "docs": "Submit a signed `RegisterContractCode` transaction to the typed\ncontract-code registration endpoint.",
              "attributes": "",
              "line": 450
            },
            {
              "name": "rpc_client::SigilRpcClient::url",
              "kind": "function_item",
              "signature": "pub fn url(&self) -> &str;",
              "docs": "Returns the RPC endpoint URL (for display purposes).",
              "attributes": "",
              "line": 471
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_hmr",
              "kind": "function_item",
              "signature": "pub async fn get_gal_hmr(&self, did: &str) -> WalletResult<Option<sigil_core::HmrAnchor>>;",
              "docs": "Fetch the typed `HmrAnchor` for a DID, or `None` if the GAL has\nno HMR anchor for it.",
              "attributes": "",
              "line": 492
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_mhr",
              "kind": "function_item",
              "signature": "pub async fn get_gal_mhr(&self, did: &str) -> WalletResult<Option<sigil_core::MhrAnchor>>;",
              "docs": "Fetch the typed `MhrAnchor` for a DID.",
              "attributes": "",
              "line": 497
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_enr",
              "kind": "function_item",
              "signature": "pub async fn get_gal_enr(&self, did: &str) -> WalletResult<Option<sigil_core::EnrAnchor>>;",
              "docs": "Fetch the typed `EnrAnchor` for a DID.",
              "attributes": "",
              "line": 502
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_org_root",
              "kind": "function_item",
              "signature": "pub async fn get_gal_org_root(\n        &self,\n        org_did: &str,\n    ) -> WalletResult<Option<sigil_core::OrgLineageRoot>>;",
              "docs": "Fetch the typed `OrgLineageRoot` for an org DID.",
              "attributes": "",
              "line": 507
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_shard",
              "kind": "function_item",
              "signature": "pub async fn get_gal_shard(&self, did: &str) -> WalletResult<GalShard>;",
              "docs": "Fetch the typed shard summary for a subject DID. The optional\n`assignment` field is `None` when the GAL has no shard\nassignment for the DID; the `topology` vector carries any\nrelevant shard-topology lineage entries (split / merge\nmigrate).",
              "attributes": "",
              "line": 519
            },
            {
              "name": "rpc_client::SigilRpcClient::check_gal_revocation",
              "kind": "function_item",
              "signature": "pub async fn check_gal_revocation(\n        &self,\n        did: &str,\n    ) -> WalletResult<sigil_core::RevocationStatus>;",
              "docs": "Revocation-first check. Returns the typed `RevocationStatus`\nshape \u2014 `revoked: bool` plus an optional inline record. Wallet\ncallers MUST treat `revoked == true` as authoritative regardless\nof any other state.",
              "attributes": "",
              "line": 529
            },
            {
              "name": "rpc_client::SigilRpcClient::get_gal_shard_topology",
              "kind": "function_item",
              "signature": "pub async fn get_gal_shard_topology(&self) -> WalletResult<GalShardTopology>;",
              "docs": "Fetch the full shard topology snapshot.",
              "attributes": "",
              "line": 541
            },
            {
              "name": "rpc_client::GalShard",
              "kind": "struct_item",
              "signature": "pub struct GalShard {\n/// Current shard assignment for the subject, or `None` if the GAL\n\n/// has no assignment for the DID.\n\n#[serde(default)]\npub assignment: Option<sigil_core::ShardAssignment>,\n/// Relevant topology lineage entries (split / merge / migrate\n\n/// history). Empty when the shard is freshly added.\n\n#[serde(default)]\npub topology: Vec<sigil_core::ShardTopologyEntry>\n}",
              "docs": "Wallet-side response shape for `gal_getShard`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 552
            },
            {
              "name": "rpc_client::GalShardTopology",
              "kind": "struct_item",
              "signature": "pub struct GalShardTopology {\n/// All known shard-topology entries, in chronological order.\n\n#[serde(default)]\npub entries: Vec<sigil_core::ShardTopologyEntry>\n}",
              "docs": "Wallet-side response shape for `gal_getShardTopology`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 565
            }
          ],
          "parseErrors": false
        },
        {
          "module": "staking",
          "source": "sigil/node/sigil-wallet/src/staking.rs",
          "sha256": "a1c9e6db2cd83c124309e25cbaa1fc65b549796c29751e38876f19be7930fbce",
          "attributes": "",
          "items": [
            {
              "name": "staking::deposit",
              "kind": "function_item",
              "signature": "pub async fn deposit(\n    rpc_url: &str,\n    chain_id: &str,\n    did: &str,\n    amount: u64,\n    mode: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Deposit stake to become a validator.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "staking::withdraw",
              "kind": "function_item",
              "signature": "pub async fn withdraw(\n    rpc_url: &str,\n    chain_id: &str,\n    did: &str,\n    amount: u64,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Withdraw staked tokens (begins unbonding period).",
              "attributes": "",
              "line": 92
            },
            {
              "name": "staking::delegate",
              "kind": "function_item",
              "signature": "pub async fn delegate(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    to_validator_did: &str,\n    amount: u64,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Delegate stake to another validator.",
              "attributes": "",
              "line": 115
            },
            {
              "name": "staking::undelegate",
              "kind": "function_item",
              "signature": "pub async fn undelegate(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    validator_did: &str,\n    shares: u64,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Undelegate stake shares from another validator.",
              "attributes": "",
              "line": 142
            },
            {
              "name": "staking::claim_rewards",
              "kind": "function_item",
              "signature": "pub async fn claim_rewards(\n    rpc_url: &str,\n    chain_id: &str,\n    did: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Claim accumulated staking rewards.",
              "attributes": "",
              "line": 169
            },
            {
              "name": "staking::print_deposit",
              "kind": "function_item",
              "signature": "pub fn print_deposit(did: &str, amount: u64, mode: &str, tx_hash: &str);",
              "docs": "Print staking deposit confirmation.",
              "attributes": "",
              "line": 194
            },
            {
              "name": "staking::print_withdraw",
              "kind": "function_item",
              "signature": "pub fn print_withdraw(did: &str, amount: u64, tx_hash: &str);",
              "docs": "Print staking withdrawal confirmation.",
              "attributes": "",
              "line": 213
            },
            {
              "name": "staking::print_delegate",
              "kind": "function_item",
              "signature": "pub fn print_delegate(from: &str, to: &str, amount: u64, tx_hash: &str);",
              "docs": "Print delegation confirmation.",
              "attributes": "",
              "line": 236
            },
            {
              "name": "staking::print_rewards_claim",
              "kind": "function_item",
              "signature": "pub fn print_rewards_claim(did: &str, tx_hash: &str);",
              "docs": "Print rewards claim confirmation.",
              "attributes": "",
              "line": 255
            }
          ],
          "parseErrors": false
        },
        {
          "module": "wallet",
          "source": "sigil/node/sigil-wallet/src/wallet.rs",
          "sha256": "418a66e127697bb191ddcaf60ed28d0f503765f78f5e1b6aba6f606629f385e4",
          "attributes": "",
          "items": [
            {
              "name": "wallet::transfer",
              "kind": "function_item",
              "signature": "pub async fn transfer(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    to_did: &str,\n    amount: u64,\n    memo: Option<&str>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Transfer MINT to another account.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 231
            },
            {
              "name": "wallet::register_contract_code",
              "kind": "function_item",
              "signature": "pub async fn register_contract_code(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    code: Vec<u8>,\n    license_metadata: ContractLicenseMetadata,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<RegisterContractCodeResult>;",
              "docs": "Register WASM bytecode for public deployment.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 260
            },
            {
              "name": "wallet::deploy_contract",
              "kind": "function_item",
              "signature": "pub async fn deploy_contract(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    contract_did: &str,\n    code_hash: &str,\n    zone_id: Option<String>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Deploy a contract from a previously registered code hash.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 283
            },
            {
              "name": "wallet::register_username",
              "kind": "function_item",
              "signature": "pub async fn register_username(\n    rpc_url: &str,\n    chain_id: &str,\n    owner_did: &str,\n    name: &str,\n    years: u32,\n    metadata_cid: Option<SigilHash>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Register a username lease.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 309
            },
            {
              "name": "wallet::set_reverse_username",
              "kind": "function_item",
              "signature": "pub async fn set_reverse_username(\n    rpc_url: &str,\n    chain_id: &str,\n    owner_did: &str,\n    name: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Set a username as the DID's primary reverse lookup.",
              "attributes": "",
              "line": 328
            },
            {
              "name": "wallet::transfer_username",
              "kind": "function_item",
              "signature": "pub async fn transfer_username(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    name: &str,\n    new_owner_did: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Transfer a username to a new owner.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 345
            },
            {
              "name": "wallet::release_username",
              "kind": "function_item",
              "signature": "pub async fn release_username(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    name: &str,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Release a username.",
              "attributes": "",
              "line": 362
            },
            {
              "name": "wallet::set_username_metadata",
              "kind": "function_item",
              "signature": "pub async fn set_username_metadata(\n    rpc_url: &str,\n    chain_id: &str,\n    from_did: &str,\n    name: &str,\n    metadata_cid: Option<SigilHash>,\n    passphrase: &str,\n    nonce: u64,\n) -> WalletResult<String>;",
              "docs": "Set or clear username metadata.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 379
            },
            {
              "name": "wallet::print_transfer",
              "kind": "function_item",
              "signature": "pub fn print_transfer(from: &str, to: &str, amount: u64, tx_hash: &str);",
              "docs": "Print a transfer confirmation.",
              "attributes": "",
              "line": 396
            },
            {
              "name": "wallet::print_register_contract_code",
              "kind": "function_item",
              "signature": "pub fn print_register_contract_code(from: &str, result: &RegisterContractCodeResult);",
              "docs": "Print contract-code registration confirmation.",
              "attributes": "",
              "line": 415
            },
            {
              "name": "wallet::print_deploy_contract",
              "kind": "function_item",
              "signature": "pub fn print_deploy_contract(from: &str, contract_did: &str, code_hash: &str, tx_hash: &str);",
              "docs": "Print contract deployment confirmation.",
              "attributes": "",
              "line": 452
            },
            {
              "name": "wallet::print_username_registered",
              "kind": "function_item",
              "signature": "pub fn print_username_registered(owner: &str, name: &str, years: u32, tx_hash: &str);",
              "docs": "Print username registration confirmation.",
              "attributes": "",
              "line": 471
            },
            {
              "name": "wallet::print_username_primary",
              "kind": "function_item",
              "signature": "pub fn print_username_primary(owner: &str, name: &str, tx_hash: &str);",
              "docs": "Print primary username confirmation.",
              "attributes": "",
              "line": 490
            },
            {
              "name": "wallet::print_username_transfer",
              "kind": "function_item",
              "signature": "pub fn print_username_transfer(from: &str, to: &str, name: &str, tx_hash: &str);",
              "docs": "Print username transfer confirmation.",
              "attributes": "",
              "line": 504
            },
            {
              "name": "wallet::print_username_release",
              "kind": "function_item",
              "signature": "pub fn print_username_release(from: &str, name: &str, tx_hash: &str);",
              "docs": "Print username release confirmation.",
              "attributes": "",
              "line": 519
            },
            {
              "name": "wallet::print_username_metadata",
              "kind": "function_item",
              "signature": "pub fn print_username_metadata(from: &str, name: &str, tx_hash: &str);",
              "docs": "Print username metadata confirmation.",
              "attributes": "",
              "line": 533
            },
            {
              "name": "wallet::print_balance",
              "kind": "function_item",
              "signature": "pub fn print_balance(did: &str, balance: u64, chain_id: &str);",
              "docs": "Print a balance display.",
              "attributes": "",
              "line": 547
            },
            {
              "name": "wallet::resolve_sender",
              "kind": "function_item",
              "signature": "pub fn resolve_sender(explicit: Option<&str>) -> WalletResult<String>;",
              "docs": "Resolve the sender DID for a wallet operation.\n\nUses the `--did` flag if provided, otherwise falls back to the config default.",
              "attributes": "",
              "line": 563
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-integration-tests",
      "version": "0.1.0",
      "source": "sigil/node/sigil-integration-tests",
      "manifestSha256": "6af0376397ee2c4c1ff03e01f5d84c049b32eadbd21c5587233290a31be3acca",
      "features": {
        "default": [],
        "gal": [
          "sigil-sdk/gal",
          "dep:mars-protocol",
          "dep:oas-resolve",
          "dep:oas-document",
          "dep:oas-crypto",
          "dep:async-trait",
          "dep:tokio"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-integration-tests",
      "modules": []
    },
    {
      "name": "sigil-tee-material",
      "version": "0.1.0",
      "source": "sigil/node/sigil-tee-material",
      "manifestSha256": "ce95efd8d9a2d06e92310f43083bf0258fdfa06e79269a2f8f56e7eabbb9a91f",
      "features": {
        "default": [
          "network"
        ],
        "network": [
          "dep:ureq"
        ]
      },
      "publish": true,
      "url": "/reference/rust/sigil-tee-material",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-tee-material/src/lib.rs",
          "sha256": "879b99876baa7a9015ee8c4db1cda1660a1752fd0f43f120748b5b7fcb0fa32c",
          "attributes": "",
          "items": [
            {
              "name": "bundle",
              "kind": "module",
              "signature": "pub mod bundle;",
              "docs": "Operator tooling for fetching, validating, and emitting genesis\ntrust-anchor bundles for Sigil's per-vendor TEE verifier.\n\nSee `sigil/docs/operator/tee-verifier-readiness.md` for the broader\ncontext and the per-vendor checklist.\n\n# Output bundle schema\n\nEvery emit-genesis subcommand produces the same outer envelope:\n\n```json\n{\n  \"vendor\": \"amd-sev-snp\" | \"intel-sgx-dcap\" | \"intel-tdx\" | \"arm-cca\",\n  \"generatedAt\": \"<RFC 3339>\",\n  \"expiresAt\": \"<RFC 3339 | null>\",\n  \"materials\": { ... vendor-specific raw artefacts as base64/hex ... },\n  \"measurements\": [ \"<hex>\", ... ],\n  \"policyPatch\": {\n    \"compute_params\": {\n      \"<vendor>_trust_anchors\": { ... drop-in shape for genesis ... }\n    }\n  }\n}\n```\n\nOperators concatenate `policyPatch` into their genesis JSON. The\n`materials` block is preserved so the bundle is self-describing\n(auditable: who ran the fetch, when, what the source bytes were).\n\nAll cryptography is pure Rust:\n  - `p256` / `p384` for ECDSA (Intel / AMD-Arm respectively)\n  - `sha2` for SHA-256/384\n  - `x509-parser` for X.509 DER parsing\n  - `coset` + `ciborium` for COSE_Sign1 + CBOR (Arm CCA)\n  - (optional) `ureq` + rustls for HTTPS fetch\n\nNo C/FFI. No vendor SDK. No proprietary blobs.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "fetch",
              "kind": "module",
              "signature": "pub mod fetch;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 42
            },
            {
              "name": "hex_io",
              "kind": "module",
              "signature": "pub mod hex_io;",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "arm_cca",
              "kind": "module",
              "signature": "pub mod arm_cca;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "sev_snp",
              "kind": "module",
              "signature": "pub mod sev_snp;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "sgx_dcap",
              "kind": "module",
              "signature": "pub mod sgx_dcap;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "tdx",
              "kind": "module",
              "signature": "pub mod tdx;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "pub use bundle::{GenesisBundle, PolicyPatch};",
              "kind": "use_declaration",
              "signature": "pub use bundle::{GenesisBundle, PolicyPatch};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use error::ToolError;",
              "kind": "use_declaration",
              "signature": "pub use error::ToolError;",
              "docs": "",
              "attributes": "",
              "line": 51
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bundle",
          "source": "sigil/node/sigil-tee-material/src/bundle.rs",
          "sha256": "d0cf82cd760e00bb7cddfac444abba2a6b6465524ab03216a4ac3d231fe1bc06",
          "attributes": "",
          "items": [
            {
              "name": "bundle::DEFAULT_MAX_ATTESTATION_AGE_EPOCHS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_ATTESTATION_AGE_EPOCHS: u64;",
              "docs": "Default freshness window for runtime attestations emitted into genesis.",
              "attributes": "",
              "line": 9
            },
            {
              "name": "bundle::DEFAULT_COLLATERAL_MAX_AGE_EPOCHS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_COLLATERAL_MAX_AGE_EPOCHS: u64;",
              "docs": "Default maximum age for vendor collateral that must be refreshed off-chain.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "bundle::BundleVendor",
              "kind": "enum_item",
              "signature": "pub enum BundleVendor {\n    AmdSevSnp,\n    IntelSgxDcap,\n    IntelTdx,\n    ArmCca,\n}",
              "docs": "Vendor identifier in the bundle envelope. Matches the `TeeAttestation.vendor`\nstrings the chain-side verifier registry uses.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"kebab-case\")]",
              "line": 17
            },
            {
              "name": "bundle::BundleVendor::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "bundle::BundleVendor::anchors_field",
              "kind": "function_item",
              "signature": "pub fn anchors_field(&self) -> &'static str;",
              "docs": "Genesis-side `compute_params.<...>_trust_anchors` field key.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "bundle::GenesisBundle",
              "kind": "struct_item",
              "signature": "pub struct GenesisBundle {\npub vendor: BundleVendor,\n#[serde(rename = \"generatedAt\")]\npub generated_at: DateTime<Utc>,\n/// Best-effort earliest expiry across the bundle's signed material\n\n/// (e.g. CRL nextUpdate, TCB Info nextUpdate). `None` when the\n\n/// vendor produces no time-stamped material that the tooling can\n\n/// parse.\n\n#[serde(rename = \"expiresAt\", skip_serializing_if = \"Option::is_none\")]\npub expires_at: Option<DateTime<Utc>>,\n/// Vendor-specific raw artefacts (preserved for audit / replay).\n\npub materials: Value,\n/// Hex-encoded measurements the bundle pins.\n\npub measurements: Vec<String>,\n/// JSON-merge fragment the operator drops into chain genesis under\n\n/// `compute_params`.\n\n#[serde(rename = \"policyPatch\")]\npub policy_patch: PolicyPatch\n}",
              "docs": "Top-level bundle envelope written by every `emit-genesis` subcommand.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 47
            },
            {
              "name": "bundle::PolicyPatch",
              "kind": "struct_item",
              "signature": "pub struct PolicyPatch {\npub compute_params: Value\n}",
              "docs": "Genesis policy patch: a `compute_params` overlay carrying the\nper-vendor trust-anchor block. The operator merges this into their\ngenesis JSON.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 71
            },
            {
              "name": "bundle::GenesisBundle::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        vendor: BundleVendor,\n        materials: Value,\n        measurements: Vec<String>,\n        anchors: Value,\n        expires_at: Option<DateTime<Utc>>,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 76
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-tee-material/src/error.rs",
          "sha256": "af5efa4772164e66ab32bda9164e02d9dd1abe1d3204b34122503a1f75eae9a3",
          "attributes": "",
          "items": [
            {
              "name": "error::ToolError",
              "kind": "enum_item",
              "signature": "pub enum ToolError {\n    #[error(\"io: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"json: {0}\")]\n    Json(#[from] serde_json::Error),\n    #[error(\"hex: {0}\")]\n    Hex(#[from] hex::FromHexError),\n    #[error(\"validation failed: {0}\")]\n    Validation(String),\n    #[error(\"network: {0}\")]\n    Network(String),\n    #[error(\"unsupported: {0}\")]\n    Unsupported(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 4
            }
          ],
          "parseErrors": false
        },
        {
          "module": "fetch",
          "source": "sigil/node/sigil-tee-material/src/fetch.rs",
          "sha256": "a6bc7f4232a9dbc6ee063dad24607c214dddff8970be0fcc7f564606d05eb9e4",
          "attributes": "#[cfg(feature = \"network\")]",
          "items": [
            {
              "name": "fetch::get_bytes",
              "kind": "function_item",
              "signature": "pub fn get_bytes(url: &str) -> Result<Vec<u8>, ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 7
            },
            {
              "name": "fetch::get_string",
              "kind": "function_item",
              "signature": "pub fn get_string(url: &str) -> Result<String, ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 25
            },
            {
              "name": "fetch::get_response_with_chain_header",
              "kind": "function_item",
              "signature": "pub fn get_response_with_chain_header(\n    url: &str,\n    chain_header: &str,\n) -> Result<(Vec<u8>, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 30
            }
          ],
          "parseErrors": false
        },
        {
          "module": "hex_io",
          "source": "sigil/node/sigil-tee-material/src/hex_io.rs",
          "sha256": "819a84c3476fc3f004ec935425fcd2f12ffe65f5aaaa239e76d6bedf6f881167",
          "attributes": "",
          "items": [
            {
              "name": "hex_io::read_bytes",
              "kind": "function_item",
              "signature": "pub fn read_bytes(path: &Path) -> Result<Vec<u8>, ToolError>;",
              "docs": "Read raw bytes from a file. Whitespace-trimmed hex/strings are\ndetected by length parity + alphabet; otherwise the file is treated\nas opaque bytes.",
              "attributes": "",
              "line": 7
            },
            {
              "name": "hex_io::read_hex_line",
              "kind": "function_item",
              "signature": "pub fn read_hex_line(path: &Path) -> Result<Vec<u8>, ToolError>;",
              "docs": "Read a file expected to contain a single line of lowercase hex,\npossibly with surrounding whitespace.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "hex_io::read_bytes_or_hex",
              "kind": "function_item",
              "signature": "pub fn read_bytes_or_hex(path: &Path) -> Result<Vec<u8>, ToolError>;",
              "docs": "Try to read either a hex line or a raw bytes file. Returns the\nraw bytes either way.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "hex_io::write_json",
              "kind": "function_item",
              "signature": "pub fn write_json<T: serde::Serialize>(path: &Path, v: &T) -> Result<(), ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "hex_io::read_text",
              "kind": "function_item",
              "signature": "pub fn read_text(path: &Path) -> Result<String, ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 36
            }
          ],
          "parseErrors": false
        },
        {
          "module": "arm_cca",
          "source": "sigil/node/sigil-tee-material/src/arm_cca.rs",
          "sha256": "26901b44b06c30155c29d08a5a0feb6cc4e8bce706d38adbadff645362db8c92",
          "attributes": "",
          "items": [
            {
              "name": "arm_cca::validate_iak_pubkey",
              "kind": "function_item",
              "signature": "pub fn validate_iak_pubkey(bytes: &[u8]) -> Result<[u8; SEC1_UNCOMPRESSED_LEN], ToolError>;",
              "docs": "Validate a single IAK pubkey buffer. Returns the canonical 97-byte\nSEC1-uncompressed P-384 form.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "arm_cca::validate_realm_token",
              "kind": "function_item",
              "signature": "pub fn validate_realm_token(\n    bytes: &[u8],\n    iak_pubkey: Option<&[u8; SEC1_UNCOMPRESSED_LEN]>,\n) -> Result<(), ToolError>;",
              "docs": "Validate a realm-token (COSE_Sign1) bytes blob \u2014 checks structural\nshape + that ES384 is the algorithm. Optionally verifies the\nsignature against an IAK pubkey if one is supplied.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "arm_cca::emit_genesis_from_files",
              "kind": "function_item",
              "signature": "pub fn emit_genesis_from_files(\n    iak_pubkey_paths: &[&Path],\n    rim_paths: &[&Path],\n    realm_token_path: Option<&Path>,\n) -> Result<GenesisBundle, ToolError>;",
              "docs": "Build genesis from operator-supplied IAK pubkey files + RIM files\n+ optional realm-token sample. The realm token (when present)\n  must have a matching IAK pubkey in the input list, otherwise\n  validation fails.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "arm_cca::emit_genesis_from_manifest",
              "kind": "function_item",
              "signature": "pub fn emit_genesis_from_manifest(manifest_path: &Path) -> Result<GenesisBundle, ToolError>;",
              "docs": "Emit a genesis bundle from a single text manifest file (one path\nper line, prefixed by `iak:` / `rim:` / `realm-token:`).",
              "attributes": "",
              "line": 230
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sev_snp",
          "source": "sigil/node/sigil-tee-material/src/sev_snp.rs",
          "sha256": "d6114d510f4c779ad601653420b40d86a733c0f18405363a17213ea94419e892",
          "attributes": "",
          "items": [
            {
              "name": "sev_snp::KDS_BASE",
              "kind": "const_item",
              "signature": "pub const KDS_BASE: &str;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "sev_snp::ValidatedSevSnpChain",
              "kind": "struct_item",
              "signature": "pub struct ValidatedSevSnpChain {\npub ark_fingerprint_sha256: [u8; 32],\npub ask_fingerprint_sha256: [u8; 32],\npub ark_der: Vec<u8>,\npub ask_der: Vec<u8>,\npub expires_at: DateTime<Utc>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 23
            },
            {
              "name": "sev_snp::AmdProduct",
              "kind": "enum_item",
              "signature": "pub enum AmdProduct {\n    Milan,\n    Genoa,\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Copy, Debug)]",
              "line": 32
            },
            {
              "name": "sev_snp::AmdProduct::parse",
              "kind": "function_item",
              "signature": "pub fn parse(s: &str) -> Result<Self, ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "sev_snp::AmdProduct::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "sev_snp::fetch_cert_chain_pem",
              "kind": "function_item",
              "signature": "pub fn fetch_cert_chain_pem(product: AmdProduct) -> Result<String, ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 56
            },
            {
              "name": "sev_snp::fetch_vcek_der",
              "kind": "function_item",
              "signature": "pub fn fetch_vcek_der(\n    product: AmdProduct,\n    chip_id_hex: &str,\n    bl_spl: u8,\n    tee_spl: u8,\n    snp_spl: u8,\n    ucode_spl: u8,\n) -> Result<Vec<u8>, ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 62
            },
            {
              "name": "sev_snp::validate_cert_chain",
              "kind": "function_item",
              "signature": "pub fn validate_cert_chain(input: &[u8]) -> Result<([u8; 32], Vec<u8>), ToolError>;",
              "docs": "Validate an AMD SEV-SNP cert chain. Accepts a KDS-style PEM chain\ncontaining the product ASK and self-signed ARK. Pins based on ARK\nalone are not enough for production; the tool returns both ARK and\nASK fingerprints.\n\nCompatibility wrapper for callers that only need the ARK pin. New\nproduction code should call `validate_cert_chain_material` and pin\nboth ARK and ASK fingerprints.",
              "attributes": "",
              "line": 90
            },
            {
              "name": "sev_snp::validate_cert_chain_material",
              "kind": "function_item",
              "signature": "pub fn validate_cert_chain_material(input: &[u8]) -> Result<ValidatedSevSnpChain, ToolError>;",
              "docs": "Validate AMD SEV-SNP ARK + ASK chain material and return both\nfingerprints. AMD KDS `cert_chain` responses carry the product ASK\nfollowed by the self-signed ARK; operators pin both in genesis.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "sev_snp::base64_decode_pub",
              "kind": "function_item",
              "signature": "pub fn base64_decode_pub(s: &str) -> Result<Vec<u8>, String>;",
              "docs": "Minimal pure-Rust base64 decode (RFC 4648 standard alphabet).",
              "attributes": "",
              "line": 264
            },
            {
              "name": "sev_snp::build_anchors",
              "kind": "function_item",
              "signature": "pub fn build_anchors(\n    ark_fpr: [u8; 32],\n    ask_fpr: [u8; 32],\n    _measurements: &[Vec<u8>],\n    measurement_hex: &[String],\n) -> serde_json::Value;",
              "docs": "Build a `sev_snp_trust_anchors` policy-anchor JSON value from the\nvalidated ARK fingerprint + operator-supplied measurement allowlist.",
              "attributes": "",
              "line": 302
            },
            {
              "name": "sev_snp::emit_genesis_from_files",
              "kind": "function_item",
              "signature": "pub fn emit_genesis_from_files(\n    ark_chain_path: &Path,\n    measurement_paths: &[&Path],\n) -> Result<GenesisBundle, ToolError>;",
              "docs": "One-shot emit-genesis from a validated ARK chain + measurement file.",
              "attributes": "",
              "line": 324
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sgx_dcap",
          "source": "sigil/node/sigil-tee-material/src/sgx_dcap.rs",
          "sha256": "47e7c64d46f0acf4b415b5b91bc6b92e343a7d29b081df6d4c08569a6683279e",
          "attributes": "",
          "items": [
            {
              "name": "sgx_dcap::PCS_BASE",
              "kind": "const_item",
              "signature": "pub const PCS_BASE: &str;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "sgx_dcap::fetch_tcb_info",
              "kind": "function_item",
              "signature": "pub fn fetch_tcb_info(fmspc_hex: &str) -> Result<(String, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 32
            },
            {
              "name": "sgx_dcap::validate_fmspc_hex",
              "kind": "function_item",
              "signature": "pub fn validate_fmspc_hex(fmspc_hex: &str) -> Result<(), ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "sgx_dcap::normalized_fmspc_hex",
              "kind": "function_item",
              "signature": "pub fn normalized_fmspc_hex(fmspc_hex: &str) -> Result<String, ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "sgx_dcap::fetch_qe_identity",
              "kind": "function_item",
              "signature": "pub fn fetch_qe_identity() -> Result<(String, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 59
            },
            {
              "name": "sgx_dcap::fetch_pck_crl_platform",
              "kind": "function_item",
              "signature": "pub fn fetch_pck_crl_platform() -> Result<(Vec<u8>, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 71
            },
            {
              "name": "sgx_dcap::validate",
              "kind": "function_item",
              "signature": "pub fn validate(\n    pck_chain_pem_or_der: &[u8],\n    tcb_signing_cert_der: &[u8],\n    tcb_info_json: &str,\n    qe_identity_json: &str,\n    pck_crl_der: &[u8],\n) -> Result<ValidatedSgx, ToolError>;",
              "docs": "Validate an SGX DCAP material bundle and return the validated\nIntel SGX Root CA fingerprint + the TCB Signing Cert DER bytes.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "sgx_dcap::ValidatedSgx",
              "kind": "struct_item",
              "signature": "pub struct ValidatedSgx {\npub root_fpr: [u8; 32],\npub root_der: Vec<u8>,\npub tcb_signing_cert_fpr: [u8; 32],\npub expires_at: Option<DateTime<Utc>>\n}",
              "docs": "",
              "attributes": "#[derive(Debug)]",
              "line": 173
            },
            {
              "name": "sgx_dcap::ValidatedSgx::from_der_material",
              "kind": "function_item",
              "signature": "pub fn from_der_material(root_der: &[u8], tcb_signing_cert_der: &[u8]) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "sgx_dcap::ValidatedSgx::tcb_signing_cert_sha256_hex",
              "kind": "function_item",
              "signature": "pub fn tcb_signing_cert_sha256_hex(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 190
            },
            {
              "name": "sgx_dcap::parse_chain",
              "kind": "function_item",
              "signature": "pub fn parse_chain(input: &[u8]) -> Result<Vec<Vec<u8>>, ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 432
            },
            {
              "name": "sgx_dcap::emit_genesis_from_files",
              "kind": "function_item",
              "signature": "pub fn emit_genesis_from_files(\n    pck_chain_path: &Path,\n    tcb_signing_cert_path: &Path,\n    tcb_info_path: &Path,\n    qe_identity_path: &Path,\n    pck_crl_path: &Path,\n    mrenclave_paths: &[&Path],\n    mrsigner_paths: &[&Path],\n    is_tdx: bool,\n) -> Result<GenesisBundle, ToolError>;",
              "docs": "",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 644
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tdx",
          "source": "sigil/node/sigil-tee-material/src/tdx.rs",
          "sha256": "f8b8dcf12892bfc705e6251dacea9180c39f8c6424d653bdc577daf4c43cb8f2",
          "attributes": "",
          "items": [
            {
              "name": "tdx::PCS_BASE",
              "kind": "const_item",
              "signature": "pub const PCS_BASE: &str;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "tdx::fetch_tcb_info",
              "kind": "function_item",
              "signature": "pub fn fetch_tcb_info(fmspc_hex: &str) -> Result<(String, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 24
            },
            {
              "name": "tdx::fetch_qe_identity",
              "kind": "function_item",
              "signature": "pub fn fetch_qe_identity() -> Result<(String, Option<String>), ToolError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"network\")]",
              "line": 37
            },
            {
              "name": "tdx::emit_genesis_from_files",
              "kind": "function_item",
              "signature": "pub fn emit_genesis_from_files(\n    pck_chain_path: &Path,\n    tcb_signing_cert_path: &Path,\n    tcb_info_path: &Path,\n    qe_identity_path: &Path,\n    pck_crl_path: &Path,\n    mrtd_paths: &[&Path],\n    mrsigner_seam_paths: &[&Path],\n) -> Result<GenesisBundle, ToolError>;",
              "docs": "",
              "attributes": "",
              "line": 48
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-wasm",
      "version": "0.1.0",
      "source": "sigil/node/sigil-wasm",
      "manifestSha256": "bef33ad66606f449ace06fc315d38c33e6003178f56cd9cd7a40c6f99e8415a7",
      "features": {
        "default": []
      },
      "publish": true,
      "url": "/reference/rust/sigil-wasm",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-wasm/src/lib.rs",
          "sha256": "ab97e56b699d35222009e614dd459739f1a858239dccd16a462e935409e5f855",
          "attributes": "",
          "items": [
            {
              "name": "engine",
              "kind": "module",
              "signature": "pub mod engine;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "executor",
              "kind": "module",
              "signature": "pub mod executor;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "host",
              "kind": "module",
              "signature": "pub mod host;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "pub use engine::{\n    ModuleCacheConfig, ModuleCacheStats, WasmEngine, GAS_PER_FUEL, MAX_CODE_SIZE, MAX_IO_BYTES,\n    MAX_MEMORY_PAGES,\n};",
              "kind": "use_declaration",
              "signature": "pub use engine::{\n    ModuleCacheConfig, ModuleCacheStats, WasmEngine, GAS_PER_FUEL, MAX_CODE_SIZE, MAX_IO_BYTES,\n    MAX_MEMORY_PAGES,\n};",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use error::{HostError, WasmError};",
              "kind": "use_declaration",
              "signature": "pub use error::{HostError, WasmError};",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use executor::{execute_call, CallOutput, CallSettings};",
              "kind": "use_declaration",
              "signature": "pub use executor::{execute_call, CallOutput, CallSettings};",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use host::{\n    capability, ComputeDispatchRequest, HostBackend, HostLogLevel, MacaQuorumProofView, ReceiptView,\n};",
              "kind": "use_declaration",
              "signature": "pub use host::{\n    capability, ComputeDispatchRequest, HostBackend, HostLogLevel, MacaQuorumProofView, ReceiptView,\n};",
              "docs": "",
              "attributes": "",
              "line": 40
            }
          ],
          "parseErrors": false
        },
        {
          "module": "engine",
          "source": "sigil/node/sigil-wasm/src/engine.rs",
          "sha256": "800562ea44fce59e1b716202a68d3edda14bccf1a90d4655f153da1234221611",
          "attributes": "",
          "items": [
            {
              "name": "engine::MAX_CODE_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_CODE_SIZE: usize;",
              "docs": "Hard upper bound on a contract's bytecode size, in bytes. Larger\nblobs are rejected at compile time to keep the on-chain code-blob\nstore small. 2 MiB matches the common deployed-module limit on\nother chains and is generous for handwritten + simple agent\ncontracts.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "engine::MAX_MEMORY_PAGES",
              "kind": "const_item",
              "signature": "pub const MAX_MEMORY_PAGES: u32;",
              "docs": "Hard upper bound on guest linear-memory pages (64 KiB each). 16\npages = 1 MiB. The guest may grow up to this limit; growing beyond\ntraps with `MemoryOutOfBounds`.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "engine::MAX_IO_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_IO_BYTES: usize;",
              "docs": "Hard upper bound on host-supplied call args / return blob, in bytes.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "engine::GAS_PER_FUEL",
              "kind": "const_item",
              "signature": "pub const GAS_PER_FUEL: u64;",
              "docs": "Wasmtime fuel-units per gas-unit. Each consumed fuel unit\ncorresponds to one consumed gas unit; the conversion is 1:1 to keep\ngas accounting simple and deterministic.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "engine::ModuleCacheConfig",
              "kind": "struct_item",
              "signature": "pub struct ModuleCacheConfig {\npub max_modules: usize,\npub max_bytes: usize,\npub ttl: Duration\n}",
              "docs": "Process-local compiled-module cache limits. Both `max_modules` and\n`max_bytes` are enforced; the first limit reached triggers LRU eviction.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 40
            },
            {
              "name": "engine::ModuleCacheStats",
              "kind": "struct_item",
              "signature": "pub struct ModuleCacheStats {\npub entries: usize,\npub estimated_bytes: usize,\npub hits: u64,\npub misses: u64,\npub evictions: u64,\npub expired: u64\n}",
              "docs": "Snapshot of the process-local compiled-module cache.",
              "attributes": "#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]",
              "line": 58
            },
            {
              "name": "engine::WasmEngine",
              "kind": "struct_item",
              "signature": "pub struct WasmEngine {\n\n}",
              "docs": "A configured wasmtime engine suitable for deterministic contract\nexecution. Construct one per node and clone into per-call `Store`s.",
              "attributes": "#[derive(Clone)]",
              "line": 261
            },
            {
              "name": "engine::WasmEngine::deterministic",
              "kind": "function_item",
              "signature": "pub fn deterministic() -> Result<Self, WasmError>;",
              "docs": "Build a deterministic engine. Configuration:\n\n- `consume_fuel`: on (mandatory for gas metering)\n- `wasm_threads`: off (no concurrency from guest)\n- `wasm_simd`: off\n  (NaN canonicalisation across platforms is not free; we ban SIMD for determinism)\n- `wasm_relaxed_simd`: off\n- `wasm_reference_types`: off\n- `wasm_multi_memory`: off\n- `wasm_memory64`: off\n- `wasm_bulk_memory`: on\n  (deterministic; required by most toolchains)\n- `wasm_multi_value`: on (deterministic)\n- `nan_canonicalization`: on\n  (forces canonical NaN bits; eliminates platform-specific NaN drift)\n- `cranelift_pcc`: off\n  (proof-carrying-code is OK to leave default)\n- `async_support`: off\n- `parallel_compilation`: off (deterministic compile order)",
              "attributes": "",
              "line": 285
            },
            {
              "name": "engine::WasmEngine::compile",
              "kind": "function_item",
              "signature": "pub fn compile(&self, bytes: &[u8]) -> Result<Module, WasmError>;",
              "docs": "Compile contract bytecode. Bytecode size is bounded by\n`MAX_CODE_SIZE`; oversized blobs are rejected.",
              "attributes": "",
              "line": 296
            },
            {
              "name": "engine::WasmEngine::compile_cached",
              "kind": "function_item",
              "signature": "pub fn compile_cached(&self, code_hash: &SigilHash, bytes: &[u8]) -> Result<Module, WasmError>;",
              "docs": "Compile contract bytecode through the process-global LRU cache.\n\nThe cache is keyed by content hash and is performance-only:\nhash mismatch fails before lookup, and eviction/expiry can only\nforce recompilation of the exact same bytes.",
              "attributes": "",
              "line": 313
            },
            {
              "name": "engine::WasmEngine::configure_module_cache",
              "kind": "function_item",
              "signature": "pub fn configure_module_cache(config: ModuleCacheConfig) -> Result<(), WasmError>;",
              "docs": "Reconfigure the process-global module cache and clear its contents.\nIntended for node startup configuration and tests.",
              "attributes": "",
              "line": 340
            },
            {
              "name": "engine::WasmEngine::clear_module_cache",
              "kind": "function_item",
              "signature": "pub fn clear_module_cache() -> Result<(), WasmError>;",
              "docs": "Clear the process-global module cache while retaining its limits.",
              "attributes": "",
              "line": 349
            },
            {
              "name": "engine::WasmEngine::module_cache_stats",
              "kind": "function_item",
              "signature": "pub fn module_cache_stats() -> Result<ModuleCacheStats, WasmError>;",
              "docs": "Return current process-global module cache counters.",
              "attributes": "",
              "line": 358
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-wasm/src/error.rs",
          "sha256": "4515a0264e09522666607965e56b86d182a62a0552c069312a1b5053372f56ab",
          "attributes": "",
          "items": [
            {
              "name": "error::WasmError",
              "kind": "enum_item",
              "signature": "pub enum WasmError {\n    /// Failed to construct or configure the wasmtime engine.\n    #[error(\"wasmtime engine error: {0}\")]\n    Engine(String),\n    /// Failed to compile the supplied bytecode.\n    #[error(\"wasm module compilation failed: {0}\")]\n    Compile(String),\n    /// Failed to instantiate the module against the linker.\n    #[error(\"wasm module instantiation failed: {0}\")]\n    Instantiate(String),\n    /// The contract did not export the required entrypoint or it had\n    /// the wrong signature.\n    #[error(\"missing or invalid entrypoint: {0}\")]\n    BadEntrypoint(String),\n    /// The contract trapped during execution. State changes from this\n    /// invocation MUST be discarded.\n    #[error(\"contract trapped during execution: {0}\")]\n    Trap(String),\n    /// The contract exhausted its fuel/gas budget.\n    #[error(\"out of fuel (gas exhausted)\")]\n    OutOfFuel,\n    /// Memory access out of bounds (e.g. host pointer/length didn't\n    /// fit inside the guest memory).\n    #[error(\"memory access out of bounds: {0}\")]\n    MemoryOutOfBounds(String),\n    /// The host function call returned a typed error to the guest.\n    /// Distinct from `Trap` \u2014 the guest may have caught and continued.\n    #[error(\"host function error: {0}\")]\n    Host(#[from] HostError),\n    /// Generic catch-all for backend-specific failures.\n    #[error(\"backend error: {0}\")]\n    Backend(String),\n}",
              "docs": "Top-level error from the Sigil WASM runtime.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            },
            {
              "name": "error::HostError",
              "kind": "enum_item",
              "signature": "pub enum HostError {\n    /// The contract attempted to use a host function it was not granted\n    /// in `ContractRecord.allowed_host_functions`.\n    #[error(\"host function `{0}` not in contract allowlist\")]\n    HostFunctionNotAllowed(String),\n    /// The host function was called with malformed arguments (bad\n    /// pointer, bad length, malformed UTF-8, etc.).\n    #[error(\"invalid host fn argument: {0}\")]\n    InvalidArgument(String),\n    /// The requested key is not present in contract state.\n    #[error(\"key not found\")]\n    KeyNotFound,\n    /// The host backend rejected the call (e.g. storage error,\n    /// compute-marketplace constraint violation).\n    #[error(\"host backend rejected call: {0}\")]\n    Backend(String),\n    /// The contract is not authorised to perform the requested\n    /// privileged action (e.g. dispatch_compute without a mandate, or\n    /// upgrade outside policy).\n    #[error(\"permission denied: {0}\")]\n    PermissionDenied(String),\n    /// The host backend hit an internal limit (event count, message\n    /// queue, etc.).\n    #[error(\"host limit exceeded: {0}\")]\n    LimitExceeded(String),\n}",
              "docs": "Errors raised by host backend functions. These are separate from\n`WasmError::Trap` because a guest may catch them and continue.",
              "attributes": "#[derive(Debug, Clone, Error, PartialEq, Eq)]",
              "line": 44
            }
          ],
          "parseErrors": false
        },
        {
          "module": "executor",
          "source": "sigil/node/sigil-wasm/src/executor.rs",
          "sha256": "d68c921eadbd9d53fc9f1ae7d11f25ef3bce9877bd0eea551040feae68898f90",
          "attributes": "",
          "items": [
            {
              "name": "executor::CallOutput",
              "kind": "struct_item",
              "signature": "pub struct CallOutput {\npub status: i32,\npub gas_used: u64,\npub output: Vec<u8>,\npub host_error: Option<HostError>\n}",
              "docs": "Per-call output. `output` is the bytes the contract returned via\n`anvil_set_return`; empty if it returned nothing.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 36
            },
            {
              "name": "executor::CallSettings",
              "kind": "struct_item",
              "signature": "pub struct CallSettings {\npub gas_budget: u64,\npub entrypoint: String\n}",
              "docs": "Settings for a single contract invocation.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 45
            },
            {
              "name": "executor::execute_call",
              "kind": "function_item",
              "signature": "pub fn execute_call<B: HostBackend>(\n    engine: &WasmEngine,\n    module: &Module,\n    backend: B,\n    settings: &CallSettings,\n    args: &[u8],\n) -> Result<(CallOutput, B), WasmError>;",
              "docs": "Compile + run a contract entrypoint with a fresh `Store`.\n\nOn any trap, returns `Err(WasmError::Trap)`. The backend value is\nconsumed and dropped \u2014 any mutations it staged in an overlay are\ndiscarded. The caller MUST treat trap as a hard rollback.\n\nOn success, the backend is returned alongside the `CallOutput` so\nthe caller can `commit()` staged mutations to the underlying\nchain state.",
              "attributes": "",
              "line": 89
            }
          ],
          "parseErrors": false
        },
        {
          "module": "host",
          "source": "sigil/node/sigil-wasm/src/host.rs",
          "sha256": "c009efdf30d5d0019c0b66e0490db798645fd74d43be2d5c2392244040909c1d",
          "attributes": "",
          "items": [
            {
              "name": "host::capability",
              "kind": "module",
              "signature": "pub mod capability;",
              "docs": "The set of capabilities a contract may exercise during a call.\n\nRead by the host adapter when the guest invokes a privileged host\nfunction and either checked against `ContractRecord.allowed_host_functions`\nin advance, or enforced by the backend before mutating any state.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "host::capability::STATE_GET",
              "kind": "const_item",
              "signature": "pub const STATE_GET: &str;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "host::capability::STATE_SET",
              "kind": "const_item",
              "signature": "pub const STATE_SET: &str;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "host::capability::STATE_DELETE",
              "kind": "const_item",
              "signature": "pub const STATE_DELETE: &str;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "host::capability::CALLER_DID",
              "kind": "const_item",
              "signature": "pub const CALLER_DID: &str;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "host::capability::BLOCK_HEIGHT",
              "kind": "const_item",
              "signature": "pub const BLOCK_HEIGHT: &str;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "host::capability::NATIVE_TRANSFER",
              "kind": "const_item",
              "signature": "pub const NATIVE_TRANSFER: &str;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "host::capability::LOG",
              "kind": "const_item",
              "signature": "pub const LOG: &str;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "host::capability::EMIT_EVENT",
              "kind": "const_item",
              "signature": "pub const EMIT_EVENT: &str;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "host::capability::RESOLVE_IDENTITY",
              "kind": "const_item",
              "signature": "pub const RESOLVE_IDENTITY: &str;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "host::capability::VERIFY_LINEAGE",
              "kind": "const_item",
              "signature": "pub const VERIFY_LINEAGE: &str;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "host::capability::SEND_ZONE_MESSAGE",
              "kind": "const_item",
              "signature": "pub const SEND_ZONE_MESSAGE: &str;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "host::capability::DISPATCH_COMPUTE",
              "kind": "const_item",
              "signature": "pub const DISPATCH_COMPUTE: &str;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "host::capability::RECORD_MANDATE_SPEND",
              "kind": "const_item",
              "signature": "pub const RECORD_MANDATE_SPEND: &str;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "host::capability::READ_COMPUTE_RECEIPT",
              "kind": "const_item",
              "signature": "pub const READ_COMPUTE_RECEIPT: &str;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "host::capability::READ_MACA_QUORUM_PROOF",
              "kind": "const_item",
              "signature": "pub const READ_MACA_QUORUM_PROOF: &str;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "host::HostLogLevel",
              "kind": "enum_item",
              "signature": "pub enum HostLogLevel {\n    Debug = 0,\n    Info = 1,\n    Warn = 2,\n    Error = 3,\n}",
              "docs": "Minimal log levels \u2014 match `sigil_execution::anvil::LogLevel` ordinal.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 43
            },
            {
              "name": "host::HostLogLevel::from_u32",
              "kind": "function_item",
              "signature": "pub fn from_u32(v: u32) -> Self;",
              "docs": "Decode from the `level` integer that crosses the WASM boundary.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "host::HostBackend",
              "kind": "trait_item",
              "signature": "pub trait HostBackend: Send + Sync {\n    /// The DID of the contract currently executing. The runtime passes\n    /// this on every call so the backend can scope state, events, and\n    /// authorization checks per contract.\n    fn contract_did(&self) -> &str;\n\n    /// Returns `true` if `host_fn` is in the contract's allowlist.\n    /// Implementations should always check the live contract record;\n    /// this is consulted by the runtime as a defense-in-depth gate\n    /// before invoking the actual backend method.\n    fn allows_host_fn(&self, host_fn: &str) -> bool;\n\n    /// DID of the account/app that submitted the current contract call.\n    ///\n    /// This is consensus input carried by the signed `CallContract`\n    /// transaction, not ambient process state.\n    fn caller_did(&self) -> &str ;\n\n    /// Current finalized block height visible to this contract call.\n    fn block_height(&self) -> Result<u64, HostError> ;\n\n    /// Transfer native micro-MINT from this contract's account to `recipient`.\n    ///\n    /// Backends must stage the debit/credit and commit it only if the enclosing\n    /// WASM call succeeds.\n    fn native_transfer(&mut self, _recipient: &str, _amount: u64) -> Result<(), HostError> ;\n\n    // --- State (always permitted; gated by allowlist anyway) -------\n\n    fn state_get(&mut self, key: &[u8]) -> Result<Option<Vec<u8>>, HostError>;\n    fn state_set(&mut self, key: &[u8], value: &[u8]) -> Result<(), HostError>;\n    fn state_delete(&mut self, key: &[u8]) -> Result<(), HostError>;\n\n    // --- Logging + events -----------------------------------------\n\n    fn log(&mut self, level: HostLogLevel, message: &str);\n    fn emit_event(\n        &mut self,\n        topic: &str,\n        indexed: &[(String, Vec<u8>)],\n        data: &[u8],\n    ) -> Result<(), HostError>;\n\n    // --- Identity (read-only) -------------------------------------\n\n    /// Resolve the OAS identity document for `did`. `None` if not\n    /// registered. Consensus-deterministic implementations must read\n    /// from on-chain identity storage, not from off-chain resolvers.\n    fn resolve_identity(&self, did: &str) -> Result<Option<Vec<u8>>, HostError>;\n\n    /// Verify that `did` has a valid lineage chain back to a registered\n    /// human root. Returns `true` if the chain validates against\n    /// on-chain identity storage. Pure read-only.\n    fn verify_lineage(&self, did: &str) -> Result<bool, HostError>;\n\n    // --- Cross-zone messaging -------------------------------------\n\n    /// Queue a message for `target_zone`. Must NOT execute the target\n    /// inline \u2014 message delivery is a separate consensus step.\n    fn send_zone_message(\n        &mut self,\n        target_zone: &str,\n        target_module: Option<&str>,\n        payload: &[u8],\n    ) -> Result<(), HostError>;\n\n    // --- Compute marketplace (privileged) -------------------------\n\n    /// Dispatch a compute job into the marketplace. The backend must\n    /// verify that:\n    ///   - the contract has an active mandate / budget\n    ///   - the requested verification tier is supported by at least one\n    ///     registered provider\n    ///   - the call site holds the `dispatch_compute` capability\n    ///\n    /// Returns the assigned `job_id` on success.\n    fn dispatch_compute(&mut self, request: &ComputeDispatchRequest) -> Result<String, HostError>;\n\n    /// Charge the contract's mandate by `amount` micro-MINT. Used by\n    /// non-compute spend paths (e.g. paying a service contract).\n    fn record_mandate_spend(\n        &mut self,\n        mandate_id: &str,\n        amount: u64,\n        memo: Option<&str>,\n    ) -> Result<(), HostError>;\n\n    // --- Verified read paths --------------------------------------\n\n    /// Return the receipt record for `receipt_id`, or `None`. The\n    /// backend MUST only return receipts that are settled and within\n    /// the chain's challenge window (or already past it).\n    fn read_compute_receipt(&self, receipt_id: &str) -> Result<Option<ReceiptView>, HostError>;\n\n    /// Return a MACA quorum proof for a (epoch_id, work_id) tuple, or\n    /// `None`. The backend MUST only return finalised quorum proofs.\n    fn read_maca_quorum_proof(\n        &self,\n        epoch_id: u64,\n        work_id: &SigilHash,\n    ) -> Result<Option<MacaQuorumProofView>, HostError>;\n}",
              "docs": "Sigil chain backend exposed to a single contract invocation.\n\nEach call gets its own `HostBackend` reference; implementors are\nexpected to provide commit/rollback semantics around the backend\n(e.g. by writing into an overlay that is only flushed on success).",
              "attributes": "",
              "line": 67
            },
            {
              "name": "host::ReceiptView",
              "kind": "struct_item",
              "signature": "pub struct ReceiptView {\npub receipt_id: String,\npub job_id: String,\npub provider_did: String,\npub consumer_did: String,\npub model_id: String,\npub output_commitment: SigilHash,\npub input_commitment: SigilHash,\npub model_commitment: Option<SigilHash>,\npub verification_tier: String,\npub cost_micro_mint: u64,\npub settled: bool\n}",
              "docs": "Minimal view of a settled compute receipt exposed to contract code.\nAvoids dragging the full `ComputeReceipt` (with private fields like\nsignatures) into the WASM ABI.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]",
              "line": 184
            },
            {
              "name": "host::MacaQuorumProofView",
              "kind": "struct_item",
              "signature": "pub struct MacaQuorumProofView {\npub epoch_id: u64,\npub work_id: SigilHash,\npub agreeing: u32,\npub total_validators: u32,\npub finalised: bool\n}",
              "docs": "Minimal view of a MACA quorum proof exposed to contract code.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]",
              "line": 200
            },
            {
              "name": "host::ComputeDispatchRequest",
              "kind": "struct_item",
              "signature": "pub struct ComputeDispatchRequest {\npub model_id: String,\npub input_commitment: SigilHash,\npub code_commitment: Option<SigilHash>,\npub model_commitment: Option<SigilHash>,\npub max_cost_micro_mint: u64,\npub verification_tier: String,\npub mandate_id: String\n}",
              "docs": "Compute job request issued by a contract via `dispatch_compute`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]",
              "line": 210
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-anomaly",
      "version": "0.1.0",
      "source": "sigil/node/sigil-anomaly",
      "manifestSha256": "f2a636d49181dde0d195557fb7c3a46dada576f66d0f780749f9cf23daf9e2c8",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-anomaly",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-anomaly/src/lib.rs",
          "sha256": "f799d4d9e119252ba5b177bfad616224d7ff4f1e0f6a9de372fbac0fedad185c",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "flag",
              "kind": "module",
              "signature": "pub mod flag;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "loader",
              "kind": "module",
              "signature": "pub mod loader;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "rule",
              "kind": "module",
              "signature": "pub mod rule;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "rules",
              "kind": "module",
              "signature": "pub mod rules;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "ruleset",
              "kind": "module",
              "signature": "pub mod ruleset;",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "snapshot",
              "kind": "module",
              "signature": "pub mod snapshot;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use error::{AnomalyError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{AnomalyError, Result};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use flag::{Flag, FlagSeverity};",
              "kind": "use_declaration",
              "signature": "pub use flag::{Flag, FlagSeverity};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use loader::{build_rule, load_rule_set, RuleConfig, RuleConfigFile, RuleKind};",
              "kind": "use_declaration",
              "signature": "pub use loader::{build_rule, load_rule_set, RuleConfig, RuleConfigFile, RuleKind};",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pub use rule::{AnomalyRule, RuleId, RuleMetadata};",
              "kind": "use_declaration",
              "signature": "pub use rule::{AnomalyRule, RuleId, RuleMetadata};",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "pub use ruleset::{RuleSet, RuleSetProvenance};",
              "kind": "use_declaration",
              "signature": "pub use ruleset::{RuleSet, RuleSetProvenance};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use snapshot::SnapshotView;",
              "kind": "use_declaration",
              "signature": "pub use snapshot::SnapshotView;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "::SIGIL_ANOMALY_VERSION",
              "kind": "const_item",
              "signature": "pub const SIGIL_ANOMALY_VERSION: &str;",
              "docs": "Crate version identifier surfaced to the validator-agent runtime.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "::ANOMALY_SCHEMA_VERSION",
              "kind": "const_item",
              "signature": "pub const ANOMALY_SCHEMA_VERSION: u32;",
              "docs": "Schema version for serialized rule definitions and flag outputs.\n\nIncrement when wire-format-breaking changes are introduced. The\nvalidator-agent runtime checks this on startup and refuses to load\nrule sets emitted under a different schema version.",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-anomaly/src/error.rs",
          "sha256": "5abb31a2207ecb6278087daf7214b03c9b881307188e2d248c1a10676b0894ec",
          "attributes": "",
          "items": [
            {
              "name": "error::AnomalyError",
              "kind": "enum_item",
              "signature": "pub enum AnomalyError {\n    /// A rule attempted to read state outside the supplied snapshot view.\n    /// This is a programming error in the rule, not a runtime condition.\n    #[error(\"rule {rule_id} attempted live state read; rules must use the supplied snapshot view\")]\n    LiveStateRead { rule_id: String },\n\n    /// A rule's serialized definition does not match the declared content\n    /// address (BLAKE3 mismatch). Rejected at registration.\n    #[error(\"rule code blob hash mismatch: declared {declared}, computed {computed}\")]\n    CodeBlobHashMismatch { declared: String, computed: String },\n\n    /// A rule requested a schema version not supported by this crate build.\n    #[error(\"rule schema version {requested} not supported (this build supports {supported})\")]\n    SchemaVersionMismatch { requested: u32, supported: u32 },\n\n    /// A rule emitted output that failed deterministic-canonical-form\n    /// checks. Surfaced to the caller as a programming error.\n    #[error(\"rule {rule_id} emitted non-canonical output: {detail}\")]\n    NonCanonicalOutput { rule_id: String, detail: String },\n\n    /// A rule failed while evaluating a transaction. The `RuleSet` turns\n    /// this into a critical invariant flag rather than silently skipping it.\n    #[error(\"rule {rule_id} evaluation failed: {detail}\")]\n    RuleEvaluationFailed { rule_id: String, detail: String },\n\n    /// Two rules registered under the same id. Registration is rejected.\n    #[error(\"rule id {0} is already registered\")]\n    DuplicateRuleId(String),\n\n    /// A rule set was not loaded from a content-addressed source.\n    #[error(\"invalid rule-set provenance: {0}\")]\n    InvalidRuleSetProvenance(String),\n\n    /// Snapshot view did not contain a key the rule asserted as\n    /// required. Rules must declare required keys at registration.\n    #[error(\"rule {rule_id} required snapshot key {key} not present in view\")]\n    MissingSnapshotKey { rule_id: String, key: String },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error, Clone, PartialEq, Eq)]",
              "line": 10
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, AnomalyError>;",
              "docs": "",
              "attributes": "",
              "line": 49
            }
          ],
          "parseErrors": false
        },
        {
          "module": "flag",
          "source": "sigil/node/sigil-anomaly/src/flag.rs",
          "sha256": "866b863e701fb01cf1d21fdef7d12a7d1cafdebfc464d51b36edea3e1ed105a4",
          "attributes": "",
          "items": [
            {
              "name": "flag::FlagSeverity",
              "kind": "enum_item",
              "signature": "pub enum FlagSeverity {\n    /// Heuristic match. Common; high false-positive rate. Sampled lightly.\n    Info,\n    /// Notable deviation from typical traffic shape.\n    Low,\n    /// Strong heuristic signal; warrants L2 attention.\n    Medium,\n    /// Pattern matches a known attack class. L2 + L3 attention.\n    High,\n    /// Severe deviation. Direct L3 escalation; possible L4 incident.\n    Critical,\n}",
              "docs": "Severity classification for an anomaly flag.\n\nSeverity drives sampling weight in the validator-agent runtime: higher\nseverity flags are more likely to escalate to L2 small-model triage,\nand `Critical` flags are typically escalated to L3 immediately.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 18
            },
            {
              "name": "flag::Flag",
              "kind": "struct_item",
              "signature": "pub struct Flag {\n/// Content-addressed id of the rule that emitted this flag.\n\npub rule_id: RuleId,\n/// Transaction hash (BLAKE3-32) the rule evaluated against.\n\npub tx_hash: [u8; 32],\n/// Severity of the flag.\n\npub severity: FlagSeverity,\n/// Block height at which the snapshot view was taken. The rule did\n\n/// not read live state; this is the explicit version label.\n\npub snapshot_height: u64,\n/// Opaque rule-specific evidence payload. Canonical JSON.\n\npub evidence_json: String\n}",
              "docs": "A flag emitted by an anomaly rule.\n\nFlags carry the rule's content-addressed id, the transaction hash\nthat triggered the rule, severity, and an optional payload of\nrule-specific evidence. Payload format is opaque to the validator\nagent; downstream consumers (L2/L3) parse it according to the rule's\ndeclared schema.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "flag::Flag::bare",
              "kind": "function_item",
              "signature": "pub fn bare(\n        rule_id: RuleId,\n        tx_hash: [u8; 32],\n        severity: FlagSeverity,\n        snapshot_height: u64,\n    ) -> Self;",
              "docs": "Build a flag with empty evidence.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "flag::Flag::with_evidence",
              "kind": "function_item",
              "signature": "pub fn with_evidence<E: Serialize>(\n        rule_id: RuleId,\n        tx_hash: [u8; 32],\n        severity: FlagSeverity,\n        snapshot_height: u64,\n        evidence: &E,\n    ) -> std::result::Result<Self, serde_json::Error>;",
              "docs": "Build a flag with a JSON-serializable evidence payload.",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false
        },
        {
          "module": "loader",
          "source": "sigil/node/sigil-anomaly/src/loader.rs",
          "sha256": "648702d2c9987b43ed6ed0af5d6931432c1b95580f64d1cea31d04118bf215ab",
          "attributes": "",
          "items": [
            {
              "name": "loader::RuleConfigFile",
              "kind": "struct_item",
              "signature": "pub struct RuleConfigFile {\n#[serde(default, rename = \"rule\")]\npub rules: Vec<RuleConfig>\n}",
              "docs": "Top-level rule-config file structure.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, Default)]",
              "line": 68
            },
            {
              "name": "loader::RuleConfig",
              "kind": "struct_item",
              "signature": "pub struct RuleConfig {\npub kind: RuleKind,\n/// Stable operator-supplied seed mixed into the BLAKE3 id.\n\npub id_seed: String,\n/// Kind-specific parameters.\n\npub params: serde_json::Value\n}",
              "docs": "One rule declaration.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 75
            },
            {
              "name": "loader::RuleKind",
              "kind": "enum_item",
              "signature": "pub enum RuleKind {\n    GasSpike,\n    BalanceDrain,\n    SlashingBurst,\n    LineageDepth,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 85
            },
            {
              "name": "loader::RuleKind::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "loader::load_rule_set",
              "kind": "function_item",
              "signature": "pub fn load_rule_set(file: &RuleConfigFile) -> Result<RuleSet>;",
              "docs": "Load rules from a parsed [`RuleConfigFile`] and register them in a\nfresh [`RuleSet`]. The set is sealed before return.",
              "attributes": "",
              "line": 126
            },
            {
              "name": "loader::build_rule",
              "kind": "function_item",
              "signature": "pub fn build_rule(cfg: &RuleConfig) -> Result<Arc<dyn AnomalyRule>>;",
              "docs": "Build a single rule from its config entry.",
              "attributes": "",
              "line": 146
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rule",
          "source": "sigil/node/sigil-anomaly/src/rule.rs",
          "sha256": "102aea2a060c3ff2ceff53e276010f922d63c5b0d5a9a78121b028a4cb4b9286",
          "attributes": "",
          "items": [
            {
              "name": "rule::RuleId",
              "kind": "struct_item",
              "signature": "pub struct RuleId([u8; 32]);",
              "docs": "Content-addressed rule identifier.\n\nA rule's id is the BLAKE3 hash of its canonical serialized\ndefinition. Two rules with the same logic but different\nconfigurations have different ids. This makes rule sets auditable\nand reproducible.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "rule::RuleId::from_blake3",
              "kind": "function_item",
              "signature": "pub fn from_blake3(hash: [u8; 32]) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "rule::RuleId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "rule::RuleId::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "rule::RuleMetadata",
              "kind": "struct_item",
              "signature": "pub struct RuleMetadata {\n/// Human-readable name. Not consensus-binding.\n\npub name: String,\n/// Description of what the rule detects.\n\npub description: String,\n/// Schema version of the rule's evidence payload.\n\npub evidence_schema_version: u32,\n/// Snapshot view keys the rule requires. Used by `RuleSet::evaluate`\n\n/// to fail fast if the supplied view is missing required keys.\n\npub required_snapshot_keys: Vec<String>\n}",
              "docs": "Metadata supplied at rule registration.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 51
            },
            {
              "name": "rule::AnomalyRule",
              "kind": "trait_item",
              "signature": "pub trait AnomalyRule: Send + Sync {\n    /// Stable, content-addressed identifier.\n    fn id(&self) -> RuleId;\n\n    /// Metadata describing the rule.\n    fn metadata(&self) -> &RuleMetadata;\n\n    /// Evaluate the rule against a transaction and snapshot view.\n    ///\n    /// The transaction is referenced by its canonical wire form\n    /// (serialized bytes) plus its BLAKE3 hash. Rules that need to\n    /// inspect transaction structure should parse the bytes themselves\n    /// using `sigil-core`'s schema; the trait stays decoupled from\n    /// `sigil-core`'s evolving type surface.\n    fn evaluate(\n        &self,\n        tx_bytes: &[u8],\n        tx_hash: &[u8; 32],\n        view: &SnapshotView,\n    ) -> Result<Vec<Flag>>;\n}",
              "docs": "The core rule trait.\n\nImplementors are pure functions: given a transaction (read-only) and\na snapshot view (read-only, explicitly versioned), they return zero\nor more flags or an error.\n\n**Implementation contract:\n\n- `evaluate` must be deterministic: the same `(tx, view)` always\n  produces the same output.\n- `evaluate` must not perform I/O, read clocks, sample randomness,\n  or maintain hidden state across calls.\n- `evaluate` must complete in bounded time. The validator-agent\n  runtime budgets <1ms per rule per transaction; rules that exceed\n  this are sampling candidates for de-registration.\n- `id()` must return the BLAKE3 hash of the rule's canonical\n  serialized definition. Two registrations with the same id are\n  rejected.",
              "attributes": "",
              "line": 81
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rules",
          "source": "sigil/node/sigil-anomaly/src/rules/mod.rs",
          "sha256": "42b87cf0b3a6feb0a4ad11182da8cf086e395b8744b6ac626d344c95b5eebfcb",
          "attributes": "",
          "items": [
            {
              "name": "rules::balance_drain",
              "kind": "module",
              "signature": "pub mod balance_drain;",
              "docs": "Reference rules.\n\nThese rules are reference implementations and test fixtures, not\nproduction rule sets. Production rule sets are loaded from\ncontent-addressed registry entries via Agent 03's\n`RegisterContractCode` surface and supplied to the validator-agent\nruntime at epoch start.\n\nEach module here documents one rule pattern and exists to:\n\n1. Anchor the trait surface against a concrete implementation.\n2. Provide a known-good fixture for `RuleSet` integration tests.\n3. Demonstrate the snapshot-view-only state-access pattern.\n\nAdding a new reference rule does **not** ship that rule to\nvalidators; it only ships a Rust implementation that the runtime\ncould choose to instantiate. The on-chain registry is the source of\ntruth for which rules are actually live.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "rules::gas_spike",
              "kind": "module",
              "signature": "pub mod gas_spike;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "rules::lineage_depth",
              "kind": "module",
              "signature": "pub mod lineage_depth;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "rules::slashing_burst",
              "kind": "module",
              "signature": "pub mod slashing_burst;",
              "docs": "",
              "attributes": "",
              "line": 23
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rules::balance_drain",
          "source": "sigil/node/sigil-anomaly/src/rules/balance_drain.rs",
          "sha256": "fe7445902aa1faefce92514804fb08f69d3279cf39b140babceb7adf610417a8",
          "attributes": "",
          "items": [
            {
              "name": "rules::balance_drain::BalanceDrainRule",
              "kind": "struct_item",
              "signature": "pub struct BalanceDrainRule {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "rules::balance_drain::BalanceDrainRule::new",
              "kind": "function_item",
              "signature": "pub fn new(id: RuleId, min_drain_fraction_bps: u32) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 49
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rules::gas_spike",
          "source": "sigil/node/sigil-anomaly/src/rules/gas_spike.rs",
          "sha256": "ce8d1e37bee6ff1980d43454a35cd7f11ddda50994273ce0a74def412be640fd",
          "attributes": "",
          "items": [
            {
              "name": "rules::gas_spike::GasSpikeRule",
              "kind": "struct_item",
              "signature": "pub struct GasSpikeRule {\n\n}",
              "docs": "Gas-spike detector.\n\nConstruct with [`GasSpikeRule::new`]; supply the multiplier\nthreshold and a content-addressed `RuleId` derived from the rule's\ncanonical configuration.",
              "attributes": "",
              "line": 41
            },
            {
              "name": "rules::gas_spike::GasSpikeRule::new",
              "kind": "function_item",
              "signature": "pub fn new(id: RuleId, multiple: u64) -> Self;",
              "docs": "Build a new gas-spike rule.\n\nThe `id` should be the BLAKE3 hash of the rule's canonical\nserialized configuration: the `(rule_kind, multiple)` tuple\nencoded as canonical JSON. The validator-agent runtime computes\nthis id when loading the rule from the on-chain registry.",
              "attributes": "",
              "line": 53
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rules::lineage_depth",
          "source": "sigil/node/sigil-anomaly/src/rules/lineage_depth.rs",
          "sha256": "531757b98f867a8b55b0bf3641e432dee6d26c5fe0eb2001b2f66a631ab61a08",
          "attributes": "",
          "items": [
            {
              "name": "rules::lineage_depth::LineageDepthRule",
              "kind": "struct_item",
              "signature": "pub struct LineageDepthRule {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "rules::lineage_depth::LineageDepthRule::new",
              "kind": "function_item",
              "signature": "pub fn new(id: RuleId, medium_depth: u32, high_depth: u32) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 53
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rules::slashing_burst",
          "source": "sigil/node/sigil-anomaly/src/rules/slashing_burst.rs",
          "sha256": "b469863d24718dabea48531235559acff391c976f6095a8f5b25d41bd27824e7",
          "attributes": "",
          "items": [
            {
              "name": "rules::slashing_burst::SlashingBurstRule",
              "kind": "struct_item",
              "signature": "pub struct SlashingBurstRule {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "rules::slashing_burst::SlashingBurstRule::new",
              "kind": "function_item",
              "signature": "pub fn new(id: RuleId, min_slashing_events: u32) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 49
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ruleset",
          "source": "sigil/node/sigil-anomaly/src/ruleset.rs",
          "sha256": "fa019fddbfd44767453ee8fded3e8a51197384d4b6f2b8da601b7ed77f845ac4",
          "attributes": "",
          "items": [
            {
              "name": "ruleset::RuleSet",
              "kind": "struct_item",
              "signature": "pub struct RuleSet {\n\n}",
              "docs": "A registered set of anomaly rules.\n\nCheap to clone (internally `Arc`-wrapped); safe to share across\nthreads. New rules cannot be added once the set is sealed for an\nepoch \u2014 `register` returns an error after `seal()` has been called.",
              "attributes": "#[derive(Default, Clone)]",
              "line": 32
            },
            {
              "name": "ruleset::RuleSetProvenance",
              "kind": "struct_item",
              "signature": "pub struct RuleSetProvenance {\n\n}",
              "docs": "Content-addressed provenance for a sealed rule set.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 38
            },
            {
              "name": "ruleset::RuleSetProvenance::content_addressed",
              "kind": "function_item",
              "signature": "pub fn content_addressed(source: impl Into<String>, digest_hex: String) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "ruleset::RuleSetProvenance::digest_hex",
              "kind": "function_item",
              "signature": "pub fn digest_hex(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "ruleset::RuleSetProvenance::source",
              "kind": "function_item",
              "signature": "pub fn source(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "ruleset::RuleSet::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "ruleset::RuleSet::with_provenance",
              "kind": "function_item",
              "signature": "pub fn with_provenance(provenance: RuleSetProvenance) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "ruleset::RuleSet::register",
              "kind": "function_item",
              "signature": "pub fn register(&self, rule: Arc<dyn AnomalyRule>) -> Result<()>;",
              "docs": "Register a rule. Rejects duplicate ids and rejects registration\nafter `seal()`.",
              "attributes": "",
              "line": 85
            },
            {
              "name": "ruleset::RuleSet::seal",
              "kind": "function_item",
              "signature": "pub fn seal(&self);",
              "docs": "Seal the rule set. After sealing, no further rules can be added.\nThe validator-agent runtime should seal at epoch start.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "ruleset::RuleSet::set_provenance",
              "kind": "function_item",
              "signature": "pub fn set_provenance(&self, provenance: RuleSetProvenance) -> Result<()>;",
              "docs": "Attach content-addressed provenance before sealing.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "ruleset::RuleSet::provenance",
              "kind": "function_item",
              "signature": "pub fn provenance(&self) -> Option<RuleSetProvenance>;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "ruleset::RuleSet::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of registered rules.",
              "attributes": "",
              "line": 124
            },
            {
              "name": "ruleset::RuleSet::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "ruleset::RuleSet::evaluate",
              "kind": "function_item",
              "signature": "pub fn evaluate(&self, tx_bytes: &[u8], tx_hash: &[u8; 32], view: &SnapshotView) -> Vec<Flag>;",
              "docs": "Evaluate all registered rules against a transaction.\n\nRules execute in deterministic order (sorted by `RuleId`).\nA rule that returns an error is logged via `tracing` and converted\ninto a critical invariant flag; other rules continue. A poisoned or\nbuggy rule cannot silently suppress anomaly reporting.\n\nIf `view.contains_all(rule.metadata().required_snapshot_keys)`\nreturns false, the rule is skipped with a `MissingSnapshotKey`\nlog line.",
              "attributes": "",
              "line": 142
            }
          ],
          "parseErrors": false
        },
        {
          "module": "snapshot",
          "source": "sigil/node/sigil-anomaly/src/snapshot.rs",
          "sha256": "4a9c64ee1d2c1f8483a0b47a1c2322cc1e9017156148269ef18eb38f3c745be7",
          "attributes": "",
          "items": [
            {
              "name": "snapshot::SnapshotView",
              "kind": "struct_item",
              "signature": "pub struct SnapshotView {\n\n}",
              "docs": "Immutable snapshot of a subset of chain state.\n\nRules access state only through this struct. The underlying map is\nkeyed by application-defined string keys (e.g., `\"balance:did:...\"`,\n`\"epoch:current\"`). Values are opaque byte strings; rules parse them\naccording to the schema documented in their metadata.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "snapshot::SnapshotView::new",
              "kind": "function_item",
              "signature": "pub fn new(block_height: u64, block_hash: [u8; 32]) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "snapshot::SnapshotView::block_height",
              "kind": "function_item",
              "signature": "pub fn block_height(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "snapshot::SnapshotView::block_hash",
              "kind": "function_item",
              "signature": "pub fn block_hash(&self) -> &[u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "snapshot::SnapshotView::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&mut self, key: impl Into<String>, value: Vec<u8>);",
              "docs": "Insert a key-value pair into the view. Used by the validator-agent\nruntime when building a snapshot. Once the view is passed to a\nrule it is treated as immutable by the rule (the trait API takes\n`&SnapshotView`).",
              "attributes": "",
              "line": 52
            },
            {
              "name": "snapshot::SnapshotView::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, key: &str) -> Option<&[u8]>;",
              "docs": "Read a key from the view. Returns `None` if not present.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "snapshot::SnapshotView::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Number of entries in the view.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "snapshot::SnapshotView::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "snapshot::SnapshotView::contains_all",
              "kind": "function_item",
              "signature": "pub fn contains_all(&self, required: &[String]) -> bool;",
              "docs": "Check that all required keys are present. Used by `RuleSet`\nbefore invoking a rule whose metadata declares required keys.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "snapshot::SnapshotView::iter",
              "kind": "function_item",
              "signature": "pub fn iter(&self) -> impl Iterator<Item = (&String, &Vec<u8>)>;",
              "docs": "Iterate over entries in deterministic order.",
              "attributes": "",
              "line": 77
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-validator-agent",
      "version": "0.1.0",
      "source": "sigil/node/sigil-validator-agent",
      "manifestSha256": "9e91c479beb7cc57f8cd53a7418c6eda182994729637c37d6e7d3432d613b5bc",
      "features": {},
      "publish": true,
      "url": "/reference/rust/sigil-validator-agent",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/sigil-validator-agent/src/lib.rs",
          "sha256": "cca0a5fec8d03acb9f289f83404e67ae196cef39465b2ad28040f29a53a8b559",
          "attributes": "",
          "items": [
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "cycle_budget",
              "kind": "module",
              "signature": "pub mod cycle_budget;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "dispatcher",
              "kind": "module",
              "signature": "pub mod dispatcher;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "event",
              "kind": "module",
              "signature": "pub mod event;",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "rate_limit",
              "kind": "module",
              "signature": "pub mod rate_limit;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "runtime",
              "kind": "module",
              "signature": "pub mod runtime;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "snapshot_builder",
              "kind": "module",
              "signature": "pub mod snapshot_builder;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "pub use config::{Config, GovernanceConfig, L1Config, L2Config, L3Config, RpcConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{Config, GovernanceConfig, L1Config, L2Config, L3Config, RpcConfig};",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "pub use cycle_budget::{CycleBudget, CycleBudgetError};",
              "kind": "use_declaration",
              "signature": "pub use cycle_budget::{CycleBudget, CycleBudgetError};",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use dispatcher::{\n    L3Dispatch, L3DispatchKind, L3DispatchResult, L3Dispatcher, L3Outcome, MockL3Dispatcher,\n};",
              "kind": "use_declaration",
              "signature": "pub use dispatcher::{\n    L3Dispatch, L3DispatchKind, L3DispatchResult, L3Dispatcher, L3Outcome, MockL3Dispatcher,\n};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use error::{Result, ValidatorAgentError};",
              "kind": "use_declaration",
              "signature": "pub use error::{Result, ValidatorAgentError};",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "pub use event::{ChainEvent, EventStream, JsonLineEventStream, MockEventStream, TransactionEvent};",
              "kind": "use_declaration",
              "signature": "pub use event::{ChainEvent, EventStream, JsonLineEventStream, MockEventStream, TransactionEvent};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use rate_limit::{RateLimiter, RateLimiterError};",
              "kind": "use_declaration",
              "signature": "pub use rate_limit::{RateLimiter, RateLimiterError};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use runtime::{ValidatorAgent, ValidatorAgentHandle};",
              "kind": "use_declaration",
              "signature": "pub use runtime::{ValidatorAgent, ValidatorAgentHandle};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use snapshot_builder::{\n    JsonFileSnapshotBuilder, MockSnapshotBuilder, SnapshotBuilder, SnapshotFileSchema,\n};",
              "kind": "use_declaration",
              "signature": "pub use snapshot_builder::{\n    JsonFileSnapshotBuilder, MockSnapshotBuilder, SnapshotBuilder, SnapshotFileSchema,\n};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "::SIGIL_VALIDATOR_AGENT_VERSION",
              "kind": "const_item",
              "signature": "pub const SIGIL_VALIDATOR_AGENT_VERSION: &str;",
              "docs": "Crate version surfaced to operators.",
              "attributes": "",
              "line": 62
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/node/sigil-validator-agent/src/config.rs",
          "sha256": "060dce9e40b08c2b077dee1422ab591095d89fba4f4c918bf6e1d1a81a419101",
          "attributes": "",
          "items": [
            {
              "name": "config::Config",
              "kind": "struct_item",
              "signature": "pub struct Config {\n/// DID this validator-agent identifies as. Used to sign outbound\n\n/// `GovernancePropose` transactions and to authenticate WebSocket\n\n/// subscriptions to the RPC node.\n\npub agent_did: String,\n/// Path or HSM-handle URL for the agent's signing key. In\n\n/// production this is an HSM URL, never a raw file in cleartext.\n\npub key_path: String,\npub rpc: RpcConfig,\npub l1: L1Config,\npub l2: L2Config,\npub l3: L3Config,\npub governance: GovernanceConfig\n}",
              "docs": "Top-level configuration. Loaded from TOML in production deployments.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "config::RpcConfig",
              "kind": "struct_item",
              "signature": "pub struct RpcConfig {\npub ws_url: String,\npub http_url: String,\npub reconnect_backoff_initial_ms: u64,\npub reconnect_backoff_max_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "config::L1Config",
              "kind": "struct_item",
              "signature": "pub struct L1Config {\n/// Filesystem path to a local cache of approved rule code blobs,\n\n/// refreshed at epoch boundary by querying the on-chain registry.\n\npub rule_cache_path: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 47
            },
            {
              "name": "config::L2Config",
              "kind": "struct_item",
              "signature": "pub struct L2Config {\n/// Sample rate for L2 triage in basis points. 100 = 1%.\n\npub base_sample_bps: u32,\n/// Severity-weighted boosts. 10000 = 100%.\n\npub sample_boost_medium_bps: u32,\npub sample_boost_high_bps: u32,\npub sample_boost_critical_bps: u32,\n/// Local distilled-model endpoint.\n\npub endpoint: String,\npub model: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "config::L3Config",
              "kind": "struct_item",
              "signature": "pub struct L3Config {\n/// Per-epoch cycle ceiling. Exceeding this hard-stops L3 dispatch\n\n/// for the rest of the epoch.\n\npub cycles_budget_per_epoch: u64,\n/// Default capability tag for routing.\n\npub default_capability_tag: String,\n/// Maximum dispatches per minute regardless of cycle budget.\n\npub rate_limit_per_minute: u32\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 88
            },
            {
              "name": "config::GovernanceConfig",
              "kind": "struct_item",
              "signature": "pub struct GovernanceConfig {\n/// If true, the runtime queues L3-recommended governance actions for\n\n/// an external signer/submission bridge. Default false.\n\npub auto_submit_proposals: bool,\n/// Action allowlist when `auto_submit_proposals` is true.\n\npub allowed_actions: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 109
            },
            {
              "name": "config::Config::safe_defaults_for_test",
              "kind": "function_item",
              "signature": "pub fn safe_defaults_for_test(agent_did: impl Into<String>) -> Self;",
              "docs": "Build a config with safe defaults for testing. Production deployments\nMUST load from operator-managed TOML, not this default.",
              "attributes": "",
              "line": 129
            }
          ],
          "parseErrors": false
        },
        {
          "module": "cycle_budget",
          "source": "sigil/node/sigil-validator-agent/src/cycle_budget.rs",
          "sha256": "0bb39f436c288d0c2479dfe42222e839e6349be8fb102f6b2d288dcc3652704c",
          "attributes": "",
          "items": [
            {
              "name": "cycle_budget::CycleBudgetError",
              "kind": "enum_item",
              "signature": "pub enum CycleBudgetError {\n    #[error(\"epoch {epoch} budget exhausted: requested {requested}, remaining {remaining}\")]\n    Exhausted {\n        epoch: u64,\n        requested: u64,\n        remaining: u64,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 13
            },
            {
              "name": "cycle_budget::CycleBudget",
              "kind": "struct_item",
              "signature": "pub struct CycleBudget {\n\n}",
              "docs": "Per-epoch cycle budget tracker.\n\nThe runtime calls [`Self::reserve`] before dispatching an L3 call.\nOn epoch rollover, [`Self::roll_over_to_epoch`] resets the remaining\nbalance to the configured budget. The tracker is `Send + Sync` and\nsafe to share across the runtime's tasks via `Arc`.",
              "attributes": "#[derive(Debug)]",
              "line": 29
            },
            {
              "name": "cycle_budget::CycleBudget::new",
              "kind": "function_item",
              "signature": "pub fn new(budget_per_epoch: u64, starting_epoch: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "cycle_budget::CycleBudget::budget_per_epoch",
              "kind": "function_item",
              "signature": "pub fn budget_per_epoch(&self) -> u64;",
              "docs": "Configured per-epoch budget.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "cycle_budget::CycleBudget::current_epoch",
              "kind": "function_item",
              "signature": "pub fn current_epoch(&self) -> u64;",
              "docs": "Current epoch.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "cycle_budget::CycleBudget::remaining",
              "kind": "function_item",
              "signature": "pub fn remaining(&self) -> u64;",
              "docs": "Remaining cycles available in the current epoch.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "cycle_budget::CycleBudget::consumed_this_epoch",
              "kind": "function_item",
              "signature": "pub fn consumed_this_epoch(&self) -> u64;",
              "docs": "Cycles consumed so far in the current epoch.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "cycle_budget::CycleBudget::reserve",
              "kind": "function_item",
              "signature": "pub fn reserve(&self, cycles: u64) -> Result<(), CycleBudgetError>;",
              "docs": "Try to reserve `cycles` from the current epoch's budget.\n\nReturns Ok if reserved, Err if the reservation would exceed the\nremaining balance. The reservation is debited atomically.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "cycle_budget::CycleBudget::roll_over_to_epoch",
              "kind": "function_item",
              "signature": "pub fn roll_over_to_epoch(&self, new_epoch: u64) -> Result<(), &'static str>;",
              "docs": "Roll over to a new epoch. Resets the remaining balance to the\nconfigured budget. No-op if `new_epoch == current_epoch`.\nRejects backward rollover (returns Err) \u2014 epochs only advance.",
              "attributes": "",
              "line": 94
            }
          ],
          "parseErrors": false
        },
        {
          "module": "dispatcher",
          "source": "sigil/node/sigil-validator-agent/src/dispatcher.rs",
          "sha256": "6f640f2de705b02d8ae52ee447cfb72b4d8f4cafde02efdf6e762467ccf4b1eb",
          "attributes": "",
          "items": [
            {
              "name": "dispatcher::L3DispatchKind",
              "kind": "enum_item",
              "signature": "pub enum L3DispatchKind {\n    /// Investigate a flagged transaction.\n    AnomalyInvestigation,\n    /// Reason about a governance proposal.\n    GovernanceReasoning,\n    /// Code review for an agent-led pipeline (D13).\n    CodeReview,\n}",
              "docs": "What an L3 dispatch is asking a provider to do.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 18
            },
            {
              "name": "dispatcher::L3Dispatch",
              "kind": "struct_item",
              "signature": "pub struct L3Dispatch {\npub kind: L3DispatchKind,\n/// Capability tag the provider must serve.\n\npub capability_tag: String,\n/// Hash of the input the model will process.\n\npub input_hash: [u8; 32],\n/// Estimated cycle cost reserved up front.\n\npub estimated_cycles: u64,\n/// Identifier the runtime uses to correlate request and response.\n\npub request_id: [u8; 32]\n}",
              "docs": "One L3 dispatch request.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "dispatcher::L3DispatchResult",
              "kind": "struct_item",
              "signature": "pub struct L3DispatchResult {\npub request_id: [u8; 32],\n/// Hash of the model that produced the output. Bound into the\n\n/// TEE attestation for offline verification.\n\npub model_hash: [u8; 32],\n/// Hash of the canonical output bytes.\n\npub output_hash: [u8; 32],\n/// Provider DID that produced the output.\n\npub provider_did: String,\n/// Recommendation surfaced to downstream consumers.\n\npub recommendation: L3Outcome\n}",
              "docs": "What an L3 provider returns.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 43
            },
            {
              "name": "dispatcher::L3Outcome",
              "kind": "enum_item",
              "signature": "pub enum L3Outcome {\n    /// No action recommended.\n    NoAction,\n    /// Recommend deprecation of an inference model.\n    DeprecateInferenceModel { model_hash: [u8; 32] },\n    /// Recommend a governance parameter change.\n    ParameterUpdate {\n        parameter_key: String,\n        proposed_value: String,\n    },\n    /// Free-form findings to log; no automated action.\n    LogFindings { rationale: String },\n}",
              "docs": "Recommendation kinds. The runtime maps these to concrete actions\n(governance proposals, model deprecation, etc.) at consumption time.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"action\", rename_all = \"PascalCase\")]",
              "line": 60
            },
            {
              "name": "dispatcher::L3Outcome::action_kind",
              "kind": "function_item",
              "signature": "pub fn action_kind(&self) -> &'static str;",
              "docs": "Stable identifier for allowlist matching.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "dispatcher::L3Dispatcher",
              "kind": "trait_item",
              "signature": "pub trait L3Dispatcher: Send + Sync {\n    async fn dispatch(&self, request: L3Dispatch) -> Result<L3DispatchResult>;\n}",
              "docs": "Dispatcher abstraction. Production uses a real `dispatch_compute`\nclient; tests use [`MockL3Dispatcher`].",
              "attributes": "#[async_trait]",
              "line": 89
            },
            {
              "name": "dispatcher::MockL3Dispatcher",
              "kind": "struct_item",
              "signature": "pub struct MockL3Dispatcher {\n\n}",
              "docs": "In-memory dispatcher for tests. Pre-populate responses keyed by\n`request_id`; calls to `dispatch` return the matching response or\nthe default if no match is found.",
              "attributes": "",
              "line": 96
            },
            {
              "name": "dispatcher::MockL3Dispatcher::new",
              "kind": "function_item",
              "signature": "pub fn new(default: L3DispatchResult) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "dispatcher::MockL3Dispatcher::set_response",
              "kind": "function_item",
              "signature": "pub fn set_response(&self, request_id: [u8; 32], result: L3DispatchResult);",
              "docs": "",
              "attributes": "",
              "line": 111
            },
            {
              "name": "dispatcher::MockL3Dispatcher::call_count",
              "kind": "function_item",
              "signature": "pub fn call_count(&self) -> u32;",
              "docs": "",
              "attributes": "",
              "line": 115
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/sigil-validator-agent/src/error.rs",
          "sha256": "030b49d9acdd7bcbe640de47d4a9ae24346304f31d6bd4e98ab5d92dc815ccb6",
          "attributes": "",
          "items": [
            {
              "name": "error::ValidatorAgentError",
              "kind": "enum_item",
              "signature": "pub enum ValidatorAgentError {\n    #[error(\"config error: {0}\")]\n    Config(String),\n\n    #[error(\"cycle budget exhausted for epoch {epoch} (budget {budget}, requested {requested})\")]\n    CycleBudgetExhausted {\n        epoch: u64,\n        budget: u64,\n        requested: u64,\n    },\n\n    #[error(\"rate limit exceeded: {dispatched} dispatches in last minute (cap {cap})\")]\n    RateLimitExceeded { dispatched: u32, cap: u32 },\n\n    #[error(\"L3 action {action_kind} not on auto-submit allowlist {allowed:?}\")]\n    L3ActionNotAllowed {\n        action_kind: String,\n        allowed: Vec<String>,\n    },\n\n    #[error(\"L3 dispatch failed: {0}\")]\n    L3DispatchFailed(String),\n\n    #[error(\"event stream closed unexpectedly\")]\n    EventStreamClosed,\n\n    #[error(\"anomaly evaluation error: {0}\")]\n    AnomalyEvaluation(#[from] sigil_anomaly::AnomalyError),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 6
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, ValidatorAgentError>;",
              "docs": "",
              "attributes": "",
              "line": 36
            }
          ],
          "parseErrors": false
        },
        {
          "module": "event",
          "source": "sigil/node/sigil-validator-agent/src/event.rs",
          "sha256": "6d3383e3ffde44daf7eb00397a98c99fca2fa4ed350deeca4d8b7abb5d2f8c93",
          "attributes": "",
          "items": [
            {
              "name": "event::TransactionEvent",
              "kind": "struct_item",
              "signature": "pub struct TransactionEvent {\n/// BLAKE3 hash of the canonical transaction bytes.\n\npub tx_hash: [u8; 32],\n/// Canonical transaction bytes (opaque to this crate).\n\npub tx_bytes: Vec<u8>,\n/// Block height at which the transaction was included.\n\npub block_height: u64,\n/// Block hash at which the transaction was included.\n\npub block_hash: [u8; 32],\n/// Epoch at which the transaction was included.\n\npub epoch: u64\n}",
              "docs": "Opaque transaction event from the chain.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 23
            },
            {
              "name": "event::ChainEvent",
              "kind": "enum_item",
              "signature": "pub enum ChainEvent {\n    /// A new transaction was included in a block.\n    Transaction(TransactionEvent),\n    /// A new epoch began. The runtime uses this to roll the cycle\n    /// budget over.\n    EpochAdvance { new_epoch: u64 },\n    /// The connection to the RPC node was reset; the runtime should\n    /// treat any in-flight state as potentially stale.\n    Reconnect,\n}",
              "docs": "Tagged enum of chain events the runtime consumes.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]\n#[serde(tag = \"kind\", rename_all = \"snake_case\")]",
              "line": 39
            },
            {
              "name": "event::EventStream",
              "kind": "trait_item",
              "signature": "pub trait EventStream: Send + Sync {\n    async fn next_event(&self) -> Result<ChainEvent>;\n}",
              "docs": "Trait abstracting the source of chain events. Production uses a\nWebSocket subscriber; tests use [`MockEventStream`].",
              "attributes": "#[async_trait]",
              "line": 53
            },
            {
              "name": "event::MockEventStream",
              "kind": "struct_item",
              "signature": "pub struct MockEventStream {\n\n}",
              "docs": "In-memory event stream for tests. Pre-populate via [`Self::push`].",
              "attributes": "#[derive(Default)]",
              "line": 59
            },
            {
              "name": "event::MockEventStream::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "event::MockEventStream::push",
              "kind": "function_item",
              "signature": "pub fn push(&self, event: ChainEvent);",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "event::MockEventStream::push_all",
              "kind": "function_item",
              "signature": "pub fn push_all(&self, events: impl IntoIterator<Item = ChainEvent>);",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "event::MockEventStream::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "event::MockEventStream::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "event::JsonLineEventStream",
              "kind": "struct_item",
              "signature": "pub struct JsonLineEventStream<R: AsyncRead + Unpin + Send> {\n\n}",
              "docs": "Newline-delimited JSON event stream over any `AsyncRead`.\n\nEach line of the underlying source is expected to deserialize to a\n[`ChainEvent`] via serde_json. The stream returns\n[`ValidatorAgentError::EventStreamClosed`] when the source reaches\nEOF. Malformed lines yield [`ValidatorAgentError::Config`] errors\n(since they indicate a bug in the upstream producer rather than a\nrecoverable runtime condition).\n\n## Why this exists\n\nDecouples the validator-agent from the specific RPC client choice.\nOperators wire any external fetcher (tokio-tungstenite WebSocket\nclient, reqwest HTTP poller, sigil-rpc subscriber, ssh tunnel, etc.)\nto emit JSON-lines on stdout, then pipe into the validator-agent.\nThis is a Unix-pipeline composition pattern: each component is\ntestable in isolation and operators choose how to compose them.\n\n## Production wiring\n\nOnce Agent 05's RPC subscription surface is finalized, a sibling\ncrate (`sigil-validator-agent-rpc-bridge` or similar) will provide\na `tokio` task that subscribes to the chain via WebSocket and\nwrites `ChainEvent` JSON-lines to a pipe. The validator-agent reads\nfrom the pipe via this `JsonLineEventStream`.",
              "attributes": "",
              "line": 123
            },
            {
              "name": "event::JsonLineEventStream<R>::new",
              "kind": "function_item",
              "signature": "pub fn new(reader: R) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "event::JsonLineEventStream<R>::shared",
              "kind": "function_item",
              "signature": "pub fn shared(reader: R) -> Arc<Self>;",
              "docs": "Wrap an `Arc` for shared ownership across tasks.",
              "attributes": "",
              "line": 135
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rate_limit",
          "source": "sigil/node/sigil-validator-agent/src/rate_limit.rs",
          "sha256": "2bf7ab65e23c6c53539faec6bed0c4c9132027824cf36c4a9f2a9a63f6880983",
          "attributes": "",
          "items": [
            {
              "name": "rate_limit::RateLimiterError",
              "kind": "enum_item",
              "signature": "pub enum RateLimiterError {\n    #[error(\"rate limit exceeded: {dispatched} in last 60s, cap {cap}\")]\n    Exceeded { dispatched: u32, cap: u32 },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 16
            },
            {
              "name": "rate_limit::Clock",
              "kind": "trait_item",
              "signature": "pub trait Clock: Send + Sync {\n    fn now_unix_ms(&self) -> u64;\n}",
              "docs": "Pluggable clock surface so tests can advance time deterministically.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "rate_limit::SystemClock",
              "kind": "struct_item",
              "signature": "pub struct SystemClock;",
              "docs": "Real wall-clock implementation.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 28
            },
            {
              "name": "rate_limit::ManualClock",
              "kind": "struct_item",
              "signature": "pub struct ManualClock {\n\n}",
              "docs": "Test clock with manually-advanced time.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 42
            },
            {
              "name": "rate_limit::ManualClock::new",
              "kind": "function_item",
              "signature": "pub fn new(start_ms: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "rate_limit::ManualClock::advance_ms",
              "kind": "function_item",
              "signature": "pub fn advance_ms(&self, delta_ms: u64);",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "rate_limit::RateLimiter",
              "kind": "struct_item",
              "signature": "pub struct RateLimiter<C: Clock = SystemClock> {\n\n}",
              "docs": "Sliding-window per-minute rate limiter.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "rate_limit::RateLimiter<SystemClock>::new",
              "kind": "function_item",
              "signature": "pub fn new(cap_per_minute: u32) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "rate_limit::RateLimiter<C>::with_clock",
              "kind": "function_item",
              "signature": "pub fn with_clock(cap_per_minute: u32, clock: C) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "rate_limit::RateLimiter<C>::check_and_record",
              "kind": "function_item",
              "signature": "pub fn check_and_record(&self) -> Result<(), RateLimiterError>;",
              "docs": "Record a dispatch and return Ok if within cap, Err if not. The\ndispatch is recorded only on Ok; rejected dispatches do NOT\ncount toward the limit.",
              "attributes": "",
              "line": 109
            },
            {
              "name": "rate_limit::RateLimiter<C>::dispatched_in_window",
              "kind": "function_item",
              "signature": "pub fn dispatched_in_window(&self) -> u32;",
              "docs": "Number of dispatches in the last 60 seconds (approximate; reflects\nthe queue at the most recent prune).",
              "attributes": "",
              "line": 125
            },
            {
              "name": "rate_limit::RateLimiter<C>::cap",
              "kind": "function_item",
              "signature": "pub fn cap(&self) -> u32;",
              "docs": "",
              "attributes": "",
              "line": 129
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime",
          "source": "sigil/node/sigil-validator-agent/src/runtime.rs",
          "sha256": "29fb095ee09e7ed5e5c8308dbe083830753e9dd63ec7fd3eda240263bca63fca",
          "attributes": "",
          "items": [
            {
              "name": "runtime::ValidatorAgent",
              "kind": "struct_item",
              "signature": "pub struct ValidatorAgent {\n\n}",
              "docs": "The validator-agent runtime. Holds all the pieces; the consumer\ndrives evaluation by calling [`ValidatorAgent::process_event`] in a\nloop.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "runtime::ValidatorAgentHandle",
              "kind": "struct_item",
              "signature": "pub struct ValidatorAgentHandle {\npub flags: Vec<Flag>,\npub l3_dispatched: u32,\npub l3_skipped_budget: u32,\npub l3_skipped_rate: u32,\npub l3_outcomes: Vec<L3Outcome>,\npub governance_proposals_queued: Vec<L3Outcome>,\npub governance_proposals_blocked: Vec<L3Outcome>\n}",
              "docs": "Handle returned from processing a single chain event. Consumer\ninspects to decide whether to surface metrics, submit governance\nproposals, etc.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 41
            },
            {
              "name": "runtime::ValidatorAgent::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        config: Config,\n        rule_set: RuleSet,\n        starting_epoch: u64,\n        dispatcher: Arc<dyn L3Dispatcher>,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "runtime::ValidatorAgent::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &Config;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "runtime::ValidatorAgent::cycle_budget",
              "kind": "function_item",
              "signature": "pub fn cycle_budget(&self) -> &CycleBudget;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "runtime::ValidatorAgent::process_event",
              "kind": "function_item",
              "signature": "pub async fn process_event(\n        &self,\n        event: &ChainEvent,\n        view: &SnapshotView,\n    ) -> Result<ValidatorAgentHandle>;",
              "docs": "Process a single chain event. Returns a handle describing what\nhappened: flags emitted, L3 dispatches issued, governance\nproposals queued or blocked.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "runtime::run_with_stream",
              "kind": "function_item",
              "signature": "pub async fn run_with_stream<S, F>(\n    agent: &ValidatorAgent,\n    stream: &S,\n    mut snapshot_for: F,\n) -> Result<()>\nwhere\n    S: EventStream,\n    F: FnMut(&ChainEvent) -> SnapshotView,;",
              "docs": "Drive the runtime against an event stream until it yields\n`EventStreamClosed` or another error. Each event is processed\nagainst a freshly-supplied `SnapshotView` (built externally).",
              "attributes": "",
              "line": 212
            }
          ],
          "parseErrors": false
        },
        {
          "module": "snapshot_builder",
          "source": "sigil/node/sigil-validator-agent/src/snapshot_builder.rs",
          "sha256": "ae94b7b30c2d1e310eddc9345e923dea36ceeb92a953457e3ceed7d09c047d13",
          "attributes": "",
          "items": [
            {
              "name": "snapshot_builder::SnapshotBuilder",
              "kind": "trait_item",
              "signature": "pub trait SnapshotBuilder: Send + Sync {\n    async fn build(&self, event: &ChainEvent, rule_set: &RuleSet) -> Result<SnapshotView>;\n}",
              "docs": "Build a [`SnapshotView`] for the given event.\n\nThe snapshot's `block_height` should reflect the block in which\nthe event occurred. The set of keys included must be a superset\nof every required key declared by the rules in `rule_set`'s\nmetadata; the runtime relies on this to avoid running rules\nagainst incomplete views.",
              "attributes": "#[async_trait]",
              "line": 50
            },
            {
              "name": "snapshot_builder::MockSnapshotBuilder",
              "kind": "struct_item",
              "signature": "pub struct MockSnapshotBuilder {\n\n}",
              "docs": "Mock builder for tests. Holds a pre-populated snapshot in memory\nand returns it (with the event's block height applied) for every\ncall. The snapshot itself is supplied at construction; the same\nsnapshot is returned regardless of `rule_set` content.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "snapshot_builder::MockSnapshotBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new(base: SnapshotView) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "snapshot_builder::MockSnapshotBuilder::replace",
              "kind": "function_item",
              "signature": "pub fn replace(&self, view: SnapshotView);",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "snapshot_builder::SnapshotFileSchema",
              "kind": "struct_item",
              "signature": "pub struct SnapshotFileSchema {\npub block_height: u64,\n/// Hex-encoded BLAKE3-32 block hash. Must be exactly 64 hex chars.\n\npub block_hash_hex: String,\n/// Map of snapshot key \u2192 hex-encoded byte value.\n\n#[serde(default)]\npub entries: std::collections::BTreeMap<String, String>\n}",
              "docs": "On-disk JSON description of a snapshot view, parsed by\n[`JsonFileSnapshotBuilder`].\n\n## File format\n\n```json\n{\n  \"block_height\": 100,\n  \"block_hash_hex\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n  \"entries\": {\n    \"metric:avg_gas_per_block:last_64\": \"e803000000000000\",\n    \"lineage_depth:abcd...\": \"05000000\"\n  }\n}\n```\n\n`entries` values are hex-encoded bytes \u2014 operators write raw byte\nstrings in hex because the on-chain format for many keys is\nlittle-endian fixed-width integers (e.g., `e803000000000000` is\n`1000u64 LE`). The hex-encoded format is operator-readable and\navoids forcing operators to write base64.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 118
            },
            {
              "name": "snapshot_builder::SnapshotFileSchema::into_view",
              "kind": "function_item",
              "signature": "pub fn into_view(self) -> std::result::Result<SnapshotView, String>;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "snapshot_builder::JsonFileSnapshotBuilder",
              "kind": "struct_item",
              "signature": "pub struct JsonFileSnapshotBuilder {\n\n}",
              "docs": "Snapshot builder that loads a single snapshot view from a JSON\nfile. Useful for offline analysis (the `simulate` subcommand) and\nfor reproducible test runs. The same view is returned for every\nevent, with the event's block_height applied to Transaction events.",
              "attributes": "",
              "line": 171
            },
            {
              "name": "snapshot_builder::JsonFileSnapshotBuilder::load_from",
              "kind": "function_item",
              "signature": "pub fn load_from(path: impl AsRef<Path>) -> std::result::Result<Self, String>;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "snapshot_builder::JsonFileSnapshotBuilder::source",
              "kind": "function_item",
              "signature": "pub fn source(&self) -> &Path;",
              "docs": "",
              "attributes": "",
              "line": 190
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-ft-1",
      "version": "1.0.0",
      "source": "sigil/node/../contracts/reference/sigil-ft-1",
      "manifestSha256": "8c9dedbf3378964dd3a55cfa93c1e8b6a498a02988463cef223c0665598cdc41",
      "features": {},
      "publish": false,
      "url": "/reference/rust/sigil-ft-1",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../contracts/reference/sigil-ft-1/src/lib.rs",
          "sha256": "d7bce61f4eb4c1757b7300daf2a8d84bb682ced007437b60c4549c879eb60094",
          "attributes": "",
          "items": [
            {
              "name": "::anvil_alloc",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_alloc(len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 22
            },
            {
              "name": "::anvil_init",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_init(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 34
            },
            {
              "name": "::anvil_call",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_call(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 43
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-multisig-1",
      "version": "1.0.0",
      "source": "sigil/node/../contracts/reference/sigil-multisig-1",
      "manifestSha256": "401a9f3963c721200b562baa5ef5d6fe3ee60d9e953c90809a2dbf1bc257994e",
      "features": {},
      "publish": false,
      "url": "/reference/rust/sigil-multisig-1",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../contracts/reference/sigil-multisig-1/src/lib.rs",
          "sha256": "ea48e498624055ee96c8e569cfcd3df032f8d5aa4ca755b5fcf09886ca74671a",
          "attributes": "",
          "items": [
            {
              "name": "::anvil_alloc",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_alloc(len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 23
            },
            {
              "name": "::anvil_init",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_init(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 35
            },
            {
              "name": "::anvil_call",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_call(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 71
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-vesting-1",
      "version": "1.0.0",
      "source": "sigil/node/../contracts/reference/sigil-vesting-1",
      "manifestSha256": "7d564b26954ba52c1b1835bd8723e243bfda0b1150a06d90b860bd239afccf9c",
      "features": {},
      "publish": false,
      "url": "/reference/rust/sigil-vesting-1",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../contracts/reference/sigil-vesting-1/src/lib.rs",
          "sha256": "ff5a8b6ac9108184aae47ad575fc1dd665de0d3f5032df9eda3907385430fe5f",
          "attributes": "",
          "items": [
            {
              "name": "::anvil_alloc",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_alloc(len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 24
            },
            {
              "name": "::anvil_init",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_init(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 36
            },
            {
              "name": "::anvil_call",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_call(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 67
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-system-kernel-1",
      "version": "1.0.0",
      "source": "sigil/node/../contracts/system/sigil-system-kernel-1",
      "manifestSha256": "5bb49873f327fb0ddcf4ceae11c748fbf0f00ab512e94733f5b9f9cc580f1220",
      "features": {},
      "publish": false,
      "url": "/reference/rust/sigil-system-kernel-1",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../contracts/system/sigil-system-kernel-1/src/lib.rs",
          "sha256": "7e1ce3ba4ed688b51996e5d48845611d54ecc029e91a36c806a970c6a0d02527",
          "attributes": "",
          "items": [
            {
              "name": "::anvil_alloc",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_alloc(len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 22
            },
            {
              "name": "::anvil_init",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_init(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 34
            },
            {
              "name": "::anvil_call",
              "kind": "function_item",
              "signature": "pub extern \"C\" fn anvil_call(ptr: i32, len: i32) -> i32;",
              "docs": "",
              "attributes": "#[no_mangle]",
              "line": 43
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "sigil-labor-api",
      "version": "0.1.0",
      "source": "sigil/node/../labor-api",
      "manifestSha256": "ea70818f768166b2cf8c61bff3144242116de05f015e9b2de7e7c7c01da74a9a",
      "features": {
        "default": [
          "postgres"
        ],
        "postgres": [
          "dep:sqlx"
        ],
        "memory-store": []
      },
      "publish": true,
      "url": "/reference/rust/sigil-labor-api",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../labor-api/src/lib.rs",
          "sha256": "a5dea71cf7d4a2b49665449db19a3bb531f383dd8b1c0811a7d4fecdc4707252",
          "attributes": "",
          "items": [
            {
              "name": "auth",
              "kind": "module",
              "signature": "pub mod auth;",
              "docs": "Library interface for sigil-labor-api.\n\nExposes the public modules so that integration tests in `tests/` can\naccess the store trait, types, and error types directly.",
              "attributes": "",
              "line": 6
            },
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "handlers",
              "kind": "module",
              "signature": "pub mod handlers;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "idempotency",
              "kind": "module",
              "signature": "pub mod idempotency;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "store",
              "kind": "module",
              "signature": "pub mod store;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "types",
              "kind": "module",
              "signature": "pub mod types;",
              "docs": "",
              "attributes": "",
              "line": 12
            }
          ],
          "parseErrors": false
        },
        {
          "module": "auth",
          "source": "sigil/node/../labor-api/src/auth.rs",
          "sha256": "394b621dd57390f77fdc00e59c8c06657a89c1344ffa137e206c9c3b96b6504c",
          "attributes": "",
          "items": [
            {
              "name": "auth::MAX_CLOCK_SKEW_SECS",
              "kind": "const_item",
              "signature": "pub const MAX_CLOCK_SKEW_SECS: i64;",
              "docs": "Maximum allowed clock skew between client and server.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "auth::AuthDid",
              "kind": "struct_item",
              "signature": "pub struct AuthDid {\npub did: String,\npub public_key: [u8; 32]\n}",
              "docs": "The authenticated principal, attached as a request extension after the\nauth middleware runs. Handlers extract it via `axum::Extension<AuthDid>`.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 73
            },
            {
              "name": "auth::AuthDid::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Convenience: returns the DID as a `&str`.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "auth::AuthError",
              "kind": "enum_item",
              "signature": "pub enum AuthError {\n    MissingHeader(&'static str),\n    BadHeader { name: &'static str, reason: String },\n    BadTimestamp(String),\n    ClockSkew { skew_secs: i64 },\n    BadSignature,\n    DidPubkeyMismatch,\n    DidRegistryUnavailable(String),\n    DidRegistryRejected(String),\n    BodyTooLarge,\n    InternalError(String),\n}",
              "docs": "Errors produced by the auth middleware. Each variant maps to an\nHTTP 4xx with a stable error code so clients can branch.",
              "attributes": "#[derive(Debug)]",
              "line": 88
            },
            {
              "name": "auth::canonical_request_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_request_bytes(\n    method: &str,\n    path: &str,\n    timestamp_iso: &str,\n    body: &[u8],\n) -> Vec<u8>;",
              "docs": "Build the canonical request transcript that the client signs.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "auth::require_did_signed",
              "kind": "function_item",
              "signature": "pub async fn require_did_signed(req: Request, next: Next) -> Result<Response, AuthError>;",
              "docs": "Tower middleware that authenticates the request via DID-signed headers.\n\nRead-only routes (HTTP `GET`, plus the `/health` probe) bypass auth so\nobservability and probes work without credentials. Mutating routes\nrequire the full header set.",
              "attributes": "",
              "line": 185
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/node/../labor-api/src/config.rs",
          "sha256": "924443031026fc500f9b72aac34c7aaaae0627150ce270af38cf500c39fdb31e",
          "attributes": "",
          "items": [
            {
              "name": "config::ServerConfig",
              "kind": "struct_item",
              "signature": "pub struct ServerConfig {\n/// Socket address to bind the HTTP listener.\n\npub listen_addr: SocketAddr,\n/// PostgreSQL connection URL.\n\n///\n\n/// When absent and `LABOR_ALLOW_MEMORY_STORE=1` is not set, the server\n\n/// refuses to start.\n\npub database_url: Option<String>,\n/// Log level / `RUST_LOG` directive (e.g. `info`, `debug`).\n\npub log_level: String,\n/// Sigil node JSON-RPC URL used to verify HMR/MHR/ENR principals against\n\n/// the on-chain GAL registry.\n\npub identity_rpc_url: Option<String>\n}",
              "docs": "Top-level server configuration.",
              "attributes": "#[derive(Debug, Clone, Deserialize)]\n#[serde(default)]",
              "line": 13
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/../labor-api/src/error.rs",
          "sha256": "bb03a40b211648f502b902cc1ae57c46620e3c1f705a594f7c083afc1924f538",
          "attributes": "",
          "items": [
            {
              "name": "error::LaborError",
              "kind": "enum_item",
              "signature": "pub enum LaborError {\n    #[error(\"store error: {0}\")]\n    Store(String),\n\n    #[error(\"not found\")]\n    NotFound,\n\n    #[error(\"forbidden: {0}\")]\n    Forbidden(String),\n\n    #[error(\"serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Internal service errors.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "handlers",
          "source": "sigil/node/../labor-api/src/handlers.rs",
          "sha256": "1a000ed52979da1832dd164225f658c4b764aa501240ddeb32b51dea6ccb3199",
          "attributes": "",
          "items": [
            {
              "name": "handlers::AppState",
              "kind": "struct_item",
              "signature": "pub struct AppState {\npub store: Arc<dyn LaborStore>\n}",
              "docs": "Shared application state.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "handlers::health",
              "kind": "function_item",
              "signature": "pub async fn health() -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "handlers::post_job",
              "kind": "function_item",
              "signature": "pub async fn post_job(\n    State(state): State<Arc<AppState>>,\n    Extension(auth): Extension<Arc<AuthDid>>,\n    Json(req): Json<PostJobReq>,\n) -> Result<impl IntoResponse, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "handlers::list_jobs",
              "kind": "function_item",
              "signature": "pub async fn list_jobs(\n    State(state): State<Arc<AppState>>,\n    Query(params): Query<SearchParams>,\n) -> Result<Json<Page<JobPosting>>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "handlers::get_job",
              "kind": "function_item",
              "signature": "pub async fn get_job(\n    State(state): State<Arc<AppState>>,\n    Path(id): Path<Uuid>,\n) -> Result<Json<JobPosting>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "handlers::close_job",
              "kind": "function_item",
              "signature": "pub async fn close_job(\n    State(state): State<Arc<AppState>>,\n    Extension(auth): Extension<Arc<AuthDid>>,\n    Path(id): Path<Uuid>,\n) -> Result<Json<JobPosting>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "handlers::apply_to_job",
              "kind": "function_item",
              "signature": "pub async fn apply_to_job(\n    State(state): State<Arc<AppState>>,\n    Extension(auth): Extension<Arc<AuthDid>>,\n    Path(job_id): Path<Uuid>,\n    Json(req): Json<ApplyReq>,\n) -> Result<impl IntoResponse, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "handlers::get_applications",
              "kind": "function_item",
              "signature": "pub async fn get_applications(\n    State(state): State<Arc<AppState>>,\n    Path(job_id): Path<Uuid>,\n    Query(params): Query<SearchParams>,\n) -> Result<Json<Page<JobApplication>>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 152
            },
            {
              "name": "handlers::create_contract",
              "kind": "function_item",
              "signature": "pub async fn create_contract(\n    State(state): State<Arc<AppState>>,\n    Extension(auth): Extension<Arc<AuthDid>>,\n    Json(req): Json<CreateContractReq>,\n) -> Result<impl IntoResponse, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 178
            },
            {
              "name": "handlers::get_contract",
              "kind": "function_item",
              "signature": "pub async fn get_contract(\n    State(state): State<Arc<AppState>>,\n    Path(id): Path<Uuid>,\n) -> Result<Json<Contract>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 210
            },
            {
              "name": "handlers::complete_contract",
              "kind": "function_item",
              "signature": "pub async fn complete_contract(\n    State(state): State<Arc<AppState>>,\n    Extension(auth): Extension<Arc<AuthDid>>,\n    Path(id): Path<Uuid>,\n) -> Result<Json<Contract>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 222
            },
            {
              "name": "handlers::submit_review",
              "kind": "function_item",
              "signature": "pub async fn submit_review(\n    State(state): State<Arc<AppState>>,\n    Extension(_auth): Extension<Arc<AuthDid>>,\n    Json(req): Json<SubmitReviewReq>,\n) -> Result<impl IntoResponse, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 251
            },
            {
              "name": "handlers::get_reputation",
              "kind": "function_item",
              "signature": "pub async fn get_reputation(\n    State(state): State<Arc<AppState>>,\n    Path(agent_id): Path<String>,\n) -> Result<Json<ReputationScore>, LaborError>;",
              "docs": "",
              "attributes": "",
              "line": 271
            }
          ],
          "parseErrors": false
        },
        {
          "module": "idempotency",
          "source": "sigil/node/../labor-api/src/idempotency.rs",
          "sha256": "b8196b939a77fd70da3d1f049d6e4b8a1b75c666071c87f72841f33226d2ef43",
          "attributes": "",
          "items": [
            {
              "name": "idempotency::IdempotencyCache",
              "kind": "struct_item",
              "signature": "pub struct IdempotencyCache {\n\n}",
              "docs": "The shared idempotency cache. Cheap to clone \u2014 wraps an `Arc<Mutex<\u2026>>`.",
              "attributes": "#[derive(Clone, Default)]",
              "line": 83
            },
            {
              "name": "idempotency::IdempotencyCache::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "idempotency::IdempotencyCache::with_ttl",
              "kind": "function_item",
              "signature": "pub fn with_ttl(mut self, ttl: Duration) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "idempotency::idempotency_middleware",
              "kind": "function_item",
              "signature": "pub async fn idempotency_middleware(cache: IdempotencyCache, req: Request, next: Next) -> Response;",
              "docs": "Tower middleware: deduplicate POST requests by `Idempotency-Key`.\n\nRead methods (`GET`, `HEAD`) bypass the cache.",
              "attributes": "",
              "line": 138
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store",
          "source": "sigil/node/../labor-api/src/store/mod.rs",
          "sha256": "98c04b58075150a11ed6dafe2fd066f9695397b2ef2182f2f20a93638a277836",
          "attributes": "",
          "items": [
            {
              "name": "store::postgres",
              "kind": "module",
              "signature": "pub mod postgres;",
              "docs": "Storage backend trait and implementations.\n\n[`LaborStore`] is the contract that all storage backends must satisfy.\nThe production binary always uses [`postgres::PostgresStore`]; the\nin-memory backend exists solely for tests and is compiled only when\nthe `memory-store` feature is active.",
              "attributes": "#[cfg(feature = \"postgres\")]",
              "line": 9
            },
            {
              "name": "store::memory",
              "kind": "module",
              "signature": "pub mod memory;",
              "docs": "",
              "attributes": "#[cfg(feature = \"memory-store\")]",
              "line": 12
            },
            {
              "name": "store::LaborStore",
              "kind": "trait_item",
              "signature": "pub trait LaborStore: Send + Sync {\n    // ---- Jobs ---------------------------------------------------------------\n\n    async fn insert_job(&self, job: JobPosting) -> Result<JobPosting, LaborError>;\n\n    /// List jobs with optional keyword + status filters and cursor pagination.\n    async fn list_jobs(\n        &self,\n        keyword: Option<&str>,\n        status: Option<&str>,\n        after: Option<Uuid>,\n        limit: u32,\n    ) -> Result<Vec<JobPosting>, LaborError>;\n\n    async fn get_job(&self, id: Uuid) -> Result<Option<JobPosting>, LaborError>;\n\n    async fn update_job_status(\n        &self,\n        id: Uuid,\n        status: &str,\n    ) -> Result<Option<JobPosting>, LaborError>;\n\n    // ---- Applications -------------------------------------------------------\n\n    async fn insert_application(&self, app: JobApplication) -> Result<JobApplication, LaborError>;\n\n    /// List applications for a job with cursor pagination.\n    async fn list_applications(\n        &self,\n        job_id: Uuid,\n        after: Option<Uuid>,\n        limit: u32,\n    ) -> Result<Vec<JobApplication>, LaborError>;\n\n    // ---- Contracts ----------------------------------------------------------\n\n    /// Atomically insert a contract AND mark the job as `filled`.\n    async fn insert_contract_and_fill_job(\n        &self,\n        contract: Contract,\n    ) -> Result<Contract, LaborError>;\n\n    async fn get_contract(&self, id: Uuid) -> Result<Option<Contract>, LaborError>;\n\n    async fn update_contract_status(\n        &self,\n        id: Uuid,\n        status: &str,\n    ) -> Result<Option<Contract>, LaborError>;\n\n    // ---- Reputation ---------------------------------------------------------\n\n    /// Atomically update (or insert) a reputation row using running-average\n    /// arithmetic executed inside the database. Score parameters are in\n    /// micro-units (1.0 = 1_000_000).\n    async fn upsert_reputation(\n        &self,\n        agent_id: &str,\n        quality_micro: u64,\n        reliability_micro: u64,\n        speed_micro: u64,\n    ) -> Result<ReputationScore, LaborError>;\n\n    async fn get_reputation(&self, agent_id: &str) -> Result<Option<ReputationScore>, LaborError>;\n}",
              "docs": "Storage contract for the labor market service.\n\nAll implementations must be `Send + Sync` to be shared across Tokio tasks\nvia `Arc<dyn LaborStore>`.\n\n## Pagination contract\n\nListing endpoints accept a cursor (`after: Option<Uuid>`) and a limit.\nImplementations MUST return results in deterministic order (by `id` for\njobs/applications, by `created_at` then `id` for tie-breaking) so that\n`(after, limit)` produces stable, non-overlapping pages across requests.\n\n## Reputation units\n\nAll score values are integer micro-units (1.0 \u2261 1_000_000) to keep\nrolling averages exact. Implementations MUST perform the average update\ninside a single SQL statement so concurrent reviewers cannot corrupt\nthe running totals.",
              "attributes": "#[async_trait::async_trait]",
              "line": 38
            },
            {
              "name": "pub use async_trait::async_trait;",
              "kind": "use_declaration",
              "signature": "pub use async_trait::async_trait;",
              "docs": "",
              "attributes": "",
              "line": 104
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store::postgres",
          "source": "sigil/node/../labor-api/src/store/postgres.rs",
          "sha256": "87d8d5e7774fa03389b9b60917be1e1677f1ac7330a782ffa5963e19ac3b2af5",
          "attributes": "#[cfg(feature = \"postgres\")]",
          "items": [
            {
              "name": "store::postgres::PostgresStore",
              "kind": "struct_item",
              "signature": "pub struct PostgresStore {\n\n}",
              "docs": "Production PostgreSQL storage backend.",
              "attributes": "#[cfg(feature = \"postgres\")]\n#[derive(Clone)]",
              "line": 32
            },
            {
              "name": "store::postgres::PostgresStore::connect",
              "kind": "function_item",
              "signature": "pub async fn connect(database_url: &str) -> Result<Arc<Self>, LaborError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"postgres\")]",
              "line": 37
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store::memory",
          "source": "sigil/node/../labor-api/src/store/memory.rs",
          "sha256": "fac704d5201ff5043d3738629fb5ce1b869963b29b9a644e49a08fc82b672c7f",
          "attributes": "#[cfg(feature = \"memory-store\")]",
          "items": [
            {
              "name": "store::memory::MemoryStore",
              "kind": "struct_item",
              "signature": "pub struct MemoryStore {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"memory-store\")]\n#[derive(Default)]",
              "line": 16
            },
            {
              "name": "store::memory::MemoryStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"memory-store\")]",
              "line": 24
            }
          ],
          "parseErrors": false
        },
        {
          "module": "types",
          "source": "sigil/node/../labor-api/src/types.rs",
          "sha256": "95090c01324f0b677ef895c013e73d3ec5633b90a1db985e7894d47373fdb230",
          "attributes": "",
          "items": [
            {
              "name": "types::MicroAmount",
              "kind": "type_item",
              "signature": "pub type MicroAmount = u128;",
              "docs": "A token amount in chain base units (1 MINT = 1_000_000 micro-MINT).\n\nStored as `u128` even though Sigil's per-account balance is u64; payment\ntotals (sums across many escrows) can exceed u64 even when no single\naccount does. Serializes as a JSON string to avoid f64 truncation.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "types::Currency",
              "kind": "enum_item",
              "signature": "pub enum Currency {\n    /// Sigil mainnet token.\n    Mint,\n    /// Evolve canary token.\n    Bits,\n}",
              "docs": "On-chain currency symbol the labor-API operates in.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"UPPERCASE\")]",
              "line": 40
            },
            {
              "name": "types::Currency::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "types::Compensation",
              "kind": "struct_item",
              "signature": "pub struct Compensation {\n/// Amount in chain base units. JSON: string-encoded.\n\n#[serde(with = \"string_u128\")]\npub amount_micro: MicroAmount,\n/// Symbol the amount is denominated in.\n\npub currency: Currency,\n/// Payment type: `\"fixed\"`, `\"hourly\"`, or `\"milestone\"`.\n\npub payment_type: String,\n/// Optional budget ceiling in the same currency.\n\n#[serde(default, with = \"string_u128_opt\")]\npub budget_cap_micro: Option<MicroAmount>\n}",
              "docs": "Payment terms for a job or contract.\n\n`amount_micro` is denominated in `currency` base units. The wallet/UI\nconverts to/from human decimals before display.\n\nSerde renders the u128 as a JSON string to dodge JS f64 precision loss.\nDeserializers must accept both `\"123456\"` and `123456` for backward\ncompatibility during the canary-period migration.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 71
            },
            {
              "name": "types::string_u128::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S: Serializer>(value: &u128, s: S) -> Result<S::Ok, S::Error>;",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "types::string_u128::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<u128, D::Error>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "types::string_u128_opt::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S: Serializer>(value: &Option<u128>, s: S) -> Result<S::Ok, S::Error>;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "types::string_u128_opt::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<u128>, D::Error>;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "types::JobPosting",
              "kind": "struct_item",
              "signature": "pub struct JobPosting {\npub id: Uuid,\npub org_id: String,\npub title: String,\npub description: String,\npub requirements: Vec<String>,\npub compensation: Compensation,\npub duration_hours: u32,\n/// Job lifecycle: `open` | `reviewing` | `awarded` | `filled` |\n\n/// `cancelled` | `closed`.\n\npub status: String,\npub created_at: DateTime<Utc>\n}",
              "docs": "A job posting from an organization.\n\nLifecycle status values mirror `sigil_core::labor::JobStatus`:\n`open`, `reviewing`, `awarded`, `cancelled`, `closed`.\nWe add `filled` for the HTTP API (contract created) which maps to\n`JobStatus::Awarded` on-chain.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 148
            },
            {
              "name": "types::JobApplication",
              "kind": "struct_item",
              "signature": "pub struct JobApplication {\npub id: Uuid,\npub job_id: Uuid,\npub agent_id: String,\npub cover_letter: String,\npub skills: Vec<String>,\n/// Reputation snapshot in micro-units (e.g. 4_530_000 = 4.53).\n\npub reputation_snapshot_micro: u64,\npub applied_at: DateTime<Utc>\n}",
              "docs": "An agent's application to a job posting.\n\n`reputation_snapshot_micro` is the agent's reputation score at application\ntime, expressed in micro-units (1.0 \u2192 1_000_000) to keep all numeric\nfields integer-typed. Authoritative reputation lives in MARS / OATS;\nthis snapshot exists only for time-of-application freezing.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 173
            },
            {
              "name": "types::Contract",
              "kind": "struct_item",
              "signature": "pub struct Contract {\npub id: Uuid,\npub job_id: Uuid,\npub agent_id: String,\npub org_id: String,\npub compensation: Compensation,\n/// Contract status: `active` | `completed` | `cancelled`.\n\npub status: String,\npub start_date: DateTime<Utc>\n}",
              "docs": "A binding agreement between an organization and an agent.\n\nStatus values mirror `sigil_core::labor::ContractState`:\n`active` (InProgress), `completed`, `cancelled`.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 193
            },
            {
              "name": "types::ReputationScore",
              "kind": "struct_item",
              "signature": "pub struct ReputationScore {\npub agent_id: String,\npub overall_micro: u64,\npub quality_micro: u64,\npub reliability_micro: u64,\npub speed_micro: u64,\npub reviews_count: i32\n}",
              "docs": "Rolling reputation score for an agent.\n\nStored as integer micro-units (1.0 = 1_000_000). The chain MARS/OATS\nsystem is the authoritative source for reputation; this table is a\ndenormalized cache.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 214
            },
            {
              "name": "types::PostJobReq",
              "kind": "struct_item",
              "signature": "pub struct PostJobReq {\npub title: String,\npub description: String,\npub requirements: Vec<String>,\npub compensation: Compensation,\npub duration_hours: u32\n}",
              "docs": "Request body for `POST /v1/jobs`.\n\n`org_id` is OMITTED \u2014 it's bound to the authenticated principal by\nmiddleware. Caller-supplied org_id fields are silently ignored.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 232
            },
            {
              "name": "types::ApplyReq",
              "kind": "struct_item",
              "signature": "pub struct ApplyReq {\npub cover_letter: String,\npub skills: Vec<String>,\n/// Reputation snapshot at application time, in micro-units.\n\npub reputation_snapshot_micro: u64\n}",
              "docs": "Request body for `POST /v1/jobs/:id/apply`.\n\n`agent_id` is bound to the authenticated principal.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 244
            },
            {
              "name": "types::CreateContractReq",
              "kind": "struct_item",
              "signature": "pub struct CreateContractReq {\npub job_id: Uuid,\npub agent_id: String,\npub compensation: Compensation\n}",
              "docs": "Request body for `POST /v1/contracts`.\n\n`org_id` is bound to the authenticated principal. The caller may only\ncreate contracts as the org they're authenticated as.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 256
            },
            {
              "name": "types::SubmitReviewReq",
              "kind": "struct_item",
              "signature": "pub struct SubmitReviewReq {\npub agent_id: String,\npub quality_micro: u64,\npub reliability_micro: u64,\npub speed_micro: u64\n}",
              "docs": "Request body for `POST /v1/reviews`.\n\nAll score fields in micro-units (1.0 = 1_000_000).",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 266
            },
            {
              "name": "types::SearchParams",
              "kind": "struct_item",
              "signature": "pub struct SearchParams {\npub keyword: Option<String>,\npub status: Option<String>,\n/// Cursor: return results after this UUID (exclusive).\n\npub after: Option<Uuid>,\n/// Page size (default 50, max 200).\n\npub limit: Option<u32>\n}",
              "docs": "Query parameters for `GET /v1/jobs`. Cursor-based pagination.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 275
            },
            {
              "name": "types::SearchParams::DEFAULT_LIMIT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_LIMIT: u32;",
              "docs": "",
              "attributes": "",
              "line": 285
            },
            {
              "name": "types::SearchParams::MAX_LIMIT",
              "kind": "const_item",
              "signature": "pub const MAX_LIMIT: u32;",
              "docs": "",
              "attributes": "",
              "line": 286
            },
            {
              "name": "types::SearchParams::effective_limit",
              "kind": "function_item",
              "signature": "pub fn effective_limit(&self) -> u32;",
              "docs": "",
              "attributes": "",
              "line": 288
            },
            {
              "name": "types::Page",
              "kind": "struct_item",
              "signature": "pub struct Page<T> {\npub items: Vec<T>,\n/// Cursor to pass to the next request as `after=`. None when the\n\n/// returned page is the last page.\n\npub next: Option<Uuid>,\npub limit: u32\n}",
              "docs": "Standard cursor-paginated response envelope.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 297
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "arise-identity",
      "version": "0.1.0",
      "source": "sigil/node/../arise-bridge/arise-identity",
      "manifestSha256": "884d1ee0ebbc83d5bd56b4619daf20a0944f45c4be5370c7392e586fb67253ab",
      "features": {},
      "publish": true,
      "url": "/reference/rust/arise-identity",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../arise-bridge/arise-identity/src/lib.rs",
          "sha256": "d9ee36d93678a92af9198c9a46c051189ae6ff9aac25232634cd8d8079075821",
          "attributes": "",
          "items": [
            {
              "name": "attestation",
              "kind": "module",
              "signature": "pub mod attestation;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "consumer",
              "kind": "module",
              "signature": "pub mod consumer;",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "provider",
              "kind": "module",
              "signature": "pub mod provider;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "pub use error::IdentityError;",
              "kind": "use_declaration",
              "signature": "pub use error::IdentityError;",
              "docs": "",
              "attributes": "",
              "line": 82
            }
          ],
          "parseErrors": false
        },
        {
          "module": "attestation",
          "source": "sigil/node/../arise-bridge/arise-identity/src/attestation.rs",
          "sha256": "47d369b60fc92368eeebfbd3fd7a28608cb6a99b6eccccb81f85705834fb7da4",
          "attributes": "",
          "items": [
            {
              "name": "attestation::HardwareBenchmarkVC",
              "kind": "struct_item",
              "signature": "pub struct HardwareBenchmarkVC {\n/// Fixed: `\"HardwareBenchmark\"`.\n\npub vc_type: String,\n/// The DID of the entity that issued/performed the benchmark.\n\npub issuer_did: String,\n/// The provider DID whose hardware was benchmarked.\n\npub subject_did: String,\n/// The measured benchmark results.\n\npub benchmark_data: BenchmarkResults,\n/// How the attestation was obtained (e.g., `\"ThirdPartyAudit\"`).\n\npub attestation_method: String,\n/// ISO 8601 timestamp when the VC was issued.\n\npub issued_at: String,\n/// ISO 8601 timestamp when the VC expires.\n\npub expires_at: String\n}",
              "docs": "A Verifiable Credential attesting to hardware benchmark results.\n\nTies measured compute performance to a provider's OAS DID. The VC\nincludes the attestation method (self-reported, third-party, or TEE)\nand has a bounded validity window.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "attestation::PlatformAttestationVC",
              "kind": "struct_item",
              "signature": "pub struct PlatformAttestationVC {\n/// Fixed: `\"PlatformAttestation\"`.\n\npub vc_type: String,\n/// The DID of the entity that verified the platform attestation.\n\npub issuer_did: String,\n/// The provider DID whose platform was attested.\n\npub subject_did: String,\n/// The TEE platform type (e.g., `\"sgx\"`, `\"tdx\"`, `\"sev-snp\"`).\n\npub platform: String,\n/// BLAKE3 hash of the raw platform attestation report (hex-encoded).\n\npub report_hash: String,\n/// ISO 8601 timestamp when the VC was issued.\n\npub issued_at: String\n}",
              "docs": "A Verifiable Credential for TEE-based platform attestation.\n\nRepresents a hardware-backed attestation from a Trusted Execution\nEnvironment (SGX, TDX, SEV-SNP). The `report_hash` is a BLAKE3 hash\nof the raw platform report data.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 43
            },
            {
              "name": "attestation::create_hardware_benchmark_vc",
              "kind": "function_item",
              "signature": "pub fn create_hardware_benchmark_vc(\n    provider_did: &str,\n    benchmarks: &BenchmarkResults,\n    attestation_type: &HardwareAttestationType,\n) -> HardwareBenchmarkVC;",
              "docs": "Creates a hardware benchmark Verifiable Credential.\n\nThe VC is issued at the current UTC time and expires after 90 days.\n\n# Arguments\n\n* `provider_did` - The OAS DID of the compute provider being benchmarked.\n* `benchmarks` - The measured benchmark results.\n* `attestation_type` - The method used to produce the benchmark.\n\n# Returns\n\nA [`HardwareBenchmarkVC`] with the current timestamp and a 90-day validity window.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "attestation::create_platform_attestation_vc",
              "kind": "function_item",
              "signature": "pub fn create_platform_attestation_vc(\n    provider_did: &str,\n    platform: &str,\n    report_data: &[u8],\n) -> PlatformAttestationVC;",
              "docs": "Creates a platform attestation Verifiable Credential from TEE report data.\n\nThe report data is hashed with BLAKE3 to produce a compact, verifiable\nfingerprint stored in the VC.\n\n# Arguments\n\n* `provider_did` - The OAS DID of the compute provider.\n* `platform` - The TEE platform identifier (`\"sgx\"`, `\"tdx\"`, `\"sev-snp\"`).\n* `report_data` - The raw platform attestation report bytes.\n\n# Returns\n\nA [`PlatformAttestationVC`] with the BLAKE3 hash of the report data.",
              "attributes": "",
              "line": 110
            }
          ],
          "parseErrors": false
        },
        {
          "module": "consumer",
          "source": "sigil/node/../arise-bridge/arise-identity/src/consumer.rs",
          "sha256": "0a3a72bdbdeb1430fc7436c55993f2bb277f57e0fd8cb32a0bd09068a4e447d6",
          "attributes": "",
          "items": [
            {
              "name": "consumer::ConsumerIdentity",
              "kind": "struct_item",
              "signature": "pub struct ConsumerIdentity {\n/// The consumer's OAS DID.\n\npub did: String,\n/// The human root DID establishing lineage provenance.\n\npub human_root_did: String,\n/// The generation number in the OAS lineage chain.\n\npub generation: u32,\n/// Optional organization DID if acting on behalf of an AO.\n\npub org_did: Option<String>,\n/// Optional maximum spend in micro-MINT.\n\npub budget_limit: Option<u64>\n}",
              "docs": "A compute consumer's OAS identity.\n\nConsumers request compute resources from ARISE providers. Their identity\nis derived from an OAS DID with lineage back to a human root.\n\nOptionally, a consumer may act on behalf of an organization (`org_did`)\nand may have a spending budget limit in micro-MINT.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "consumer::ConsumerIdentity::new",
              "kind": "function_item",
              "signature": "pub fn new(did: &str, human_root_did: &str, generation: u32) -> Result<Self, IdentityError>;",
              "docs": "Creates a new consumer identity.\n\n# Arguments\n\n* `did` - The consumer's OAS DID string.\n* `human_root_did` - The human root DID for lineage provenance.\n* `generation` - The generation number in the lineage chain.\n\n# Errors\n\nReturns [`IdentityError::InvalidDid`] if either DID is not a valid `did:oas` identifier.\nReturns [`IdentityError::MissingHumanRoot`] if `human_root_did` is empty.",
              "attributes": "",
              "line": 45
            },
            {
              "name": "consumer::ConsumerIdentity::with_org",
              "kind": "function_item",
              "signature": "pub fn with_org(mut self, org_did: &str) -> Result<Self, IdentityError>;",
              "docs": "Sets the organization DID that this consumer is acting on behalf of.\n\n# Arguments\n\n* `org_did` - An OAS DID for the organization (typically `did:oas:<ns>:ao:<id>`).\n\n# Errors\n\nReturns [`IdentityError::InvalidDid`] if the org DID is not a valid `did:oas` identifier.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "consumer::ConsumerIdentity::with_budget",
              "kind": "function_item",
              "signature": "pub fn with_budget(mut self, limit: u64) -> Self;",
              "docs": "Sets the maximum spend budget in micro-MINT.\n\n# Arguments\n\n* `limit` - Maximum spend in micro-MINT (1 MINT = 1,000,000 micro-MINT).",
              "attributes": "",
              "line": 89
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/../arise-bridge/arise-identity/src/error.rs",
          "sha256": "205ed9c41113b8fd7d9a8934a9434919eea2e9676eac3c89d3dbcdac7d465849",
          "attributes": "",
          "items": [
            {
              "name": "error::IdentityError",
              "kind": "enum_item",
              "signature": "pub enum IdentityError {\n    /// The provided DID string is not a valid `did:oas` identifier.\n    #[error(\"invalid DID: {0}\")]\n    InvalidDid(String),\n\n    /// The identity is missing a required human root DID.\n    #[error(\"missing human root DID for entity: {0}\")]\n    MissingHumanRoot(String),\n\n    /// A hardware attestation has expired.\n    #[error(\"attestation expired for DID {did} at {expired_at}\")]\n    AttestationExpired {\n        /// The provider DID whose attestation expired.\n        did: String,\n        /// The ISO 8601 timestamp when the attestation expired.\n        expired_at: String,\n    },\n\n    /// The provider does not meet minimum capability requirements.\n    #[error(\"insufficient capabilities: {0}\")]\n    InsufficientCapabilities(String),\n\n    /// The attestation data is structurally invalid or unverifiable.\n    #[error(\"invalid attestation: {0}\")]\n    InvalidAttestation(String),\n\n    /// An underlying OAS DID parsing error.\n    #[error(\"DID parse error: {0}\")]\n    DidParse(#[from] oas_did::DidError),\n}",
              "docs": "Errors that can occur during ARISE identity operations.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "provider",
          "source": "sigil/node/../arise-bridge/arise-identity/src/provider.rs",
          "sha256": "5848afff7538e41556ecd34419ae5277f17eec021dd62d277d0ca91f8beef5f8",
          "attributes": "",
          "items": [
            {
              "name": "provider::ProviderIdentity",
              "kind": "struct_item",
              "signature": "pub struct ProviderIdentity {\n/// The provider's OAS DID (e.g., `did:oas:arise:service:gpu-provider-01`).\n\npub did: String,\n/// The human root DID establishing lineage provenance.\n\npub human_root_did: String,\n/// The generation number in the OAS lineage chain.\n\npub generation: u32,\n/// Human-readable provider name.\n\npub provider_name: String,\n/// Declared hardware and software capabilities.\n\npub capabilities: ProviderCapabilities,\n/// Ordered list of hardware attestations (most recent last).\n\npub hardware_attestations: Vec<HardwareAttestation>,\n/// ISO 8601 timestamp when this identity was created.\n\npub created_at: String\n}",
              "docs": "A compute provider's identity derived from service declarations.\n\nLinks an ARISE compute provider to an OAS DID with hardware attestations\nand capability declarations. The `human_root_did` field establishes\nprovenance back to a verified human root per the OAS lineage model.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "provider::ProviderCapabilities",
              "kind": "struct_item",
              "signature": "pub struct ProviderCapabilities {\n/// GPU model identifiers (e.g., `[\"A100\", \"H100\"]`).\n\npub gpu_models: Vec<String>,\n/// Total number of GPUs available.\n\npub gpu_count: u32,\n/// Total GPU memory in gigabytes.\n\npub gpu_memory_gb: u32,\n/// Number of CPU cores available.\n\npub cpu_cores: u32,\n/// Total RAM in gigabytes.\n\npub ram_gb: u32,\n/// Total storage in terabytes.\n\npub storage_tb: f64,\n/// Supported ML frameworks (e.g., `[\"pytorch\", \"tensorflow\"]`).\n\npub supported_frameworks: Vec<String>,\n/// Maximum number of concurrent jobs the provider can handle.\n\npub max_concurrent_jobs: u32\n}",
              "docs": "Hardware and software capabilities declared by a compute provider.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "provider::HardwareAttestation",
              "kind": "struct_item",
              "signature": "pub struct HardwareAttestation {\n/// The method used to produce this attestation.\n\npub attestation_type: HardwareAttestationType,\n/// Benchmark results collected during attestation.\n\npub benchmark_results: BenchmarkResults,\n/// ISO 8601 timestamp when the attestation was performed.\n\npub attested_at: String,\n/// ISO 8601 timestamp when the attestation expires.\n\npub expires_at: String,\n/// Cryptographic signature over the attestation payload.\n\npub signature: Vec<u8>\n}",
              "docs": "A hardware attestation certifying a provider's declared capabilities.\n\nAttestations have a validity window defined by `attested_at` and `expires_at`.\nThey may be self-reported, third-party audited, or TEE-based.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 63
            },
            {
              "name": "provider::HardwareAttestationType",
              "kind": "enum_item",
              "signature": "pub enum HardwareAttestationType {\n    /// Provider self-reported capability declaration.\n    SelfReported,\n    /// Verified by a third-party auditing entity.\n    ThirdPartyAudit,\n    /// Hardware-backed attestation from a Trusted Execution Environment (SGX/TDX/SEV-SNP).\n    TeeAttestation,\n}",
              "docs": "The method used to produce a hardware attestation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 78
            },
            {
              "name": "provider::BenchmarkResults",
              "kind": "struct_item",
              "signature": "pub struct BenchmarkResults {\n/// GPU compute performance in teraflops.\n\npub gpu_tflops: f64,\n/// GPU memory bandwidth in GB/s.\n\npub gpu_memory_bandwidth_gbps: f64,\n/// Inference latency in milliseconds for a standard workload.\n\npub inference_latency_ms: f64,\n/// Token generation throughput (tokens per second).\n\npub tokens_per_second: f64\n}",
              "docs": "Benchmark results from a hardware attestation run.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 89
            },
            {
              "name": "provider::ProviderIdentity::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        did: &str,\n        human_root_did: &str,\n        generation: u32,\n        provider_name: &str,\n        capabilities: ProviderCapabilities,\n    ) -> Result<Self, IdentityError>;",
              "docs": "Creates a new provider identity.\n\n# Arguments\n\n* `did` - The provider's OAS DID string.\n* `human_root_did` - The human root DID for lineage provenance.\n* `generation` - The generation number in the lineage chain.\n* `provider_name` - Human-readable name for the provider.\n* `capabilities` - The provider's hardware/software capabilities.\n\n# Errors\n\nReturns [`IdentityError::InvalidDid`] if the DID is not a valid `did:oas` identifier.\nReturns [`IdentityError::MissingHumanRoot`] if `human_root_did` is empty.",
              "attributes": "",
              "line": 115
            },
            {
              "name": "provider::ProviderIdentity::add_hardware_attestation",
              "kind": "function_item",
              "signature": "pub fn add_hardware_attestation(&mut self, attestation: HardwareAttestation);",
              "docs": "Adds a hardware attestation to this provider identity.\n\nAttestations are appended in order; the most recent attestation\nis always the last element.",
              "attributes": "",
              "line": 151
            },
            {
              "name": "provider::ProviderIdentity::latest_attestation",
              "kind": "function_item",
              "signature": "pub fn latest_attestation(&self) -> Option<&HardwareAttestation>;",
              "docs": "Returns the most recent hardware attestation, if any.",
              "attributes": "",
              "line": 161
            },
            {
              "name": "provider::ProviderIdentity::is_attestation_current",
              "kind": "function_item",
              "signature": "pub fn is_attestation_current(&self, now: &str) -> bool;",
              "docs": "Checks whether the provider has a current (non-expired) attestation.\n\n# Arguments\n\n* `now` - The current time as an ISO 8601 string for comparison.\n\n# Returns\n\n`true` if the latest attestation exists and its `expires_at` is\nstrictly after `now`.",
              "attributes": "",
              "line": 175
            },
            {
              "name": "provider::ProviderCapabilities::meets_minimum",
              "kind": "function_item",
              "signature": "pub fn meets_minimum(&self) -> bool;",
              "docs": "Checks whether the provider meets minimum capability requirements.\n\nMinimum requirements:\n- At least 1 GPU\n- At least 16 GB of GPU memory\n\n# Returns\n\n`true` if the provider meets baseline requirements for ARISE compute.",
              "attributes": "",
              "line": 192
            },
            {
              "name": "provider::HardwareAttestationType::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "Returns the canonical string representation of this attestation type.",
              "attributes": "",
              "line": 199
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "arise-sigil",
      "version": "0.1.0",
      "source": "sigil/node/../arise-bridge/arise-sigil",
      "manifestSha256": "be4b1b964285285a37c4d1f2a2b4ecb321a543b75684242b6be897853e0d6240",
      "features": {},
      "publish": true,
      "url": "/reference/rust/arise-sigil",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/lib.rs",
          "sha256": "bc40c916078a199489fe48ca021d264dc488222f5553b13f92cfe6e9aa5b6ea7",
          "attributes": "",
          "items": [
            {
              "name": "challenge",
              "kind": "module",
              "signature": "pub mod challenge;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "escrow",
              "kind": "module",
              "signature": "pub mod escrow;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "provider",
              "kind": "module",
              "signature": "pub mod provider;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "receipt",
              "kind": "module",
              "signature": "pub mod receipt;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "reputation",
              "kind": "module",
              "signature": "pub mod reputation;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "settlement",
              "kind": "module",
              "signature": "pub mod settlement;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "pub use challenge::{Challenge, ChallengeOutcome, ChallengeState};",
              "kind": "use_declaration",
              "signature": "pub use challenge::{Challenge, ChallengeOutcome, ChallengeState};",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "pub use error::AriseError;",
              "kind": "use_declaration",
              "signature": "pub use error::AriseError;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use escrow::{EscrowAccount, EscrowOp, EscrowOperation};",
              "kind": "use_declaration",
              "signature": "pub use escrow::{EscrowAccount, EscrowOp, EscrowOperation};",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use provider::{ComputePricing, ProviderRegistration, ProviderStatus, ProviderTier};",
              "kind": "use_declaration",
              "signature": "pub use provider::{ComputePricing, ProviderRegistration, ProviderStatus, ProviderTier};",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pub use receipt::ComputeReceipt;",
              "kind": "use_declaration",
              "signature": "pub use receipt::ComputeReceipt;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "pub use reputation::ReputationSignals;",
              "kind": "use_declaration",
              "signature": "pub use reputation::ReputationSignals;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "pub use settlement::{create_settlement, SettlementAction};",
              "kind": "use_declaration",
              "signature": "pub use settlement::{create_settlement, SettlementAction};",
              "docs": "",
              "attributes": "",
              "line": 38
            }
          ],
          "parseErrors": false
        },
        {
          "module": "challenge",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/challenge.rs",
          "sha256": "789d87374b6d2f626e4a30f7cf6eec2c969fca147a14ccf079cfe71e41d20ac4",
          "attributes": "",
          "items": [
            {
              "name": "challenge::ChallengeOutcome",
              "kind": "enum_item",
              "signature": "pub enum ChallengeOutcome {\n    /// Challenger wins: 40% to challenger, 30% to arbitrators, 30% to treasury.\n    ChallengerWins,\n    /// Provider wins: 50% to provider from challenger deposit, 50% returned.\n    ProviderWins,\n}",
              "docs": "The outcome of a resolved challenge.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "challenge::ChallengeState",
              "kind": "enum_item",
              "signature": "pub enum ChallengeState {\n    /// Challenge has been submitted, waiting for reproduction window.\n    Submitted,\n    /// Provider has 1 epoch to respond with reproduction evidence.\n    ReproductionWindow,\n    /// Three arbitrator providers are voting.\n    Arbitration,\n    /// Challenge has been resolved with a final outcome.\n    Resolved(ChallengeOutcome),\n}",
              "docs": "States in the challenge lifecycle.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "challenge::REQUIRED_ARBITRATORS",
              "kind": "const_item",
              "signature": "pub const REQUIRED_ARBITRATORS: usize;",
              "docs": "The number of arbitrators required for a challenge.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "challenge::REPRODUCTION_WINDOW_EPOCHS",
              "kind": "const_item",
              "signature": "pub const REPRODUCTION_WINDOW_EPOCHS: u64;",
              "docs": "The number of epochs for the reproduction window.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "challenge::ARBITRATION_WINDOW_EPOCHS",
              "kind": "const_item",
              "signature": "pub const ARBITRATION_WINDOW_EPOCHS: u64;",
              "docs": "The number of epochs for arbitration after the reproduction window.",
              "attributes": "",
              "line": 46
            },
            {
              "name": "challenge::Challenge",
              "kind": "struct_item",
              "signature": "pub struct Challenge {\n/// Unique challenge identifier.\n\npub challenge_id: String,\n/// DID of the entity that raised the challenge.\n\npub challenger_did: String,\n/// DID of the provider being challenged.\n\npub provider_did: String,\n/// Receipt being disputed.\n\npub receipt_id: String,\n/// Current state in the challenge lifecycle.\n\npub state: ChallengeState,\n/// Epoch when the challenge was submitted.\n\npub submitted_epoch: u64,\n/// Hash of the evidence submitted by the challenger.\n\npub evidence_hash: SigilHash,\n/// DIDs of the three selected arbitrators.\n\npub arbitrator_dids: Vec<String>,\n/// Votes cast by arbitrators: `(did, agrees_with_challenger)`.\n\npub arbitrator_votes: Vec<(String, bool)>\n}",
              "docs": "A dispute against a compute receipt.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "challenge::Challenge::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        challenge_id: String,\n        challenger_did: String,\n        provider_did: String,\n        receipt_id: String,\n        submitted_epoch: u64,\n        evidence_hash: SigilHash,\n    ) -> Self;",
              "docs": "Creates a new challenge in the `Submitted` state.",
              "attributes": "",
              "line": 73
            },
            {
              "name": "challenge::Challenge::advance",
              "kind": "function_item",
              "signature": "pub fn advance(&mut self, current_epoch: u64) -> Result<(), AriseError>;",
              "docs": "Advance the challenge state machine based on the current epoch.\n\n- `Submitted` -> `ReproductionWindow` (immediately).\n- `ReproductionWindow` -> `Arbitration` (after 1 epoch).\n- `Arbitration` does not auto-advance; use [`resolve`] once votes are in.",
              "attributes": "",
              "line": 99
            },
            {
              "name": "challenge::Challenge::add_arbitrator",
              "kind": "function_item",
              "signature": "pub fn add_arbitrator(&mut self, did: String) -> Result<(), AriseError>;",
              "docs": "Adds an arbitrator to the challenge. Must be called before transitioning\nto `Arbitration`.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "challenge::Challenge::add_arbitrator_vote",
              "kind": "function_item",
              "signature": "pub fn add_arbitrator_vote(&mut self, did: &str, agrees: bool) -> Result<(), AriseError>;",
              "docs": "Records an arbitrator's vote.\n\n`agrees` is `true` if the arbitrator agrees with the challenger.",
              "attributes": "",
              "line": 152
            },
            {
              "name": "challenge::Challenge::resolve",
              "kind": "function_item",
              "signature": "pub fn resolve(&mut self) -> Result<ChallengeOutcome, AriseError>;",
              "docs": "Resolves the challenge once all arbitrators have voted.\n\nMajority vote determines the outcome.",
              "attributes": "",
              "line": 175
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/error.rs",
          "sha256": "bfd98b2e1b0f202b53df05ff1b5e6a8d39495d9cb5df8c6f9a82b9cfc6462e93",
          "attributes": "",
          "items": [
            {
              "name": "error::AriseError",
              "kind": "enum_item",
              "signature": "pub enum AriseError {\n    /// The referenced provider DID was not found.\n    #[error(\"provider not found: {0}\")]\n    ProviderNotFound(String),\n\n    /// The provider's stake is below the required minimum.\n    #[error(\n        \"insufficient stake: required {required} micro-MINT, available {available} micro-MINT\"\n    )]\n    InsufficientStake {\n        /// The minimum stake required.\n        required: u64,\n        /// The stake amount available.\n        available: u64,\n    },\n\n    /// The compute receipt is structurally invalid or fails verification.\n    #[error(\"invalid receipt: {0}\")]\n    InvalidReceipt(String),\n\n    /// The referenced challenge was not found.\n    #[error(\"challenge not found: {0}\")]\n    ChallengeNotFound(String),\n\n    /// The attempted state transition is not valid for the current challenge state.\n    #[error(\"invalid challenge transition: {0}\")]\n    InvalidChallengeTransition(String),\n\n    /// An error occurred during escrow operations.\n    #[error(\"escrow error: {0}\")]\n    EscrowError(String),\n\n    /// An error occurred during on-chain settlement.\n    #[error(\"settlement error: {0}\")]\n    SettlementError(String),\n\n    /// The caller is not authorized for the requested operation.\n    #[error(\"not authorized: {0}\")]\n    NotAuthorized(String),\n}",
              "docs": "Errors that can occur during ARISE marketplace operations.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "escrow",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/escrow.rs",
          "sha256": "68a229eef4dfed78169ae693c122f24c21c7bf98c5d6710f540135ccc6cc3b4a",
          "attributes": "",
          "items": [
            {
              "name": "escrow::EscrowOperation",
              "kind": "struct_item",
              "signature": "pub struct EscrowOperation {\n/// DID of the consumer initiating the operation.\n\npub consumer_did: String,\n/// Optional org DID if the consumer acts on behalf of an organization.\n\npub org_did: Option<String>,\n/// The escrow operation to execute.\n\npub operation: EscrowOp\n}",
              "docs": "A single escrow operation submitted by a consumer.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "escrow::EscrowOp",
              "kind": "enum_item",
              "signature": "pub enum EscrowOp {\n    /// Deposit tokens into the consumer's escrow account.\n    Fund {\n        /// Amount in micro-MINT to deposit.\n        amount: u64,\n    },\n    /// Reserve tokens for a specific job (locks funds for the provider).\n    Reserve {\n        /// Unique identifier for the compute job.\n        job_id: String,\n        /// Amount in micro-MINT to reserve.\n        amount: u64,\n        /// DID of the provider to whom the reservation is directed.\n        provider_did: String,\n    },\n    /// Settle a completed job, debiting the actual cost from the reservation.\n    Settle {\n        /// The job being settled.\n        job_id: String,\n        /// DID of the provider submitting the settlement.\n        provider_did: String,\n        /// Actual cost incurred in micro-MINT.\n        actual_cost: u64,\n    },\n    /// Refund the full reserved amount for a cancelled or failed job.\n    Refund {\n        /// The job whose reservation should be refunded.\n        job_id: String,\n    },\n    /// Withdraw available (unreserved) tokens from the escrow account.\n    Withdraw {\n        /// Amount in micro-MINT to withdraw.\n        amount: u64,\n    },\n}",
              "docs": "The set of operations that can be performed on an escrow account.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 24
            },
            {
              "name": "escrow::EscrowAccount",
              "kind": "struct_item",
              "signature": "pub struct EscrowAccount {\n/// DID of the account owner.\n\npub consumer_did: String,\n/// Total deposited balance in micro-MINT.\n\npub total_balance: u64,\n/// Amount currently reserved for pending jobs.\n\npub reserved_balance: u64,\n/// Per-job reservations. Settlement/refund must address exactly one job.\n\npub reservations: HashMap<String, EscrowReservation>\n}",
              "docs": "In-memory escrow account for tracking balances during validation.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "escrow::EscrowReservation",
              "kind": "struct_item",
              "signature": "pub struct EscrowReservation {\n/// Amount reserved in micro-MINT.\n\npub amount: u64,\n/// Provider DID named when the reservation was created.\n\npub provider_did: String\n}",
              "docs": "Funds reserved for one compute job.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 75
            },
            {
              "name": "escrow::EscrowAccount::new",
              "kind": "function_item",
              "signature": "pub fn new(consumer_did: String) -> Self;",
              "docs": "Creates a new escrow account with zero balance.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "escrow::EscrowAccount::available_balance",
              "kind": "function_item",
              "signature": "pub fn available_balance(&self) -> u64;",
              "docs": "Returns the available (unreserved) balance.",
              "attributes": "",
              "line": 94
            },
            {
              "name": "escrow::EscrowAccount::apply",
              "kind": "function_item",
              "signature": "pub fn apply(&mut self, op: &EscrowOp) -> Result<(), AriseError>;",
              "docs": "Applies an escrow operation, returning an error if the operation\ncannot be performed (e.g. insufficient funds).",
              "attributes": "",
              "line": 100
            },
            {
              "name": "escrow::EscrowAccount::settle_as_provider",
              "kind": "function_item",
              "signature": "pub fn settle_as_provider(\n        &mut self,\n        provider_did: &str,\n        job_id: &str,\n        actual_cost: u64,\n    ) -> Result<(), AriseError>;",
              "docs": "Settles a reservation only when the caller is the provider recorded\nwhen funds were reserved for the job.",
              "attributes": "",
              "line": 195
            }
          ],
          "parseErrors": false
        },
        {
          "module": "provider",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/provider.rs",
          "sha256": "f49ce4bb5c3f10cc2b67bb17da9d520a9f877d8eeeaf6d8765b7ffbbd90ed744",
          "attributes": "",
          "items": [
            {
              "name": "provider::ProviderTier",
              "kind": "enum_item",
              "signature": "pub enum ProviderTier {\n    /// Entry tier: 500 MINT minimum stake.\n    Consumer,\n    /// Mid tier: 2,000 MINT minimum stake.\n    Professional,\n    /// High tier: 5,000 MINT minimum stake.\n    Enterprise,\n    /// Top tier: 10,000 MINT minimum stake.\n    Cluster,\n}",
              "docs": "Provider stake tiers.\n\nThe tier determines the minimum SIGIL stake required and the\nmaximum workload capacity the provider can serve.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "provider::ProviderTier::min_stake",
              "kind": "function_item",
              "signature": "pub fn min_stake(&self) -> u64;",
              "docs": "Returns the minimum stake in micro-MINT for this tier.\n\n1 MINT = 1,000,000 micro-MINT.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "provider::ProviderTier::from_stake",
              "kind": "function_item",
              "signature": "pub fn from_stake(stake: u64) -> Self;",
              "docs": "Returns the highest tier achievable for the given stake amount\n(in micro-MINT).",
              "attributes": "",
              "line": 40
            },
            {
              "name": "provider::ProviderStatus",
              "kind": "enum_item",
              "signature": "pub enum ProviderStatus {\n    /// Provider is active and accepting jobs.\n    Active,\n    /// Provider is temporarily suspended (e.g. lost challenge).\n    Suspended,\n    /// Provider initiated exit; in unbonding period.\n    Exiting,\n    /// Provider has fully exited and stake is returned.\n    Exited,\n}",
              "docs": "Current status of a registered provider.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 55
            },
            {
              "name": "provider::ComputePricing",
              "kind": "struct_item",
              "signature": "pub struct ComputePricing {\n/// Price per input token in micro-MINT.\n\npub price_per_input_token: u64,\n/// Price per output token in micro-MINT.\n\npub price_per_output_token: u64,\n/// Price per GPU-second in micro-MINT.\n\npub price_per_gpu_second: u64,\n/// Minimum charge for any job in micro-MINT.\n\npub min_job_cost: u64\n}",
              "docs": "Pricing model for a compute provider.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "provider::ProviderRegistration",
              "kind": "struct_item",
              "signature": "pub struct ProviderRegistration {\n/// The DID of the provider (`did:oas:...`).\n\npub provider_did: String,\n/// The human root DID that owns this provider.\n\npub human_root_did: String,\n/// Tier derived from the staked amount.\n\npub tier: ProviderTier,\n/// Staked amount in micro-MINT.\n\npub stake: u64,\n/// Hardware capabilities (GPU type, memory, etc.).\n\npub capabilities: serde_json::Value,\n/// Pricing model published by the provider.\n\npub pricing: ComputePricing,\n/// Epoch at which the provider registered.\n\npub registered_epoch: u64,\n/// Current operational status.\n\npub status: ProviderStatus\n}",
              "docs": "On-chain registration record for a compute provider.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 81
            },
            {
              "name": "provider::ProviderRegistration::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Returns `true` if the provider is eligible to accept new jobs.",
              "attributes": "",
              "line": 102
            },
            {
              "name": "provider::ProviderRegistration::stake_is_sufficient",
              "kind": "function_item",
              "signature": "pub fn stake_is_sufficient(&self) -> bool;",
              "docs": "Returns `true` if the stake satisfies the minimum for the claimed tier.",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "receipt",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/receipt.rs",
          "sha256": "903ce5f1b151c7a017d192ad4417d275471639ad9a2c7287edcc824937c953cc",
          "attributes": "",
          "items": [
            {
              "name": "receipt::ComputeReceipt",
              "kind": "struct_item",
              "signature": "pub struct ComputeReceipt {\n/// Unique receipt identifier.\n\npub receipt_id: String,\n/// The job this receipt corresponds to.\n\npub job_id: String,\n/// DID of the provider that executed the job.\n\npub provider_did: String,\n/// DID of the consumer that requested the job.\n\npub consumer_did: String,\n/// Model identifier used for inference.\n\npub model_id: String,\n/// Number of input tokens processed.\n\npub tokens_in: u64,\n/// Number of output tokens generated.\n\npub tokens_out: u64,\n/// GPU-seconds consumed.\n\npub gpu_seconds: f64,\n/// Total cost in micro-MINT.\n\npub total_cost: u64,\n/// ISO 8601 timestamp when execution started.\n\npub started_at: String,\n/// ISO 8601 timestamp when execution completed.\n\npub completed_at: String,\n/// BLAKE3 hash of the input payload.\n\npub input_hash: SigilHash,\n/// BLAKE3 hash of the output payload.\n\npub output_hash: SigilHash,\n/// BLAKE3 hash of the entire receipt (excluding this field).\n\npub receipt_hash: SigilHash,\n/// Ed25519 signature from the provider over `receipt_hash`.\n\npub provider_signature: Vec<u8>\n}",
              "docs": "A compute receipt recording the execution of a single job.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "receipt::ComputeReceipt::compute_cost",
              "kind": "function_item",
              "signature": "pub fn compute_cost(\n        pricing: &ComputePricing,\n        tokens_in: u64,\n        tokens_out: u64,\n        gpu_seconds: f64,\n    ) -> u64;",
              "docs": "Computes the total cost for a job given a pricing model and resource\nconsumption.\n\nThe cost is the maximum of the computed usage cost and the provider's\nminimum job cost.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "receipt::ComputeReceipt::compute_receipt_hash",
              "kind": "function_item",
              "signature": "pub fn compute_receipt_hash(&self) -> SigilHash;",
              "docs": "Computes the BLAKE3 hash of the receipt's content fields.\n\nAll fields except `receipt_hash` and `provider_signature` contribute\nto the hash.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "receipt::ComputeReceipt::verify_hash",
              "kind": "function_item",
              "signature": "pub fn verify_hash(&self) -> Result<(), AriseError>;",
              "docs": "Verifies that the stored `receipt_hash` matches the computed hash.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "receipt::ComputeReceipt::verify_provider_signature",
              "kind": "function_item",
              "signature": "pub fn verify_provider_signature(\n        &self,\n        provider_public_key: &[u8; 32],\n    ) -> Result<(), AriseError>;",
              "docs": "Verifies the provider's Ed25519 signature over the stored receipt hash.",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "reputation",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/reputation.rs",
          "sha256": "535cb70f9c09c56d496ed2c6bd999c6f77a097da31121d7a68c8c8a4925f91fe",
          "attributes": "",
          "items": [
            {
              "name": "reputation::ReputationSignals",
              "kind": "struct_item",
              "signature": "pub struct ReputationSignals {\n/// Fraction of accepted jobs that completed successfully.\n\npub completion_rate: f64,\n/// Fraction of challenges the provider survived (was not penalized).\n\npub challenge_survival: f64,\n/// Accuracy of the provider's advertised latency vs actual.\n\npub latency_accuracy: f64,\n/// Fraction of time the provider was available.\n\npub uptime: f64,\n/// Freshness of hardware attestation (1.0 = just attested, decays).\n\npub attestation_freshness: f64\n}",
              "docs": "Reputation signals for a compute provider.\n\nEach field is a value in `[0.0, 1.0]` representing the provider's\nperformance on that dimension.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "reputation::ReputationSignals::composite_score",
              "kind": "function_item",
              "signature": "pub fn composite_score(&self) -> f64;",
              "docs": "Computes the weighted composite reputation score.\n\nReturns a value in `[0.0, 1.0]` if all input signals are in range.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "reputation::ReputationSignals::is_valid",
              "kind": "function_item",
              "signature": "pub fn is_valid(&self) -> bool;",
              "docs": "Returns `true` if all signal values are in the valid `[0.0, 1.0]` range.",
              "attributes": "",
              "line": 51
            }
          ],
          "parseErrors": false
        },
        {
          "module": "settlement",
          "source": "sigil/node/../arise-bridge/arise-sigil/src/settlement.rs",
          "sha256": "39256086a4976385550306bf9b6aed8a74e90c967766bae2bb38092d1e7cc79b",
          "attributes": "",
          "items": [
            {
              "name": "settlement::SettlementAction",
              "kind": "struct_item",
              "signature": "pub struct SettlementAction {\n/// The compute receipt being settled.\n\npub receipt: ComputeReceipt,\n/// Amount to debit from the consumer's escrow.\n\npub escrow_debit: u64,\n/// Amount to credit to the provider's account.\n\npub provider_credit: u64,\n/// The receipt hash to anchor on-chain.\n\npub receipt_anchor_hash: SigilHash\n}",
              "docs": "Describes the on-chain settlement for a single compute receipt.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "settlement::create_settlement",
              "kind": "function_item",
              "signature": "pub fn create_settlement(\n    receipt: &ComputeReceipt,\n    provider_public_key: &[u8; 32],\n) -> Result<SettlementAction, AriseError>;",
              "docs": "Constructs a settlement action from a verified compute receipt.\n\nThe function verifies the receipt hash and provider signature, then\nbuilds a settlement that debits the consumer's escrow and credits the provider.",
              "attributes": "",
              "line": 30
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "arise-verify",
      "version": "0.1.0",
      "source": "sigil/node/../arise-bridge/arise-verify",
      "manifestSha256": "c2dd9eccac843f0158a63900b085cb423ab75deec5291d614e5310e0da86f89b",
      "features": {},
      "publish": true,
      "url": "/reference/rust/arise-verify",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/node/../arise-bridge/arise-verify/src/lib.rs",
          "sha256": "8a44e7911b44bd156d0eb6382c53bdfea191606e8fa5f1685ba6e6439541dee9",
          "attributes": "",
          "items": [
            {
              "name": "benchmark",
              "kind": "module",
              "signature": "pub mod benchmark;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "optimistic",
              "kind": "module",
              "signature": "pub mod optimistic;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "redundant",
              "kind": "module",
              "signature": "pub mod redundant;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "sentinel",
              "kind": "module",
              "signature": "pub mod sentinel;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "tee",
              "kind": "module",
              "signature": "pub mod tee;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "pub use benchmark::{BenchmarkResult, BenchmarkVerification};",
              "kind": "use_declaration",
              "signature": "pub use benchmark::{BenchmarkResult, BenchmarkVerification};",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "pub use error::VerifyError;",
              "kind": "use_declaration",
              "signature": "pub use error::VerifyError;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "pub use optimistic::OptimisticVerification;",
              "kind": "use_declaration",
              "signature": "pub use optimistic::OptimisticVerification;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use redundant::{ProviderResult, RedundantVerification};",
              "kind": "use_declaration",
              "signature": "pub use redundant::{ProviderResult, RedundantVerification};",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use sentinel::{SentinelProbe, SentinelScheduler};",
              "kind": "use_declaration",
              "signature": "pub use sentinel::{SentinelProbe, SentinelScheduler};",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pub use tee::{TeeAttestation, TeeType};",
              "kind": "use_declaration",
              "signature": "pub use tee::{TeeAttestation, TeeType};",
              "docs": "",
              "attributes": "",
              "line": 36
            }
          ],
          "parseErrors": false
        },
        {
          "module": "benchmark",
          "source": "sigil/node/../arise-bridge/arise-verify/src/benchmark.rs",
          "sha256": "e86921c675edc7c75b7782adfc2322ae55f0c3e5c04b548efb84d245e09159a5",
          "attributes": "",
          "items": [
            {
              "name": "benchmark::DEFAULT_TOLERANCE_PCT",
              "kind": "const_item",
              "signature": "pub const DEFAULT_TOLERANCE_PCT: f64;",
              "docs": "Default tolerance percentage (10%) before claims are considered exceeded.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "benchmark::BenchmarkResult",
              "kind": "enum_item",
              "signature": "pub enum BenchmarkResult {\n    /// All claims are verified within tolerance.\n    Verified,\n    /// Claims deviate but are within the acceptable tolerance.\n    WithinTolerance {\n        /// Maximum deviation percentage observed.\n        deviation_pct: f64,\n    },\n    /// A claim significantly exceeds the measured value.\n    ClaimsExceeded {\n        /// The metric that was exceeded.\n        metric: String,\n        /// The value the provider claimed.\n        claimed: f64,\n        /// The value that was actually measured.\n        measured: f64,\n    },\n    /// No measurements have been taken yet.\n    NotYetMeasured,\n}",
              "docs": "Result of comparing claimed vs measured hardware performance.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "benchmark::BenchmarkVerification",
              "kind": "struct_item",
              "signature": "pub struct BenchmarkVerification {\n/// DID of the provider.\n\npub provider_did: String,\n/// Claimed peak TFLOPS.\n\npub claimed_tflops: f64,\n/// Claimed network bandwidth in Gbps.\n\npub claimed_bandwidth_gbps: f64,\n/// Claimed inference latency in milliseconds.\n\npub claimed_latency_ms: f64,\n/// Measured peak TFLOPS (if benchmark has run).\n\npub measured_tflops: Option<f64>,\n/// Measured network bandwidth in Gbps (if benchmark has run).\n\npub measured_bandwidth_gbps: Option<f64>,\n/// Measured inference latency in milliseconds (if benchmark has run).\n\npub measured_latency_ms: Option<f64>\n}",
              "docs": "Hardware benchmark data for a provider, comparing claims vs measurements.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 38
            },
            {
              "name": "benchmark::BenchmarkVerification::verify_claims",
              "kind": "function_item",
              "signature": "pub fn verify_claims(&self) -> BenchmarkResult;",
              "docs": "Verifies provider claims against measured values.\n\nFor TFLOPS and bandwidth, the claimed value should not exceed the\nmeasured value by more than the tolerance. For latency, the measured\nvalue should not exceed the claimed value by more than the tolerance\n(lower latency is better).",
              "attributes": "",
              "line": 62
            },
            {
              "name": "benchmark::BenchmarkVerification::verify_claims_with_tolerance",
              "kind": "function_item",
              "signature": "pub fn verify_claims_with_tolerance(&self, tolerance_pct: f64) -> BenchmarkResult;",
              "docs": "Verifies claims with a custom tolerance percentage.",
              "attributes": "",
              "line": 67
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/node/../arise-bridge/arise-verify/src/error.rs",
          "sha256": "08e6517384306a03c27d724971900d7b191e792f58ee82fdf263f147ba93110f",
          "attributes": "",
          "items": [
            {
              "name": "error::VerifyError",
              "kind": "enum_item",
              "signature": "pub enum VerifyError {\n    /// The referenced sentinel probe was not found.\n    #[error(\"probe not found: {0}\")]\n    ProbeNotFound(String),\n\n    /// The referenced provider was not found.\n    #[error(\"provider not found: {0}\")]\n    ProviderNotFound(String),\n\n    /// Not enough providers are available for redundant verification.\n    #[error(\"insufficient providers: required {required}, available {available}\")]\n    InsufficientProviders {\n        /// The number of providers required.\n        required: usize,\n        /// The number of providers available.\n        available: usize,\n    },\n\n    /// Two or more providers in a redundant verification share a human root.\n    #[error(\"duplicate human root DID: {0}\")]\n    DuplicateHumanRoot(String),\n\n    /// The optimistic challenge window has already closed.\n    #[error(\"challenge window is closed\")]\n    ChallengeWindowClosed,\n\n    /// TEE attestation report verification failed.\n    #[error(\"TEE verification failed: {0}\")]\n    TeeVerificationFailed(String),\n\n    /// Hardware benchmark claims do not match measured values.\n    #[error(\"benchmark mismatch: {0}\")]\n    BenchmarkMismatch(String),\n}",
              "docs": "Errors that can occur during compute verification.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "optimistic",
          "source": "sigil/node/../arise-bridge/arise-verify/src/optimistic.rs",
          "sha256": "edd552d58eba391a1a72c0131c6645e6e7c030b2f066dcdc4d460dd6c3659c64",
          "attributes": "",
          "items": [
            {
              "name": "optimistic::DEFAULT_CHALLENGE_WINDOW_EPOCHS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_CHALLENGE_WINDOW_EPOCHS: u64;",
              "docs": "Default number of epochs for the challenge window.",
              "attributes": "",
              "line": 12
            },
            {
              "name": "optimistic::OptimisticVerification",
              "kind": "struct_item",
              "signature": "pub struct OptimisticVerification {\n/// The receipt being verified.\n\npub receipt_id: String,\n/// Provider's Ed25519 signature over the receipt hash.\n\npub provider_signature: Vec<u8>,\n/// Length of the challenge window in epochs.\n\npub challenge_window_epochs: u64,\n/// Epoch when the receipt was submitted.\n\npub submitted_epoch: u64,\n/// Whether the verification has been finalized.\n\npub finalized: bool\n}",
              "docs": "T1: Optimistic verification of a compute receipt.\n\nThe receipt is provisionally accepted upon provider signature.\nIf no challenge is raised during the window, it finalizes.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "optimistic::OptimisticVerification::new",
              "kind": "function_item",
              "signature": "pub fn new(receipt_id: String, signature: Vec<u8>, epoch: u64) -> Self;",
              "docs": "Creates a new optimistic verification with the default challenge window.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "optimistic::OptimisticVerification::with_window",
              "kind": "function_item",
              "signature": "pub fn with_window(\n        receipt_id: String,\n        signature: Vec<u8>,\n        epoch: u64,\n        window_epochs: u64,\n    ) -> Self;",
              "docs": "Creates a new optimistic verification with a custom challenge window.",
              "attributes": "",
              "line": 45
            },
            {
              "name": "optimistic::OptimisticVerification::is_challenge_window_open",
              "kind": "function_item",
              "signature": "pub fn is_challenge_window_open(&self, current_epoch: u64) -> bool;",
              "docs": "Returns `true` if the challenge window is still open at the given epoch.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "optimistic::OptimisticVerification::finalize",
              "kind": "function_item",
              "signature": "pub fn finalize(&mut self, current_epoch: u64) -> Result<(), VerifyError>;",
              "docs": "Finalizes the verification if the challenge window has elapsed.\n\nReturns an error if the window is still open or the verification\nis already finalized.",
              "attributes": "",
              "line": 69
            }
          ],
          "parseErrors": false
        },
        {
          "module": "redundant",
          "source": "sigil/node/../arise-bridge/arise-verify/src/redundant.rs",
          "sha256": "e994850e47e1b69c7e4bfe2292d8fcbc89e301a6c28df4b492e55b06a7626c73",
          "attributes": "",
          "items": [
            {
              "name": "redundant::DEFAULT_REQUIRED_PROVIDERS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_REQUIRED_PROVIDERS: usize;",
              "docs": "Default number of providers for redundant verification.",
              "attributes": "",
              "line": 13
            },
            {
              "name": "redundant::DEFAULT_REQUIRED_MAJORITY",
              "kind": "const_item",
              "signature": "pub const DEFAULT_REQUIRED_MAJORITY: usize;",
              "docs": "Default majority threshold.",
              "attributes": "",
              "line": 16
            },
            {
              "name": "redundant::ProviderResult",
              "kind": "struct_item",
              "signature": "pub struct ProviderResult {\n/// DID of the provider that executed this replica.\n\npub provider_did: String,\n/// Human root DID backing this provider.\n\npub human_root_did: String,\n/// BLAKE3 hash of the output produced.\n\npub output_hash: [u8; 32],\n/// Whether the provider has completed execution.\n\npub completed: bool\n}",
              "docs": "A single provider's result for a redundant verification job.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "redundant::RedundantVerification",
              "kind": "struct_item",
              "signature": "pub struct RedundantVerification {\n/// The job being verified.\n\npub job_id: String,\n/// Results collected from providers.\n\npub provider_results: Vec<ProviderResult>,\n/// Number of providers required (default 3).\n\npub required_providers: usize,\n/// Number of agreeing providers needed for consensus (default 2).\n\npub required_majority: usize\n}",
              "docs": "T2: Redundant verification across multiple providers.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 33
            },
            {
              "name": "redundant::RedundantVerification::new",
              "kind": "function_item",
              "signature": "pub fn new(job_id: String, n: usize) -> Self;",
              "docs": "Creates a new redundant verification for the given job.",
              "attributes": "",
              "line": 46
            },
            {
              "name": "redundant::RedundantVerification::add_result",
              "kind": "function_item",
              "signature": "pub fn add_result(&mut self, result: ProviderResult) -> Result<(), VerifyError>;",
              "docs": "Adds a provider result, enforcing uniqueness of provider DIDs and\nhuman root DIDs.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "redundant::RedundantVerification::has_consensus",
              "kind": "function_item",
              "signature": "pub fn has_consensus(&self) -> bool;",
              "docs": "Returns `true` if a majority of completed providers agree on the\noutput hash.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "redundant::RedundantVerification::consensus_hash",
              "kind": "function_item",
              "signature": "pub fn consensus_hash(&self) -> Option<[u8; 32]>;",
              "docs": "Returns the majority output hash if consensus exists.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "redundant::RedundantVerification::outliers",
              "kind": "function_item",
              "signature": "pub fn outliers(&self) -> Vec<&ProviderResult>;",
              "docs": "Returns references to results that disagree with the consensus hash.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "redundant::RedundantVerification::verify_different_roots",
              "kind": "function_item",
              "signature": "pub fn verify_different_roots(&self) -> bool;",
              "docs": "Returns `true` if all providers have different human root DIDs.",
              "attributes": "",
              "line": 151
            },
            {
              "name": "redundant::RedundantVerification::is_complete",
              "kind": "function_item",
              "signature": "pub fn is_complete(&self) -> bool;",
              "docs": "Returns `true` if enough provider results have been collected and\nall are completed.",
              "attributes": "",
              "line": 162
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sentinel",
          "source": "sigil/node/../arise-bridge/arise-verify/src/sentinel.rs",
          "sha256": "1539bec5c95d7a84e6120400e6a1fd3da909c4a1dd97f01413a4f7fb7e6fb2c0",
          "attributes": "",
          "items": [
            {
              "name": "sentinel::DEFAULT_PROBE_INTERVAL_SECS",
              "kind": "const_item",
              "signature": "pub const DEFAULT_PROBE_INTERVAL_SECS: u64;",
              "docs": "Default probe interval in seconds (5 minutes).",
              "attributes": "",
              "line": 13
            },
            {
              "name": "sentinel::DEFAULT_MAX_HISTORY",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_HISTORY: usize;",
              "docs": "Default maximum history size per scheduler.",
              "attributes": "",
              "line": 16
            },
            {
              "name": "sentinel::SentinelProbe",
              "kind": "struct_item",
              "signature": "pub struct SentinelProbe {\n/// Unique probe identifier.\n\npub probe_id: String,\n/// DID of the provider being probed.\n\npub provider_did: String,\n/// Known input data for the probe.\n\npub known_input: Vec<u8>,\n/// Expected BLAKE3 hash of the correct output.\n\npub expected_output_hash: [u8; 32],\n/// Epoch-second timestamp when the probe was sent.\n\npub sent_at: u64,\n/// Whether a response has been received.\n\npub response_received: bool,\n/// Whether the response was correct.\n\npub response_correct: bool,\n/// Response latency in milliseconds (if received).\n\npub response_latency_ms: Option<u64>\n}",
              "docs": "A single sentinel probe sent to a provider.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "sentinel::SentinelScheduler",
              "kind": "struct_item",
              "signature": "pub struct SentinelScheduler {\n/// Interval between probes in seconds.\n\npub probe_interval_secs: u64,\n/// Currently active (pending) probes.\n\npub active_probes: Vec<SentinelProbe>,\n/// Completed probes (capped at `max_history`).\n\npub probe_history: Vec<SentinelProbe>,\n/// Maximum number of completed probes to retain.\n\npub max_history: usize\n}",
              "docs": "Scheduler that manages sentinel probes for providers.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "sentinel::SentinelScheduler::new",
              "kind": "function_item",
              "signature": "pub fn new(interval_secs: u64) -> Self;",
              "docs": "Creates a new scheduler with the given probe interval.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "sentinel::SentinelScheduler::create_probe",
              "kind": "function_item",
              "signature": "pub fn create_probe(\n        &mut self,\n        probe_id: String,\n        provider_did: &str,\n        input: Vec<u8>,\n        expected_hash: [u8; 32],\n        sent_at: u64,\n    ) -> &SentinelProbe;",
              "docs": "Creates a new sentinel probe for a provider.\n\nThe probe is added to the active probes list and a reference\nto it is returned.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "sentinel::SentinelScheduler::record_response",
              "kind": "function_item",
              "signature": "pub fn record_response(\n        &mut self,\n        probe_id: &str,\n        correct: bool,\n        latency_ms: u64,\n    ) -> Result<(), VerifyError>;",
              "docs": "Records a response for an active probe, moving it to history.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "sentinel::SentinelScheduler::provider_reliability",
              "kind": "function_item",
              "signature": "pub fn provider_reliability(&self, provider_did: &str) -> f64;",
              "docs": "Computes the reliability score for a provider based on completed probes.\n\nReturns the fraction of correct responses out of all received responses.\nReturns `1.0` if no probes have been recorded (benefit of the doubt).",
              "attributes": "",
              "line": 122
            },
            {
              "name": "sentinel::SentinelScheduler::needs_probe",
              "kind": "function_item",
              "signature": "pub fn needs_probe(&self, provider_did: &str, now: u64) -> bool;",
              "docs": "Returns `true` if the provider needs a new probe based on the time\nsince their last probe.",
              "attributes": "",
              "line": 139
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tee",
          "source": "sigil/node/../arise-bridge/arise-verify/src/tee.rs",
          "sha256": "f0b2d04a4dd99b19e9a83082489c219ff624f378605c889119b3c4944e804287",
          "attributes": "",
          "items": [
            {
              "name": "tee::TeeType",
              "kind": "enum_item",
              "signature": "pub enum TeeType {\n    /// Intel Software Guard Extensions.\n    IntelSgx,\n    /// Intel Trust Domain Extensions.\n    IntelTdx,\n    /// AMD Secure Encrypted Virtualization - Secure Nested Paging.\n    AmdSevSnp,\n    /// Arm Confidential Compute Architecture.\n    ArmCca,\n}",
              "docs": "Supported TEE platforms.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "tee::TeeAttestation",
              "kind": "struct_item",
              "signature": "pub struct TeeAttestation {\n/// The type of TEE platform.\n\npub tee_type: TeeType,\n/// Raw attestation report data.\n\npub report_data: Vec<u8>,\n/// Platform measurement (e.g. MRENCLAVE for SGX).\n\npub measurement: Vec<u8>,\n/// Human-readable platform information string.\n\npub platform_info: String,\n/// Whether the attestation has been structurally verified.\n\npub verified: bool\n}",
              "docs": "A TEE attestation report from a provider.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 44
            },
            {
              "name": "tee::TeeAttestation::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        tee_type: TeeType,\n        report_data: Vec<u8>,\n        measurement: Vec<u8>,\n        platform_info: String,\n    ) -> Self;",
              "docs": "Creates a new unverified TEE attestation.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "tee::TeeAttestation::verify_report",
              "kind": "function_item",
              "signature": "pub fn verify_report(&mut self) -> Result<bool, VerifyError>;",
              "docs": "Performs structural verification of the attestation report.\n\nThis checks that the report data and measurement are non-empty\nand meet minimum length requirements for the platform. Full\ncryptographic verification is platform-specific and requires\nvendor libraries (Intel DCAP, AMD SEV Tool, etc.).\n\nReturns `true` if structurally valid, `false` otherwise.",
              "attributes": "",
              "line": 82
            }
          ],
          "parseErrors": false
        }
      ]
    }
  ]
}
