Skip to content
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

[P2P] Implement KISS peer discovery for LocalNet #416

Closed
10 tasks
deblasis opened this issue Dec 22, 2022 · 1 comment · Fixed by #521
Closed
10 tasks

[P2P] Implement KISS peer discovery for LocalNet #416

deblasis opened this issue Dec 22, 2022 · 1 comment · Fixed by #521
Assignees
Labels
p2p P2P specific changes

Comments

@deblasis
Copy link
Contributor

deblasis commented Dec 22, 2022

Objective

Ensure that the debug client is capable of broadcasting / sending messages to the LocalNet nodes even after the ValidatorMap (which contained the addresses of the nodes, sourced from the genesis) has been sunset.

Origin Document

Since #203 and #331 replace ValidatorMap with dynamic actor fetching from the persistence layer based on the Node's current height, the debug client needs a mechanism to discover the entire local set of peers regardless of the address book each individual node has.

This leads us to the first real use-case for peer-discovery.

Goals

  • Design and implement a way for gathering the current (i.e. at the current height) validator set of addresses from the point of view of the debug client or another node that intends to join the network.

Deliverable

  • Functioning LocalNet without a hardcoded set of validatorAddresses
  • Updated RPC to exposes a new endpoint that returns the addresses of the staked validators known to the node the client is connected to
  • Bonus: allow a graphical and/or CLI based way for inspecting the addressBook for development and debugging purposes

Non-goals / Non-deliverables

General issue deliverables

  • Update the appropriate CHANGELOG(s)
  • Update any relevant local/global README(s)
  • Update relevant source code tree explanations
  • Add or update any relevant or supporting mermaid diagrams

Testing Methodology

  • New tests: Documentation (e.g. video) showing the usage & functionality of the new RPC in action
  • All tests: make test_all
  • LocalNet: verify a LocalNet is still functioning correctly by following the instructions at docs/development/README.md

Creator: [@deblasis]
Co-Owners: [@Olshansk]

@deblasis deblasis added the p2p P2P specific changes label Dec 22, 2022
@deblasis deblasis self-assigned this Dec 22, 2022
@deblasis deblasis moved this to In Progress in V1 Dashboard Dec 22, 2022
@Olshansk Olshansk changed the title [P2P] Implement KISS peer discovery [P2P] Implement KISS peer discovery for LocalNet Dec 22, 2022
@jessicadaugherty
Copy link
Contributor

jessicadaugherty commented Jan 23, 2023

@deblasis Create draft PR with endpoints and tooling for review (potentially merge as is)

