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

Lokinet integration #936

Merged
merged 8 commits into from
Nov 27, 2019
Merged

Lokinet integration #936

merged 8 commits into from
Nov 27, 2019

Conversation

jagerman
Copy link
Member

This adds some RPC end points we need for lokinet integration:

  • RPC endpoint to retrieve the ed25519 private key (also adds the missing ed25519/x25519 pubkeys to the public key RPC response)
  • adds RPC endpoint for lokinet to ping lokid

This allows a `"if_block_not_equal": "hash"` parameter to be given to
`get_n_service_nodes` which, if the given value matches the current
top block hash, skips building and returning a reply.

This is primarily aimed at lokinet which polls fairly frequenty for an
update but where the vast majority of those polls contain no new
information.

It also removes the get_all_service_nodes_public_keys RPC request
completely as lokinet was the only consumer of it (particularly unlikely
that anyone else was using this because it was returning the keys
base32z-encoded).
With the previous commit we no longer need this conversion (and lokinet
is perfectly happy just getting hex encoded values instead).
Also adds unordered_set serialization support (not that we currently
need it, but it's just two lines to support).
This simplifies lokinet as it doesn't need to worry about finding the
private key files; sometime after the next fork we do the same
simplification to loki-storage-server to use this RPC call as well.

Aside from simplifying the external components, I also have an idea here
of an advanced SN setup that hosts multiple lokid's on an internal,
beefy dedicated server with good redundant storage and lots of memory,
combined with multiple VPSes with lots of bandwidth for
lokinet/loki-storage but not enough storage/memory capacity to host the
blockchain, and not having to coordinate storage across machines makes
this setup substantially easier.
This abstracts much of the storage server ping code to work for both
storage server and lokinet.
@jagerman
Copy link
Member Author

(The other commit here is cherry-picked (unmodified) std::array serialization support commit from the blink PR.)

@Doy-lee
Copy link
Collaborator

Doy-lee commented Nov 27, 2019

looks good to me, you want to cherry-pick #880 in + code review? some overlap.

Renamed:
  - `if_block_not_equal` -> `poll_block_hash`
  - `gave_if_not_equal` -> `polling_mode`

Added lokidocs documentation for the new and existing get_n_service_node
fields, and adds magic codes to disable the internal variables.
@jagerman
Copy link
Member Author

looks good to me, you want to cherry-pick #880 in + code review? some overlap.

That explains my feeling of deja vu when I added the pubkeys again. #880 review comments are addressed, and merged everything into here.

@Doy-lee Doy-lee merged commit 29e65e0 into oxen-io:dev Nov 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants