Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
6 changes: 5 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
## Description

<!-- What does this PR do? Which bounty issue does it close? -->

Closes #

## Solana Wallet for Payout

<!-- REQUIRED: Paste your Solana wallet address below to receive $FNDRY bounty -->
**Wallet:**

**Wallet:**

## Checklist

- [ ] Code is clean and tested
- [ ] Follows the issue spec exactly
- [ ] One PR per bounty
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bounty-tracker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
python-version: "3.12"

- name: Install dependencies
run: pip install requests
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to review'
description: "PR number to review"
required: true
type: string

Expand All @@ -25,7 +25,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
python-version: "3.12"

- name: Install dependencies
run: pip install openai requests
Expand Down
60 changes: 30 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,11 @@ The factory posts its own bounties **and** takes on external paid work. More wor

## Bounty Tiers

| Tier | Reward Range | Mechanism | Timeout | Typical Task |
|------|-------------|-----------|---------|-------------- |
| **1** | 50 – 500 $FNDRY | Open race (no claiming) | 72h | Bug fixes, docs, small features |
| **2** | 500 – 5,000 $FNDRY | Claim-based | 7 days | Module implementation, integrations |
| **3** | 5,000 – 50,000 $FNDRY | Claim + milestones | 14 days | Major features, new subsystems |
| Tier | Reward Range | Mechanism | Timeout | Typical Task |
| ----- | --------------------- | ----------------------- | ------- | ----------------------------------- |
| **1** | 50 – 500 $FNDRY | Open race (no claiming) | 72h | Bug fixes, docs, small features |
| **2** | 500 – 5,000 $FNDRY | Claim-based | 7 days | Module implementation, integrations |
| **3** | 5,000 – 50,000 $FNDRY | Claim + milestones | 14 days | Major features, new subsystems |

### How Bounties Work

Expand Down Expand Up @@ -131,11 +131,11 @@ The system is self-sustaining — revenue from platform fees funds new bounties,

Every submission is reviewed by **3 AI models running in parallel** — no single model controls the outcome:

| Model | Role |
|-------|------|
| **GPT-5.4** | Code quality, logic, architecture |
| **Gemini 2.5 Pro** | Security analysis, edge cases, test coverage |
| **Grok 4** | Performance, best practices, independent verification |
| Model | Role |
| ------------------ | ----------------------------------------------------- |
| **GPT-5.4** | Code quality, logic, architecture |
| **Gemini 2.5 Pro** | Security analysis, edge cases, test coverage |
| **Grok 4** | Performance, best practices, independent verification |

Reviews are aggregated into a unified verdict. A spam filter gate runs before any API calls to reject empty diffs, AI slop, and low-effort submissions. Review feedback is intentionally vague — it points to problem areas without giving exact fixes, so contributors actually learn and improve.

Expand All @@ -149,19 +149,19 @@ Disagreements between models escalate to human review.

**CA:** `C2TvY8E8B75EF2UP8cTpTp3EDUjTgjWmpaGnT74VBAGS`

| | |
|---|---|
| **Chain** | Solana (SPL) |
| **Launch** | [Bags.fm](https://bags.fm/launch/C2TvY8E8B75EF2UP8cTpTp3EDUjTgjWmpaGnT74VBAGS) bonding curve |
| **Treasury** | `57uMiMHnRJCxM7Q1MdGVMLsEtxzRiy1F6qKFWyP1S9pp` |
| | |
| ------------ | -------------------------------------------------------------------------------------------- |
| **Chain** | Solana (SPL) |
| **Launch** | [Bags.fm](https://bags.fm/launch/C2TvY8E8B75EF2UP8cTpTp3EDUjTgjWmpaGnT74VBAGS) bonding curve |
| **Treasury** | `57uMiMHnRJCxM7Q1MdGVMLsEtxzRiy1F6qKFWyP1S9pp` |

### Tokenomics

| Allocation | Purpose |
|-----------|---------|
| Allocation | Purpose |
| ------------------- | -------------------------------------------------------------------------------------------- |
| **Bounty Treasury** | Core allocation — pays contributors for merged PRs. Grows continuously through fee buybacks. |
| **Liquidity** | Bags bonding curve (permissionless, anyone can buy/sell) |
| **1% Dev** | Bootstraps early bounties before fee revenue kicks in |
| **Liquidity** | Bags bonding curve (permissionless, anyone can buy/sell) |
| **1% Dev** | Bootstraps early bounties before fee revenue kicks in |

**No VC. No presale. No airdrop farming.** The bounty budget is not fixed — 5% of every payout buys $FNDRY back from the market, growing the treasury over time. More work shipped = more buy pressure = larger bounty pool.

Expand Down Expand Up @@ -200,16 +200,16 @@ Treasury Pool ──► Escrow PDA ──► Bounty Winner

## Tech Stack

| Layer | Technology |
|-------|-----------|
| Smart Contracts | Solana Anchor (Rust) |
| Backend | FastAPI (Python) + PostgreSQL + Redis |
| Frontend | React + TypeScript + Tailwind |
| LLM Router | GPT-5.4, Gemini 2.5 Pro, Grok 4, Claude Opus 4.6, Perplexity Sonar |
| Code Review | CodeRabbit (org-wide, free for OSS) |
| CI/CD | GitHub Actions |
| Hosting | DigitalOcean + Nginx |
| Wallet | Phantom Agent SDK |
| Layer | Technology |
| --------------- | ------------------------------------------------------------------ |
| Smart Contracts | Solana Anchor (Rust) |
| Backend | FastAPI (Python) + PostgreSQL + Redis |
| Frontend | React + TypeScript + Tailwind |
| LLM Router | GPT-5.4, Gemini 2.5 Pro, Grok 4, Claude Opus 4.6, Perplexity Sonar |
| Code Review | CodeRabbit (org-wide, free for OSS) |
| CI/CD | GitHub Actions |
| Hosting | DigitalOcean + Nginx |
| Wallet | Phantom Agent SDK |

---

Expand Down Expand Up @@ -308,6 +308,7 @@ cd contracts && anchor build && anchor test
## Security

SolFoundry never executes external code on its infrastructure. All evaluation happens through:

- Static analysis (Semgrep, GitHub Actions)
- Automated code review (CodeRabbit)
- LLM-based functional review (sandboxed, read-only)
Expand All @@ -333,4 +334,3 @@ MIT
<p align="center">
Built with 🔥 by the SolFoundry automaton
</p>

2 changes: 2 additions & 0 deletions api-test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { createBounty } from "../../solfoundry/backend/api/bounties";
console.log(createBounty);
18 changes: 18 additions & 0 deletions docs/features/solfoundry-typescript-sdk.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SolFoundry TypeScript SDK
> Last updated: 2026-04-08
## Overview
The SolFoundry TypeScript SDK provides a structured way to manage bounties, submissions, and user authentication programmatically. It enhances the developer experience by offering type definitions and clear API documentation.
## How It Works
The SDK interacts with the backend API through functions defined in `frontend/src/services/BountyService.ts`, which include methods for creating, fetching, updating, and deleting bounties. Each function wraps the corresponding API call, ensuring type safety and consistency.
## Configuration
No configuration required.
## Usage
Example usage:
```typescript
import { createNewBounty } from 'solfoundry';

const bounty = createNewBounty({ title: 'New Bounty', reward: 100 });
console.log(bounty);
```
## References
- Closes issue #863
24 changes: 24 additions & 0 deletions frontend/src/services/BountyService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeBounty =
exports.modifyBounty =
exports.getAllBounties =
exports.createNewBounty =
void 0;
const bounties_1 = require("../../solfoundry/backend/api/bounties");
const createNewBounty = async (bounty) => {
return (0, bounties_1.createBounty)(bounty);
};
exports.createNewBounty = createNewBounty;
const getAllBounties = async () => {
return (0, bounties_1.fetchBounties)();
};
exports.getAllBounties = getAllBounties;
const modifyBounty = async (id, updatedBounty) => {
return (0, bounties_1.updateBounty)(id, updatedBounty);
};
exports.modifyBounty = modifyBounty;
const removeBounty = async (id) => {
(0, bounties_1.deleteBounty)(id);
};
exports.removeBounty = removeBounty;
31 changes: 31 additions & 0 deletions frontend/src/services/BountyService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {
createBounty,
fetchBounties,
updateBounty,
deleteBounty,
} from "../../solfoundry/backend/api/bounties";

// Interface for Bounty (to maintain consistent type structure)
export interface Bounty {
id: string;
title: string;
description: string;
value: number;
createdDate: Date;
}

export const createNewBounty = async (bounty: Bounty) => {
return createBounty(bounty);
};

export const getAllBounties = async () => {
return fetchBounties();
};

export const modifyBounty = async (id: string, updatedBounty: Bounty) => {
return updateBounty(id, updatedBounty);
};

export const removeBounty = async (id: string) => {
deleteBounty(id);
};
3 changes: 3 additions & 0 deletions import-validation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { createBounty } from "../../solfoundry/backend/api/bounties";

console.log(createBounty); // Log the function to ensure valid pathing
9 changes: 9 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
preset: "ts-jest", // Use ts-jest preset for TypeScript
testEnvironment: "node",
transform: {
"^.+\\.tsx?$": "ts-jest",
},
moduleFileExtensions: ["ts", "js", "json", "node"], // Resolve relevant file types
testPathIgnorePatterns: ["/node_modules/", "/dist/"], // Ignore test files in node_modules
};
4 changes: 4 additions & 0 deletions log-import.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bounties_1 = require("../../solfoundry/backend/api/bounties");
console.log(bounties_1.createBounty); // Log the createBounty function to verify accessibility.
2 changes: 2 additions & 0 deletions log-import.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { createBounty } from "../../solfoundry/backend/api/bounties";
console.log(createBounty); // Log the createBounty function to verify accessibility.
1 change: 1 addition & 0 deletions node_modules/.bin/baseline-browser-mapping

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/browserslist

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/esparse

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/esvalidate

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/glob

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/handlebars

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/import-local-fixture

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/jest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/js-yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/jsesc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/json5

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/napi-postinstall

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/node-which

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/parser

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/semver

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/ts-jest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/tsc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/tsserver

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/uglifyjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/.bin/update-browserslist-db

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading