Polyark Documentation

Polyark is a prediction market fund marketplace built on Polymarket V2. Skilled traders deploy ERC-4626 vaults, pool investor capital, trade Polymarket positions on investors' behalf, and earn performance fees. Smart contract enforcement solves the trust problem — managers can only interact with whitelisted Polymarket contracts and cannot withdraw investor funds directly.

What is Polyark

Polyark lets you invest in managed prediction market funds without trusting the manager with custody of your funds. Think of it as copy-trading meets hedge funds, enforced programmatically by smart contracts.

How it works

The vault lifecycle

  1. A manager deploys a vault via PolyarkFactory with their chosen parameters (fee, kill switch, timelock).
  2. Investors deposit USDC and receive vault shares. NAV starts at 1.0 USDC per share.
  3. The manager executes trades on Polymarket by calling whitelisted contracts through the vault. USDC leaves the vault to buy prediction market positions.
  4. As positions resolve profitably, USDC returns to the vault. NAV per share rises above 1.0.
  5. Performance fees accrue on gains above the high-watermark NAV. The manager claims them periodically.
  6. Investors withdraw at any time. Their shares are redeemed at current NAV minus any applicable performance fee.

Trust model

The core security guarantee: the manager cannot steal funds. The execute() function — the only way a manager can move vault assets — is restricted to a whitelist of Polymarket's own smart contracts. Any call to an unlisted address reverts on-chain.

What the manager can do: make good or bad trades. Investors trust the manager's trading skill, not their custody of funds. The kill switch limits downside automatically.

Architecture

PolyarkVault

ERC-4626 tokenised vault. Holds USDC, issues shares, enforces whitelist, manages fees and kill switch.

PolyarkFactory

Deploys new vaults with validated parameters. Maintains a registry of all deployed vaults.

PolyarkOracle

EIP-712 signed price feed for CTF positions. Used to display NAV of vaults holding open Polymarket positions.

Frontend apps are deployed on Vercel. Auth is handled by Supabase. The oracle backend service runs on Railway and submits signed price updates every 5 minutes.

Investor: Getting started

  1. Go to investor.polyark.xyz
  2. Sign up with email and password.
  3. Confirm your email via the link sent to your inbox.
  4. Connect your MetaMask wallet. You'll be asked to sign a message — this verifies you own the wallet and costs no gas.
  5. Switch MetaMask to the Sepolia testnet if prompted.
On testnet, you can mint free USDC from the Portfolio tab. Real funds are never at risk.

Investing in a vault

  1. Open the Explorer tab to browse all deployed vaults.
  2. Click a vault to see its NAV, AUM, fee structure, and oracle positions.
  3. Click the Invest tab in the right panel.
  4. Enter the USDC amount. Click Approve USDC on first use (one MetaMask confirmation).
  5. Click Deposit (one MetaMask confirmation). You receive vault shares immediately.

Your shares represent a proportional claim on the vault's assets. If NAV rises, your shares are worth more. If NAV falls, they are worth less.

Withdrawing

  1. Open the vault → Withdraw tab.
  2. Select the percentage to withdraw (25%, 50%, 75%, or 100%).
  3. Click Request withdrawal.
  4. If your withdrawal exceeds the timelock threshold (a % of AUM), wait for the countdown timer. Otherwise, execute immediately.
  5. Click Execute withdrawal to receive USDC.
If the vault has open Polymarket positions, insufficient liquidity may prevent execution until the manager closes some positions. The timelock countdown still runs normally.

NAV (Net Asset Value) per share tells you what each share is currently worth in USDC.

The on-chain NAV is calculated from the vault's USDC balance divided by total shares outstanding. It's exact and trustless.

The oracle NAV (shown in the positions panel) reflects estimated values of open Polymarket positions using real-time prices from the Polymark CLOB, signed by the oracle service and submitted on-chain every 5 minutes.

Safety mechanisms

MechanismWhat it does
Kill switchAutomatically pauses trading if drawdown exceeds the threshold. Withdrawals still work normally when paused.
WhitelistManager can only interact with approved Polymarket contracts. Cannot send funds to arbitrary addresses.
TimelockLarge withdrawals (above a % of AUM) are delayed, giving the manager time to close positions without a bank run.
High-watermarkPerformance fees only apply to gains above the previous peak NAV. No fee on recovering from losses.
Fee exclusionAccrued but unclaimed fees are excluded from NAV calculation so remaining investors don't subsidise the manager's fees.

Manager: Getting started

  1. Go to manager.polyark.xyz
  2. Sign up with email and password, confirm your email.
  3. Connect the wallet you want to use as your manager identity. This wallet will hold MANAGER_ROLE and ADMIN_ROLE on any vault you deploy.

Deploying a vault

Click + Deploy vault in the top right corner of the manager dashboard.

FieldDescription
NameFull name of the vault, shown to investors. E.g. "Sigma Edge Vault". Max 64 characters.
SymbolShort ticker for the vault's share token. E.g. "SEV". Max 16 characters.
Performance feeYour cut of profits above the high-watermark. In basis points. 2000 = 20%. Max 5000 (50%).
Kill switch thresholdDrawdown from peak NAV that automatically pauses trading. In basis points. 1500 = 15%.
Timelock delayHow long large withdrawal requests are delayed. In seconds. 259200 = 3 days.
Timelock thresholdHow large a withdrawal (as % of AUM) triggers the timelock. In basis points. 1000 = 10% of AUM.

After deployment, your wallet automatically receives both MANAGER_ROLE (trade execution) and ADMIN_ROLE (vault configuration).

Immediately after deploying, make a small initial deposit (e.g. 100 USDC) yourself before opening the vault to investors. This seeds the vault and prevents a first-deposit inflation attack.

Vault parameters explained

NAV per share

The current price of one vault share in USDC. Starts at 1.0. Rises when trades are profitable, falls when they lose. This is the primary performance metric investors watch.

AUM (Assets Under Management)

Total USDC currently inside the vault. Decreases when the manager buys Polymarket positions (USDC leaves the vault to the exchange), increases when positions are sold back.

Drawdown

How far NAV has fallen from its all-time peak. If peak NAV was 1.25 and current NAV is 1.10, drawdown is 12%. The kill switch activates when this exceeds the threshold you set.

High-watermark (HWM)

The highest NAV the vault has ever reached. Performance fees only accrue on gains above this level. If NAV drops from 1.3 to 0.9 and then recovers to 1.2, no fee is charged until NAV exceeds 1.3 again.

Accrued fees

Performance fees that have built up from profitable redemptions but haven't been claimed yet. These are excluded from NAV so they don't inflate other investors' balances.

Executing trades

Trades are executed via the Execute Trade tab in the manager dashboard.

import { ClobClient } from "@polymarket/clob-client-v2";
const clobClient = new ClobClient(host, chainId, signer);
const order = await clobClient.createOrder({ tokenID, price, size, side });
const calldata = await clobClient.encodeMatchOrder(order);
// paste calldata into Execute Trade tab
Trading is blocked while the kill switch is active. Lift it from the Overview tab before executing trades.

Managing fees

Performance fees are calculated per-redemption: when an investor withdraws, any gain above the HWM is subject to the fee. The fee is held inside the vault as accruedPerfFees.

Click Claim Fees in the Overview tab to transfer all accrued fees to the feeRecipient address (your admin wallet by default). You can update the fee recipient in Settings.

Changing the performance fee triggers a 7-day timelock. After 7 days, anyone can call Apply to make the new fee active. This protects investors from sudden fee increases.

Kill switch

The kill switch pauses all trading activity while leaving withdrawals fully operational.

Whitelist management

The whitelist is the security boundary between manager and vault. Only addresses on the list can be called via execute().

Maximum 20 targets per vault.

Smart contracts (Sepolia testnet)

ContractAddress
PolyarkFactory0xE1926DC1fA6ba6056acD5B5e0eA6201e1D16145b
PolyarkOracle0x6e100fb077eE4f887C0605805DA9F17c6A1a5a28
Sigma Edge Vault0x9c2D26CB315FC3DE9DAb47Be3b5c4F860a0674f2
MockUSDC0x20059B9Fd46b4eF4d332960DAD1d99074Ba5fdcd

All contracts are deployed on Ethereum Sepolia (chain ID 11155111). Mainnet (Polygon) deployment coming soon.

Security model

What the protocol guarantees

What the protocol does not guarantee

Testnet guide

Polyark is currently live on Ethereum Sepolia. Everything works exactly as it will on mainnet, but with fake tokens.

FAQ

Can the manager steal my funds?

No. The vault's execute() function — the only way to move USDC — only works with addresses on the whitelist. On mainnet those are Polymarket's own contracts. The manager can make bad trades, but cannot withdraw funds to their own wallet.

What happens when the kill switch activates?

Trading pauses. Withdrawals continue normally. The manager must manually lift the kill switch to resume trading. If they don't, investors can withdraw their funds at the current (reduced) NAV.

How are performance fees calculated?

Only on redemptions, and only on gains above the high-watermark. If you deposit at NAV 1.2 and the HWM is 1.5, you pay no performance fee until NAV exceeds 1.5.

What is the timelock for?

It prevents a single large withdrawal from forcing the manager to dump all open positions at once. The timelock gives the manager time to wind down positions cleanly before the USDC is released.

Can I use Polyark on mobile?

Yes, via MetaMask Mobile's built-in browser. Navigate to investor.polyark.xyz or manager.polyark.xyz.

When is mainnet (Polygon) launching?

Soon. The contracts are deployment-ready. Polygon mainnet launch requires updating to Polymarket V2 addresses and funding the deployer wallet with POL for gas.