Skip to content

Register Service Status

Overall Status: 100% COMPLETE ✅ Locations:

  • Models: src/Common/Sorcha.Register.Models/
  • Core: src/Common/Sorcha.Register.Core/
  • API: src/Services/Sorcha.Register.Service/Last Updated: 2025-11-16

Summary

ComponentStatusLOCTests
Phase 1-2 Core✅ 100%~3,500112 tests
Phase 5 API Service✅ 100%~650Comprehensive
Integration✅ 100%N/AComplete
TOTAL✅ 100%~4,150~2,459 test LOC

Phase 1-2: Core Implementation - 100% COMPLETE ✅

Domain Models (Sorcha.Register.Models)

  • ✅ Register.cs - Main register/ledger model with tenant support
  • ✅ TransactionModel.cs - Blockchain transaction with JSON-LD/DID URI support
  • ✅ Docket.cs - Block/docket for sealing transactions
  • ✅ PayloadModel.cs - Encrypted payload with wallet-based access
  • ✅ TransactionMetaData.cs - Blueprint workflow tracking
  • ✅ Challenge.cs - Encryption challenge data
  • ✅ Enums: RegisterStatus, DocketState, TransactionType

Core Business Logic (Sorcha.Register.Core)

  1. RegisterManager.cs (204 lines)

    • ✅ CreateRegisterAsync, GetRegisterAsync
    • ✅ UpdateRegisterAsync, DeleteRegisterAsync
    • ✅ ListRegistersAsync with pagination
  2. TransactionManager.cs (225 lines)

    • ✅ AddTransactionAsync with validation
    • ✅ GetTransactionAsync, GetTransactionsByRegisterAsync
    • ✅ GetTransactionsByWalletAsync
    • ✅ DID URI generation: did:sorcha:register:{registerId}/tx:{txId}
  3. DocketManager.cs (255 lines)

    • ✅ CreateDocketAsync - Block creation
    • ✅ SealDocketAsync - Block sealing with previous hash
    • ✅ GetDocketAsync, GetDocketsAsync
    • ✅ Chain linking via previousDocketHash
  4. QueryManager.cs (233 lines)

    • ✅ QueryTransactionsAsync with pagination
    • ✅ GetTransactionHistoryAsync
    • ✅ GetLatestDocketAsync
    • ✅ Advanced filtering support
  5. ChainValidator.cs (268 lines)

    • ✅ ValidateChainAsync - Full chain integrity check
    • ✅ ValidateDocketAsync - Single block validation
    • ✅ ValidateTransactionAsync
    • ✅ Hash verification, temporal validation

Storage Layer

  • ✅ IRegisterRepository interface (214 lines, 20+ methods)
  • ✅ InMemoryRegisterRepository implementation (265 lines, thread-safe)
  • ✅ InMemoryEventPublisher for testing

Event System

  • ✅ IEventPublisher, IEventSubscriber interfaces
  • ✅ RegisterEvents.cs - Event models (RegisterCreated, TransactionConfirmed, DocketConfirmed, etc.)

Total: ~3,500 lines, 22 files across 4 projects


Phase 5: API Service - 100% COMPLETE ✅

Register Management (6 endpoints)

EndpointDescription
POST /api/registersCreate register with tenant isolation
GET /api/registersList all registers (with tenant filter)
GET /api/registers/{id}Get register by ID
PUT /api/registers/{id}Update register metadata
DELETE /api/registers/{id}Delete register
GET /api/registers/stats/countGet register count

Transaction Management (3 endpoints)

EndpointDescription
POST /api/registers/{registerId}/transactionsSubmit transaction
GET /api/registers/{registerId}/transactions/{txId}Get transaction by ID
GET /api/registers/{registerId}/transactionsList transactions (paginated)

Advanced Query API (4 endpoints)

EndpointDescription
GET /api/query/wallets/{address}/transactionsQuery by wallet
GET /api/query/senders/{address}/transactionsQuery by sender
GET /api/query/blueprints/{blueprintId}/transactionsQuery by blueprint
GET /api/query/statsGet transaction statistics

Docket Management (3 endpoints)

EndpointDescription
GET /api/registers/{registerId}/docketsList all dockets
GET /api/registers/{registerId}/dockets/{docketId}Get docket by ID
GET /api/registers/{registerId}/dockets/{docketId}/transactionsGet docket transactions

Real-time Notifications

SignalR Hub at /hubs/register:

  • Client methods: SubscribeToRegister, SubscribeToTenant
  • Server events: RegisterCreated, RegisterDeleted, TransactionConfirmed, DocketSealed, RegisterHeightUpdated

OData Support

  • ✅ OData V4 endpoint at /odata/
  • ✅ Entity sets: Registers, Transactions, Dockets
  • ✅ Supports: $filter, $select, $orderby, $top, $skip, $count
  • ✅ Max top set to 100 for performance

Architecture Integration

  • ✅ Full integration with RegisterManager, TransactionManager, QueryManager
  • ✅ Uses InMemoryRegisterRepository and InMemoryEventPublisher
  • ✅ Dependency injection properly configured
  • ✅ .NET Aspire integration with ServiceDefaults
  • ✅ OpenAPI documentation with Scalar UI

Testing - COMPLETE ✅

  • ✅ Comprehensive .http test file (25+ scenarios)
  • ✅ Unit tests COMPLETE (Sorcha.Register.Core.Tests)
  • ✅ Integration tests COMPLETE (Sorcha.Register.Service.Tests)
  • ✅ 112 automated test methods
  • ✅ ~2,459 lines of test code

MongoDB Persistence - COMPLETE ✅

Status: Production-ready MongoDB storage enabled (2026-01-31)

Architecture: Per-Register Database Pattern

  • Registry Database: sorcha_register_registry - Stores register metadata
  • Per-Register Databases: sorcha_register_{registerId} - Each register gets its own database
    • Collections: transactions, dockets
    • Automatic index creation on register creation
    • Full isolation between registers

Configuration:

  • Type: MongoDB (enabled in Docker and appsettings)
  • Connection: mongodb://sorcha:sorcha_dev_password@mongodb:27017
  • UseDatabasePerRegister: true (recommended for production)
  • Backward compatible with single-database mode for testing

Benefits:

  • Data Isolation: Each register is completely isolated in its own database
  • Scalability: Registers can be distributed across MongoDB shards
  • Security: Per-register access control at database level
  • Performance: Indexes optimized per register
  • Clean Deletion: Dropping a register = dropping its database

Pending (Future Phases)

  1. 🚧 Performance benchmarking (Phase 7)

Back to: Development Status

Released under the MIT License.