Skip to content

feat: add MetaDAO Futarchy connector (experimental)#643

Draft
fengtality wants to merge 1 commit into
developmentfrom
feat/metadao-connector
Draft

feat: add MetaDAO Futarchy connector (experimental)#643
fengtality wants to merge 1 commit into
developmentfrom
feat/metadao-connector

Conversation

@fengtality
Copy link
Copy Markdown
Contributor

Summary

Adds an experimental connector for MetaDAO's
Futarchy program on Solana. Futarchy is a prediction-market governance
mechanism where proposals are decided by trading conditional outcome tokens
("buy if pass, sell if fail") against an underlying spot market.

Marking as draft / experimental — the API shape may evolve. Modelled
after the ORE experimental connector pattern (#578).

Features

Spot market

  • POST /connectors/metadao/futarchy/quote-swap — Quote a spot swap
  • POST /connectors/metadao/futarchy/execute-swap — Execute a spot swap

Conditional markets (prediction)

  • POST /connectors/metadao/futarchy/quote-conditional-swap — Quote against a proposal's conditional outcome pool
  • POST /connectors/metadao/futarchy/execute-conditional-swap — Execute against the conditional pool

Liquidity

  • POST /connectors/metadao/futarchy/quote-liquidity
  • POST /connectors/metadao/futarchy/add-liquidity
  • POST /connectors/metadao/futarchy/remove-liquidity

Discovery & info

  • GET /connectors/metadao/futarchy/daos — list DAOs from chain
  • GET /connectors/metadao/futarchy/pools — list cached pools (daos.json)
  • GET /connectors/metadao/futarchy/dao-info — DAO details by address
  • GET /connectors/metadao/futarchy/pool-info — pool info by base token
  • GET /connectors/metadao/futarchy/balance — token balances
  • GET /connectors/metadao/futarchy/proposals — proposals for a DAO
  • GET /connectors/metadao/futarchy/proposal-info — proposal details

Configuration

The connector uses hardcoded MetaDAO Futarchy program IDs (mainnet-beta).
Configuration options in conf/metadao.yml:

  • programId — MetaDAO Futarchy program
  • conditionalVaultProgramId — Conditional Vault program
  • defaultSlippagePct — default 1%

Implementation notes

  • Token-2022 compatibility — conditional outcome tokens are Token-2022,
    so ATA creation handles both program IDs.
  • DAO cache — 58 DAOs pre-bundled in
    src/connectors/metadao/daos.json; refresh via
    scripts/fetch-metadao-daos.ts.
  • Anchor IDL — bundled at src/connectors/metadao/idl/futarchy.json.
  • Namespacemetadao registered in templates/root.yml, defaults
    in templates/connectors/metadao.yml.

Test plan

  • pnpm install && pnpm build && pnpm start --passphrase=xxx --dev
  • GET /config/connectors → list includes metadao on solana
  • GET /connectors/metadao/futarchy/daos?network=mainnet-beta → returns array of DAOs
  • GET /connectors/metadao/futarchy/pools?network=mainnet-beta → returns cached pool list (≥ 58 entries)
  • GET /connectors/metadao/futarchy/pool-info?network=mainnet-beta&baseToken=<symbol> → returns pool info with reserves + price
  • POST /connectors/metadao/futarchy/quote-swap with a small amount on an active DAO → returns price + expectedAmount
  • With a funded wallet: POST /connectors/metadao/futarchy/execute-swap → tx signature returned, lands on chain
  • For an active proposal: quote-conditional-swap returns pass/fail prices; execute-conditional-swap mints the conditional pair and swaps

Diff

26 files changed, ~3300 insertions

Files added:

  • src/connectors/metadao/ — connector implementation (config, main class, 14 route files, 2 JSON assets)
  • src/schemas/metadao-schema.ts — TypeBox request/response schemas
  • src/templates/connectors/metadao.yml + src/templates/namespace/metadao-schema.json
  • scripts/fetch-metadao-daos.ts — refresh script for daos.json

Files modified:

  • src/app.ts — register routes, add Swagger tag
  • src/config/routes/getConnectors.ts — list metadao in /connectors
  • src/templates/root.yml — register metadao namespace
  • package.jsoncopy-files includes metadao/*.json

🤖 Generated with Claude Code

Adds an experimental connector for MetaDAO's Futarchy program on
Solana. Futarchy is a prediction-market governance mechanism where
proposals are decided by trading conditional outcome tokens — "buy if
pass, sell if fail" — against an underlying spot market.

Spot endpoints
- POST /connectors/metadao/futarchy/quote-swap
- POST /connectors/metadao/futarchy/execute-swap

Conditional-market endpoints
- POST /connectors/metadao/futarchy/quote-conditional-swap
- POST /connectors/metadao/futarchy/execute-conditional-swap

Liquidity
- POST /connectors/metadao/futarchy/quote-liquidity
- POST /connectors/metadao/futarchy/add-liquidity
- POST /connectors/metadao/futarchy/remove-liquidity

Discovery + info
- GET  /connectors/metadao/futarchy/daos
- GET  /connectors/metadao/futarchy/pools
- GET  /connectors/metadao/futarchy/dao-info
- GET  /connectors/metadao/futarchy/pool-info
- GET  /connectors/metadao/futarchy/balance
- GET  /connectors/metadao/futarchy/proposals
- GET  /connectors/metadao/futarchy/proposal-info

Implementation notes
- Token-2022 compatibility for ATA creation (conditional tokens use
  Token-2022)
- 58 DAOs pre-cached in src/connectors/metadao/daos.json; refresh via
  scripts/fetch-metadao-daos.ts
- Anchor IDL bundled at src/connectors/metadao/idl/futarchy.json
- Config namespace registered in templates/root.yml; defaults in
  templates/connectors/metadao.yml

This is an experimental connector — APIs may change. Modelled after the
ORE experimental connector pattern (#578).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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