A secure, decentralized smart contract on the Stacks blockchain for storing encrypted AI assistant interactions, user preferences, and private data with granular access control.
This Clarity smart contract provides a robust vault system where users can store encrypted data from AI interactions, manage access permissions, and configure AI preferences. All data is stored on-chain with cryptographic security and owner-controlled access.
- Create Vaults: Store encrypted data (up to 10,000 characters) with metadata
- Update Vaults: Modify existing vault contents with version tracking
- Access Tracking: Monitor vault access with automatic counter increments
- Vault Control: Activate/deactivate vaults as needed
- Owner Permissions: Full control over vault operations
- Shared Access: Grant read access to other principals
- Permission Levels: Define custom permission types (read, write, admin, etc.)
- Time-Based Expiration: Set temporary access with block-height expiration
- Access Revocation: Remove permissions at any time
- Model Selection: Store preferred AI model configurations
- Privacy Levels: Set privacy settings (0-3 scale)
- Auto-Delete: Configure automatic data deletion schedules
- Notifications: Toggle notification preferences
- Storage Fees: 1 STX per vault creation (configurable)
- Spam Prevention: Fee-based system prevents abuse
- Admin Controls: Owner can adjust fees and size limits
(create-vault (encrypted-data (string-utf8 10000)) (metadata (string-utf8 500)))Creates a new vault with encrypted data. Returns vault ID.
(update-vault (vault-id uint) (encrypted-data (string-utf8 10000)) (metadata (string-utf8 500)))Updates existing vault contents. Only owner can update.
(access-vault (vault-id uint))Retrieves vault data if caller has access permissions.
(deactivate-vault (vault-id uint))Deactivates a vault, preventing further access.
(grant-access (vault-id uint) (accessor principal) (permission (string-ascii 20)) (duration-blocks (optional uint)))Grants access to another user with optional expiration.
(revoke-access (vault-id uint) (accessor principal))Removes access permissions from a user.
(set-preferences (model (string-ascii 50)) (privacy uint) (auto-delete (optional uint)) (notifications bool))Configures AI assistant preferences.
(get-vault-info (vault-id uint))Returns complete vault information.
(get-user-vault-count (owner principal))Returns total vaults owned by a principal.
(get-user-vault-by-index (owner principal) (index uint))Retrieves vault ID by index for a user.
(get-access-info (vault-id uint) (accessor principal))Returns access permission details.
(get-preferences (owner principal))Returns AI preferences for a user.
(check-access (vault-id uint) (caller principal))Checks if a principal has access to a vault.
(set-storage-fee (new-fee uint))Updates the storage fee. Owner only.
(set-max-data-size (new-size uint))Adjusts maximum data size (1,000-50,000 characters). Owner only.
| Code | Constant | Description |
|---|---|---|
| u100 | err-owner-only |
Operation requires contract owner |
| u101 | err-not-authorized |
Caller lacks required permissions |
| u102 | err-vault-not-found |
Vault ID doesn't exist |
| u103 | err-invalid-input |
Input validation failed |
| u104 | err-quota-exceeded |
Data size exceeds limit |
| u105 | err-already-shared |
Access already granted |
| u106 | err-share-not-found |
Access permission not found |
{
owner: principal,
encrypted-data: (string-utf8 10000),
metadata: (string-utf8 500),
created-at: uint,
updated-at: uint,
access-count: uint,
is-active: bool
}{
granted-at: uint,
permission-level: (string-ascii 20),
expires-at: (optional uint)
}{
model-preference: (string-ascii 50),
privacy-level: uint,
auto-delete-days: (optional uint),
notification-enabled: bool
}(contract-call? .ai-data-vault create-vault
u"encrypted_conversation_data_here"
u"AI chat from 2025-11-12");; Grant access for 1000 blocks (~1 week)
(contract-call? .ai-data-vault grant-access
u1
'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
"read"
(some u1000))(contract-call? .ai-data-vault set-preferences
"claude-sonnet-4"
u2
(some u90)
true)- Encryption Required: Always encrypt sensitive data before storing on-chain
- Access Control: Regularly audit granted permissions
- Time-Limited Access: Use expiration for temporary sharing
- Privacy Levels: Configure appropriate privacy settings
- Data Validation: All inputs are validated before processing
- Deploy contract to Stacks blockchain
- Contract deployer becomes owner
- Set initial storage fee and size limits
- Users can immediately begin creating vaults