Core AP2/TAP-aligned domain primitives for the Sardis stablecoin execution layer
Project description
sardis-core
Core AP2/TAP-aligned domain primitives for the Sardis stablecoin execution layer.
Overview
sardis-core provides foundational components shared across all Sardis services:
- Domain Models: Wallets, transactions, holds, agents, mandates, and virtual cards
- Configuration Management: Deterministic config loading with validation
- Security Utilities: Ed25519/ECDSA key management, MPC connectors
- Resilience Patterns: Retry mechanisms, circuit breakers, rate limiting
- Structured Logging: Sensitive data masking, request tracing
- Validation: Comprehensive input validation for payments and blockchain data
Installation
pip install sardis-core
Optional Dependencies
# For natural language policy parsing (OpenAI-powered)
pip install sardis-core[nl-parser]
# For Redis-based spending tracking
pip install sardis-core[spending-tracker]
# Install all optional dependencies
pip install sardis-core[all]
Quick Start
from sardis_v2_core import (
# Configuration
load_config_from_env,
validate_startup,
# Domain models
Wallet,
Transaction,
Hold,
Agent,
# Utilities
retry,
get_circuit_breaker,
get_logger,
validate_wallet_id,
)
# Load and validate configuration
config = load_config_from_env()
validate_startup(config)
# Get a structured logger
logger = get_logger("my_service")
# Use retry with exponential backoff
@retry(max_attempts=3, base_delay=1.0)
async def fetch_wallet(wallet_id: str) -> Wallet:
validate_wallet_id(wallet_id)
# ... fetch wallet logic
Features
Domain Models
from sardis_v2_core import Wallet, Transaction, TransactionStatus
# Create a wallet
wallet = Wallet(
wallet_id="wal_abc123",
owner_id="user_xyz",
chain="base",
address="0x...",
)
# Track transactions
tx = Transaction(
tx_id="tx_123",
wallet_id=wallet.wallet_id,
amount=100_00, # $100.00 in cents
status=TransactionStatus.PENDING,
)
Resilience Patterns
from sardis_v2_core import (
retry_async,
get_circuit_breaker,
CircuitBreakerConfig,
)
# Circuit breaker for external services
cb = get_circuit_breaker(
"mpc_service",
config=CircuitBreakerConfig(
failure_threshold=5,
recovery_timeout=30.0,
)
)
async with cb:
result = await call_mpc_service()
Structured Logging
from sardis_v2_core import get_logger, mask_sensitive_data
logger = get_logger("payments")
# Automatically masks sensitive fields
logger.info("Processing payment", extra={
"wallet_id": "wal_123",
"amount": 1000,
"card_number": "4111111111111111", # Will be masked
})
Architecture
sardis-core is designed as a pure domain library with no persistence or transport dependencies:
sardis-core/
├── exceptions.py # Comprehensive error hierarchy
├── config.py # Configuration models and loading
├── validators.py # Input validation utilities
├── retry.py # Retry mechanisms with backoff
├── circuit_breaker.py # Circuit breaker pattern
├── logging.py # Structured logging with masking
├── wallets.py # Wallet domain models
├── transactions.py # Transaction models
├── holds.py # Payment hold models
├── agents.py # AI agent models
├── mandates.py # AP2 mandate models
└── ...
Requirements
- Python 3.11+
- pydantic >= 2.6
- pydantic-settings >= 2.0
- PyNaCl >= 1.5
- cryptography >= 41.0
Documentation
Full documentation is available at docs.sardis.sh.
License
MIT License - see LICENSE for details.
Contributing
Contributions are welcome! Please see our Contributing Guide for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sardis_core-0.2.3.tar.gz.
File metadata
- Download URL: sardis_core-0.2.3.tar.gz
- Upload date:
- Size: 140.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d4f80e93b3971bfd4f7ae1ba8622cd4b5655736083b0c4f6fc33d55d03c85a2
|
|
| MD5 |
769b6a7185ae61135518dd2dfb15230a
|
|
| BLAKE2b-256 |
a40d76c5448ff94ecd371bebba91c51edff089d9c2ec2843f4cb8f84e06c6ac3
|
File details
Details for the file sardis_core-0.2.3-py3-none-any.whl.
File metadata
- Download URL: sardis_core-0.2.3-py3-none-any.whl
- Upload date:
- Size: 148.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f83f936a125a9495ba34a01d8db9aac1ba701d0f512cee97fc94f0e507d3a9c
|
|
| MD5 |
43e0bbb158e820dd2cea1ba7d104e601
|
|
| BLAKE2b-256 |
1da9af8c3c2962f0c03843da7c2d655d2b19a7fb36426700df25ee16fd912b48
|