Skip to content

feat: RustChain Python SDK — pip install rustchain (Bounty #2297, 100 RTC)#1867

Closed
sungdark wants to merge 79 commits intoScottcjn:mainfrom
sungdark:feat-rustchain-sdk-2297
Closed

feat: RustChain Python SDK — pip install rustchain (Bounty #2297, 100 RTC)#1867
sungdark wants to merge 79 commits intoScottcjn:mainfrom
sungdark:feat-rustchain-sdk-2297

Conversation

@sungdark
Copy link
Copy Markdown
Contributor

Bounty #2297 — RustChain Python SDK (100 RTC + 25 RTC bonus)

What this adds

A full Python SDK for interacting with RustChain nodes. Published to PyPI as rustchain.

Features

  • Sync + Async clients (urllib + aiohttp)
  • Full type hints throughout
  • All required methods:
    • client.health() — node health check
    • client.epoch() — current epoch info
    • client.miners() — list active miners
    • client.balance(wallet_id) — check RTC balance
    • client.transfer(from, to, amount, signature) — signed transfer
    • client.attestation_status(miner_id) — check attestation
    • client.explorer.blocks() — recent blocks
    • client.explorer.transactions() — recent transactions
  • Explorer sub-namespace: explorer.blocks(), explorer.transactions()
  • CLI wrapper (bonus): rustchain health, rustchain balance <wallet>, etc.
  • Typed exceptions: RustChainError, APIError, ConnectionError, ValidationError, AuthenticationError, WalletError
  • 38 unit tests, all passing
  • README with quickstart, async usage, CLI docs, API reference
  • PyPI-ready pyproject.toml

Package

  • pip install rustchain (package name: rustchain)

Bonus (25 RTC)

  • ✅ CLI wrapper: rustchain balance my-wallet

Tests

38 passed in 12.16s

RTC Wallet

eB51DWp1uECrLZRLsE2cnyZUzfRWvzUzaJzkatTpQV9

createkr and others added 30 commits February 16, 2026 18:15
Co-authored-by: xr <xr@xrdeMac-mini-2.local>
Co-authored-by: nicepopo86-lang <nicepopo86>
Co-authored-by: xr <xr@xrdeMac-mini-2.local>
Translation of README.md to Simplified Chinese for Chinese-speaking community.

Bounty: Issue Scottcjn#176 (5 RTC)

Key sections translated:
- Project overview and core concept (Proof-of-Antiquity)
- Quick start guide and installation instructions
- Hardware multipliers and supported platforms
- Network architecture and API endpoints
- Security model and anti-VM detection
- Related projects and attribution

All technical terms, links, code blocks, and formatting preserved.
Native Chinese speaker translation - natural and accurate.
* feat: implement decentralized GPU render protocol Scottcjn#30

* docs: add BCOS-L1 headers and compliance metadata Scottcjn#30

* fix: harden gpu escrow auth and race safety

---------

Co-authored-by: xr <xr@xrdeMac-mini-2.local>
* feat: wRTC Telegram price ticker bot with alerts and auto-posting Scottcjn#162

* docs: add BCOS-L1 headers to price bot Scottcjn#162

---------

Co-authored-by: xr <xr@xrdeMac-mini-2.local>
* feat: Add Docker deployment with nginx and SSL support (Bounty Scottcjn#20)

Implements complete Docker deployment solution for RustChain node:

Files Added:
- Dockerfile: Python 3.11-slim base with Flask + health checks
- docker-compose.yml: Multi-service setup (node + nginx)
- nginx.conf: Reverse proxy config with HTTP/HTTPS support
- requirements-node.txt: Python dependencies
- .env.example: Environment configuration template
- DOCKER_DEPLOYMENT.md: Comprehensive deployment guide
- docker-entrypoint.py: Health check endpoint wrapper

Features:
✅ Single command deployment: docker-compose up -d
✅ Persistent SQLite database storage (Docker volumes)
✅ Nginx reverse proxy with SSL support
✅ Health checks and auto-restart
✅ Security: non-root user, resource limits
✅ Production-ready: logging, backups, monitoring

Acceptance Criteria Met:
✅ Single command: docker-compose up -d
✅ Works on fresh Ubuntu 22.04 VPS
✅ Volume persistence for SQLite
✅ Health checks & auto-restart
✅ .env.example with config options

Tested deployment flow and verified health endpoint.

Resolves: Scottcjn#20

* fix: address security review feedback (Scottcjn#244)

Fixes requested by @createkr:

1. **HTTPS block now disabled by default**
   - Moved SSL server block to commented section
   - Prevents nginx startup failure when certs are missing
   - Clear instructions to uncomment after mounting certs

2. **Remove direct port 8099 exposure**
   - Commented out 8099:8099 host mapping by default
   - Service remains accessible via nginx on 80/443
   - Prevents bypassing nginx security headers/rate-limits
   - Added comment explaining how to re-enable for debugging

3. **Security hardening**
   - Added `server_tokens off;` to hide nginx version
   - Pinned dependency versions (Flask 3.0.2, requests 2.31.0, psutil 5.9.8)
   - Ensures reproducible builds

Changes maintain backward compatibility while improving production security.
Ready for re-review.
* feat: Add Grafana monitoring dashboard (Bounty Scottcjn#21) - WIP

Initial commit with Prometheus exporter and monitoring stack.
Complete dashboard JSON and documentation to follow in next commit.

* feat: Complete Grafana monitoring dashboard (Bounty Scottcjn#21)

Complete monitoring stack with Grafana + Prometheus + RustChain exporter.

Files Added:
- rustchain-exporter.py: Prometheus metrics exporter (9100)
- Dockerfile.exporter: Exporter container
- docker-compose.yml: 3-service stack (exporter + prometheus + grafana)
- prometheus.yml: Scrape config (30s interval)
- grafana-datasource.yml: Auto-provision Prometheus
- grafana-dashboard.json: Full dashboard (11 panels)
- requirements.txt: Python deps
- README.md: Complete deployment guide

Dashboard Panels:
✅ Node health indicator
✅ Active miners counter
✅ Current epoch display
✅ Epoch pot (RTC)
✅ 24h miner graph
✅ Total supply graph
✅ Hardware type pie chart
✅ Architecture pie chart
✅ Antiquity multiplier gauge
✅ Uptime graph
✅ Scrape duration with alerts

Alerts:
✅ Node down (health = 0)
✅ Miner drop (>20% in 5min)
✅ Slow scrape (>5s)

Single Command Deploy:
cd monitoring && docker-compose up -d

Access: http://localhost:3000 (admin/rustchain)

Resolves: Scottcjn#21

* fix: address security and correctness issues (Scottcjn#245)

Fixes requested by @createkr:

1. **Remove missing alerts.yml reference**
   - Commented out `rule_files` in prometheus.yml
   - Prevents Prometheus startup failure
   - Added note for future alert rule addition

2. **Enable TLS verification by default**
   - Changed `verify=False` to respect TLS_VERIFY env var
   - Defaults to `verify=True` for production security
   - Supports custom CA bundle via TLS_CA_BUNDLE
   - Current deployment uses `TLS_VERIFY=false` (documented)

3. **Make node URL configurable**
   - Load RUSTCHAIN_NODE from environment
   - Fallback: https://50.28.86.131 (current deployment)
   - Supports EXPORTER_PORT and SCRAPE_INTERVAL env vars
   - Documented in docker-compose.yml

All settings configurable via environment variables for portability.
Production-safe defaults with backward compatibility.
* docs: add comprehensive API reference Scottcjn#213

* ci(sbom): fix cyclonedx cli flag for environment export

---------

Co-authored-by: xr <xr@xrdeMac-mini-2.local>
…jn#219)

* feat: implement multi-node database sync protocol Scottcjn#36

* docs: add BCOS-L1 headers Scottcjn#36

* fix(sync): harden payload upsert, schema checks, and bounded sync endpoints

* test(security): replace md5 in mock address helper

* fix(sync): enforce signed push payload with nonce/timestamp replay guard

---------

Co-authored-by: xr <xr@xrdeMac-mini-2.local>
security: don't trust X-Forwarded-For except from trusted proxies
fix(windows miner): run without tkinter (headless mode)
…ottcjn#257) (Scottcjn#266)

* docs: complete SEO overhaul and technical documentation expansion (Scottcjn#257)

- Added robots.txt, sitemap.xml, and JSON-LD structured data
- Created 4 technical pages (About, Mining, Tokenomics, Hardware) with 500+ words each
- Implemented vintage hardware multiplier tables (PowerPC 2.5x focus)
- Enhanced meta tags, Open Graph, and Twitter Cards across all pages
- Strictly scoped to SEO and content - no infrastructure/Go changes.

* refactor: SEO overhaul and HTML5 standards compliance

- Replace deprecated <marquee> tags with modern CSS @Keyframes animations
- Fix malformed meta tags and HTML validation errors in docs
- Standardize canonical URLs and sitemap paths for SEO consistency
- Verify 'Elyan Labs' branding across codebase and documentation
- Maintain vintage terminal aesthetic while removing legacy elements
Co-authored-by: liu971227-sys <248239659+liu971227-sys@users.noreply.github.com>
zzjpython and others added 21 commits February 25, 2026 17:02
* Add RustChain Telegram Bot (Bounty Scottcjn#249)

- Implemented /price, /miners, /epoch, /balance, /health commands
- Added Dockerfile and systemd service
- Created setup instructions

Bounty: 50 RTC

* Add RustChain Telegram Bot (Bounty Scottcjn#249)

- /price, /miners, /epoch, /balance, /health commands
- Simple Python implementation
- Requirements: python-telegram-bot, requests

Bounty: 50 RTC
Fixes YAML parsing error in action.yml caused by Python heredoc at column 0.
Reduces notification spam from every-15-min failures to daily runs.
Fixes YAML parsing error in action.yml caused by Python heredoc at column 0.
Reduces notification spam from every-15-min failures to daily runs.
Fixes YAML parsing error in action.yml caused by Python heredoc at column 0.
Reduces notification spam from every-15-min failures to daily runs.
External contributors cannot add labels, so the BCOS check failed 100%
of the time. Now:
- Auto-labeler applies BCOS-L1 (code) or BCOS-L2 (security) labels
- Label gate warns instead of failing when no label present
- SBOM/attestation always generates (no longer blocked by label gate)
- Default tier is L1 when no explicit label set
External contributors cannot add labels, so the BCOS check failed 100%
of the time. Now:
- Auto-labeler applies BCOS-L1 (code) or BCOS-L2 (security) labels
- Label gate warns instead of failing when no label present
- SBOM/attestation always generates (no longer blocked by label gate)
- Default tier is L1 when no explicit label set
@github-actions
Copy link
Copy Markdown

Welcome to RustChain! Thanks for your first pull request.

Before we review, please make sure:

  • Your PR has a BCOS-L1 or BCOS-L2 label
  • New code files include an SPDX license header
  • You've tested your changes against the live node

Bounty tiers: Micro (1-10 RTC) | Standard (20-50) | Major (75-100) | Critical (100-150)

A maintainer will review your PR soon. Thanks for contributing!

@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) size/XL PR: 500+ lines labels Mar 26, 2026
@Scottcjn
Copy link
Copy Markdown
Owner

Good SDK structure — clean module separation, stdlib-only, proper error hierarchy. Two things needed before merge:

  1. CRITICAL: verify_ssl=False is the default in RustChainClient, BoTTubeClient, AND ExplorerClient. This must default to True. B1tor's security audit (security: 🔴 Red Team — Python SDK & Telegram Bot Security Audit (Bounty #69) #1866, just merged) flags this exact issue as CRIT-01. Fix: verify_ssl: bool = True in all three constructors.

  2. Large first contribution (2,701 lines / 15 files). Consider splitting into: (a) core SDK + CLI as first PR, (b) BoTTube client as follow-up PR.

Fix the SSL default and this is mergeable. Good first contribution otherwise.

@Scottcjn
Copy link
Copy Markdown
Owner

Review update: The SDK has good structure but 5 instances of verify_ssl=False as default. This was flagged as CRIT-01 in B1tor's merged security audit (#1866).

Fix required: change all 5 to verify_ssl=True. Users who need insecure connections can opt in explicitly.

Also has merge conflicts with main. Fix SSL defaults + rebase and this merges.

@Scottcjn
Copy link
Copy Markdown
Owner

Closing — superseded by your newer PR #1882. Please continue work there.

@Scottcjn Scottcjn closed this Mar 27, 2026
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 size/XL PR: 500+ lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.