Skip to content
Open
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions scientific-bounty-system/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# 💰 Scientific Bounty & Research Marketplace Engine

> Comprehensive architectural specification and system design for the SCIBASE Open Innovation Marketplace, Escrow Engine, and Scientific Challenge Verification Suite.

---

## 1. Overview & Vision

The Scientific Bounty System transforms SCIBASE into a global, high-impact economic engine for applied research. It bridges commercial, academic, and governmental R&D challenges with global scientific talent through:
* **Structured Challenge Portals:** End-to-end management of problem definitions, computational benchmarks, and milestone schedules.
* **Non-Custodial Escrow & Milestone Payouts:** Milestone-based funding backed by institutional escrow (Stripe, Smart Contracts, Fiat Bank Transfers).
* **Automated Benchmark Verification:** Objective computational validation (accuracy, throughput, generalization) coupled with double-blind peer review.
* **Cryptographic IP & Provenance Protection:** Timestamped cryptographic commitments ensuring solver intellectual property rights.

---

## 2. End-to-End Bounty Lifecycle Architecture

```mermaid
sequenceDiagram
autonumber
actor Sponsor as Challenge Sponsor (Enterprise/Gov)
participant Portal as Bounty Gateway & Escrow
actor Solver as Scientific Researcher / Lab
participant Engine as Automated Benchmark Sandbox
participant Review as Peer Review Committee

Sponsor->>Portal: Create Challenge & Deposit Escrow ($1,000+)
Portal-->>Portal: Lock Funds & Publish Evaluation Rubric
Solver->>Portal: Register / Fork Sandbox Workspace
Solver->>Engine: Submit Candidate Pipeline / Model Artifacts
Engine->>Engine: Run Isolated Reproducibility Benchmark
Engine-->>Review: Pass Benchmark Scores & Proofs
Review->>Portal: Approve Submission & Scorecard
Portal->>Solver: Release Escrow Payout to Connected Account
```

---

## 3. Core Architecture & Modules

### A. Challenge Creation & Bounty Models
1. **Tiered Payout Structures:**
* **Winner-Takes-All:** Fixed high-value bounty for the single highest-performing solution.
* **Milestone-Based:** Progressive disbursements (e.g., 30% Architecture Plan, 40% Training/Data, 30% Final Peer-Reviewed Validation).
* **Proportional Leaderboard:** Top 3-5 solvers split the reward pool based on normalized evaluation metrics.
2. **Challenge Specifications:**
* Context & Problem Statement.
* Input datasets, sample splits, and ground-truth validation criteria.
* Licensing guidelines (Open Source Apache-2.0, MIT, or Institutional Dual-License).

---

### B. Secure Escrow & Payout Engine
* **Deposit Safeguards:** Sponsors fund 100% of the prize pool upfront prior to public listing.
* **Dispute Resolution & Timeouts:** Built-in mediation windows (14-day review window, 3-member arbitration council for contested results).
* **Multi-Currency Support:** Automated payouts in USD (via Stripe Connect direct bank deposits) and stablecoin assets.

---

### C. Automated Evaluation & Verification Sandbox
* **Containerized Execution:** Candidate models run in ephemeral Docker/K8s sandbox environments without internet egress.
* **Deterministic Metrics:** Real-time scoring against hidden test datasets (F1 Score, BLEU, RMSE, latency benchmarks).
* **Double-Blind Peer Review:** For theoretical whitepapers, submissions are stripped of researcher metadata and scored across originality, methodology, and rigor.

---

## 4. API Endpoints Reference

| Method | Endpoint | Description | Auth Scope |
| :--- | :--- | :--- | :--- |
| `POST` | `/api/v1/bounties` | Create a new scientific challenge and initialize escrow | `sponsor:write` |
| `GET` | `/api/v1/bounties` | List active challenges filtered by domain, prize, and deadline | `public:read` |
| `GET` | `/api/v1/bounties/:id` | Get challenge specifications, benchmark datasets, and rules | `public:read` |
| `POST` | `/api/v1/bounties/:id/submit` | Upload candidate model artifacts and code for sandbox verification | `solver:write` |
| `GET` | `/api/v1/bounties/:id/leaderboard` | View real-time benchmark scores and verified entries | `public:read` |
| `POST` | `/api/v1/bounties/:id/release-payout` | Authorize final escrow disbursement upon validation approval | `admin:write` |

---

## 5. Security & Intellectual Property Safeguards
- [x] Zero-knowledge cryptographic hashing of solver submissions prior to evaluation.
- [x] Ephemeral sandbox isolation preventing training data exfiltration.
- [x] Multi-signature authorization for high-value (> $10,000) escrow release.
45 changes: 45 additions & 0 deletions scientific-bounty-system/bounty_engine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
"""
Scientific Bounty Engine: Scoring, Leaderboard Ranking, and Escrow Calculations.
"""
from typing import List, Dict, Any

def rank_submissions(submissions: List[Dict[str, Any]], higher_is_better: bool = True) -> List[Dict[str, Any]]:
"""
Ranks submissions based on composite benchmark and peer-review scores.
Composite = (0.7 * benchmark_score) + (0.3 * peer_review_score)
"""
ranked = []
for sub in submissions:
composite = (sub.get("benchmark_score", 0.0) * 0.7) + (sub.get("peer_review_score", 0.0) * 0.3)
sub_copy = dict(sub)
sub_copy["composite_score"] = round(composite, 4)
ranked.append(sub_copy)

ranked.sort(key=lambda x: x["composite_score"], reverse=higher_is_better)
for idx, item in enumerate(ranked, 1):
item["final_rank"] = idx
return ranked

def calculate_payouts(bounty_amount: float, payout_model: str, ranked_subs: List[Dict[str, Any]]) -> Dict[str, float]:
"""
Calculates escrow disbursement across ranked solvers according to model.
"""
if not ranked_subs or bounty_amount <= 0:
return {}

payouts = {}
if payout_model == "WINNER_TAKES_ALL":
winner = ranked_subs[0]
payouts[winner["solver_id"]] = bounty_amount

elif payout_model == "PROPORTIONAL_SPLIT":
# Split across top 3: 50% for 1st, 30% for 2nd, 20% for 3rd
weights = [0.50, 0.30, 0.20]
for idx, sub in enumerate(ranked_subs[:3]):
payouts[sub["solver_id"]] = round(bounty_amount * weights[idx], 2)

elif payout_model == "MILESTONE_BASED":
winner = ranked_subs[0]
payouts[winner["solver_id"]] = bounty_amount

return payouts
37 changes: 37 additions & 0 deletions scientific-bounty-system/test_bounty_engine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import unittest
from bounty_engine import rank_submissions, calculate_payouts

class TestScientificBountyEngine(unittest.TestCase):
def setUp(self):
self.sample_submissions = [
{"solver_id": "solver_alpha", "benchmark_score": 92.5, "peer_review_score": 88.0},
{"solver_id": "solver_beta", "benchmark_score": 96.0, "peer_review_score": 94.0},
{"solver_id": "solver_gamma", "benchmark_score": 85.0, "peer_review_score": 90.0}
]

def test_ranking_composite_score(self):
ranked = rank_submissions(self.sample_submissions)
self.assertEqual(ranked[0]["solver_id"], "solver_beta")
self.assertEqual(ranked[0]["final_rank"], 1)
self.assertEqual(ranked[1]["solver_id"], "solver_alpha")
self.assertEqual(ranked[2]["solver_id"], "solver_gamma")

def test_winner_takes_all_payout(self):
ranked = rank_submissions(self.sample_submissions)
payouts = calculate_payouts(1000.0, "WINNER_TAKES_ALL", ranked)
self.assertEqual(payouts["solver_beta"], 1000.0)
self.assertNotIn("solver_alpha", payouts)

def test_proportional_split_payout(self):
ranked = rank_submissions(self.sample_submissions)
payouts = calculate_payouts(1000.0, "PROPORTIONAL_SPLIT", ranked)
self.assertEqual(payouts["solver_beta"], 500.0)
self.assertEqual(payouts["solver_alpha"], 300.0)
self.assertEqual(payouts["solver_gamma"], 200.0)

def test_empty_submissions(self):
payouts = calculate_payouts(1000.0, "WINNER_TAKES_ALL", [])
self.assertEqual(payouts, {})

if __name__ == "__main__":
unittest.main()
36 changes: 36 additions & 0 deletions scientific-bounty-system/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
export type BountyStatus = 'DRAFT' | 'ACTIVE' | 'EVALUATION' | 'RESOLVED' | 'DISPUTED' | 'CANCELLED';
export type PayoutModel = 'WINNER_TAKES_ALL' | 'MILESTONE_BASED' | 'PROPORTIONAL_SPLIT';

export interface Milestone {
id: string;
title: string;
percentage: number;
deadline: string;
isCompleted: boolean;
}

export interface BountyChallenge {
id: string;
title: string;
description: string;
sponsorId: string;
escrowAmountUsd: number;
payoutModel: PayoutModel;
milestones: Milestone[];
benchmarkMetric: string;
status: BountyStatus;
createdAt: string;
deadline: string;
}

export interface Submission {
id: string;
bountyId: string;
solverId: string;
artifactHash: string; // SHA-256 commit hash of model/data
benchmarkScore: number;
peerReviewScore: number;
finalRank?: number;
payoutAwardedUsd?: number;
submittedAt: string;
}