8.5 KiB
8.5 KiB
Atomic Settlement Flow
Overview
Atomic settlement ensures that cross-chain and cross-ledger transactions either complete entirely or fail entirely, with no partial state. This flow implements a dual-commitment protocol that commits to both sovereign and DBIS master ledgers atomically.
Prerequisites
- Source and destination banks are registered
- Valid transaction request
- Sufficient balance in source account
- Both ledgers (sovereign and DBIS) are operational
- Atomic settlement service initialized
Visual Flow Diagram
┌─────────────┐
│ Transaction │
│ Request │
└──────┬──────┘
│
│ 1. Prepare Commitment
▼
┌─────────────────────────┐
│ Prepare Dual-Commitment │
│ - Generate commitment │
│ - Create settlement ID │
└──────┬──────────────────┘
│
│ 2. Commit to Sovereign
▼
┌─────────────────────────┐
│ Commit to Sovereign │
│ Ledger │
│ - Post debit/credit │
│ - Generate hash │
└──────┬──────────────────┘
│
│ 3. Commit to DBIS
▼
┌─────────────────────────┐
│ Commit to DBIS Master │
│ Ledger │
│ - Post debit/credit │
│ - Generate hash │
└──────┬──────────────────┘
│
│ 4. Verify Commitments
▼
┌─────────────────────────┐
│ Verify Dual-Commitment │
│ - Compare hashes │
│ - Verify both posted │
└──────┬──────────────────┘
│
│ 5. Finalize
▼
┌─────────────┐
│ Settlement │
│ Complete │
└─────────────┘
Step-by-Step Process
Step 1: Prepare Dual-Commitment
- Receive atomic settlement request with:
- Source bank ID
- Destination bank ID
- Amount and currency
- Asset type
- Transaction ID (optional)
- Generate unique settlement ID:
{uuid} - Generate transaction ID if not provided:
{uuid} - Create commitment data structure:
- Settlement ID
- Transaction details
- Timestamp
- Nonce for uniqueness
- Prepare commitment hash input
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:33-42
Step 2: Commit to Sovereign Ledger
- Post to sovereign ledger:
- Lookup source account in sovereign bank
- Lookup destination account
- Create debit entry on source
- Create credit entry on destination
- Use ledger ID:
Sovereign_{sourceBankId}
- Retrieve ledger entry
- Extract block hash from ledger entry
- Store sovereign ledger hash
- If posting fails, throw error and terminate
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:44-49
Step 3: Commit to DBIS Master Ledger
- Post to DBIS master ledger:
- Lookup source account
- Lookup destination account
- Create debit entry on source
- Create credit entry on destination
- Use ledger ID:
Master - Include metadata:
{ atomicSettlement: true, settlementId }
- Retrieve ledger entry
- Extract block hash from ledger entry
- Store DBIS ledger hash
- If posting fails, rollback sovereign ledger and throw error
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:51-52
Step 4: Verify Dual-Commitment
- Compare hashes:
- Retrieve sovereign ledger hash
- Retrieve DBIS ledger hash
- Verify both hashes exist and are non-empty
- Verify ledger entries:
- Query sovereign ledger entry by hash
- Query DBIS ledger entry by hash
- Verify both entries exist
- Verify entry details match (amount, accounts, etc.)
- If verification fails:
- Rollback both ledger entries
- Mark settlement as failed
- Throw error
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:54-58
Step 5: Finalize Settlement
- Calculate settlement time:
- Start time recorded at Step 1
- End time = current time
- Settlement time = end - start
- Create atomic settlement record:
- Settlement ID
- Transaction ID
- Source and destination bank IDs
- Amount, currency, asset type
- Settlement mode:
atomic - Dual-ledger commit:
true - Sovereign ledger hash
- DBIS ledger hash
- Settlement time (milliseconds)
- Status:
settled - Committed and settled timestamps
- Return settlement result with:
- Settlement ID
- Status:
settled - Both ledger hashes
- Settlement time
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:60-90
Step 6: Error Handling
- If any step fails:
- Create failed settlement record
- Set status:
failed - Set dual-ledger commit:
false - Record error details
- Rollback any partial ledger entries:
- If sovereign posted but DBIS failed: rollback sovereign
- If DBIS posted but verification failed: rollback both
- Log error for investigation
Code Reference: src/core/settlement/isn/atomic-settlement.service.ts:91-111
Error Handling
Error: Commitment Preparation Failure
- Detection: Cannot generate commitment
- Action: Return error, terminate flow
- Recovery: Verify input parameters, retry
Error: Sovereign Ledger Post Failure
- Detection: Ledger posting fails
- Action: Terminate flow, no rollback needed
- Recovery: Verify ledger availability, check account status
Error: DBIS Ledger Post Failure
- Detection: DBIS posting fails after sovereign posted
- Action: Rollback sovereign ledger entry
- Recovery: Retry after verifying DBIS ledger status
Error: Dual-Commitment Verification Failure
- Detection: Hashes don't match or entries missing
- Action: Rollback both ledger entries
- Recovery:
- Investigate ledger integrity
- Verify hash generation
- Retry settlement
Error: Concurrent Modification
- Detection: Account balance changed during settlement
- Action: Rollback and retry
- Recovery: Implement optimistic locking
Integration Points
Related Services
- Atomic Settlement Service:
src/core/settlement/isn/atomic-settlement.service.ts - Ledger Service:
src/core/ledger/ledger.service.ts - Account Service:
src/core/accounts/account.service.ts - GSS Master Ledger:
src/core/settlement/gss/gss-master-ledger.service.ts
API Endpoints
POST /api/v1/isn/atomic-settlement/execute- Execute atomic settlementGET /api/v1/isn/atomic-settlement/:settlementId- Get settlement statusPOST /api/v1/isn/atomic-settlement/verify- Verify dual-commitment
Database Models
AtomicSettlement- Atomic settlement recordsLedgerEntry- Individual ledger entries
Performance Metrics
- Commitment Preparation: < 10ms target
- Sovereign Ledger Post: < 50ms target
- DBIS Ledger Post: < 50ms target
- Verification: < 20ms target
- Total End-to-End: < 130ms target
- Throughput: 10,000+ atomic settlements/second
- Availability: 99.99% uptime target
Security Considerations
Atomicity Guarantee
- Dual-commitment ensures both ledgers update or neither
- Rollback mechanism prevents partial state
- Verification step ensures consistency
Data Integrity
- Hash verification prevents tampering
- Dual-ledger hashes provide proof
- Settlement records provide audit trail
Concurrency Control
- Account locking during settlement
- Optimistic locking for balance checks
- Transaction isolation
Testing Scenarios
Happy Path
- Valid settlement request
- Successful commitment preparation
- Successful sovereign ledger post
- Successful DBIS ledger post
- Verification passes
- Settlement finalized
Error Scenarios
- Commitment preparation failure
- Sovereign ledger post failure
- DBIS ledger post failure
- Verification failure
- Concurrent modification
Edge Cases
- Maximum settlement amount
- Minimum settlement amount
- Same bank source and destination
- Cross-currency settlement
- Network partition during settlement
Related Flows: