Skip to main content

Storage Integration Documentation

Overview

The SELF SDK provides seamless integration with the SELF storage layer, including IPFS and OrbitDB. This documentation covers the available storage operations and their usage.

IPFS Integration

Key Features

  • File upload and retrieval
  • Content addressing
  • Decentralized storage
  • Version control

Usage Example

// Upload file to IPFS
let ipfs = IPFSIntegration::new();
let cid = ipfs.upload_file("path/to/file.txt").unwrap();

// Retrieve file
let content = ipfs.get_file(&cid).unwrap();

OrbitDB Integration

Key Features

  • Decentralized database access
  • Real-time synchronization
  • Event logging
  • Version control

Usage Example

// Create OrbitDB store
let orbitdb = OrbitDBIntegration::new("validator_store");

// Add validator data
let validator_data = ValidatorData {
validator_id: "validator_1",
reputation: 100,
last_update: Utc::now(),
};

orbitdb.add_validator(&validator_data).unwrap();

// Query validator data
let validators = orbitdb.get_validators().unwrap();

Cross-Chain Storage

Key Features

  • Cross-chain file sharing
  • Consistent storage across chains
  • Version synchronization
  • Data integrity verification

Usage Example

// Share file across chains
let cross_chain = CrossChainStorage::new();
let shared_cid = cross_chain.share_file("source_chain", "target_chain", "file_cid").unwrap();

// Verify cross-chain data
let verified = cross_chain.verify_data("source_chain", "target_chain", &shared_cid).unwrap();

Best Practices

Security

  • Encrypt sensitive data
  • Use proper authentication
  • Implement access control
  • Monitor storage usage

Performance

  • Batch operations when possible
  • Use proper caching
  • Implement retry mechanisms
  • Monitor network latency

Error Handling

Common Errors

  • Storage limit exceeded
  • Invalid file format
  • Network errors
  • Permission denied

Error Handling Example

match ipfs.upload_file("path/to/file.txt") {
Ok(cid) => println!("File uploaded successfully: {}", cid),
Err(e) => match e {
IPFSError::StorageLimitExceeded => println!("Storage limit exceeded"),
IPFSError::InvalidFileFormat => println!("Invalid file format"),
IPFSError::NetworkError => println!("Network error occurred"),
_ => println!("Unknown error: {}", e),
}
}