Download seb/contracts/rust.template from Snapkitty/sov-kernel-monster: direct link, hf CLI and curl.
- Browser
- Download file 10.1 kB
-
https://huggingface.co/Snapkitty/sov-kernel-monster/resolve/main/seb/contracts/rust.template
- Command line
-
hf download hf://Snapkitty/sov-kernel-monster/seb/contracts/rust.template
-
curl -L -o rust.template https://huggingface.co/Snapkitty/sov-kernel-monster/resolve/main/seb/contracts/rust.template
10.1 kB
| // SEB Rust Contract Template | |
| // Generated from: SEB_SOVEREIGN_EVENT_BUS_MASTER_SPECIFICATION.xml | |
| // Version: 1.0.0 | |
| // Target: Rust Kernel Implementation | |
| use serde::{Deserialize, Serialize}; | |
| use blake3; | |
| use ed25519_dalek::{Signature, Signer, Verifier, PublicKey, SecretKey}; | |
| use ulid::Ulid; | |
| use chrono::{DateTime, Utc}; | |
| /// Event envelope structure following the SEB specification | |
| pub struct EventEnvelope { | |
| /// Event type identifier (e.g., "snapkitty.intent.verify_proof") | |
| pub event_type: String, | |
| /// Schema version for compatibility checking | |
| pub version: String, | |
| /// Unique event identifier (ULID format) | |
| pub id: String, | |
| /// Event creation timestamp in UTC | |
| pub timestamp: DateTime<Utc>, | |
| /// Structured intent describing the requested action | |
| pub intent: Intent, | |
| /// Execution context including environment and constraints | |
| pub context: Context, | |
| /// Authority scope and credentials for the requesting principal | |
| pub authority: Authority, | |
| /// Continuation data for multi-step workflows | |
| pub continuation: Option<Continuation>, | |
| /// Array of cryptographic evidence from prior steps | |
| pub evidence: Vec<Evidence>, | |
| /// Cryptographic seal (added by WORM sealer after execution) | |
| pub seal: Option<Seal>, | |
| } | |
| pub struct Intent { | |
| pub action: String, | |
| pub subject: String, | |
| pub parameters: serde_json::Value, | |
| } | |
| pub struct Context { | |
| pub environment: String, | |
| pub constraints: Constraints, | |
| pub metadata: serde_json::Value, | |
| } | |
| pub struct Constraints { | |
| pub network: NetworkPolicy, | |
| pub max_runtime_ms: u64, | |
| pub max_memory_bytes: u64, | |
| pub filesystem: FilesystemPolicy, | |
| } | |
| pub enum NetworkPolicy { | |
| Allow, | |
| Deny, | |
| Restricted, | |
| } | |
| pub enum FilesystemPolicy { | |
| ReadOnly, | |
| ReadWrite, | |
| Deny, | |
| } | |
| pub struct Authority { | |
| pub principal: String, | |
| pub credentials: Credentials, | |
| pub scope: Vec<String>, | |
| } | |
| pub struct Credentials { | |
| pub credential_type: String, | |
| pub value: String, | |
| pub signature: Option<String>, | |
| } | |
| pub struct Continuation { | |
| pub step: u32, | |
| pub total_steps: u32, | |
| pub state: serde_json::Value, | |
| } | |
| pub struct Evidence { | |
| pub evidence_type: String, | |
| pub hash: String, | |
| pub signature: String, | |
| pub timestamp: DateTime<Utc>, | |
| } | |
| pub struct Seal { | |
| pub hash: String, | |
| pub signature: String, | |
| pub public_key: String, | |
| pub timestamp: DateTime<Utc>, | |
| pub algorithm: String, | |
| } | |
| impl EventEnvelope { | |
| /// Create a new event envelope with generated ID and timestamp | |
| pub fn new( | |
| event_type: String, | |
| intent: Intent, | |
| context: Context, | |
| authority: Authority, | |
| ) -> Self { | |
| Self { | |
| event_type, | |
| version: "1.0.0".to_string(), | |
| id: Ulid::new().to_string(), | |
| timestamp: Utc::now(), | |
| intent, | |
| context, | |
| authority, | |
| continuation: None, | |
| evidence: Vec::new(), | |
| seal: None, | |
| } | |
| } | |
| /// Compute Blake3 hash of the envelope (excluding seal) | |
| pub fn compute_hash(&self) -> Result<String, Box<dyn std::error::Error>> { | |
| let mut envelope_copy = self.clone(); | |
| envelope_copy.seal = None; | |
| let json = serde_json::to_string(&envelope_copy)?; | |
| let hash = blake3::hash(json.as_bytes()); | |
| Ok(hash.to_hex().to_string()) | |
| } | |
| /// Seal the envelope with Ed25519 signature | |
| pub fn seal(&mut self, secret_key: &SecretKey) -> Result<(), Box<dyn std::error::Error>> { | |
| let hash = self.compute_hash()?; | |
| let signature = secret_key.sign(hash.as_bytes()); | |
| let public_key = PublicKey::from(secret_key); | |
| self.seal = Some(Seal { | |
| hash: hash.clone(), | |
| signature: hex::encode(signature.to_bytes()), | |
| public_key: hex::encode(public_key.to_bytes()), | |
| timestamp: Utc::now(), | |
| algorithm: "ed25519".to_string(), | |
| }); | |
| Ok(()) | |
| } | |
| /// Verify the envelope seal | |
| pub fn verify_seal(&self) -> Result<bool, Box<dyn std::error::Error>> { | |
| let seal = self.seal.as_ref() | |
| .ok_or("No seal present")?; | |
| let public_key_bytes = hex::decode(&seal.public_key)?; | |
| let public_key = PublicKey::from_bytes(&public_key_bytes)?; | |
| let signature_bytes = hex::decode(&seal.signature)?; | |
| let signature = Signature::from_bytes(&signature_bytes)?; | |
| let hash = self.compute_hash()?; | |
| Ok(public_key.verify(hash.as_bytes(), &signature).is_ok()) | |
| } | |
| } | |
| /// Policy gate for pre-execution verification | |
| pub trait PolicyGate { | |
| fn evaluate(&self, envelope: &EventEnvelope) -> Result<PolicyDecision, PolicyError>; | |
| } | |
| pub enum PolicyDecision { | |
| Allow, | |
| Deny { reason: String }, | |
| RequireAdditionalEvidence { required: Vec<String> }, | |
| } | |
| pub struct PolicyError { | |
| pub message: String, | |
| pub code: String, | |
| } | |
| /// Routing engine for event dispatch | |
| pub trait RoutingEngine { | |
| fn route(&self, envelope: &EventEnvelope) -> Result<RouteDestination, RoutingError>; | |
| } | |
| pub enum RouteDestination { | |
| Adapter { adapter_id: String }, | |
| Queue { queue_name: String }, | |
| Reject { reason: String }, | |
| } | |
| pub struct RoutingError { | |
| pub message: String, | |
| pub code: String, | |
| } | |
| /// Execution adapter trait | |
| pub trait ExecutionAdapter { | |
| fn execute(&self, envelope: &EventEnvelope) -> Result<ExecutionResult, ExecutionError>; | |
| fn capabilities(&self) -> Vec<String>; | |
| fn constraints(&self) -> Constraints; | |
| } | |
| pub struct ExecutionResult { | |
| pub status: ExecutionStatus, | |
| pub output: serde_json::Value, | |
| pub evidence: Vec<Evidence>, | |
| pub metrics: ExecutionMetrics, | |
| } | |
| pub enum ExecutionStatus { | |
| Success, | |
| Failure, | |
| Timeout, | |
| Denied, | |
| } | |
| pub struct ExecutionMetrics { | |
| pub duration_ms: u64, | |
| pub memory_used_bytes: u64, | |
| pub network_calls: u32, | |
| pub filesystem_operations: u32, | |
| } | |
| pub struct ExecutionError { | |
| pub message: String, | |
| pub code: String, | |
| pub recoverable: bool, | |
| } | |
| mod tests { | |
| use super::*; | |
| fn test_envelope_creation() { | |
| let intent = Intent { | |
| action: "verify_proof".to_string(), | |
| subject: "bundle:01J...".to_string(), | |
| parameters: serde_json::json!({}), | |
| }; | |
| let context = Context { | |
| environment: "test".to_string(), | |
| constraints: Constraints { | |
| network: NetworkPolicy::Deny, | |
| max_runtime_ms: 5000, | |
| max_memory_bytes: 1024 * 1024, | |
| filesystem: FilesystemPolicy::ReadOnly, | |
| }, | |
| metadata: serde_json::json!({}), | |
| }; | |
| let authority = Authority { | |
| principal: "test-principal".to_string(), | |
| credentials: Credentials { | |
| credential_type: "api_key".to_string(), | |
| value: "test-key".to_string(), | |
| signature: None, | |
| }, | |
| scope: vec!["read".to_string()], | |
| }; | |
| let envelope = EventEnvelope::new( | |
| "snapkitty.intent.verify_proof".to_string(), | |
| intent, | |
| context, | |
| authority, | |
| ); | |
| assert_eq!(envelope.version, "1.0.0"); | |
| assert!(!envelope.id.is_empty()); | |
| } | |
| fn test_envelope_hash() { | |
| let envelope = create_test_envelope(); | |
| let hash = envelope.compute_hash().unwrap(); | |
| assert_eq!(hash.len(), 64); // Blake3 produces 32 bytes = 64 hex chars | |
| } | |
| fn create_test_envelope() -> EventEnvelope { | |
| EventEnvelope::new( | |
| "test.event".to_string(), | |
| Intent { | |
| action: "test".to_string(), | |
| subject: "test".to_string(), | |
| parameters: serde_json::json!({}), | |
| }, | |
| Context { | |
| environment: "test".to_string(), | |
| constraints: Constraints { | |
| network: NetworkPolicy::Deny, | |
| max_runtime_ms: 1000, | |
| max_memory_bytes: 1024, | |
| filesystem: FilesystemPolicy::Deny, | |
| }, | |
| metadata: serde_json::json!({}), | |
| }, | |
| Authority { | |
| principal: "test".to_string(), | |
| credentials: Credentials { | |
| credential_type: "test".to_string(), | |
| value: "test".to_string(), | |
| signature: None, | |
| }, | |
| scope: vec![], | |
| }, | |
| ) | |
| } | |
| } |