Coder Social home page Coder Social logo

jqk6 / py-libp2p Goto Github PK

View Code? Open in Web Editor NEW

This project forked from libp2p/py-libp2p

0.0 0.0 0.0 549 KB

The Python implementation of the libp2p networking stack ๐Ÿ [under development]

Home Page: https://libp2p.io

License: Other

Python 100.00%

py-libp2p's Introduction

py-libp2p Build Status codecov Gitter chatFreenode

py-libp2p hex logo

WARNING

py-libp2p is an experimental and work-in-progress repo under heavy development. We do not yet recommend using py-libp2p in production environments.

Sponsorship

This project is graciously sponsored by the Ethereum Foundation through Wave 5 of their Grants Program.

Maintainers

The py-libp2p team consists of:

@zixuanzh @alexh @stuckinaboot @robzajac

Development

py-libp2p requires Python 3.7 and the best way to guarantee a clean Python 3.7 environment is with virtualenv

virtualenv -p python3.7 venv
. venv/bin/activate
pip3 install -r requirements_dev.txt
python setup.py develop

Testing

After installing our requirements (see above), you can:

cd tests
pytest

Note that tests/libp2p/test_libp2p.py contains an end-to-end messaging test between two libp2p hosts, which is the bulk of our proof of concept.

Feature Breakdown

py-libp2p aims for conformity with the standard libp2p modules. Below is a breakdown of the modules we have developed, are developing, and may develop in the future.

Legend: ๐Ÿ Done ย  ๐Ÿ‹ In Progress ย  ๐Ÿ… Missing ย  ๐ŸŒฐ Not planned

libp2p Node Status
libp2p ๐Ÿ
Identify Protocol Status
Identify ๐Ÿ‹
Transport Protocols Status
TCP ๐Ÿ
UDP ๐Ÿ…
WebSockets ๐ŸŒฐ
UTP ๐ŸŒฐ
WebRTC ๐ŸŒฐ
SCTP ๐ŸŒฐ
Tor ๐ŸŒฐ
i2p ๐ŸŒฐ
cjdns ๐ŸŒฐ
Bluetooth LE ๐ŸŒฐ
Audio TP ๐ŸŒฐ
Zerotier ๐ŸŒฐ
QUIC ๐ŸŒฐ
Stream Muxers Status
multiplex ๐Ÿ
yamux ๐Ÿ…
benchmarks ๐ŸŒฐ
muxado ๐ŸŒฐ
spdystream ๐ŸŒฐ
spdy ๐ŸŒฐ
http2 ๐ŸŒฐ
QUIC ๐ŸŒฐ
Protocol Muxers Status
multiselect ๐Ÿ
Switch (Swarm) Status
Switch ๐Ÿ
Dialer stack ๐Ÿ
Peer Discovery Status
bootstrap list ๐Ÿ…
Kademlia DHT ๐Ÿ‹
mDNS ๐ŸŒฐ
PEX ๐ŸŒฐ
DNS ๐ŸŒฐ
Content Routing Status
Kademlia DHT ๐Ÿ‹
floodsub ๐Ÿ
gossipsub ๐Ÿ
PHT ๐ŸŒฐ
Peer Routing Status
Kademlia DHT ๐Ÿ
floodsub ๐Ÿ
gossipsub ๐Ÿ
PHT ๐ŸŒฐ
NAT Traversal Status
nat-pmp ๐ŸŒฐ
upnp ๐ŸŒฐ
ext addr discovery ๐ŸŒฐ
STUN-like ๐ŸŒฐ
line-switch relay ๐ŸŒฐ
pkt-switch relay ๐ŸŒฐ
Exchange Status
HTTP ๐ŸŒฐ
Bitswap ๐ŸŒฐ
Bittorrent ๐ŸŒฐ
Consensus Status
Paxos ๐ŸŒฐ
Raft ๐ŸŒฐ
PBTF ๐ŸŒฐ
Nakamoto ๐ŸŒฐ

Explanation of Basic Two Node Communication

Core Concepts

(non-normative, useful for team notes, not a reference)

Several components of the libp2p stack take part when establishing a connection between two nodes:

  1. Host: a node in the libp2p network.
  2. Connection: the layer 3 connection between two nodes in a libp2p network.
  3. Transport: the component that creates a Connection, e.g. TCP, UDP, QUIC, etc.
  4. Streams: an abstraction on top of a Connection representing parallel conversations about different matters, each of which is identified by a protocol ID. Multiple streams are layered on top of a Connection via the Multiplexer.
  5. Multiplexer: a component that is responsible for wrapping messages sent on a stream with an envelope that identifies the stream they pertain to, normally via an ID. The multiplexer on the other unwraps the message and routes it internally based on the stream identification.
  6. Secure channel: optionally establishes a secure, encrypted, and authenticated channel over the Connection.
  7. Upgrader: a component that takes a raw layer 3 connection returned by the Transport, and performs the security and multiplexing negotiation to set up a secure, multiplexed channel on top of which Streams can be opened.

Communication between two hosts X and Y

(non-normative, useful for team notes, not a reference)

Initiate the connection: A host is simply a node in the libp2p network that is able to communicate with other nodes in the network. In order for X and Y to communicate with one another, one of the hosts must initiate the connection. Let's say that X is going to initiate the connection. X will first open a connection to Y. This connection is where all of the actual communication will take place.

Communication over one connection with multiple protocols: X and Y can communicate over the same connection using different protocols and the multiplexer will appropriately route messages for a given protocol to a particular handler function for that protocol, which allows for each host to handle different protocols with separate functions. Furthermore, we can use multiple streams for a given protocol that allow for the same protocol and same underlying connection to be used for communication about separate topics between nodes X and Y.

Why use multiple streams?: The purpose of using the same connection for multiple streams to communicate over is to avoid the overhead of having multiple connections between X and Y. In order for X and Y to differentiate between messages on different streams and different protocols, a multiplexer is used to encode the messages when a message will be sent and decode a message when a message is received. The multiplexer encodes the message by adding a header to the beginning of any message to be sent that contains the stream id (along with some other info). Then, the message is sent across the raw connection and the receiving host will use its multiplexer to decode the message, i.e. determine which stream id the message should be routed to.

py-libp2p's People

Contributors

alexh avatar aliabbasmerchant avatar csunny avatar hskang9 avatar jorropo avatar ralexstokes avatar raulk avatar robzajac avatar stuckinaboot avatar tranlv avatar zaibon avatar zixuanzh avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.