Repository navigation
docs(community-rpc): say per-epoch payments are zero since CGP-0218 and fix lock periods - #2378
Conversation
GigaHierz
left a comment
There was a problem hiding this comment.
head 1b031a9 · PR head re-fetched and equal to headRefOid; PR is 1 commit behind main (a12466b, home/ to learn/ move) and git merge-tree CONFLICTS in registering-as-rpc-node.mdx; on a trial merge (conflict resolved by hand) mint broken-links --check-redirects and check-orphans.sh pass, mint dev on port 3461 clean at 1280 and 412 on all six changed pages; CGP-0218 and the lock durations re-derived on chain
Verdict: REQUEST-CHANGES
Hi, and thank you for this PR. The core of it is right: I re-derived the CGP-0218 claim and the 7-day and 3-day durations from the chain myself, and your swapped-trigger fix is a good catch. The findings below are one round of targeted fixes, not a rethink. One of them is a merge conflict, which is not your fault: the home/ to learn/ move landed after you branched.
Findings (severity order)
-
Medium · contribute-to-celo/community-rpc-nodes/registering-as-rpc-node.mdx:81 (and :26, which the PR did not touch)
- Defect: "You need 10,000 CELO per member node to register a group" is not what
Validators.getAccountLockedGoldRequirementcomputes. It returnsgroupLockedGoldRequirements.value * max(1, members), so an empty group registers with 10,000 CELO and each extra member raises the requirement by 10,000 (1 member 10,000, 5 members 50,000). - Failure scenario: a reader preparing to register a group reads "per member node to register" and either locks 50,000 CELO up front or believes they cannot register until member nodes exist. The command a few lines below locks
10000e18for the group, which contradicts the sentence. The PR body says this matches the Staking Requirements list at :26, but that list carries the same imprecision, so the PR copies it rather than fixing it. - Fix shape: "You need 10,000 CELO to register a group. The group must then hold 10,000 CELO for each member, so a group with five members needs 50,000 CELO." Fix the bullet at :26 the same way.
- Defect: "You need 10,000 CELO per member node to register a group" is not what
-
Medium · home/protocol/staking/validator-groups.mdx:38 (learn/ after rebase) vs the new line 66, and home/protocol/staking/locked-celo.mdx:58
- Defect: the page you edited still says an account's Locked CELO is held "for up to a
deregistrationPeriodafter it is deregistered".deregistrationPerioddoes not exist in the deployedValidatorsimplementation (0x13b0b89f3242f815c1fc6c9cf56e1ab5aea4dc58, verified source on Blockscout) or inValidators.solon master. The requirement runs before deregistration, not after, which is what your new line 66 and the registering page now say. - Failure scenario: one page gives two incompatible rules for when a group operator can free their CELO, and locked-celo.mdx:58 repeats the phantom period. A reader or AI assistant that retrieves either chunk gets a different answer from your new sentence.
- Fix shape: rewrite :38 as "While an account has a registered validator group,
unlockfails if it would leave less than the group requirement (10,000 CELO per member, held for 7 days after a member leaves)." Drop thederegistrationPeriodclause in locked-celo.mdx:58 and describe the Validators requirement instead.
- Defect: the page you edited still says an account's Locked CELO is held "for up to a
-
Medium · registering-as-rpc-node.mdx:81 and :99; validator-groups.mdx:66
- Defect: each corrected sentence answers "when do I get my CELO back" with the deregistration condition only.
LockedGold.unlockingPeriod()is 259200 s (3 days) on mainnet, andunlockthenwithdrawis still required after deregistering (locked-celo.mdx:30 documents it). - Failure scenario: an operator reads "the node can deregister 3 days after it leaves its group" and plans to have the CELO liquid on day 3. The real path is 3 days to deregister plus a 3-day unlocking period, 6 days minimum for a validator. For a group, 7 days after the last member leaves, then the 3-day unlocking period. The old "~180 days" text at least implied a long wait.
- Fix shape: add one clause to each: "After deregistering, unlock the CELO and wait the 3-day unlocking period before you can withdraw." Check the anchor by hand;
mint broken-linksdoes not validate anchors.
- Defect: each corrected sentence answers "when do I get my CELO back" with the deregistration condition only.
-
Medium (merge blocker) · registering-as-rpc-node.mdx:326-332 conflicts with main
- Defect: #2367 changed the link in the old "USDm Rewards" paragraph to
/learn/protocol/epoch-rewards/index; the PR rewrote the same paragraph with/home/protocol/epoch-rewards/index. Auto-merge conflicts and GitHub reports mergeStateStatus DIRTY. - Failure scenario: the PR cannot merge as-is, and a careless resolution that takes the PR side reintroduces a
/home/link that now only resolves through a redirect. - Fix shape: rebase on main, keep your new paragraph, and use
/learn/protocol/epoch-rewards/index. The validator-groups.mdx one-liner follows the rename automatically and merges cleanly intolearn/protocol/staking/validator-groups.mdx.
- Defect: #2367 changed the link in the old "USDm Rewards" paragraph to
-
Medium · deferred siblings with no issue filed (contribute-to-celo/community-rpc-nodes/validator-rpc-faq.mdx:47, operate/index.mdx:87, community-rpc-nodes/how-it-works.mdx:3, validator-groups.mdx "Group share" section, home/protocol/epoch-rewards/index.mdx:19)
- Defect: after this PR these still contradict the new "payment is 0" statement. validator-rpc-faq.mdx:47 says "Rewards are limited to validators who register as a community RPC provider"; operate/index.mdx:87 says the node "earns rewards"; how-it-works.mdx's description says providers are "rewarded"; epoch-rewards/index.mdx:19 lists community RPC providers as recipients. The PR body defers some of these and says "Refs # (none filed)".
- Failure scenario: an operator lands on operate/index.mdx or the FAQ, reads "earns rewards", registers, and never reaches the pages that say the payment is 0. On a page set about whether operators get paid, an unresolved contradiction is the core defect class. Under the repo review rules a deferred item needs a filed, linked issue, otherwise it stays open.
- Fix shape: either fix the one-clause statements in this PR (operate/index.mdx:87 and the FAQ answer) or file one follow-up issue listing the locations and link it in the PR body. Also, the validator-groups "Group share" section says groups are paid from validator rewards. With payment 0 that is empty, but the group still earns commission on voter rewards (
EpochManageremitsVoterRewardCommissionDistributedand releases CELO to the group), so one clause there would keep it accurate.
-
Low · contribute-to-celo/community-rpc-nodes/penalties.mdx:15
- Defect: the PR rewrites the paragraph under
## How It Worksbut leaves it in Title Case; AGENTS.md section 3 asks for sentence case on pages you are already editing. Same for## Running the RPC Servicein community-rpc-node.mdx. (### Claiming Rewardsis rightly kept for its anchor.) - Failure scenario: style drift only, no functional break.
- Fix shape:
## How it works,## Running the RPC service.
- Defect: the PR rewrites the paragraph under
-
Low · contribute-to-celo/community-rpc-nodes/community-rpc-node.mdx:3
- Defect: the new description ends "...and claim validator payments", which advertises the payment as the page's outcome in the llms.txt hook while the body says the payment is 0.
- Failure scenario: an agent choosing pages by description concludes there are live validator payments to claim.
- Fix shape: "How to operate a community RPC node on Celo and meet the uptime requirement for elected providers". The claim commands stay in the body.
Verified good (reproduced from primary sources)
- CGP-0218 (
celo-org/governance/CGPs/cgp-0218.md):status: EXECUTED,governance-proposal-id: 271,date-executed: 2026-01-11, title "Validator Spending Reduction - Option #3 Keep the current set, with rewards reduced to zero". Body: "This proposal aims to reduce the RPC set (formerly Validator set) rewards to 0 cUSD, while keeping the current set size and election dynamics." JSON script:EpochRewards.setTargetValidatorEpochPayment(0). The prose saysElection.setTargetValidatorEpochPaymentand "0 cUSD"; those are typos in the CGP, and the JSON, the on-chain event and the token (now USDm) agree with the PR. The CGP is one of three alternative options; only this one executed (proposals 269 and 270 have no execution event). - On chain: Governance
ProposalExecuted(271)in tx 0x9f8b883d0563923c536bf8f8e8ecd4e8d05e7b418d3b8cea1efa47836ac009e0, block 56217802, timestamp 1768118560 = 2026-01-11 08:02:40 UTC. The same tx emittedEpochRewards.TargetValidatorEpochPaymentSet(0).targetValidatorEpochPayment()was 82191780820000000000 at block 56217801 and is 0 now. The old 82.19178082 USDm figure was the per-epoch (daily) amount. - Registry lookups match the PR: EpochRewards 0x07F007d389883622Ef8D4d347b3f78007f28d8b7, Validators proxy 0xaeb865bca93ddc8f47b8e29f40c5399ce34d0c58, Governance 0xD533Ca259b330c7A88f74E000a3FaEa2d63B7972, LockedGold 0x6cC083Aed9e3ebe302A6336dBC7c921C9f03349E.
getGroupLockedGoldRequirements()= (10000e18, 604800 s = 7 days);getValidatorLockedGoldRequirements()= (10000e18, 259200 s = 3 days). Matches the PR.- Deployed
Validatorssource:deregisterValidatorGrouprequiressizeHistory[1] + group.duration < now;_removeMemberstampssizeHistory[numMembers+1] = now, so sizeHistory[1] is stamped when the last member leaves;deregisterValidatorrequireslastRemovedFromGroupTimestamp + validator.duration < now. The PR's corrected triggers (group: from a member leaving; validator: from leaving its group) are right and the old text had them swapped. "Can deregister once it has had no members for 7 days" is accurate. - "Scores still count":
EpochManager.setToProcessGroupscallselection.getGroupEpochRewardsBasedOnScore(group, totalRewardsVoter, groupScore).getTargetVotingYieldParameters()target is non-zero (5.075e19 on a 1e24 scale), so voter rewards still run. - "The claim commands stay":
EpochManager.sendValidatorPaymentpays outvalidatorPendingPayments. I read 6,821.91780806 USDm still pending for the first elected account (0xd818F03476eF422BedDF720adDf5B3D3fd8353FE), so the "payment already allocated and not yet sent" sentence is not vacuous. - Mechanical:
mint broken-links --check-redirectsandbash scripts/check-orphans.shpass on the PR head and on a trial merge with main (conflict resolved by hand with thelearn/link). No emoji, promotional wording or "recently/previously/coming soon"; frontmatter keepsdescription, noog:description; the relative link fix is correct and#claiming-rewardsstill resolves. - Rendered with
mint dev --port 3461on the trial merge: penalties, registering-as-rpc-node, community-rpc-node, learn validator-groups, operate faq and public-rpc-node all return 200, show the CGP link where expected, no horizontal scroll, zero console errors at 1280x900 and 412x915. One transient 500 on the first compile of the FAQ page did not reproduce (three clean reloads). - CI on the PR head: GitGuardian and StepSecurity pass. The repo's "Documentation Validation" workflow is
action_required(outside-contributor approval pending), so themint broken-linkscheck of record has not run on GitHub. I did not approve it.
What the PR got right
- It states the one fact that matters (per-epoch USDm payment is 0, with the proposal link) on every page that used to promise it, and keeps what still applies (elections, scores scaling voter rewards, slashing, claim commands) instead of deleting wholesale.
- It catches that the old lock sentences had the group and validator triggers swapped, and that the "180 day" and "60 day" figures were wrong, and fixes the sibling validator-groups line.
- The description is honest about what it did not do and includes reproducible
eth_callevidence. Heading renames were grep-checked for inbound anchors. - Small, one-clause edits; no reformatting.
Merge-order hazards
- Behind main by one commit (#2367, home/ to learn/); conflicts in registering-as-rpc-node.mdx only. The validator-groups.mdx one-liner follows the rename and merges cleanly. Rebase before merge.
- #2368 (build-on-celo/ and tooling/ to build/): the PR touches neither directory and adds no link into them, so no conflict is expected. If finding 5 is fixed in this PR, operate/index.mdx may link into build-on-celo/; use whichever path is on main at rebase time.
contribute-to-celo/did not move, and#claiming-rewardsis stable across both moves.
1b031a9 to
cb73451
Compare
|
Rebased onto main after #2367. The change that touched |
|
Previewed in a local live deployment (
Each page returns 200 and renders the new text, with no horizontal overflow on phone, no broken images and 0 console errors. |
…nd fix lock periods CGP-0218 (governance proposal 271, executed 2026-01-11) set EpochRewards.targetValidatorEpochPayment to 0; forno returns 0 for it. The community RPC pages still promised 82.19 USDm per day and USDm rewards. They now state the payment is 0, link the CGP, and keep what still applies: registration, elections, CELO voter rewards scaled by group score, slashing, and claiming any already-allocated payment. The registering page gave ~60 days (group) and ~180 days (validator) lock durations. Validators.getGroupLockedGoldRequirements() returns (10000 CELO, 604800 s) and getValidatorLockedGoldRequirements() returns (10000 CELO, 259200 s), so 7 days and 3 days. The triggers were also swapped against Validators.sol: the group duration runs from a member leaving, the validator duration from leaving its group. validator-groups.mdx carried the same 180-day figure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and reward siblings Review round on PR celo-org#2378 (GigaHierz): 1. Group requirement: 10,000 CELO registers a group; the group must then hold 10,000 CELO per member (five members = 50,000). Fixed at registering-as-rpc-node.mdx:26 and :81. 2. Drop the phantom `deregistrationPeriod` in validator-groups.mdx:38 and locked-celo.mdx:58; describe the Validators requirement instead (10,000 CELO per member held 7 days after a member leaves; 10,000 CELO per validator held 3 days after it leaves its group). 3. Add the 3-day LockedGold unlocking period after deregistration to registering-as-rpc-node.mdx:81 and :99 and validator-groups.mdx:66, linking /learn/protocol/staking/locked-celo#unlocking-period. 4. Merge conflict with main already resolved by the earlier rebase; the epoch-rewards link uses /learn/. 5. Sibling pages that still promised provider rewards: validator-rpc-faq :47, operate/index.mdx:87, how-it-works.mdx description, epoch-rewards/index.mdx:19, and the validator-groups "Group share" section (share of validator payments is empty; commission on voter rewards continues). 6. Sentence case: "## How it works" (penalties), "## Running the RPC service" (community-rpc-node). "### Claiming Rewards" kept for its anchor. 7. community-rpc-node.mdx description no longer advertises claiming validator payments. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
cb73451 to
ba2b8d9
Compare
|
Thanks Lena. All seven findings are addressed in one commit on top of the branch, head
One clause per location; no page was rewritten. The diff is 9 files, 14 insertions, 14 deletions. Checks on
|
GigaHierz
left a comment
There was a problem hiding this comment.
head ba2b8d9 · local ref and API headRefOid match; PR is based on current main 7b8f97c and git merge-tree --write-tree origin/main refs/remotes/pr/2378 is clean (tree 0a14adb6); mint broken-links --check-redirects success and check-orphans.sh clean on the head; changed pages render on :3631 (all 200, new text served, 412px smoke test 0 console errors, no overflow); CGP-0218 and lock durations re-read from chain
Verdict: REQUEST-CHANGES
Hi, and thanks for the quick turnaround. Findings 1 to 4, 6 and 7 from the last round are fixed, and the unlock-path wording in particular is now accurate. Two small things are left: a stale claim on the page you were already editing, and one sibling line. I also have one precision note on the new locked-celo.mdx sentence. These are short edits.
Status of earlier findings
- "10,000 CELO per member node to register a group": FIXED.
registering-as-rpc-node.mdx:26and:81now say 10,000 CELO to register a group, then 10,000 CELO for each member (five members need 50,000). This matchesValidators.getAccountLockedGoldRequirement(groupLockedGoldRequirements.value * max(1, members), with asizeHistorymultiplier for the last 7 days). On chaingetGroupLockedGoldRequirements()= (1e22, 604800). deregistrationPeriodinvalidator-groups.mdxandlocked-celo.mdx: FIXED.grep -rn deregistrationPeriodover the PR head returns nothing in the content tree;validator-groups.mdx:38andlocked-celo.mdx:58now describe the Validators requirement. (See new finding 2 for a precision note on thelocked-celo.mdxwording.)- Missing 3-day unlocking period: FIXED.
registering-as-rpc-node.mdx:81,:99andvalidator-groups.mdx:66each end with "After deregistering, unlock the CELO and wait the 3-day unlocking period before you can withdraw".LockedGold.unlockingPeriod()= 259200 on chain. The anchor/learn/protocol/staking/locked-celo#unlocking-periodexists (## Unlocking period,locked-celo.mdx:28), checked by hand, and the rendered page carries the link. - Merge conflict: FIXED. The PR is now based on current main (merge-base = origin/main 7b8f97c);
git merge-treeis clean./learn/protocol/epoch-rewards/indexis used. - Stale sibling pages: PARTLY FIXED. Fixed in this PR:
validator-rpc-faq.mdx:47,operate/index.mdx:87,how-it-works.mdx:3,learn/protocol/epoch-rewards/index.mdx:19, the "Group share" section atvalidator-groups.mdx:42, andoperate/operators/faq.mdxandpublic-rpc-node.mdx. I withdraw my earlier mention ofhow-it-works.mdx:28("Earn rewards"): it is about voters, who still earn CELO. Still open:operate/operators/overview.mdx:40(see new finding 1). No follow-up issue is needed once that line is fixed. - Title Case headings: FIXED.
penalties.mdx:15is## How it works;community-rpc-node.mdx:18is## Running the RPC service.### Claiming Rewardskept, so#claiming-rewardsresolves. - Description advertises payments: FIXED.
community-rpc-node.mdx:3now reads "...meet the uptime requirement for elected providers".
New findings
-
Medium ·
operate/operators/overview.mdx:40(not touched by the PR) andcontribute-to-celo/community-rpc-nodes/community-rpc-node.mdx:28,:54- Defect: three lines still describe a payment the PR says is 0.
overview.mdx:40lists the public RPC node page as a way to "optionally earn rewards", next to thepublic-rpc-node.mdxsection you retitled.community-rpc-node.mdx:28reads "Validator rewards for RPC nodes must be claimed, which is possible anytime after allocation", directly under your new "payment is 0" paragraph, and:54says "Validator rewards distribution is affected by the validator group's commission rate ... the entire reward goes to the validator group". - Failure scenario: an operator or an assistant that retrieves only the operate overview, or only the "Claiming Rewards" / "Group Commission Settings" chunk, concludes there are rewards to earn, claim and tune a commission for. This is the contradiction the PR exists to remove.
- Fix shape:
overview.mdx:40: "operate a public JSON-RPC endpoint (and optionally register it with the Community RPC program)".community-rpc-node.mdx:28: "If a payment was allocated before CGP-0218 and not yet sent, claim it with this CLI command:".:54: "Group commission applies to the CELO rewards paid to voters, and to any payment allocated before CGP-0218 and not yet sent."
- Defect: three lines still describe a payment the PR says is 0.
-
Low ·
learn/protocol/staking/locked-celo.mdx:58(andregistering-as-rpc-node.mdx:99,validator-groups.mdx:38)- Defect: "10,000 CELO for a validator, held for 3 days after it leaves its group" reads as if the requirement lapses at day 3. In
Validators.getAccountLockedGoldRequirementa registered validator needs 10,000 CELO for as long as it is registered; the 3 days only gate whenderegisterValidatorsucceeds (lastRemovedFromGroupTimestamp + duration < now). The same applies to the base 10,000 CELO for a group, which stays untilderegisterValidatorGroup; and an empty group needs 10,000, not "per member" zero. - Failure scenario: a validator leaves its group, waits 3 days, calls
unlockand it reverts with the requirement still in force because the node has not deregistered. - Fix shape: in
locked-celo.mdx:58: "10,000 CELO for a validator while it is registered, which it can end 3 days after it leaves its group; for a validator group, 10,000 CELO per member (at least 10,000) while registered and for 7 days after a member leaves". Apply the same "while registered" framing atvalidator-groups.mdx:38.registering-as-rpc-node.mdx:99is already right ("stays locked while the node is registered").
- Defect: "10,000 CELO for a validator, held for 3 days after it leaves its group" reads as if the requirement lapses at day 3. In
Verified good
- CGP-0218 is governance proposal 271.
ProposalExecuted(271)(topic 0x...10f) from the Governance contract in tx 0x9f8b883d0563923c536bf8f8e8ecd4e8d05e7b418d3b8cea1efa47836ac009e0, block 56217802, timestamp 1768118560 = 2026-01-11 08:02:40 UTC.EpochRewards.targetValidatorEpochPayment()on 0x07F007d389883622Ef8D4d347b3f78007f28d8b7 returns 0 now. - Validators proxy 0xaEb865bCa93DdC8F47b8e29F40C5399cE34d0C58: group requirement (1e22, 7 days), validator requirement (1e22, 3 days); LockedGold 0x6cC083Aed9e3ebe302A6336dBC7c921C9f03349E
unlockingPeriod()= 259200 (3 days).getAccountLockedGoldRequirementof a registered validator account returns 1e22. Source (Validators.solon master): the validator duration runs from leaving the group, the group duration from a member leaving. - The new "Group share" sentence is accurate: the group still earns commission on voter rewards.
- Mechanics:
mint broken-links --check-redirectsreports "success no broken links found";bash scripts/check-orphans.shreports "No orphan pages found."git merge-treeclean. - AGENTS.md: frontmatter keeps
description, noog:description; the edited headings are sentence case; links are root-relative (the old./community-rpc-node#claiming-rewardsis fixed); callouts untouched; no emoji, promotional wording, "recently" or "previously". - Rendered with
mint dev --port 3631(smoke test): all 11 changed pages return 200 with the new text and noderegistrationPeriod; registering page at 412px has no horizontal overflow, 0 console errors, and the unlocking-period link is present. gh pr checks 2378: GitGuardian and StepSecurity pass. The repo's mint broken-links workflow is waiting for maintainer approval of the first-time-contributor run; I did not approve it.
What the PR got right
- It states the one fact that matters (per-epoch USDm payment is 0, with the CGP link) on every page that promised it, and keeps what still applies: elections, scores scaling voter rewards, slashing, and the claim commands for payments already allocated.
- It caught that the group and validator lock triggers were swapped, and the fix to the unlock path is accurate and linked with a working anchor.
- Addressing all seven points in one commit with a point-by-point table, plus a clean rebase, makes this a short final round.
Merge-order hazards
- None known. The PR is based on current main (7b8f97c, after #2367 and #2368) and merges cleanly. The PR touches
contribute-to-celo/,operate/andlearn/protocol/, none of which moved in the last restructure steps. - Other open PRs by this author: #2376 touches
operate/operators/{archive-node,configuration,maintenance,monitoring,network-config,run-node}.mdx; the fix for finding 1 touchesoperate/operators/overview.mdx, which is not in that list (re-check at merge time). Usebuild/...paths if any link intobuild/is added. - The PR description still says the branch is based on
home/and "Refs # (none filed)"; update it to reflect the rebase and the sibling fixes so the squash message is accurate.
…quirements as while registered (review on celo-org#2378) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, all three are addressed in 88ccd32.
|
GigaHierz
left a comment
There was a problem hiding this comment.
Re-reviewed the current head: the findings from the earlier review are resolved, the diff merges cleanly into current main, and the changed claims still check out.
The hole, and the fix
The community RPC pages promised a USDm payment that governance set to zero, and gave lock durations that do not match the chain.
EXECUTED, executed 2026-01-11) setEpochRewards.targetValidatorEpochPaymentto 0 while keeping the set size and election dynamics. The docs still said providers "receive 82.19178082 USDm per day", described "USDm Rewards", and told operators to register "to be eligible for rewards". This PR states that the per-epoch USDm payment is 0, links CGP-0218, and keeps what still applies:ScoreManagerscore still scales the CELO rewards paid to its voters (EpochManager.setToProcessGroups→Election.getGroupEpochRewardsBasedOnScore(group, totalRewardsVoter, groupScore)), so the scoring and slashing sections stay;sendValidatorPaymentstill sends it.registering-as-rpc-node.mdxsaid group CELO stays locked ~60 days and node CELO ~180 days. On chain the durations are 7 days (group) and 3 days (validator), 10,000 CELO each. The requirements hold for as long as the account is registered. The durations set when a validator can deregister (3 days after leaving its group) and how long a group's per-member requirement outlasts a member leaving (7 days).locked-celo.mdxandvalidator-groups.mdxnow say "while registered", so the figures no longer read as a lock that lapses.operate/index.mdx,operate/operators/faq.mdx,operate/operators/public-rpc-node.mdx: per-epoch USDm payment is 0, with the CGP-0218 link.operate/operators/overview.mdx: the public RPC node guide is described as "operate a public JSON-RPC endpoint (and optionally register it with the Community RPC program)" instead of "optionally earn rewards".contribute-to-celo/community-rpc-nodes/how-it-works.mdx(description) andvalidator-rpc-faq.mdx: no provider payment.learn/protocol/epoch-rewards/index.mdx: the "Community RPC providers" recipient line says their payment is 0.learn/protocol/staking/validator-groups.mdx: the "180 day" group figure, thederegistrationPeriodthat does not exist in the contracts, and the Group Share section (the share of validator payments is empty; the voter reward commission is a separate rate, see Judgement calls).learn/protocol/staking/locked-celo.mdx: thederegistrationPeriodreplaced with theValidatorsrequirement.community-rpc-node.mdx: the claim command and commission section now cover only a payment allocated before CGP-0218 and not yet sent; since CGP-0241 a group can also set a separate voter reward commission.Pages changed (12):
contribute-to-celo/community-rpc-nodes/{community-rpc-node,how-it-works,penalties,registering-as-rpc-node,validator-rpc-faq}.mdx,learn/protocol/epoch-rewards/index.mdx,learn/protocol/staking/{locked-celo,validator-groups}.mdx,operate/index.mdx,operate/operators/{faq,overview,public-rpc-node}.mdx. 33 insertions, 31 deletions; no reformatting or line-ending changes.What this does NOT do / residual risk
operate/specification/smart-contract-updates-from-l1.mdx(mint CELO, swap to cUSD,sendValidatorPayment) or step 3 of the epoch process inlearn/protocol/epoch-rewards/index.mdx("Mints CELO and exchanges it for USDm", "Validators later claim rewards"). The mechanism still exists and runs with a target of 0.validator-rpc-faq.mdx(:32 and :62, "rewards will eventually drop to zero for the voters and the validators") orhow-it-works.mdx:28("Participants receive rewards for their involvement"). Both can be read as voter rewards, which still exist.penalties.mdx(members' "$2k USDm monthly", multisig powers). I could not verify its current status on chain.Judgement calls
targetValidatorEpochPayment. Group scores still scale voter rewards in the deployedEpochManagerflow.validatorgroup:commissionsetscommission, whichEpochManager.sendValidatorPaymentapplies to validator payments only. CGP-0241 (Core Contracts Release 17, executed 2026-06-27) added a separatevoterRewardCommission, applied inEpochManager._deductVoterRewardCommissionand capped bymaxVoterRewardCommission(100% on mainnet). The commission section and the Group Share paragraph describe the two separately rather than saying the group commission applies to voter rewards.getAccountLockedGoldRequirement: value × max(1, members, size within the last duration)).## Earning rewards→## Join the Community RPC program(public-rpc-node),### USDm Rewards→### USDm payments(registering), sentence case for## How it works(penalties) and## Running the RPC service(community-rpc-node). No inbound links to the old anchors.### Claiming Rewardskept so#claiming-rewardsstill resolves../community-rpc-node#claiming-rewards→/contribute-to-celo/community-rpc-nodes/community-rpc-node#claiming-rewards(AGENTS.md section 6).Issues
Refs: none (no issue filed).
Stacking / conflicts
Based on
mainat 7b8f97c, after thehome/→learn/move, so every path is underlearn/.mainhas since moved to c29403c;git merge-treeagainst it is clean. #2376 edits otheroperate/operators/pages (archive-node, configuration, maintenance, monitoring, network-config, run-node), notoverview.mdx,faq.mdxorpublic-rpc-node.mdx.Verification evidence
All calls against Celo mainnet (42220),
https://forno.celo.org.Resolve contracts through the Registry (
0x000000000000000000000000000000000000ce10,getAddressForString(string)=0x853db323):Per-epoch validator payment is 0.
targetValidatorEpochPayment()=0xe185aaa8on EpochRewards:Voter rewards are still on.
getTargetVotingYieldParameters()=0x171af90freturns a non-zero target:Lock requirements and the voter reward commission cap on Validators
0xaeb865bca93ddc8f47b8e29f40c5399ce34d0c58, read on 2026-10-08 at block 79552222:Contract source:
celo-org/celo-monorepomaster at 551bc1b6,packages/protocol/contracts-0.8/:governance/Validators.solgetAccountLockedGoldRequirement: returns the full validator requirement for as long asisValidator(account); for a group,value × max(1, members, size within the last duration). No time limit while registered.deregisterValidator: requires the validator to be out of its group andlastRemovedFromGroupTimestamp + validatorLockedGoldRequirements.duration < block.timestamp.deregisterValidatorGroup: requires no members andsizeHistory[1] + groupLockedGoldRequirements.duration < block.timestamp.common/EpochManager.solsendValidatorPayment: splits a pending payment by the group'scommission._deductVoterRewardCommission: applies the separatevoterRewardCommission, capped bymaxVoterRewardCommission.CGP-0218: https://github.com/celo-org/governance/blob/main/CGPs/cgp-0218.md (
status: EXECUTED, proposal 271, executed 2026-01-11; its only transaction isEpochRewards.setTargetValidatorEpochPayment(0)).CGP-0241: https://github.com/celo-org/governance/blob/main/CGPs/cgp-0241.md (
status: EXECUTED, proposal 296, executed 2026-06-27; Core Contracts Release 17, which adds the voter reward commission and callssetMaxVoterRewardCommission(1e24)).Greps after the change:
Local preview (
mint devat 88ccd32): the four pages changed in the latest commit (/operate/operators/overview,/contribute-to-celo/community-rpc-nodes/community-rpc-node,/learn/protocol/staking/locked-celo,/learn/protocol/staking/validator-groups) return 200, show the new text, and no longer contain the old text. In the browser at 1280px and 412px: no horizontal overflow on any page (scrollWidth≤ viewport width), 0 console errors. Checked through the DOM; no screenshots.mint broken-links: on Windows the CLI flags every root-relative link, so the absolute count is noise. PR head: 583; base 7b8f97c: 575. All 8 extra entries are in files this PR does not touch (operate/specification/{deployments,native-bridge,transaction-fees}.mdx,learn/protocol/transactions/overview.mdx,learn/protocol/epoch-rewards/carbon-offsetting-fund.mdx), and no entry differs for any changed file.scripts/check-orphans.shwas not run because it needsjq, which is not installed here; no pages were added, moved or removed. CI'smint broken-linksis the check of record.Remaining ops steps
Checklist
mainClosesissue — no issue🤖 Generated with Claude Code