Skip to main content

epsilon-exchange

Python SDK for Epsilon — non-custodial limit, stop-loss, and DCA orders on Robinhood Chain, via the Epsilon /v1 API.

Your private key never leaves your machine: orders are built and EIP-712 signed locally, and the API only ever sees the signed payload. The signing implementation is pinned byte-for-byte against the TypeScript SDK and the Go verifier by a shared golden fixture.

Install

pip install epsilon-exchange

Get an API key at developers.epsilon.exchange/dashboard.

Place a limit order

from epsilon_exchange import (
    EpsilonClient, build_and_sign_order, parse_units, calculate_trigger_price,
)

client = EpsilonClient(api_key="eps_...")
private_key = "0x..."   # the wallet that holds the tokens
wallet = "0x..."        # its address

# 1. Find tokens (symbol → address + decimals)
eth = client.search_tokens("WETH")["tokens"][0]
usd = client.search_tokens("USDG")["tokens"][0]

# 2. Route — request it with the order_type you will submit; its feeLegs carry
#    that fee cell and are exact-matched on submit. Pass them through unmodified.
amount_in = parse_units("0.5", eth["decimals"])
route = client.order_route(eth["address"], usd["address"], amount_in,
                           slippage_ppm=10_000, wallet=wallet, order_type="limit")

# 3. Build + sign locally (sell 0.5 WETH at 3000 USDG/WETH or better)
signed = build_and_sign_order(
    private_key,
    token_in=eth["address"],
    token_out=usd["address"],
    amount_in=amount_in,
    trigger_price=calculate_trigger_price("3000", usd["decimals"]),
    token_in_decimals=eth["decimals"],
    fee_legs=route.get("feeLegs"),
    kind="limit",
)

# 4. Submit
res = client.submit_order(signed, "limit")
print(res["orderHash"])

The router must be approved to spend token_in first (a plain ERC-20 approve to the router — address in epsilon_exchange.ROUTER_ADDRESS).

Modules

  • EpsilonClient — /v1 API: search_tokens, quote, order_route, submit_order, get_order, list_orders, cancel_order
  • build_and_sign_order / sign_cancel — local EIP-712 signing (eth-account)
  • parse_units / format_units / calculate_trigger_price — decimal helpers
  • chain — chain id, router address, EIP-712 domain and types

Also available

Metadata

Release files for epsilon-exchange 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for epsilon-exchange 0.2.0
File Size Uploaded
epsilon_exchange-0.2.0.tar.gz 8.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for epsilon-exchange 0.2.0
File Interpreter ABI Platform
epsilon_exchange-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.8 kB

Release files / epsilon_exchange-0.2.0.tar.gz

Download URL epsilon_exchange-0.2.0.tar.gz
Size 8.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4a251efe5ccf1a883a8d99440b54f0145db03539b6cc7b0f57a1582c8621154c
BLAKE2b-256 checksum
How to use checksums
5deb88a8dc3d277dabfa72f7f6ddd4eb9a42e0ea76273a32e1af6137055dc745
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.6

Release files / epsilon_exchange-0.2.0-py3-none-any.whl

Download URL epsilon_exchange-0.2.0-py3-none-any.whl
Size 9.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b05e4646742822f1568980de6ae1b12c06abd940e8f2dae1ad3dd210b1fe0da1
BLAKE2b-256 checksum
How to use checksums
159ce235dc0d84a272abd40dcd7a189c665fe4cf99b6020694353f1450bcc77c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.6

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page