Architecture Overview
Detailed system architecture of the Doxa Protocol
This document provides a comprehensive overview of the Doxa Protocol’s system architecture.
System Components
Core Components
The Doxa Protocol implements a simple yet robust stablecoin system with the following components:
-
DUSD Token System
- ICRC-1 compliant stablecoin
- 1:1 backed by ckUSDC collateral
- 6 decimal precision (1 DUSD = 1,000,000 units)
-
Stablecoin Minter
- Handles ckUSDC deposits
- Validates collateral transactions
- Mints DUSD tokens 1:1 ratio
-
Staking System
- 20% base APY staking rewards
- 30-day minimum lock period
- Bootstrap phase for early adopters
-
AMM Trading System
- Token swaps and price discovery
- Liquidity provision capabilities
- Multi-token support
Canister Architecture
// Core Canisters
DUSD_TOKEN: "irorr-5aaaa-aaaak-qddsq-cai" // ICRC-1 token
STAKING: "mhahe-xqaaa-aaaag-qndha-cai" // Staking rewards
MINTER: "[stablecoin-minter-canister]" // ckUSDC -> DUSD
SWAP: "[swap-canister]" // AMM functionality
Data Flow
Minting Process
- User deposits ckUSDC to reserve account
- Minter validates ckUSDC transaction on ledger
- Equivalent DUSD tokens minted 1:1 ratio
- DUSD transferred to user account
Staking Process
- User approves DUSD transfer to staking canister
- Stake position created with 30-day lock
- Rewards calculated at 20% base APY
- Bootstrap bonuses applied during early phase
Trading Process
- User initiates swap via AMM
- Price calculated based on liquidity pools
- Tokens exchanged with 0.3% trading fee
- Updated balances reflected on-chain
Inter-Canister Communication
// Example: Minting DUSD
actor StablecoinMinter {
let DUSD : Icrc.Self = actor("irorr-5aaaa-aaaak-qddsq-cai");
let ckUSDC : Icrc.Self = actor("xevnm-gaaaa-aaaar-qafnq-cai");
public shared func notify_mint_with_ckusdc({
ckusdc_block_index : Nat;
minting_token : Text;
}) : async Result<Nat, NotifyError> {
// Validate ckUSDC transaction
let validation = await validateCkUsdcTransaction(ckusdc_block_index);
// Mint equivalent DUSD
let result = await DUSD.icrc1_transfer({
amount = validation.amount;
to = validation.account;
// ... other parameters
});
result;
};
}
State Management
Stable Storage
// Staking canister state
private stable var stakingPool = {
apy = 20;
totalStaked = 0;
minimumStake = 10_000_000; // 10 DUSD
lockDuration = 2_592_000_000_000_000; // 30 days in nanoseconds
};
// Minter canister state
private stable var reserveAccount : Account = {
owner = Principal.fromText("ckusdc-reserve-account");
subaccount = null;
};
Memory Management
- Efficient state serialization
- Garbage collection optimization
- Canister upgrade compatibility
Security Architecture
Collateral Validation
private func validateCkUsdcBlockForMint(
blockIndex : Nat,
caller : Principal,
token : Text
) : async Result<(Nat, Account), NotifyError> {
// Get transaction from ckUSDC ledger
let transaction = await ckUSDC.get_transactions({
start = blockIndex;
length = 1;
});
// Validate minimum amount (1 ckUSDC)
if (transfer.amount < 1_000_000) {
return #err(#InvalidTransaction("Below minimum deposit"));
};
// Verify destination is reserve account
if (transfer.to != reserveAccount) {
return #err(#InvalidTransaction("Invalid destination"));
};
#ok(transfer.amount, transfer.from);
};
Access Control
- Role-based permissions for admin functions
- User authentication via Internet Identity
- Time-locked operations for security
Performance Characteristics
Transaction Throughput
- Token Transfers: ~2 second finality
- Staking Operations: Single block confirmation
- Minting: Depends on ckUSDC ledger validation
- Swaps: Real-time price calculation
Scalability Design
- Independent canister scaling
- Optimized query functions
- Efficient state management
Integration Points
ICRC-1 Compatibility
// Standard token interface
public query func icrc1_balance_of(account : Account) : async Nat
public shared func icrc1_transfer(args : TransferArg) : async TransferResult
public query func icrc1_metadata() : async [(Text, MetadataValue)]
DApp Integration
- Standard token interfaces
- Query-based price feeds
- Event notification system
Monitoring & Health
System Metrics
public query func getSystemStats() : async {
totalDUSDSupply: Nat;
totalCkUSDCReserves: Nat;
activeStakes: Nat;
totalValueLocked: Nat;
}
Health Checks
- Collateralization ratio monitoring
- Canister cycle tracking
- Transaction success rates
Future Architecture
Planned Enhancements
- Multi-collateral support expansion
- Advanced staking reward mechanisms
- Cross-chain bridge integrations
- Enhanced AMM features
Scalability Considerations
- Subnet deployment strategies
- Load balancing mechanisms
- State sharding possibilities