@deblasis deblasis moved this from In Progress to In Review in V1 Dashboard Feb 9, 2023
deblasis added a commit that referenced this issue Feb 17, 2023
…429) (#521)

## Description

This PR has been extracted from
#491 and is, hopefully, more
digestible from a code-review and scope point of view.

The main goal is to remove hardcoded nodes and move towards a more
dynamic environment.

It's also highlighting the potential entry points for subsequent P2P
work

The code leverages the abstractions added recently
(`currentHeightProvider` and `addressBookProvider`) to fetch the data
from an RPC endpoint.

## Issue

Fixes #416
Fixes #429

## Type of change

Please mark the relevant option(s):

- [x] New feature, functionality or library
- [ ] Bug fix
- [ ] Code health or cleanup
- [x] Major breaking change
- [ ] Documentation
- [ ] Other <!-- add details here if it a different type of change -->

## List of changes

### CLI

- Updated CLI to use to source the address book and the current height
from the RPC server leveraging the `rpcAddressBookProvider` and
`rpcCurrentHeightProvider` respectively and the `bus` for dependency
injection

### P2P

- Modules embed `base_modules.IntegratableModule` and
`base_modules.InterruptableModule` for DRYness
- Deprecated `debugAddressBookProvider`
- Added `rpcAddressBookProvider` to source the address book from the RPC
server
- Leveraging `bus` for dependency injection of the `addressBookProvider`
and `currentHeightProvider`
- Deprecated `debugCurrentHeightProvider`
- Added `rpcCurrentHeightProvider` to source the current height from the
RPC server
- Fixed raintree to use the `currentHeightProvider` instead of consensus
(that was what we wanted to avoid in the first place)
- Added `getAddrBookDelta` to calculate changes to the address book
between heights and update the internal state and componentry
accordingly
- Reacting to `ConsensusNewHeightEventType` to update the address book 
- Updated tests

### RPC

- Updated RPC to expose the node's address book via GET
/v1/p2p/staked_actors_address_book


## Testing

- [x] `make develop_test`
- [x]
[LocalNet](https://github.com/pokt-network/pocket/blob/main/docs/development/README.md)
w/ all of the steps outlined in the `README`

<!-- REMOVE this comment block after following the instructions
 If you added additional tests or infrastructure, describe it here.
 Bonus points for images and videos or gifs.
-->

## Required Checklist

- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have tested my changes using the available tooling
- [x] I have updated the corresponding CHANGELOG

### If Applicable Checklist

- [ ] I have updated the corresponding README(s); local and/or global
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added, or updated,
[mermaid.js](https://mermaid-js.github.io) diagrams in the corresponding
README(s)
- [ ] I have added, or updated, documentation and
[mermaid.js](https://mermaid-js.github.io) diagrams in `shared/docs/*`
if I updated `shared/*`README(s)

---------

Signed-off-by: Alessandro De Blasis <alex@deblasis.net>
Co-authored-by: Dmitry K <okdas@pm.me>
Co-authored-by: Dmitry Knyazev <okdas@users.noreply.github.com>
Co-authored-by: Daniel Olshansky <olshansky@pokt.network>
Co-authored-by: Daniel Olshansky <olshansky.daniel@gmail.com>
@github-project-automation github-project-automation bot moved this from In Review to Done in V1 Dashboard Feb 17, 2023
bryanchriswhite added a commit that referenced this issue Feb 20, 2023
* pokt/main:
  [Infra] KISS 3 - Cluster Manager [Merge me after #521] - (Issues: #490) (#522)
  Refactor/fix state sync logs (#515)
  [P2P] KISS 2 - Peer discovery [Merge me after #520] - (Issues: #416, #429) (#521)
  [Core] KISS 1 - Finite State Machine [Merge me first] - (Issue: #499) (#520)
  [CLI] Stake command bugfix (#518)
  [CLI] Cannot run make localnet_client_debug: Cannot initialise the keybase with the validator keys: Unable to find YAML file (#517)
  Fix the link shown by `make go_doc`
  Fixed duplicate GITHUB_WIKI tag
  [Documentation] Update Devlog Formatting (#512)
  [Docs & Bugs] Minor fixes post keybase changes (#513)
  [Utility] Foundational bugs, tests, code cleanup and improvements (1 / 2) (#503)
  [Tooling] Integrate Keybase w/ CLI (Issue #484 ) (#501)
  update devlog2.md
  update devlog2.md
  Update devlog1.md
bryanchriswhite added a commit that referenced this issue Feb 20, 2023
* pokt/main:
  [Infra] KISS 3 - Cluster Manager [Merge me after #521] - (Issues: #490) (#522)
  Refactor/fix state sync logs (#515)
  [P2P] KISS 2 - Peer discovery [Merge me after #520] - (Issues: #416, #429) (#521)
  [Core] KISS 1 - Finite State Machine [Merge me first] - (Issue: #499) (#520)
  [CLI] Stake command bugfix (#518)
  [CLI] Cannot run make localnet_client_debug: Cannot initialise the keybase with the validator keys: Unable to find YAML file (#517)
  Fix the link shown by `make go_doc`
  Fixed duplicate GITHUB_WIKI tag
  [Documentation] Update Devlog Formatting (#512)
  [Docs & Bugs] Minor fixes post keybase changes (#513)
  [Utility] Foundational bugs, tests, code cleanup and improvements (1 / 2) (#503)
  [Tooling] Integrate Keybase w/ CLI (Issue #484 ) (#501)
  update devlog2.md
  update devlog2.md
  Update devlog1.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment