Regenerate Community Votes API

Interim governance for the RougeChain Regenerate treasury. Proposals and votes are hosted by the node, outside consensus, until on-chain governance ships. Every vote is a wallet-signed request, stored with its signature so anyone can recount.

Rules

Set per proposal when it opens, and never changed afterwards:

RuleDefaultNode setting
Voting weightXRGE balance when the proposal opened (snapshot)—
Excluded walletsTeam, treasury and exchange walletsQV_REGEN_EXCLUDED, QV_REGEN_TREASURY
Per-wallet cap5% of eligible supplyQV_REGEN_CAP_BPS
Turnout to pass10% of eligible supply (yes + no + abstain)QV_REGEN_TURNOUT_BPS
MajorityMore yes than no—
Voting window7 days (1–30)QV_REGEN_DEFAULT_DAYS
Opening a proposalCurator, or 10,000 XRGE and one open proposal at a timeQV_REGEN_CURATORS, QV_REGEN_MIN_CREATOR_XRGE

Balances acquired after a proposal opens carry no vote on it. A wallet can change its vote until the window closes; the latest vote counts.

Read endpoints

EndpointReturns
GET /api/regen/configTreasury, cap, turnout, default window, excluded wallets, curators
GET /api/regen/proposalsEvery proposal, newest first, with tally and status
GET /api/regen/proposals/:idOne proposal with every vote, including signedPayload and signature
GET /api/regen/proposals/:id/weight/:whoA wallet's snapshot weight, eligibility and current vote (:who is a rouge1 address or public key)

Status is one of open, passed, failed, paid or cancelled. Quanta amounts are decimal strings (1 XRGE = 10⁹ quanta); summaryXrge repeats the totals in XRGE.

Signed endpoints

All use the standard signed request format (payload with from, timestamp, nonce; ML-DSA-65 signature; public_key).

EndpointPayloadWho
POST /api/v2/regen/proposalstitle, summary, optional territory, recipient (rouge1), requestedXrge, link (https), durationDaysCurator or eligible holder
POST /api/v2/regen/votesproposalId, choice (yes, no, abstain)Any wallet with snapshot weight
POST /api/v2/regen/proposals/payoutproposalId, txIdCurator, for a passed proposal
POST /api/v2/regen/proposals/cancelproposalId, optional reasonCurator, or the creator before any votes

A payout is accepted only if txId is an on-chain XRGE transfer from the treasury, and to the proposal's recipient when one is set.

Recounting

Fetch GET /api/regen/proposals/:id. For each vote, verify signature over the sorted-key JSON of signedPayload against publicKey, derive the rouge1 address from publicKey, and sum weights by choice. Weights come from the snapshot taken at snapshotHeight.