Skip to content

feat: add stellar support to backend relayer and update unit and e2e …#112

Merged
JoE11-y merged 1 commit intomainfrom
stellar-integrations
Apr 12, 2026
Merged

feat: add stellar support to backend relayer and update unit and e2e …#112
JoE11-y merged 1 commit intomainfrom
stellar-integrations

Conversation

@JoE11-y
Copy link
Copy Markdown
Contributor

@JoE11-y JoE11-y commented Apr 12, 2026

…tests

Summary by CodeRabbit

  • New Features

    • Multi-chain authentication supporting EVM and Stellar networks with SEP-10 integration
    • Support for Stellar-native tokens (SAC, SEP41)
    • Cross-chain operations between EVM and Stellar blockchains
    • Enhanced chain adapter architecture enabling seamless multi-network interactions
  • API Changes

    • Updated endpoints: /v1/ads/create and /v1/trades/create
    • Added chainKind parameter to authentication requests for chain-specific flows

@JoE11-y JoE11-y merged commit 01500ab into main Apr 12, 2026
1 check was pending
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 12, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a3c77b1a-e4ba-47c0-9d17-2b12eaada4a1

📥 Commits

Reviewing files that changed from the base of the PR and between 0142734 and b7f7603.

⛔ Files ignored due to path filters (6)
  • apps/backend-relayer/src/providers/stellar/wasm/ad_manager.wasm is excluded by !**/*.wasm
  • apps/backend-relayer/src/providers/stellar/wasm/merkle_manager.wasm is excluded by !**/*.wasm
  • apps/backend-relayer/src/providers/stellar/wasm/order_portal.wasm is excluded by !**/*.wasm
  • apps/backend-relayer/src/providers/stellar/wasm/test_token.wasm is excluded by !**/*.wasm
  • apps/backend-relayer/src/providers/stellar/wasm/verifier.wasm is excluded by !**/*.wasm
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (61)
  • apps/backend-relayer/.env.example
  • apps/backend-relayer/docs/auth-sep10-upgrade.md
  • apps/backend-relayer/package.json
  • apps/backend-relayer/prisma/migrations/20260412132246_extend_token_kind_for_stellar/migration.sql
  • apps/backend-relayer/prisma/schema.prisma
  • apps/backend-relayer/src/chain-adapters/adapters/chain-adapter.abstract.ts
  • apps/backend-relayer/src/chain-adapters/adapters/evm-chain-adapter.ts
  • apps/backend-relayer/src/chain-adapters/adapters/stellar-chain-adapter.ts
  • apps/backend-relayer/src/chain-adapters/chain-adapter.module.ts
  • apps/backend-relayer/src/chain-adapters/chain-adapter.service.ts
  • apps/backend-relayer/src/chain-adapters/types.ts
  • apps/backend-relayer/src/libs/configs.ts
  • apps/backend-relayer/src/modules/ads/ad.module.ts
  • apps/backend-relayer/src/modules/ads/ad.service.ts
  • apps/backend-relayer/src/modules/ads/dto/ad.dto.ts
  • apps/backend-relayer/src/modules/auth/auth.controller.spec.ts
  • apps/backend-relayer/src/modules/auth/auth.controller.ts
  • apps/backend-relayer/src/modules/auth/auth.module.ts
  • apps/backend-relayer/src/modules/auth/auth.service.ts
  • apps/backend-relayer/src/modules/auth/dto/auth.dto.ts
  • apps/backend-relayer/src/modules/auth/evm/evm-auth.service.ts
  • apps/backend-relayer/src/modules/auth/stellar/stellar-auth.service.spec.ts
  • apps/backend-relayer/src/modules/auth/stellar/stellar-auth.service.ts
  • apps/backend-relayer/src/modules/auth/username.util.ts
  • apps/backend-relayer/src/modules/chains/dto/chain.dto.ts
  • apps/backend-relayer/src/modules/faucet/faucet.module.ts
  • apps/backend-relayer/src/modules/faucet/faucet.service.ts
  • apps/backend-relayer/src/modules/trades/trade.module.ts
  • apps/backend-relayer/src/modules/trades/trade.service.ts
  • apps/backend-relayer/src/providers/chain/chain-provider.service.ts
  • apps/backend-relayer/src/providers/chain/chain.module.ts
  • apps/backend-relayer/src/providers/stellar/stellar.module.ts
  • apps/backend-relayer/src/providers/stellar/stellar.service.ts
  • apps/backend-relayer/src/providers/stellar/utils/address.ts
  • apps/backend-relayer/src/providers/stellar/utils/eip712.ts
  • apps/backend-relayer/src/providers/stellar/utils/signing.ts
  • apps/backend-relayer/src/providers/viem/ethers/localnet.ts
  • apps/backend-relayer/src/providers/viem/ethers/typedData.ts
  • apps/backend-relayer/src/providers/viem/viem.service.ts
  • apps/backend-relayer/test/e2e/ads.e2e-spec.ts
  • apps/backend-relayer/test/e2e/auth.e2e-spec.ts
  • apps/backend-relayer/test/e2e/health.e2e-spec.ts
  • apps/backend-relayer/test/e2e/jest-e2e.json
  • apps/backend-relayer/test/e2e/trade-e2e-spec.ts
  • apps/backend-relayer/test/integrations/eth-hedera-e2e-integration.ts
  • apps/backend-relayer/test/integrations/eth-stellar.e2e-integration.ts
  • apps/backend-relayer/test/integrations/jest-e2e.json
  • apps/backend-relayer/test/setups/create-app.ts
  • apps/backend-relayer/test/setups/evm-actions.ts
  • apps/backend-relayer/test/setups/evm-deployed-contracts.json
  • apps/backend-relayer/test/setups/evm-setup.ts
  • apps/backend-relayer/test/setups/hedera-deployed-contracts.json
  • apps/backend-relayer/test/setups/jest-e2e.setup.ts
  • apps/backend-relayer/test/setups/jest-integrations.setup.ts
  • apps/backend-relayer/test/setups/jest.teardown.ts
  • apps/backend-relayer/test/setups/mock-chain-adapter.ts
  • apps/backend-relayer/test/setups/seed.ts
  • apps/backend-relayer/test/setups/stellar-actions.ts
  • apps/backend-relayer/test/setups/stellar-setup.ts
  • apps/backend-relayer/test/setups/utils.ts
  • apps/backend-relayer/tsconfig.json

📝 Walkthrough

Walkthrough

Adds comprehensive Stellar blockchain support including SEP-10 authentication, Soroban contract interactions, and multi-chain address handling. Refactors EVM-only abstractions into a multi-chain ChainAdapter pattern, redesigns authentication to be chain-aware with separate EVM and Stellar services, introduces Stellar-specific cryptographic utilities and address conversions, and extends test infrastructure with Stellar deployment and integration test support.

Changes

Cohort / File(s) Summary
Stellar Provider & Services
src/providers/stellar/stellar.service.ts, src/providers/stellar/stellar.module.ts, src/providers/stellar/utils/signing.ts, src/providers/stellar/utils/eip712.ts, src/providers/stellar/utils/address.ts
New Stellar service implementing Soroban contract calls, presigned contract-details generation, auth token/signature creation, order hashing (EIP-712), Ed25519 signing/verification, and Stellar↔hex address conversions. Registers via StellarModule.
Chain Adapter Abstraction & Refactoring
src/chain-adapters/adapters/chain-adapter.abstract.ts, src/chain-adapters/adapters/evm-chain-adapter.ts, src/chain-adapters/adapters/stellar-chain-adapter.ts, src/chain-adapters/chain-adapter.service.ts, src/chain-adapters/chain-adapter.module.ts, src/chain-adapters/types.ts
Renamed ChainProviderChainAdapter. Added StellarChainAdapter (validates Stellar addresses, routes to StellarService). Created ChainAdapterService to dispatch forChain(kind). Generalized address types from EVM-specific to ChainAddress. Added signerPublicKey field to contract-details types.
Multi-Chain Authentication
src/modules/auth/auth.service.ts, src/modules/auth/auth.controller.ts, src/modules/auth/auth.module.ts, src/modules/auth/dto/auth.dto.ts, src/modules/auth/evm/evm-auth.service.ts, src/modules/auth/stellar/stellar-auth.service.ts, src/modules/auth/stellar/stellar-auth.service.spec.ts, src/modules/auth/username.util.ts
Refactored AuthService from EVM-only SIWE to chain-aware router. Added EvmAuthService (SIWE nonce/verification), StellarAuthService (SEP-10 challenge/verification). Updated DTOs to include chainKind with conditional chain-specific fields (message/signature for EVM, transaction for Stellar). Added centralized token issuance (mintTokenPair).
Module Dependency Wiring
src/modules/ads/ad.module.ts, src/modules/ads/ad.service.ts, src/modules/faucet/faucet.module.ts, src/modules/faucet/faucet.service.ts, src/modules/trades/trade.module.ts, src/modules/trades/trade.service.ts
Updated imports from ChainProvidersModuleChainAdapterModule. Swapped service dependencies from ChainProviderServiceChainAdapterService. All chain operations now call chainAdapters.forChain(...).method(...) instead of chainProviders....
Database & Configuration
prisma/schema.prisma, prisma/migrations/20260412132246_extend_token_kind_for_stellar/migration.sql, src/libs/configs.ts, .env.example
Added SAC and SEP41 token kinds to TokenKind enum. Added Stellar environment variables (STELLAR_ADMIN_SECRET, STELLAR_RPC_URL, STELLAR_NETWORK_PASSPHRASE, STELLAR_AUTH_SECRET). Extended env config with stellar namespace including defaults for testnet.
DTO & Validation Updates
src/modules/ads/dto/ad.dto.ts, src/modules/chains/dto/chain.dto.ts
Made adChainId and orderChainId optional with @IsInt() validation in QueryAdsDto. Updated address regex patterns in CreateChainDto to accept both 20-byte (EVM) and 32-byte (Stellar) hex addresses.
Stellar Test Infrastructure
test/setups/stellar-setup.ts, test/setups/stellar-actions.ts, test/setups/seed.ts, test/setups/utils.ts, test/setups/evm-actions.ts
Added Stellar contract deployment/initialization (deployStellarContracts, linkStellarAdManagerToOrderChain). Added Soroban action helpers (createAdSoroban, fundAdSoroban, etc.). Extended seeding to support optional Stellar chain/tokens. Added loginStellarUser for SEP-10 test flows. Removed Hedera test support.
E2E & Integration Tests
test/e2e/auth.e2e-spec.ts, test/e2e/ads.e2e-spec.ts, test/e2e/trade-e2e-spec.ts, test/e2e/health.e2e-spec.ts, test/integrations/eth-stellar.e2e-integration.ts, test/integrations/eth-hedera-e2e-integration.ts, test/integrations/jest-integrations.setup.ts
Updated auth tests to include chainKind in requests. Refactored ads E2E to use /v1/ads/create endpoint with new response shape. Simplified trade E2E by extracting shared utilities. Added cross-chain ETH↔Stellar E2E integration test with ad/trade lifecycle validation. Removed Hedera integration test. Updated setup to conditionally deploy Stellar contracts.
Test Setup & Mocking
test/setups/create-app.ts, test/setups/mock-chain-adapter.ts, test/setups/evm-setup.ts, test/setups/jest-e2e.setup.ts, test/setups/jest-integrations.setup.ts, test/setups/jest-e2e.json, test/setups/jest.teardown.ts, test/integrations/jest-e2e.json
Updated test app creation to mock ChainAdapterService. Added MockChainAdapter test stub. Simplified EVM setup to only deploy EVM contracts (removed Hedera). Added leveldb cleanup in setup/teardown. Added transformIgnorePatterns for @noble crypto library in Jest configs.
Dependencies & Configuration
package.json, tsconfig.json, docs/auth-sep10-upgrade.md, src/providers/viem/viem.service.ts, src/providers/viem/ethers/typedData.ts, src/providers/chain/chain-provider.service.ts, src/providers/chain/chain.module.ts
Added @stellar/stellar-sdk dependency. Updated Jest transformIgnorePatterns. Added TypeScript types configuration. Updated type imports to use centralized chain-adapters types. Removed obsolete ChainProviderService and ChainProvidersModule. Added SEP-10 upgrade documentation.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant AuthController
    participant AuthService
    participant EvmAuthService
    participant StellarAuthService
    participant Prisma

    Client->>AuthController: POST /v1/auth/challenge<br/>{address, chainKind}
    AuthController->>AuthService: challenge(address, chainKind)
    
    alt chainKind === EVM
        AuthService->>EvmAuthService: buildChallenge(address)
        EvmAuthService->>EvmAuthService: validate EVM address
        EvmAuthService->>EvmAuthService: generate nonce
        EvmAuthService->>Prisma: authNonce.create()
        EvmAuthService-->>AuthService: {chainKind, nonce, address, expiresAt, domain, uri}
    else chainKind === STELLAR
        AuthService->>StellarAuthService: buildChallenge(address)
        StellarAuthService->>StellarAuthService: validate G... public key
        StellarAuthService->>StellarAuthService: build SEP-10 transaction
        StellarAuthService-->>AuthService: {chainKind, address, transaction, networkPassphrase, expiresAt}
    end
    
    AuthService-->>AuthController: challenge response
    AuthController-->>Client: 200 OK + response

    Client->>AuthController: POST /v1/auth/login<br/>{chainKind, message?, signature?, transaction?}
    AuthController->>AuthService: login({chainKind, ...})
    
    alt chainKind === EVM
        AuthService->>EvmAuthService: verifyLogin(message, signature)
        EvmAuthService->>EvmAuthService: parse & verify SIWE
        EvmAuthService->>EvmAuthService: verify signature
        EvmAuthService->>Prisma: consume nonce, upsert user
        EvmAuthService-->>AuthService: {id, username, walletAddress}
    else chainKind === STELLAR
        AuthService->>StellarAuthService: verifyLogin(transaction)
        StellarAuthService->>StellarAuthService: verify SEP-10 transaction
        StellarAuthService->>Prisma: record nonce, upsert user
        StellarAuthService-->>AuthService: {id, username, walletAddress}
    end
    
    AuthService->>AuthService: mintTokenPair(user)
    AuthService-->>AuthController: {tokens: {access, refresh}}
    AuthController-->>Client: 201 Created + tokens
Loading
sequenceDiagram
    participant AdsService
    participant ChainAdapterService
    participant ChainAdapter
    participant EvmChainAdapter as EVM Adapter
    participant StellarChainAdapter as Stellar Adapter
    participant ViemService
    participant StellarService

    AdsService->>ChainAdapterService: forChain(ChainKind.EVM)
    ChainAdapterService-->>AdsService: EvmChainAdapter

    AdsService->>AdsService: determine chain from request
    AdsService->>EvmChainAdapter: getCreateAdRequestContractDetails(data)
    EvmChainAdapter->>EvmChainAdapter: validate EVM addresses
    EvmChainAdapter->>ViemService: getCreateAdRequestContractDetails(data)
    ViemService-->>EvmChainAdapter: {chainId, contractAddress, signature, authToken, ...}
    EvmChainAdapter-->>AdsService: contract details + signature

    AdsService->>ChainAdapterService: forChain(ChainKind.STELLAR)
    ChainAdapterService-->>AdsService: StellarChainAdapter

    AdsService->>StellarChainAdapter: getCreateAdRequestContractDetails(data)
    StellarChainAdapter->>StellarChainAdapter: validate Stellar addresses (0x32-byte hex)
    StellarChainAdapter->>StellarService: getCreateAdRequestContractDetails(data)
    StellarService->>StellarService: compute request hash (Keccak256)
    StellarService->>StellarService: sign with Stellar Ed25519 key
    StellarService-->>StellarChainAdapter: {chainId, contractAddress, signature, authToken, ...}
    StellarChainAdapter-->>AdsService: contract details + signature
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • Ugo-X

Poem

🐰 Whiskers twitch with joy—a rabbit's rhyme,
Stellar light now shines with EVM's chime,
ChainAdapters dance, no more EVM-alone,
SEP-10 seals, Ed25519 stones,
Cross-chains bloom where adapters own the throne!

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch stellar-integrations

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant