-
Notifications
You must be signed in to change notification settings - Fork 117
Committee Node Liveness Proof via Lightweight Proof of Work #211
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
shargon
wants to merge
1
commit into
master
Choose a base branch
from
nep-33-1
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| # NEP: Committee Node Liveness Proof via Lightweight Proof of Work | ||
| - NEP: TBA | ||
| - Title: Mechanism for Removing Inactive Committee Nodes | ||
| - Author: Fernando Diaz Toledano <shargon@gmail.com> | ||
| - Discussed in: https://github.com/neo-project/neo/pull/4304 | ||
| - Type: Standard (Core) | ||
| - Status: Draft | ||
| - Created: 2025-11-11 | ||
|
|
||
| ## Summary | ||
|
|
||
| This NEP proposes a new mechanism to verify the liveness of committee nodes through a **lightweight proof of work (PoW)** based on the hash of previous blocks. | ||
| The goal is to automatically detect and expel nodes that fail to demonstrate activity, ensuring a functional and reliable committee. | ||
|
|
||
| ## Motivation | ||
|
|
||
| In the current protocol, committee nodes may stop participating without immediate detection, causing delays or loss of fault tolerance. | ||
| This NEP introduces a **cryptographic liveness proof**, verifiable by other committee members, allowing inactive nodes to be identified and replaced automatically. | ||
|
|
||
| ## Specification | ||
|
|
||
| Each committee node must periodically prove it is **alive** by performing a **PoW** over the hash of a block `X` blocks in the past. | ||
|
|
||
| ### 1. Proof Base | ||
|
|
||
| - The hash of block `BlockHeight - X` is used as the base. | ||
| - Each node must find a nonce such that: | ||
|
|
||
| ``` | ||
| SHA256(blockHash || nonce) < Target | ||
| ``` | ||
|
|
||
| where `Target` defines the minimum difficulty threshold. | ||
|
|
||
| - The result is included in a `LivenessProof` message broadcast to other committee members. | ||
|
|
||
| ### 2. Automatic Update for Primary | ||
|
|
||
| - If the node is **primary**, the height used for computing the proof (`BlockHeight - X`) is automatically updated with every confirmed block. | ||
| - Secondary nodes must update it upon receiving a new block or `LivenessRequest` message. | ||
|
|
||
| ### 3. Verification and Expulsion | ||
|
|
||
| Each node validates received proofs. If a member does not submit a valid proof within the `LivenessWindow`, it is marked as **inactive** and automatically expelled from the committee. | ||
|
|
||
| Expulsion occurs by consensus during the next committee round, without external intervention. | ||
|
|
||
| ## Rationale | ||
|
|
||
| This approach replaces network-based heartbeat detection with verifiable cryptographic evidence. | ||
| The lightweight PoW ensures minimal computation cost while making falsification or replay infeasible. | ||
|
|
||
| ## Compatibility | ||
|
|
||
| Backward compatible. The proposal introduces no new message types or block structures beyond internal committee validation. | ||
|
|
||
| ## Reference Implementation | ||
|
|
||
| Based on the logic introduced in [neo-project/neo#4304](https://github.com/neo-project/neo/pull/4304), extended with PoW-based liveness checks. | ||
|
|
||
| ## Security Considerations | ||
|
|
||
| The mechanism prevents false reporting and requires no external trust. Only nodes that actively participate and compute valid proofs remain in the committee. | ||
|
|
||
| ## Conclusion | ||
|
|
||
| This NEP enhances NEO network reliability by enforcing continuous liveness verification through a lightweight proof of work, ensuring the committee remains composed solely of active nodes. | ||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Computing magic hashes is not something I'd expect in 2025. It's a waste of resources that Neo has always avoided. We don't need it.