You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Host a SEP-1 stellar.toml at /.well-known/stellar.toml so the DeenBridge platform is discoverable and verifiable across the Stellar ecosystem — wallets, explorers, and directories can resolve the platform's organization metadata, declared accounts (the platform/payout wallet), and the assets it deals in. Today DeenBridge builds and submits real Stellar payments but publishes no ecosystem metadata at all, so there is no canonical, machine-readable statement of "who this service is" or "which USDC issuer it trusts."
Current state
There is no /.well-known/* route anywhere. app.js mounts /, /health, and the /api/* routers only — a grep for well-known, stellar.toml, or toml across src/ and app.js returns nothing.
Asset identity is hardcoded in code, not published anywhere: src/services/stellar/stellarService.js pins USDC_ISSUER per network (GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN on mainnet, a testnet issuer otherwise) and exports USDC, USDC_ISSUER, NETWORK, networkPassphrase. Nothing declares these to the outside world.
Network is env-driven (STELLAR_NETWORK, default testnet), so the served TOML must switch issuer/passphrase/URLs the same way stellarService.js already does.
What to build
Static-but-templated TOML endpoint (src/routes/wellKnownRoutes.js, mounted before the /api rate limiter in app.js at app.get("/.well-known/stellar.toml", ...)): serve Content-Type: text/toml; charset=utf-8 with permissive CORS (Access-Control-Allow-Origin: *) as SEP-1 requires for cross-origin fetching.
Config-driven document builder (src/services/stellar/stellarTomlService.js): assemble the TOML from a typed config object so values stay in sync with stellarService.js. Include at minimum:
Env plumbing: add STELLAR_PLATFORM_PUBLIC_KEY, ORG_URL, ORG_LOGO, and SIGNING_KEY (or reuse existing) to src/config/validateEnv.js's optional list, and document them in .env.example/QUICK_START.md. The endpoint must still render (omitting unknown blocks) when optional values are missing, so CI's boot check stays green.
Validity: output must be parseable TOML and pass a SEP-1 linter (e.g. round-trip through a TOML parser in the test). Field names must match the SEP-1 spec exactly (case-sensitive).
Acceptance criteria
GET /.well-known/stellar.toml returns 200 with Content-Type: text/toml and Access-Control-Allow-Origin: *, and is reachable without authentication or tripping the /api rate limiter.
The served document parses as valid TOML and contains NETWORK_PASSPHRASE matching the active network, an ACCOUNTS entry for the platform wallet, [DOCUMENTATION] org metadata, and at least one [[CURRENCIES]] block whose issuer equals USDC_ISSUER for the active NETWORK.
Switching STELLAR_NETWORK between testnet and mainnet changes the passphrase and USDC issuer in the output (no hardcoded duplication — values come from the same source as stellarService.js).
Missing optional env vars degrade gracefully (block omitted, no 500); server still boots and /health passes.
Jest + supertest test fetches the endpoint, asserts the content type/CORS header, parses the body as TOML, and checks the issuer/passphrase for a stubbed network.
Pointers
app.js (route mounting order — must precede app.use("/api", apiLimiter)), src/services/stellar/stellarService.js (USDC_ISSUER, USDC, NETWORK, networkPassphrase exports to reuse), src/config/validateEnv.js (optional env list), QUICK_START.md/README (document the new vars).
Gotchas: SEP-1 mandates the exact path /.well-known/stellar.toml, text/toml content type, and CORS *. .github/workflows/ci.yml boots the server and curls /health, and runs node --check on every file, so a syntactically broken route fails CI immediately. PRs target dev.
Difficulty
Medium — no signing or network calls, but it requires correct SEP-1 field semantics, network-aware templating that shares a single source of truth with the Stellar service, and forward-compatible structure so the SEP-10/SEP-24 issues can slot their keys in without a rewrite.
🏆 GrantFox OSS — Official Campaign | FWC26. Apply for this issue through the GrantFox campaign page. The maintainer assigns one contributor before work starts; unassigned PRs may not be reviewed. PRs target the dev branch. Quality bar: CI must stay green.
💬 Questions or need help? Reach the maintainers and other contributors on the DeenBridge Telegram: https://t.me/+nst9lXNj1wc4ZDE0
Summary
Host a SEP-1
stellar.tomlat/.well-known/stellar.tomlso the DeenBridge platform is discoverable and verifiable across the Stellar ecosystem — wallets, explorers, and directories can resolve the platform's organization metadata, declared accounts (the platform/payout wallet), and the assets it deals in. Today DeenBridge builds and submits real Stellar payments but publishes no ecosystem metadata at all, so there is no canonical, machine-readable statement of "who this service is" or "which USDC issuer it trusts."Current state
/.well-known/*route anywhere.app.jsmounts/,/health, and the/api/*routers only — agrepforwell-known,stellar.toml, ortomlacrosssrc/andapp.jsreturns nothing.src/services/stellar/stellarService.jspinsUSDC_ISSUERper network (GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVNon mainnet, a testnet issuer otherwise) and exportsUSDC,USDC_ISSUER,NETWORK,networkPassphrase. Nothing declares these to the outside world.stellar.toml(WEB_AUTH_ENDPOINT,SIGNING_KEY,TRANSFER_SERVER_SED0024,CURRENCIES). There is no home for those keys today.STELLAR_NETWORK, defaulttestnet), so the served TOML must switch issuer/passphrase/URLs the same waystellarService.jsalready does.What to build
src/routes/wellKnownRoutes.js, mounted before the/apirate limiter inapp.jsatapp.get("/.well-known/stellar.toml", ...)): serveContent-Type: text/toml; charset=utf-8with permissive CORS (Access-Control-Allow-Origin: *) as SEP-1 requires for cross-origin fetching.src/services/stellar/stellarTomlService.js): assemble the TOML from a typed config object so values stay in sync withstellarService.js. Include at minimum:VERSION,NETWORK_PASSPHRASE(reusenetworkPassphrase),ACCOUNTS = [ <platform/payout public key> ].[DOCUMENTATION]—ORG_NAME = "DeenBridge",ORG_URL,ORG_DESCRIPTION,ORG_LOGO, official contacts / Telegram.[[CURRENCIES]]— a block for the USDC the platform settles in (code = "USDC",issuer = <USDC_ISSUER for the active network>,is_asset_anchored,status, display metadata). Make it iterate a list so multi-asset support ([Enhancement] Verify signed Stellar transaction contents before granting item access #18) can add more.WEB_AUTH_ENDPOINT([Enhancement] SEP-10 Web Authentication: challenge/verify endpoints and JWT issuance for "Sign in with Stellar" #25),SIGNING_KEY, and a commented[[CURRENCIES]]/transfer-server hook (Dev #24/[Enhancement] SEP-24 anchor integration: non-custodial fiat on/off-ramp for USDC via interactive deposit and withdrawal #46) that later issues can fill in without restructuring.STELLAR_PLATFORM_PUBLIC_KEY,ORG_URL,ORG_LOGO, andSIGNING_KEY(or reuse existing) tosrc/config/validateEnv.js's optional list, and document them in.env.example/QUICK_START.md. The endpoint must still render (omitting unknown blocks) when optional values are missing, so CI's boot check stays green.Acceptance criteria
GET /.well-known/stellar.tomlreturns200withContent-Type: text/tomlandAccess-Control-Allow-Origin: *, and is reachable without authentication or tripping the/apirate limiter.NETWORK_PASSPHRASEmatching the active network, anACCOUNTSentry for the platform wallet,[DOCUMENTATION]org metadata, and at least one[[CURRENCIES]]block whoseissuerequalsUSDC_ISSUERfor the activeNETWORK.STELLAR_NETWORKbetweentestnetandmainnetchanges the passphrase and USDC issuer in the output (no hardcoded duplication — values come from the same source asstellarService.js)./healthpasses.Pointers
app.js(route mounting order — must precedeapp.use("/api", apiLimiter)),src/services/stellar/stellarService.js(USDC_ISSUER,USDC,NETWORK,networkPassphraseexports to reuse),src/config/validateEnv.js(optional env list),QUICK_START.md/README (document the new vars).WEB_AUTH_ENDPOINT/SIGNING_KEY), [Enhancement] SEP-24 anchor integration: non-custodial fiat on/off-ramp for USDC via interactive deposit and withdrawal #46/Dev #24 (SEP-24 — transfer server keys), [Enhancement] Verify signed Stellar transaction contents before granting item access #18 (multi-asset — extends[[CURRENCIES]])./.well-known/stellar.toml,text/tomlcontent type, and CORS*..github/workflows/ci.ymlboots the server and curls/health, and runsnode --checkon every file, so a syntactically broken route fails CI immediately. PRs targetdev.Difficulty
Medium — no signing or network calls, but it requires correct SEP-1 field semantics, network-aware templating that shares a single source of truth with the Stellar service, and forward-compatible structure so the SEP-10/SEP-24 issues can slot their keys in without a rewrite.
🏆 GrantFox OSS — Official Campaign | FWC26. Apply for this issue through the GrantFox campaign page. The maintainer assigns one contributor before work starts; unassigned PRs may not be reviewed. PRs target the
devbranch. Quality bar: CI must stay green.💬 Questions or need help? Reach the maintainers and other contributors on the DeenBridge Telegram: https://t.me/+nst9lXNj1wc4ZDE0