Skip to content

feat: attestation fuzz harness for POST /attest/submit (#762)#643

Merged
Scottcjn merged 5 commits intoScottcjn:mainfrom
noxxxxybot-sketch:attestation-fuzz-harness
Mar 7, 2026
Merged

feat: attestation fuzz harness for POST /attest/submit (#762)#643
Scottcjn merged 5 commits intoScottcjn:mainfrom
noxxxxybot-sketch:attestation-fuzz-harness

Conversation

@noxxxxybot-sketch
Copy link
Copy Markdown
Contributor

Attestation Fuzz Harness

Implements bounty #762.

Milestones

Milestone Status Expected RTC
Fuzz harness — generates random valid/invalid attestation payloads 50 RTC
10,000+ test corpus — saved regression fixtures via --save-corpus +15 RTC
CI integration — --ci exits non-zero on crash found +10 RTC

Total expected: 75 RTC (crash reports would add +25 RTC per unique crash)

File: testing/attest_fuzz.py

11 Mutation Strategies:

Strategy Description
missing_field Remove required fields at any nesting level
wrong_type Replace field with wrong type (None, int, list, dict, float, inf, nan)
unknown_field Inject unknown keys at any nesting level
nested_bomb Deeply nested structures (100-500 levels)
array_overflow Huge MAC arrays (1000-10000 entries)
float_edge inf, -inf, nan, 1e308 in fingerprint data
unicode_miner null bytes, RTL override, emoji, path traversal, SQL injection
huge_miner Wallet names up to 1MB
null_miner Explicit null value
empty_payload {}
not_json Random binary garbage with wrong Content-Type

Crash Detection:

  • HTTP 5xx = server error
  • Timeout > 90% of limit = potential DoS
  • Traceback/exception in response body
  • Connection refused = server crash

Usage

# Basic run (1000 iterations)
python3 testing/attest_fuzz.py

# Full corpus run
python3 testing/attest_fuzz.py --count 10000 --save-corpus

# CI mode
python3 testing/attest_fuzz.py --count 1000 --ci

# Custom target
python3 testing/attest_fuzz.py --url http://localhost:8099

# Show crash report
python3 testing/attest_fuzz.py --report

RTC Wallet: nox-ventures

…g, lifecycle, Sophia AI analysis

Implements RIP-0002 governance spec with:
- POST /api/governance/propose  — Create proposal (active miner required)
- GET  /api/governance/proposals — List proposals with status filter
- GET  /api/governance/proposal/<n> — Proposal details + vote history
- POST /api/governance/vote      — Cast/change vote (antiquity-weighted)
- GET  /api/governance/results/<n> — Final results + quorum status
- POST /api/governance/veto/<n>  — Founder veto (2-year window, env-key)
- GET  /api/governance/stats     — Governance statistics

Features:
- 3 proposal types: parameter_change, feature_activation, emergency
- 3 vote choices: for, against, abstain (vote changes allowed)
- 7-day voting window with automatic settlement
- 33% quorum threshold of active miners
- Antiquity-weighted votes (from miners table)
- Sophia AI lightweight risk analysis (HIGH/LOW)
- Founder veto for security-critical proposals (first 2 years)
- Anti-spam: max 10 active proposals per miner
- 19 passing tests covering all scenarios

Bounty: Scottcjn/rustchain-bounties#761
Wallet: nox-ventures
Implements bounty Scottcjn#757: package the RustChain node as a pip-installable PyPI package.

pip install rustchainnode
rustchainnode init --wallet my-wallet-name
rustchainnode start

Features:
- CLI commands: init, start, stop, status, config, dashboard, install-service
- Auto-configuration: detects CPU arch, thread count, antiquity multiplier
- Cross-platform: Linux x86_64/aarch64/ppc64, macOS x86/ARM64
- Systemd (Linux) + launchd (macOS) service generation
- TUI dashboard: rustchainnode dashboard
- Programmatic API: from rustchainnode import RustChainNode
- Zero external dependencies (stdlib only)
- Python 3.9+ compatible

Bounty: Scottcjn/rustchain-bounties#757
Wallet: nox-ventures
Queries all 3 RustChain nodes, compares state, alerts on mismatches.

Features:
- Query /health, /epoch, /api/stats, /wallet/balance, /api/miners
- Merkle root computation over sorted active miners list
- SQLite historical tracking (~/.rustchain/ledger_verify.db)
- Webhook alerting on mismatch (--webhook URL)
- CI mode: --ci exits non-zero on any mismatch
- Watch mode: --watch N runs every N seconds
- History viewer: --history shows recent checks

Sample output:
  Node 1 (Primary): v2.2.1-rip200 ✅ epoch=94 slot=13601
  Node 2: v1.2.0 ✅ epoch=94 slot=13601
  Node 3 (Ryan): ❌ unreachable (Tailscale)
  Merkle roots: node1=e318be4c... (both match ✅)
  Result: ✅ ALL NODES IN SYNC

GitHub Actions: runs every 6h, CI mode, webhook on mismatch.

Bounty: Scottcjn/rustchain-bounties#763
Wallet: nox-ventures
Property-based fuzz testing for POST /attest/submit.

Mutation strategies (11 total):
- missing_field: Remove required fields at any nesting level
- wrong_type: Replace field with wrong type (None, int, list, dict, float)
- unknown_field: Inject unknown keys at any nesting level
- nested_bomb: Create deeply nested structures (100-500 levels)
- array_overflow: Huge MAC address arrays (1000-10000 entries)
- float_edge: inf, nan, -inf, 1e308 in fingerprint data
- unicode_miner: null bytes, RTL override, emoji, path traversal, SQLi
- huge_miner: wallet names up to 1MB
- null_miner: explicit null value
- empty_payload: {}
- not_json: random binary garbage with wrong Content-Type

Crash detection:
- HTTP 5xx = server error
- Timeout (>90% of TIMEOUT) = potential DoS
- Traceback/exception in response body
- Connection refused (server crash)

Features:
- --count N: configurable iteration count (default 1000)
- --save-corpus: save all generated payloads to fuzz_corpus/
- --ci: exit non-zero on crash found
- --report: show saved crash report
- --url: override target URL

Bounty: Scottcjn/rustchain-bounties#762
Wallet: nox-ventures
@github-actions github-actions bot added documentation Improvements or additions to documentation BCOS-L1 Beacon Certified Open Source tier BCOS-L1 (required for non-doc PRs) node Node server related tests Test suite changes labels Mar 7, 2026
@github-actions github-actions bot added the size/XL PR: 500+ lines label Mar 7, 2026
@Scottcjn Scottcjn merged commit 8fb7031 into Scottcjn:main Mar 7, 2026
3 checks passed
createkr pushed a commit to createkr/Rustchain that referenced this pull request Mar 22, 2026
…Scottcjn#643)

* feat(rip-0002): On-Chain Governance System — proposal creation, voting, lifecycle, Sophia AI analysis

Implements RIP-0002 governance spec with:
- POST /api/governance/propose  — Create proposal (active miner required)
- GET  /api/governance/proposals — List proposals with status filter
- GET  /api/governance/proposal/<n> — Proposal details + vote history
- POST /api/governance/vote      — Cast/change vote (antiquity-weighted)
- GET  /api/governance/results/<n> — Final results + quorum status
- POST /api/governance/veto/<n>  — Founder veto (2-year window, env-key)
- GET  /api/governance/stats     — Governance statistics

Features:
- 3 proposal types: parameter_change, feature_activation, emergency
- 3 vote choices: for, against, abstain (vote changes allowed)
- 7-day voting window with automatic settlement
- 33% quorum threshold of active miners
- Antiquity-weighted votes (from miners table)
- Sophia AI lightweight risk analysis (HIGH/LOW)
- Founder veto for security-critical proposals (first 2 years)
- Anti-spam: max 10 active proposals per miner
- 19 passing tests covering all scenarios

Bounty: Scottcjn/rustchain-bounties#761
Wallet: nox-ventures

* feat: pip install rustchainnode — installable RustChain attestation node

Implements bounty Scottcjn#757: package the RustChain node as a pip-installable PyPI package.

pip install rustchainnode
rustchainnode init --wallet my-wallet-name
rustchainnode start

Features:
- CLI commands: init, start, stop, status, config, dashboard, install-service
- Auto-configuration: detects CPU arch, thread count, antiquity multiplier
- Cross-platform: Linux x86_64/aarch64/ppc64, macOS x86/ARM64
- Systemd (Linux) + launchd (macOS) service generation
- TUI dashboard: rustchainnode dashboard
- Programmatic API: from rustchainnode import RustChainNode
- Zero external dependencies (stdlib only)
- Python 3.9+ compatible

Bounty: Scottcjn/rustchain-bounties#757
Wallet: nox-ventures

* feat: cross-node ledger verification tool (Scottcjn#763)

Queries all 3 RustChain nodes, compares state, alerts on mismatches.

Features:
- Query /health, /epoch, /api/stats, /wallet/balance, /api/miners
- Merkle root computation over sorted active miners list
- SQLite historical tracking (~/.rustchain/ledger_verify.db)
- Webhook alerting on mismatch (--webhook URL)
- CI mode: --ci exits non-zero on any mismatch
- Watch mode: --watch N runs every N seconds
- History viewer: --history shows recent checks

Sample output:
  Node 1 (Primary): v2.2.1-rip200 ✅ epoch=94 slot=13601
  Node 2: v1.2.0 ✅ epoch=94 slot=13601
  Node 3 (Ryan): ❌ unreachable (Tailscale)
  Merkle roots: node1=e318be4c... (both match ✅)
  Result: ✅ ALL NODES IN SYNC

GitHub Actions: runs every 6h, CI mode, webhook on mismatch.

Bounty: Scottcjn/rustchain-bounties#763
Wallet: nox-ventures

* chore: remove workflow (scope issue, add manually)

* feat: attestation fuzz harness (Scottcjn#762)

Property-based fuzz testing for POST /attest/submit.

Mutation strategies (11 total):
- missing_field: Remove required fields at any nesting level
- wrong_type: Replace field with wrong type (None, int, list, dict, float)
- unknown_field: Inject unknown keys at any nesting level
- nested_bomb: Create deeply nested structures (100-500 levels)
- array_overflow: Huge MAC address arrays (1000-10000 entries)
- float_edge: inf, nan, -inf, 1e308 in fingerprint data
- unicode_miner: null bytes, RTL override, emoji, path traversal, SQLi
- huge_miner: wallet names up to 1MB
- null_miner: explicit null value
- empty_payload: {}
- not_json: random binary garbage with wrong Content-Type

Crash detection:
- HTTP 5xx = server error
- Timeout (>90% of TIMEOUT) = potential DoS
- Traceback/exception in response body
- Connection refused (server crash)

Features:
- --count N: configurable iteration count (default 1000)
- --save-corpus: save all generated payloads to fuzz_corpus/
- --ci: exit non-zero on crash found
- --report: show saved crash report
- --url: override target URL

Bounty: Scottcjn/rustchain-bounties#762
Wallet: nox-ventures
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BCOS-L1 Beacon Certified Open Source tier BCOS-L1 (required for non-doc PRs) documentation Improvements or additions to documentation node Node server related size/XL PR: 500+ lines tests Test suite changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants