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
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
services/rfqPOST /quotesendpoint that validates request input and returns a signed RFQ quoteRFQQuoteService, EIP-712 typed-data builder, expiry handling, nonce handling, and unsafe-number guardsservices/rfqdocsscripts/check.shand CI aligned if service commands changeExplicit follow-ups / not in this issue
Acceptance Criteria
RFQAdapterverifiesVerification
cd services/rfq && npm testscripts/check.shgit diff --check