celestiaorg / celestia-node

Celestia Data Availability Nodes
Apache License 2.0
919 stars 916 forks source link

Split Bootstrapper into Separate Node Type #3571

Open smuu opened 1 month ago

smuu commented 1 month ago

Implementation ideas

Summary: Currently, the Celestia Node supports three types of nodes: bridge, full, and light. Both bridge and full nodes can function as bootstrappers. However, we have observed that when these nodes are also serving data, the bootstrapping function can be degraded or become unavailable, especially under heavy network load. To improve reliability and separation of concerns, we propose creating a dedicated bootstrapper node type.

Problem:

Proposed Solution:

Benefits:

Additional Context: The separation of bootstrapper functionality will align with best practices in system design, providing a more robust and maintainable architecture for the Celestia network.

cc. @walldiss

Wondertan commented 1 month ago

I agree with this direction, but one major problem needs to be solved here. We assume bootstrappers serve headers, and with this proposal, they won't anymore. The go-header relies on the notion of trusted peers, and bootstrappers serve this role by default.

One of the simple solutions is to keep bootstrappers serving headers but not data. So bootstrappers could be LNs that won't even do sampling.

walldiss commented 1 month ago

This is great idea and should help to improve quality of bootstraper service and also make it easy for anyone to launch one. We can separate trusted peers config from bootstrapers. It will allow to easily add community ran bootsrappers, while keeping security of hardcoded trusted peers. It would separate configureation for bootsraping and serving headers for subjective initialization.

smuu commented 1 month ago

This is great idea and should help to improve quality of bootstraper service and also make it easy for anyone to launch one. We can separate trusted peers config from bootstrapers. It will allow to easily add community ran bootsrappers, while keeping security of hardcoded trusted peers. It would separate configureation for bootsraping and serving headers for subjective initialization.

What benefit does it bring us to split bootstrapping and the trusted peers?

If we can only let the community run bootstrappers and not the trusted peers, what effect does it have on the network if our trusted peers are unavailable?