-
Notifications
You must be signed in to change notification settings - Fork 1k
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
Add "ArchivalNode" capability #2346
Comments
I think that when we cut the blocks, the data is already very large. Synchronization via p2p network is no longer realistic. If you really need to synchronize the complete history, you should download the offline synchronization package. |
|
It can be understood as the concept of reduced branch nodes.Ordinary nodes only need to keep the contract status area, and only need to synchronize the contract status area during synchronization, which can reduce the synchronization time and improve efficiency. |
BTW, we're past our current |
Maybe we should download the offline package automatically when node starts from 0. |
That would be centralizing the network. I believe after reviewing the core code for the |
Summary or problem description
We have
MaxTraceableBlocks
protocol parameter that controls how deep a smart contract can go with its requests for blocks and transactions and subsequently this allows nodes to drop blocks/transactions older than this. I expect nodes to implement this tail cutting option in some form (we haveRemoveUntraceableBlocks
for that already in neo-go), so in the end we'll have a network with some nodes storing all block history and some not (while still being full nodes).The problem is that if a new node joins this network and tries to synchronize from the genesis it might only have partial-history nodes in its neighbors and even though it might think that it has enough connections it won't be able to synchronize just because no neighbor could provide it with block number 1. Even if we're to store old blocks on NeoFS in future or even if we're to add P2P state exchange mechanism some nodes should still keep whole archive available and accessible via regular P2P exchange. But we should be able to find them.
Do you have any solution you want to propose?
We can introduce new
NodeCapability
,ArchivalNode
that will signify that this node has whole block archive available for synchronization (so neo-go withRemoveUntraceableBlocks
set tofalse
will announceArchivalNode
and with it set totrue
won't). Nodes can then take this capability data into account when synchronizing.Neo Version
Where in the software does this update applies to?
The text was updated successfully, but these errors were encountered: