Skip to main content

A unified Python SDK for P2P networking with integrated DHT and NAT capabilities

Project description

Lattica Python SDK

A unified Python SDK for P2P networking with integrated DHT and NAT capabilities, built on top of libp2p.

Features

  • Distributed Hash Table (DHT): Store and retrieve key-value pairs across the network
  • Remote Procedure Call (RPC): Execute remote functions with support for complex data types
  • Streaming RPC: Handle large data transfers with streaming capabilities
  • NAT Traversal: Automatic NAT traversal with UPnP support
  • Peer Discovery: mDNS and rendezvous-based peer discovery
  • High Performance: Built with Rust for optimal performance

Installation

You can install the released versions

pip install lattica

Or you can install from source using:

pip install git+https://github.com/GradientHQ/lattica.git#subdirectory=bindings/python

Quick Start

Basic Usage

from lattica import Lattica

# Create a Lattica instance
lattica = Lattica.builder().build()

# Get your peer ID
peer_id = lattica.peer_id()
print(f"My peer ID: {peer_id}")

Examples

1. DHT Operations

The DHT example demonstrates basic key-value storage and retrieval with subkey support.

from lattica import Lattica

# Create client1 as bootstrap node
lattica = Lattica.builder()
    .build()

# Create client2 with bootstrap nodes
lattica = Lattica.builder() \
    .with_bootstraps(["/ip4/127.0.0.1/tcp/54282/p2p/QmServerPeerId"]) \
    .build()

# Store a simple key-value pair with default expiration 10 minute
lattica.store("name", "alice")

# get the value
result = lattica.get("name")
if result:
    print(f"Value: {result.value}")
    print(f"Expires: {result.expiration_time}")


# Store values with subkeys (useful for voting, user data, etc.)
key = "peer_list"
peers = ["alice", "bob", "carol"]

# Each peer stores their vote with a subkey
lattica.store(key, "yes", expiration_time, subkey="alice")
lattica.store(key, "no", expiration_time, subkey="bob")
lattica.store(key, "maybe", expiration_time, subkey="carol")

# get all votes
votes_result = lattica.get(key)
if votes_result:
    for peer, vote_info in votes_result.value.items():
        print(f"{peer}: {vote_info.value}")

2. RPC Operations

The RPC example demonstrates remote procedure calls with support for complex data types and streaming.

from lattica import Lattica, rpc_method, rpc_stream, rpc_stream_iter, ConnectionHandler



class MyService(ConnectionHandler):
    @rpc_method
    def add(self, a: int, b: int) -> int:
        """Simple addition"""
        return a + b
    
    @rpc_stream
    def process_data(self, data: list) -> list:
        return data

    @rpc_stream_iter
    def stream_rpc_iter(self):
        while True:
            text = "hello world"
            yield text
            
# Create client1 as RPC server and bootstrap node
lattica = Lattica.builder()
    .build()
service = MyService(lattica)

# Create client2 with bootstrap nodes
lattica = Lattica.builder() \
    .with_bootstraps(["/ip4/127.0.0.1/tcp/54282/p2p/QmServerPeerId"]) \
    .build()
client_service = MyService(client_lattica)

# Make RPC calls
stub = client_service.get_stub(server_peer_id)
result = stub.add(10, 20)  # Returns 30

# Handle complex data types
num_floats = int(2 * 1024 * 1024 * 1024) // 8 #2GB
test_data = [random.random() for _ in range(num_floats)]
result = stub.process_data(test_data)

# stream iter call
for text in stub.stream_rpc_iter():
    print(f"recv: {text}")

Configuration

Builder Pattern

lattica = Lattica.builder() \
    .with_bootstraps([
        "/ip4/127.0.0.1/tcp/8080/p2p/QmBootstrap1",
        "/ip4/127.0.0.1/tcp/8081/p2p/QmBootstrap2"
    ]) \
    .with_listen_addrs(["/ip4/0.0.0.0/tcp/0", "/ip4/0.0.0.0/udp/0/quic-v1"])
    .with_external_addrs(["/ip4/0.0.0.0/tcp/0"])
    .with_mdns(True) \
    .with_upnp(True) \
    .build()

Configuration Options

  • with_bootstraps(nodes): Set bootstrap nodes for network discovery
  • with_listen_addrs(addrs): Set listening address
  • with_mdns(enabled): Enable/disable mDNS peer discovery
  • with_upnp(enabled): Enable/disable UPnP NAT traversal
  • with_relay_servers(servers): Set relay servers for network relay
  • with_autonat(enabled): Enable/disable AutoNAT detect[need relay servers]
  • with_dcutr(enabled): Enable/disable TCP/QUIC NAT travelsal[need relay servers]
  • with_external_addrs(addrs): Set external address
  • with_storage_path: Persistent storage path
  • with_dht_db_path: DHT Persistent db path
  • with_key_path: Set Keypair path

Development

Building from Source

# Install maturin
pip install maturin

# Build the package
cd bindings/python
pip install .

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lattica_dev-1.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (8.5 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

lattica_dev-1.0.2-cp38-abi3-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.8+Windows x86-64

lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.4 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.0 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

lattica_dev-1.0.2-cp38-abi3-macosx_11_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file lattica_dev-1.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for lattica_dev-1.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cf24b78b3ae3a558a6c11c1e49556ebf26b28b9549f16c59ddb30df8553e2f0c
MD5 5216a39f470c7d6408826048c72c2b7d
BLAKE2b-256 ad72e8f29228ab458597162140a5dae2de19b80b46b2f73fd423c24ddd5f3e0b

See more details on using hashes here.

File details

Details for the file lattica_dev-1.0.2-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: lattica_dev-1.0.2-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lattica_dev-1.0.2-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 38cb7012466b671d23d2ffc09421345076b37769b44d5ad0f03725cc68176fdc
MD5 03470e6d14fde2a11f10d98809f1d375
BLAKE2b-256 31e3712318ca7c01d5a679f4a3b48c59de76eeccb6c6667a11e900763d8482a0

See more details on using hashes here.

File details

Details for the file lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 33fd23247550a3441d9a9b8b4041d4380d32257aa7d71c388c80e16ad0b5cd03
MD5 16a417e72206c7a1e4821a3e3ad5f7ff
BLAKE2b-256 0afeaad357d293b1a3651c050a28d4e5e42efb5718667b4b51d6ea4ca7976d09

See more details on using hashes here.

File details

Details for the file lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lattica_dev-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3d22e1f46bfd92dd3150ca6dea5ee96462abada5084860639319ac0a5f25ee81
MD5 3623229cd468ba62b34e98dc82a7b468
BLAKE2b-256 78e2b10e0566368ecc08e19c55e9ae0205b3e81f8b8a97762036a911679722e0

See more details on using hashes here.

File details

Details for the file lattica_dev-1.0.2-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for lattica_dev-1.0.2-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e2109f6ce8df3de3f2558d160abd0dcdc54dd86e16f7778f7d581328f9e59bf
MD5 398df8b4d4e058324739a3780bf3437e
BLAKE2b-256 36a974bec814726a27fd136ab23ef7a1ccb84597457ae10878bac9561c6bf204

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page