[Documentation]

ChainHack Docs.

Everything you need to build, organise, and earn on ChainHack.

GitHub SDK reference

What is ChainHack?

ChainHack is a Solana-native platform for hackathons, bounties, grants, and on-chain builder reputation. Every hackathon you join, every bounty you complete, every prize you win permanently anchored to your wallet address on Solana.

Unlike Web2 platforms that store results in private databases, ChainHack's core state lives in smart contracts on Solana mainnet. This means your record is portable, verifiable, and censorship-resistant by default.

ChainHack runs on Solana mainnet. Transactions confirm in ~400ms with fees under $0.001 fast enough to feel instant.

How it works

The platform has three user roles:

  • Builders discover and submit to hackathons, claim bounties, vote in grant rounds, and accumulate on-chain reputation.
  • Organizers create and manage hackathons, bounty campaigns, or quadratic funding rounds. Prize pools are escrowed in smart contracts.
  • Sponsors fund prize pools or matching pools and access verified, ranked builder talent.

When an organizer creates an opportunity, a smart contract is deployed on Solana. The prize pool is transferred into escrow. When voting closes, the contract distributes prizes automatically no manual intervention.

Core principles

PrincipleWhat it means
On-chain firstAll state that matters (submissions, votes, prizes) lives on Solana.
Self-custodyYou own your prize. It goes to your wallet, not a platform account.
VerifiableAnyone can audit any outcome by reading the program state.
Sybil-resistantVoting uses proof-of-personhood, not raw token balances.
PermissionlessAnyone can create an opportunity or submit no whitelists.

Connect your wallet

ChainHack supports any Solana wallet that implements the Wallet Standard interface. Recommended wallets:

  • Phantom most popular Solana wallet, available as browser extension and mobile app.
  • Backpack xNFT-powered wallet with deep Solana ecosystem integrations.
  • Solflare full-featured hardware wallet support including Ledger.

Click Connect Wallet in the top-right corner. If no extension is detected, a demo wallet is used automatically useful for exploring the UI without a real wallet.

ChainHack never asks for your seed phrase. Wallet connections happen entirely through your browser extension's secure approval flow.

Explore opportunities

The Explore page lists all active, upcoming, and recently ended opportunities. Use the filters to narrow by type and status:

TypeDescription
HACKATHONThemed competitions with tracks, teams, and judging panels.
BOUNTYTask-based rewards for specific deliverables (SDKs, bug fixes, etc).
GRANTQuadratic-funded rounds where community contributions are matched.

The search bar filters by title, description, tags, and sponsor name in real time. No page reload required.

Build your profile

Your builder profile is tied to your wallet address. It aggregates:

  • REP score and level (calculated from wins, votes received, and prizes)
  • Win count, submission count, total earnings
  • Full activity history every hackathon, bounty, and vote
  • Unlocked achievements (soulbound, on-chain)

Any dapp or DAO can read your REP score on-chain via the reputation program's public API. No off-platform verification needed.


Submit to a hackathon

Open any active hackathon from the Explore page and click Submit project. The submission modal walks you through:

  • Select a track (if the hackathon has multiple)
  • Project name and description
  • GitHub repository URL
  • Demo URL or video link

On confirmation, your submission is signed by your wallet, timestamped on Solana, and pinned to IPFS + Arweave for permanent storage. The transaction costs <$0.001 in SOL fees.

Submissions are final once anchored on-chain. You can update metadata (description, demo URL) before the deadline, but the original timestamp is immutable.

Judging timeline

After the submission deadline, the judging phase begins. Depending on the hackathon config, judging may use one or both of:

  • Community voting quadratic voting open to verified wallet holders. One person, one effective vote.
  • Expert judges sponsor-appointed judges score projects on a rubric. Scores are published on-chain.

Prize distribution happens automatically when the judging phase ends the escrow contract reads the final scores and transfers SOL/USDC directly to winner wallets.

Claim a bounty

Bounties are task-based rewards with a single winner (or a small set of winners for tiered bounties). To claim:

  • Read the bounty requirements carefully deliverables are explicit.
  • Build the deliverable (SDK, feature, fix, etc).
  • Submit a link to your work (PR, repo, or package).
  • The bounty organizer reviews and approves.
  • On approval, the escrow releases the prize to your wallet instantly.
Bounty review typically takes 3–5 business days. If a bounty is not awarded within 30 days of the deadline, the escrow auto-refunds to the organizer.

Join a grant round

Grant rounds use quadratic funding (QF). The mechanism works like this:

  • A matching pool is seeded by the organizer (e.g. $80,000).
  • Community members donate SOL/USDC to their favorite projects.
  • The matching algorithm amplifies projects with many small donors over few large ones.
  • At round close, each project receives donations + matched funds.

To participate as a builder, submit your project to the round before the deadline. To donate to a project, connect your wallet and contribute any amount even $1 counts.

Earning REP

REP is your on-chain reputation score. It increases through:

ActionREP gain
Hackathon submission+10 REP
Hackathon win (1st place)+500 REP
Hackathon win (2nd place)+300 REP
Hackathon win (3rd place)+150 REP
Bounty completed+75 REP
Grant round funding received+25–200 REP (scaled to amount)
Community votes received+1 REP per 5 votes

REP is soulbound it cannot be transferred or sold. Levels unlock at 500, 1500, 3000, and 5000 REP. Higher levels will unlock priority access to certain hackathons and grant rounds in future releases.


Create a hackathon

Visit the Create page and follow the 4-step wizard:

  • Step 1 Type. Choose Hackathon, Bounty, or Grant round.
  • Step 2 Details. Set title, description, tracks, and requirements.
  • Step 3 Prize. Set the prize amount, token (SOL / USDC / USDT), and duration.
  • Step 4 Launch. Review and sign the deployment transaction. A smart contract is deployed and the prize pool is escrowed.
The prize pool is transferred into the escrow contract at launch time. Make sure your wallet has sufficient SOL for gas (~0.005 SOL) and the full prize amount in the selected token.

Setting up prize pools

Prize pools can be denominated in any SPL token. Common choices:

TokenMint addressNotes
SOLNativeNo approval needed. Recommended for small bounties.
USDCEPjFW...7FjMost common for hackathon prizes. Requires token account.
USDTEs9vM...E6PAlternative stablecoin.

For hackathons with multiple tracks, each track gets a fixed share of the total pool. You configure track allocations (e.g. 30% DeFi, 25% Gaming) in the organizer dashboard after launch.

Configuring judging

Two judging modes are available. You can combine both final score is a weighted average.

Community voting

Quadratic voting is enabled by default. Eligible voters are verified via one or more of:

  • Civic Pass (proof of personhood)
  • Gitcoin Passport score ≥ 20
  • ChainHack REP ≥ 100 (organic on-chain history)

Expert judges

Add judge wallet addresses in the organizer dashboard. Judges receive a special role token that grants access to the judging interface. Scores are submitted on-chain and cannot be altered after the judging deadline.

For high-stakes rounds, use MACI (Minimal Anti-Collusion Infrastructure) judging. MACI encrypts all votes until the round closes judges cannot coordinate in real-time.

Managing submissions

The organizer dashboard (available after connecting the wallet that deployed the contract) shows:

  • All submissions with timestamps and track assignment
  • Current vote counts per project
  • Judge scores (after deadline)
  • Prize distribution preview
  • One-click escrow release

REP system

REP (reputation) is a soulbound on-chain score anchored to your wallet. It is computed by the reputation program from raw events (submissions, wins, votes received) stored in program accounts.

The score is public and readable by any Solana program or off-chain client via the getBuilderRep(wallet: PublicKey) instruction. DAOs and grant programs can use this to gate access or weight votes.

typescript
import { getBuilderRep } from "@chainhack/sdk";

const rep = await getBuilderRep(connection, walletPublicKey);
console.log(rep.score);   // e.g. 2847
console.log(rep.level);   // e.g. 4
console.log(rep.wins);    // e.g. 14

Smart contract escrow

Every prize pool is held in a program-derived address (PDA) controlled by the ChainHack escrow program. The organizer cannot unilaterally withdraw funds once submissions open only the program can release them based on voting outcomes.

The release flow:

  • Voting closes at the deadline (enforced by the program, not the UI).
  • The program computes scores from on-chain votes and judge submissions.
  • Prize shares are calculated per the configured distribution.
  • The program transfers tokens directly to winner wallet addresses.
  • Any unclaimed remainder is returned to the organizer after 30 days.
Prize transfers use Solana's native token program there are no intermediary custody accounts. You receive funds directly, not via a platform withdrawal.

Quadratic voting

In quadratic voting, the cost of casting n votes for a project is credits. This prevents whales from dominating outcomes a voter with 100 credits can cast 10 votes for one project, or spread 1 vote each across 100 projects.

text
Votes cast   Credits used
1            1
2            4
3            9
4            16
5            25
10           100

Each verified voter receives a fixed credit allocation per round (default: 25 credits). Unspent credits do not carry over between rounds.

Sybil resistance

ChainHack uses layered sybil resistance. Organizers choose one or more verification methods when creating an opportunity:

MethodStrengthUX impact
Civic PassHigh biometric proof of personhoodOne-time verification, ~2 min
Gitcoin PassportMedium aggregated web2/web3 identityExisting passport holders instant
ChainHack REP ≥ 100Medium organic on-chain historyNo extra steps for experienced builders
MACIVery high encrypted votes, no coordinationNo UX change for voters

IPFS & Arweave

Submission metadata (project name, description, repo URL, demo URL) is stored off-chain to keep gas costs low. ChainHack pins all metadata to both IPFS and Arweave:

  • IPFS fast retrieval via content-addressed hashing. The CID is stored on-chain in the submission account.
  • Arweave permanent storage with a one-time fee. Even if IPFS pins are dropped, Arweave retains the data forever.

The on-chain submission account stores the IPFS CID. Any client can reconstruct the full submission by fetching ipfs://<CID>.


Overview & auth

ChainHack exposes a read-only REST API at https://api.chainhack.xyz/v1. Write operations go directly to the Solana program the API does not proxy transactions.

HeaderValue
Content-Typeapplication/json
X-API-KeyYour API key (obtain from dashboard)

Rate limit: 300 requests/minute per API key. Unauthenticated requests are limited to 30/minute.

bash
curl https://api.chainhack.xyz/v1/opportunities \
  -H "X-API-Key: ck_live_abc123"

Opportunities

GET/v1/opportunities
List all opportunities. Query params: type, status, limit, offset.
GET/v1/opportunities/:id
Get a single opportunity by slug ID.
GET/v1/opportunities/:id/submissions
List submissions for an opportunity. Includes votes and prize data.
json
{
  "id": "solana-summer-2026",
  "type": "HACKATHON",
  "title": "Solana Summer Buildathon 2026",
  "status": "active",
  "prize": { "amount": 250000, "token": "USDC" },
  "participants": 1240,
  "endsAt": "2026-05-29T23:59:00Z",
  "sponsor": "Solana Foundation",
  "tracks": ["DeFi", "Gaming", "AI × Blockchain", "DePIN", "Social"]
}

Builders

GET/v1/builders/:wallet
Get builder profile and REP score by wallet address.
GET/v1/builders/:wallet/submissions
Get all submissions by a wallet address.
GET/v1/builders/leaderboard
Top builders ranked by REP score. Query params: limit, offset.

Submissions

GET/v1/submissions/:id
Get a submission by ID, including votes, rank, and prize.

Submissions are created directly on-chain via the ChainHack SDK. The API reflects on-chain state with ~1s delay.

typescript
import { submitProject } from "@chainhack/sdk";

const tx = await submitProject(connection, wallet, {
  opportunityId: "solana-summer-2026",
  track: "DeFi",
  projectName: "FluxSwap",
  description: "Automated liquidity rebalancing...",
  repoUrl: "https://github.com/you/fluxswap",
  demoUrl: "https://fluxswap.xyz",
});

console.log("tx:", tx.signature);

Webhooks

Configure webhooks in the organizer dashboard to receive real-time events:

EventTrigger
submission.createdNew submission anchored on-chain
voting.openedVoting phase started
voting.closedVoting phase ended
prizes.distributedEscrow released, winners paid
builder.leveled_upA builder reached a new REP level
json
{
  "event": "prizes.distributed",
  "opportunityId": "solana-summer-2026",
  "timestamp": "2026-05-29T23:59:12Z",
  "data": {
    "winners": [
      { "wallet": "5kRm...8xFd", "prize": "50000 USDC", "rank": 1 },
      { "wallet": "9hPq...2nKt", "prize": "30000 USDC", "rank": 2 }
    ],
    "txSignature": "4Bk9...mN3p"
  }
}

Program addresses

ProgramAddressNetwork
ChainHack CoreCHhk9mPqR3vX...7fTdMainnet
Escrow ProgramESCRwB4nK2...xL9pMainnet
Reputation ProgramREPXuY7mN3...4hQsMainnet
ChainHack CoreCHhkDEVtmp...2rWnDevnet
All programs are open-source and verified on OtterSec and Neodyme. Audit reports are linked in the GitHub repository.

Escrow program

The escrow program holds prize pools and enforces distribution logic. Key instructions:

InstructionCallerDescription
initialize_opportunityOrganizerDeploy opportunity + escrow PDA, transfer prize.
submit_projectBuilderAnchor submission on-chain, emit submission event.
cast_voteVerified voterRecord quadratic vote for a submission.
distribute_prizesAnyoneTrigger prize distribution after voting closes.
refund_organizerOrganizerClaim unclaimed balance after 30-day grace period.
rust
// Simplified escrow program state
#[account]
pub struct Opportunity {
    pub organizer: Pubkey,
    pub prize_amount: u64,
    pub prize_token: Pubkey,
    pub deadline: i64,
    pub voting_end: i64,
    pub status: OpportunityStatus,
    pub submission_count: u32,
    pub bump: u8,
}

Reputation program

The reputation program maintains a BuilderAccount PDA for each wallet that has interacted with ChainHack. Accounts are created on first submission with zero cost to the builder.

rust
#[account]
pub struct BuilderAccount {
    pub wallet: Pubkey,
    pub rep: u32,
    pub wins: u32,
    pub submissions: u32,
    pub total_earned_lamports: u64,
    pub level: u8,
    pub bump: u8,
}

REP is incremented by the escrow program via a CPI call when prizes are distributed, and by the voting program when votes are received. The reputation program itself does not hold any funds it is a pure state-tracking program.

You can query any builder's account directly from the Solana RPC: getProgramAccounts(REPUTATION_PROGRAM_ID) with a memcmp filter on the wallet field.

Last updated May 2026 · v1.4.2