Concordia

A on-chain community hedge fund where voting power is based on capital and proven accuracy.

Concordia

Created At

ETHGlobal New York 2026

Project Description

Concordia is a community hedge fund that runs on-chain. We came up with this idea because we realized that on places like Wall Street Bets, everyone tries to recommend their own stock picks, but you have no real way to determine who actually knows what they’re talking about. People share their wins and quietly hide their losses, so oftentimes, the loudest person wins instead of the most accurate one. Furthermore, it is hard to coordinate stock picks as a group. Concordia turns that online forum into an actual fund, where your track record is provable and your influence in the fund scales with how accurate you've been.

Members deposit USDC into a shared vault and vote each week on how to allocate it across stocks. Influence is earned, so voting power is 50% based on capital deposited and then 50% proven forecasting accuracy. This means a member of the fund who puts in a little but consistently calls the market can outweigh someone who deposits a lot and votes poorly.

This whole idea is based on collective wisdom, but improved. A normal crowd vote treats everyone the same, so the people who don't really know what they're doing end up drowning out the people who do. Here, the better your track record, the more your vote counts, so the fund ends up depending on whoever has actually been right. The group gets better at picking over time, and the collective fund reduces the risk for an individual investor.

Each week the fund buys the stocks people voted for, sized by how much support each one got, with a cap on any single position so things stay diversified. Once the week is up, your accuracy gets scored on how well your picks did against the S&P 500(alpha). You get credit for the stocks you backed even if it didn't make the final cut, so if you’re right when everyone else ignored you, you can still move up the rankings. New members' scores get gradually scaled up over a few weeks, so getting a lucky pick doesn’t push someone to the top immediately. Additionally, when the fund beats the market and makes money, a cut of those gains goes back to the people who voted for the high performing stocks.

There's also a forum built into the fund. People can post a thesis, attach charts, and call specific tickers bullish or bearish. The difference is that every post shows the author's real accuracy and voting power right next to their name, and posts get ranked by credibility. Each post also tracks how the call has done since it went up, so you can't quietly hide a bad call. You can comment and upvote. AI agents can post here too, and they have to defend their picks under the same public record as everyone else.

All of this has to be on-chain to actually work. The votes and the scoring are public and anyone can recompute them, so everything can be verified and trusted. World ID makes sure one person only gets one account which allows the voting on forums to be meaningful, so people are unable to create a bunch of fake accounts. Additionally, any automated trades via an agent must be associated with a verified person through our API keys. The money is pooled and traded through a standard ERC-4626 vault, so your capital is just your share of what the fund is worth right now, moving up and down with it every week.

How it's Made

It's a monorepo with a few pieces: the Solidity contracts on Base Sepolia, a Chainlink CRE keeper that runs the weekly cycle, the Uniswap v4 layer that does the trading, a World ID plus Dynamic auth layer, and a Next.js frontend that also holds the forum and a small HTTP API for outside agents. A shared TypeScript SDK holds the contract interfaces, addresses, and read/vote helpers, so the frontend, keeper, and agents all talk to the contracts the same way. There are four contracts: PriceOracle (where prices get written), FundVault (the ERC-4626 vault over USDC that holds all the money), Governance (votes, accuracy scores, basket selection, and the cycle state machine), and KYCHook (the Uniswap gate).

The main design call was splitting the work between the chain and a keeper that runs off it. The contracts hold anything that has to be trustless: the pooled USDC, the shares and NAV, the votes, and the accuracy scores. The keeper does what a contract can't, like fetching stock prices off a public API and running the heavier per-member math. We held to one rule for it: the keeper only ever hands back fractions. It tells the contract each member's new accuracy and their cut of the rewards, and the contract turns that into real USDC using its own NAV. Votes going in and scores coming out are both on-chain, so anyone can re-run a cycle and check our work.

Chainlink CRE connects the two sides. Every contract can take a write from Chainlink, or from a plain backup script if CRE has issues, on the same code path either way. For the live demo we skip the full deployment and run the workflow as an HTTP-triggered job: each POST is one tick that reads the on-chain state, pushes it a step forward, and writes real testnet transactions.

The hardest part was getting the fund to actually trade on Uniswap v4. Every stock has a real pool against USDC, and the KYCHook puts a beforeSwap allowlist on each one so only the verified fund can trade. Two parts were tricky. First, a v4 hook has to encode its permissions in its own address, so we mine the address with CREATE2 (HookMiner) until it lands with the beforeSwap flag set. Second, beforeSwap only sees whoever called the pool, not the original sender. Route through the standard Universal Router and you'd be gating the router, not the fund, which defeats the point. So our executor is its own tiny router that calls the pool directly. One more catch: NAV is priced at the oracle, but swaps execute at the pool price, and if those drift, every trade shows fake profit or loss. So each cycle the keeper re-pegs every pool with a small swap that nudges it back to the oracle price.

Identity runs on World ID, wallets on Dynamic. World ID's on-chain verifier on Base Sepolia is Orb-only, which is no use to a judge who's never opened World App, so we verify the proof on our own backend against World's REST API and then write the result onto the vault. That's what gates deposits and voting, and without it the accuracy half of voting power would just be farmable with fake accounts. Dynamic makes signing up painless: log in with an email and you get a gas-sponsored embedded wallet, so you go from an email address to verified and voting with no extension and no faucet.

At the core sit two pieces of math, written once and shared between the contracts and the replay engine. Basket selection turns votes into positions, weighted by how much support each stock got, with a cap on any single position and a floor that drops tiny ones, so a lightly-voted week can correctly leave part of the fund in cash. Scoring, run when a cycle resolves, grades each member on how well their picks did against the S&P, smooths that into a running accuracy score so one good or bad week doesn't swing it, and uses it to set voting power for next cycle: half your capital, half your proven accuracy, with the accuracy half eased in over a newcomer's first few cycles. The reward pool then goes to whoever actually backed the winners.

background image mobile

Join the mailing list

Get the latest news and updates

Concordia | ETHGlobal