- Add Foundry project configuration (foundry.toml, foundry.lock) - Add Solidity contracts (TokenFactory138, BridgeVault138, ComplianceRegistry, etc.) - Add API definitions (OpenAPI, GraphQL, gRPC, AsyncAPI) - Add comprehensive test suite (unit, integration, fuzz, invariants) - Add API services (REST, GraphQL, orchestrator, packet service) - Add documentation (ISO20022 mapping, runbooks, adapter guides) - Add development tools (RBC tool, Swagger UI, mock server) - Update OpenZeppelin submodules to v5.0.0
4.3 KiB
4.3 KiB
RTGS Adapter Specification
Overview
The RTGS (Real-Time Gross Settlement) adapter provides a generic framework for connecting to RTGS systems across different jurisdictions. RTGS systems settle payments individually and in real-time, making them suitable for high-value, time-critical transfers.
Architecture
ChainID 138 Events → RTGS Adapter → RTGS System (Jurisdiction-Specific) → Settlement Confirmation → ChainID 138
Responsibilities
- Event Watching: Monitor
TriggerCreatedevents for RTGS rail type - RTGS Message Construction: Build jurisdiction-specific messages (often ISO-20022 based)
- RTGS Submission: Submit via RTGS API (varies by jurisdiction)
- Attestation: Submit confirmations to
SettlementOrchestrator
Event Monitoring
Watched Events
RailTriggerRegistry.TriggerCreated(filter:rail == RTGS)RailTriggerRegistry.TriggerStateUpdated(filter:rail == RTGS)
RTGS Systems by Jurisdiction
Examples
- US: Fedwire (covered by FedwireAdapter)
- UK: CHAPS (Clearing House Automated Payment System)
- Canada: LVTS (Large Value Transfer System)
- Australia: RITS (Reserve Bank Information and Transfer System)
- Japan: BOJ-NET (Bank of Japan Financial Network System)
- India: RTGS (Reserve Bank of India)
Generic RTGS Message Structure
Most RTGS systems use ISO-20022 or similar structures:
Outbound (pacs.008 or jurisdiction-specific)
<Document>
<FIToFICstmrCdtTrf>
<GrpHdr>
<MsgId>instructionId</MsgId>
<CreDtTm>timestamp</CreDtTm>
</GrpHdr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>endToEndId</EndToEndId>
<TxId>instructionId</TxId>
</PmtId>
<Amt>
<InstdAmt Ccy="XXX">amount</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<!-- Jurisdiction-specific identifier -->
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>recipientName</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<!-- Jurisdiction-specific account identifier -->
</Id>
</CdtrAcct>
</CdtTrfTxInf>
</FIToFICstmrCdtTrf>
</Document>
Jurisdiction-Specific Considerations
CHAPS (UK)
- Currency: GBP
- Message: ISO-20022 or CHAPS-specific format
- Settlement: Real-time during business hours
- Account: Sort code + account number
LVTS (Canada)
- Currency: CAD
- Message: ISO-20022
- Settlement: Real-time
- Account: Transit number + account number
RITS (Australia)
- Currency: AUD
- Message: ISO-20022
- Settlement: Real-time
- Account: BSB + account number
On-Chain Attestation Flow
-
Submit to Rail:
- Call
SettlementOrchestrator.markSubmitted(triggerId, railTxRef) railTxRef= RTGS transaction reference (format varies by jurisdiction)
- Call
-
Confirm Settlement:
- RTGS systems typically provide immediate confirmation
- On receipt of confirmation:
- Call
SettlementOrchestrator.confirmSettled(triggerId, railTxRef)
- Call
-
Handle Rejections:
- RTGS systems may reject due to:
- Insufficient funds
- Invalid account
- System limits
- Call
SettlementOrchestrator.confirmRejected(triggerId, reason)
- RTGS systems may reject due to:
Account Resolution
accountRefId→ RTGS account details (format varies by jurisdiction)- Maintain jurisdiction-specific account identifier mappings
RTGS Characteristics
- Real-Time: Settlements occur immediately
- Gross Settlement: Each transaction settled individually
- High Value: Typically used for large-value transfers
- Business Hours: Most RTGS systems operate during business hours only
Error Handling
- Network Errors: Retry with exponential backoff
- Invalid Account: Validate before submission
- System Limits: Check RTGS system limits
- Business Hours: Queue if outside operating hours
Security Considerations
- RTGS systems typically require strong authentication
- Secure storage of credentials and account identifiers
- Implement jurisdiction-specific security requirements
Testing
- Unit tests for jurisdiction-specific message formats
- Integration tests with RTGS test environments
- Jurisdiction-specific flow tests
Implementation Notes
This adapter should be implemented as a base class with jurisdiction-specific subclasses, or use a plugin architecture to support multiple RTGS systems.