Skip to content

feat(rfq): add local RFQ backend and headless demo flow #22

Description

@0xMuang

Summary

Build the local RFQ backend path needed to exercise RFQ end-to-end without a dashboard: request a quote through a reference service, receive a signed EIP-712 RFQ quote, and use it in a local/headless fill flow against the existing RFQAdapter.

This follows PR #21, which implements the onchain RFQ settlement adapter and the minimal quote signer library. This issue should make that path easy to run locally, but it is still reference/demo infrastructure, not a production RFQ dealer.

Scope

  • Add a small HTTP API under services/rfq
  • Provide a POST /quotes endpoint that validates request input and returns a signed RFQ quote
  • Reuse the existing RFQQuoteService, EIP-712 typed-data builder, expiry handling, nonce handling, and unsafe-number guards
  • Add deterministic local config for chainId, verifyingContract, default TTL, maker/dealer address, venue address, and signer mode
  • Add a minimal signer abstraction suitable for local/reference use
  • Add a headless local demo flow or script that can:
    • start from known local deployment/config values
    • request a quote from the RFQ backend
    • submit the returned quote/signature to the Router/RFQAdapter path
    • verify success/failure and balances in tests or scripted output
  • Add API and headless flow smoke/integration tests
  • Document local usage in README or services/rfq docs
  • Keep scripts/check.sh and CI aligned if service commands change

Explicit follow-ups / not in this issue

  • Dashboard or browser UI for quote/fill visualization
  • BUIDL-like ERC-3643 demo asset fixture
  • Real BUIDL mainnet integration
  • Production pricing engine
  • Dealer inventory management
  • Custody or escrow
  • Partial fill
  • Quote cancellation beyond a documented follow-up design seam
  • Websocket / quote discovery
  • Production key custody or HSM integration
  • Real KYC / ACE / ONCHAINID / issuer claim integration
  • Compliance decision-making in the backend

Acceptance Criteria

  • A local caller can request a quote through the API and receive the same quote/signature shape that RFQAdapter verifies
  • Invalid addresses, unsafe numeric inputs, invalid TTL, and malformed quote requests are rejected before signing
  • A headless local test/script can exercise quote request → signed quote → Router/RFQAdapter fill using local config
  • The backend remains reference-only and does not claim production dealer, custody, pricing, or compliance authority
  • Existing RFQ service tests still pass, with added API/headless flow coverage if introduced
  • Repository docs clearly distinguish RFQ settlement adapter, reference quote signer, local RFQ backend, and future dashboard/demo asset work

Verification

  • cd services/rfq && npm test
  • scripts/check.sh
  • git diff --check

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions