8

Is there a registry of some kind that I've missed?
If not, how does one get an overview of the full Stellar network?

I wouldn't mind if I had to 'spider' my way across nodes, asking each what its peers are and continue to those.
But if so, do stellar-core nodes respond to any outside commands that query for their peers? Apart from their (localhost) admin interfaces I haven't found anything like that yet.

12

Yes, it should be possible but I'm not aware of any tool/library that implements it.

Thet idea is that you send a message of type GET_PEERS to a known stellar core instance, which in turn will reply with a PEERS message. Before being able to send the message you need to authenticate with the peer.

By looking at the source, the connection process is as follows (A wants to connect to B):

  1. A initiates a tcp connection to B
  2. Connection is established
  3. A sends HELLO(CertA,NonceA) to B
  4. B now has IP and listening port of A, sends HELLO(CertB,NonceB) back
  5. A sends AUTH(signed([0],keyAB))
  6. B verifies and either:
    • sends AUTH(signed([0],keyBA)) back or
    • disconnects, if it's full, optionally sending a list of other peers to try first

Places you might find good to look at:

  • Thanks! That's extremely helpful, just what I hoped would exist. I wonder if the 'auth' requirement means that I need to authenticate to the peer itself somehow, or just provide proof that I'm part of the network. I'll dig in the code myself though to try and figure it out too :-) – Dieter Jan 22 '18 at 13:47
5

It depends what you want to do with those peers: if you're looking at ip+port addresses, you can simply get a list of known peers on the network by just leaving a stellar-core running for a while.

This will build a list of peers in its "peers" table (an instance only connects to a small subset of that list). For this particular scenario you don't need to re-implement the p2p protocol.

You can dump the content of that peers table by connecting to the SQL instance that you configured stellar-core with (sqlite is probably good enough for this btw). I don't think there is a command to return the content of that table (the peers command only returns peers connected to).

If you're looking at building a list of validators (including their public key) - it's trickier, I imagine that you'd need to record the key of the validator somewhere after connecting to it (that key is not persisted in the peers table).

  • Thanks @MonsieurNicolas. I looked at the peers table but wasn't able to figure out if it provides a complete set of the (reachable) network? If it does, does that mean stellar-core performs some kind of crawling too? How else would it get a complete network view? – Dieter Jan 23 '18 at 18:26
  • 1
    Yes stellar-core “crawls” the network over time as it rotates through peers in that table. It currently doesn’t actively does it if it has already reached its target connectivity to the network though. – MonsieurNicolas Jan 23 '18 at 18:39
3

If you're running stellar-core take a look at list of commands available https://github.com/stellar/stellar-core/blob/master/docs/software/commands.md

This command shows you overview of quorum for any node

stellar-core -c 'quorum'
stellar-core -c 'quorum?node=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

And this command gives you some info about all nodes participating in last couple of ledgers

stellar-core -c 'scp'
  • Thanks Umbrel but those are commands that, as far as I know, are only available to the administrator, not an outside party. – Dieter Jan 22 '18 at 13:45
  • as I mentioned to execute those commands you need to run your own node – umbrel Jan 23 '18 at 21:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.