KIP-227/286/290: sync permissionless implementation#118
Merged
hyunsooda merged 5 commits intoMay 21, 2026
Conversation
kip-227: - Enforce header.VRank empty before FORK_BLOCK - Epoch-start decoded list must preserve valset order - Non-epoch: cfReport must be sorted ascending, empty payload permitted kip-286: - Rewrite epoch transition pseudo-code as single-pass loop matching the implementation (T1, T4, T2, T3b/pool all in one iteration) - Move T4 (CandReady transitions) into the main loop before top-50 sorting; update ordering rationale accordingly kip-290: - Add missing errors: NotInitializable, OnlyManager, OnlyNodeId - Add missing events: ManagerUpdated, RewardAddressUpdated, VoterAddressUpdated, MetadataUpdated - Add GovernanceInfo struct and getAllGovernanceInfo()/getAllNodesLength() - Clarify config update functions are called by configurator, not owner Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ixes
kip-227:
- Fix terminology: candidates(N-1) → CandTesting(N-1) for consistency
- Add rule 4 to Proposer section: if N+1 is epoch-start, omit cfReport
and carry CandTesting(N+1) instead
kip-286:
- Remove incorrect "= committee" from ValActive description
- Add Qualified Validators section: defines committee = {ValActive} -
{Suspended}, documents post-HF consensus rules (header.Extra, proposer
verification, seal verification against qualified set, quorum from
len(qualified), istanbul.committeesize deprecated)
kip-290:
- Add Governance Parameter Deprecation section: governance.addvalidator,
governance.removevalidator, istanbul.committeesize deprecated after
FORK_BLOCK
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Documents all node set definitions with formulas and descriptions: Council, Committee, HeaderGovVoters, CNPeers, RewardEligible, EpochCompetitors. Notes that only Council and Committee are external APIs; all other sets are internal to the core client. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add missing admin and getter functions present in IAddressBookV2: - updateKefAddress/updateKifAddress/updateKpfAddress (owner) - isUsedAddress() and getFundAddresses() (view) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ian0371
reviewed
May 21, 2026
Governance parameter deprecation (addvalidator, removevalidator, istanbul.committeesize) is a validator lifecycle/consensus rule change, not a smart contract spec change. Move to KIP-286 per review feedback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ian0371
approved these changes
May 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed changes
Synchronizes KIP-227, KIP-286, and KIP-290 specifications with the permissionless implementation. Changes were derived by cross-referencing the Go/Solidity implementation against the spec.
KIP-227
candidates(N-1)→CandTesting(N-1)for consistency with definitionN+1is epoch-start, proposer carriesCandTesting(N+1)instead ofcfReportKIP-286
committee(N) = {ValActive} - {Suspended}with safety fallback, and documents post-HF consensus rules (header.Extra, proposer verification, seal verification, quorum)KIP-290
NotInitializable,OnlyManager,OnlyNodeIdManagerUpdated,RewardAddressUpdated,VoterAddressUpdated,MetadataUpdatedGovernanceInfostruct,getAllGovernanceInfo(),getAllNodesLength()updateKefAddress,updateKifAddress,updateKpfAddress,getFundAddresses(),isUsedAddress()governance.addvalidator,governance.removevalidator,istanbul.committeesizedeprecated afterFORK_BLOCKTypes of changes
Checklist
I have read the CLA Document and I hereby sign the CLAin first time contributionRelated issues
Further comments
All changes are implementation-driven: the Go/Solidity code is the ground truth, and these commits bring the spec documents into alignment.