You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dsc a5a589a083 wowified 4 months ago
levin wowified 4 months ago
.gitignore added the functional/API improvements made by Dusan, without the styling improvements (to reduce diff) 1 year ago
LICENSE Initial commit 3 years ago
README.md wowified 4 months ago
peer_retreiver.py wowified 4 months ago
setup.py added setup.py script to be able to install this module 1 year ago

README.md

py-levin

The Levin network protocol is an implementation of peer-to-peer (P2P) communications found in a large number of cryptocurrencies, including basically any cryptocurrency that is a descendant from the CryptoNote project.

Example usage:

Ask a node for it's peer list, sorted on last_seen:

python3 peer_retreiver.py 145.239.93.75 34567

99.48.XX.XX:34567
62.24.XX.XX:34567
93.44.XX.XX:34567
238.137.XX.XX:34567
163.86.XX.XX:34567
250.227.XX.XX:34567
[...]

Some notes

A Levin header (33 bytes) looks like this:

  1. u_int64 - A levin signature. 01 21 01 01 01 01 01 01 also known as 'Benders nightmare'.
  2. u_int64 - Payload size as an indicator of how many bytes to read from the network.
  3. bool - Recipient should return data.
  4. u_int32 - The command. e9 03 00 00 - Possible commands: 1001, 1007, etc. See constants.py.
  5. int32 - Return code.
  6. u_int32 - Flags.
  7. u_int32 - Protocol version. Usually 01

The payload that comes after that is a serialized Boost struct, which can be found in the Wownero codebase, e.g: cryptonote_protocol_defs.h. The terminology for a (possible nested collection) of structs is called a Section() in this module.

For the actual serialization from the perspective of Wownero, check out portable_storage_to_bin.h.

For deserialization look at Reader.read_storage_entry() and Reader.read().

Data is almost always in little-endian byte order, with the exception of keys (strings) for values in serialized structs.

Lastly, this module is presented as 'best effort' and, for example, does not guarantee that all Levin data types are supported.

References

Thanks

  • Big thanks to m2049r for his Java implementation of Levin on Monerujo (remote node finder).
  • notmike

License

© 2018 WTFPL – Do What the Fuck You Want to Public License