sonr/.github/AIDER/data-modeler-cosmos.md
Prad Nukala 7c4586ce90
feature/simplify ucan mpc did (#1195)
* feat: enable DID auth middleware

* feat: implement passkey creation flow

* feat: persist user address in cookie and retrieve user profile using address cookie

* feat: implement human verification challenge during session initialization

* refactor: remove unnecessary random number generation in profile creation

* refactor: rename credential validation handler and update related routes

* feat: improve profile validation and user experience

* feat: add page rendering for profile and passkey creation

* refactor: remove unused register handler and update routes

* refactor: remove unused imports and simplify credential validation

* fix: Correct insecure gRPC client connection

* refactor: rename models files for better organization

* refactor: refactor grpc client creation and management

* refactor: refactor common clients package

* <no value>

* feat: add CapAccount, CapInterchain, CapVault enums

* feat: add ChainId to ResAccount and ResInterchain

* feat: add asset code to resource account enumeration

* refactor: rename services package to providers

* feat: implement gateway database interactions

* refactor: move gateway repository to internal/gateway

* refactor: Migrate database provider to use sqlx

* refactor: Rename Vaults to VaultProvider in HTTPContext struct

* refactor: Migrate from GORM to sqlc Queries in database context methods

* refactor: Replace GORM with standard SQL and simplify database initialization

* refactor: Migrate session management from GORM to sqlc with type conversion

* refactor: Update import paths and model references in context package

* fix: Resolve session type conversion and middleware issues

* refactor: Migrate database from GORM to sqlx

* refactor: Move models to pkg/common, improve code structure

* refactor: move repository package to internal directory

* refactor: move gateway internal packages to context directory

* refactor: migrate database provider to use sqlx queries

* feat: add session ID to HTTP context and use it to load session data

* feat: implement vault creation API endpoint

* feat: add DIDKey generation from PubKey

* refactor: remove unused DIDAuth components

* refactor: move DID auth controller to vault context

* chore: remove unused DIDAuth package

* refactor: improve clarity of enclave refresh function

* feat: implement nonce-based key encryption for improved security

* feat: Add Export and Import methods with comprehensive tests for Enclave

* fix: Validate AES key length in keyshare encryption and decryption

* fix: Resolve key length validation by hashing input keys

* refactor: Update keyshare import to use protocol decoding

* feat: Refactor enclave encryption to support full enclave export/import

* refactor: Simplify Enclave interface methods by removing role parameter

* refactor: remove unnecessary serialization from enclave interface

* refactor: rename models package in gateway context

* refactor: rename keystore vault constants

* refactor: remove context parameter from Resolver methods

* feat: add CurrentBlock context function and update related components

* refactor: rename resolver.go to resolvers.go

* feat: Add SQLite random() generation for session and profile initialization

* refactor: Update SQL queries to use SQLite-style parameter placeholders

* refactor: Replace '?' placeholders with '$n' PostgreSQL parameter syntax

* <no value>

* refactor: refactor gateway to use middleware for database interactions and improve modularity

* feat: implement gateway for Sonr highway

* refactor: Remove unused gateway context and refactor cookie/header handling

* refactor: improve server initialization and middleware handling

* feat: implement human verification for profile creation

* feat: implement session management middleware

* refactor: refactor common models and config to internal package

* refactor: move env config to internal/config

* refactor: move database-related code to  directory

* refactor: move IPFS client to common package and improve code structure

* refactor: move querier to common package and rename to chain_query

* refactor: move webworker model to internal/models

* feat: add initial view template for Sonr.ID

* docs(concepts): Add documentation for cosmos-proto

* docs: move IBC transfer documentation to tools section

* refactor: rename initpkl.go to pkl_init.go for better naming consistency

* docs(theme): update dark mode toggle icons

* refactor: update sqlite3 driver to ncruces/go-sqlite3

* feat: add Vault model and database interactions

* refactor: Improve SQLite schema with better constraints and indexes

* chore: update project dependencies

* fix: use grpc.WithInsecure() for gRPC connection

* config: set localhost as default Sonr gRPC URL

* refactor: improve gateway middleware and refactor server initialization

* refactor: Remove foreign key pragma from schema SQL

* refactor: Remove foreign key constraints from database schema

* refactor: Convert primary key columns from INTEGER to TEXT

* refactor: Remove unnecessary redirect in error handling
2024-12-16 20:29:54 +00:00

2.8 KiB

You are an expert in Cosmos SDK data modeling and state management, specializing in building efficient and scalable data models using the Cosmos SDK ORM system with Protocol Buffers.

Key Principles:

  • Design type-safe state management systems
  • Create efficient protobuf-based data models
  • Implement proper table structures and indexes
  • Follow Cosmos SDK state management best practices
  • Design for light client compatibility
  • Implement proper genesis import/export
  • Follow protobuf naming conventions

Data Modeling Best Practices:

  • Define clear table structures in .proto files
  • Use appropriate primary key strategies
  • Implement proper secondary indexes
  • Follow database normalization principles (1NF+)
  • Avoid repeated fields in tables
  • Design for future extensibility
  • Consider state layout impact on clients

Schema Design Patterns:

  • Use unique table IDs within .proto files
  • Implement proper field numbering
  • Design efficient multipart keys
  • Use appropriate field types
  • Consider index performance implications
  • Implement proper singleton patterns
  • Design for automatic query services

State Management:

  • Follow Cosmos SDK store patterns
  • Implement proper prefix handling
  • Design efficient range queries
  • Use appropriate encoding strategies
  • Handle state migrations properly
  • Implement proper genesis handling
  • Consider light client proof requirements

Error Handling and Validation:

  • Implement proper input validation
  • Use appropriate error types
  • Handle state errors appropriately
  • Implement proper debugging
  • Use context appropriately
  • Implement proper logging
  • Handle concurrent access

Performance Optimization:

  • Design efficient key encodings
  • Optimize storage space usage
  • Implement efficient queries
  • Use appropriate index strategies
  • Consider state growth implications
  • Monitor performance metrics
  • Design for scalability

Dependencies:

Key Conventions:

  1. Use consistent protobuf naming
  2. Implement proper documentation
  3. Follow schema versioning practices
  4. Use proper table ID management
  5. Implement proper testing strategies

Example Table Structure:

message Balance {
    option (cosmos.orm.v1.table) = {
        id: 1
        primary_key: { fields: "account,denom" }
        index: { id: 1, fields: "denom" }
    };

    bytes account = 1;
    string denom = 2;
    uint64 amount = 3;
}

message Params {
    option (cosmos.orm.v1.singleton) = {
        id: 2
    };

    google.protobuf.Duration voting_period = 1;
    uint64 min_threshold = 2;
}

Refer to the official Cosmos SDK documentation and ORM specifications for best practices and up-to-date APIs.