gigadex-sdk
The community Python SDK for building on GigaDex on Robinhood Chain.
gigadex-sdk gives Python developers a typed foundation for reading GigaDex data, working with concentrated-liquidity prices and ticks, loading verified contract ABIs, and preparing inspectable Web3 transaction plans.
It is useful for:
- liquidity tooling and range-management bots
- portfolio dashboards
- analytics and reporting scripts
- research notebooks
- trading and automation tools
This SDK is community maintained. Review all transactions yourself before sending funds on-chain.
For detailed examples covering nearly every public module, see the full SDK usage guide.
Features
- GigaDex GraphQL client for tokens, pools, positions, and portfolio state.
- Typed Pydantic models for safer application code.
- Pool discovery helpers for filtering, finding, and sorting CL/classic pools.
- DEX-wide stats and portfolio summaries backed by GraphQL models where data is available.
- Concentrated-liquidity math for ticks, prices, ranges, and tick-spacing alignment.
- Packaged ABI loading for common GigaDex/Web3 contract interactions.
- Canonical Robinhood Chain contract registry for core, concentrated-liquidity, routing, and classic-liquidity contracts.
- Low-level calldata builders for ERC-20 approvals/transfers, swaps/quotes, CL positions, classic liquidity, CL/classic MasterChef earnings, and multicalls.
- Web3 helpers for contracts, chain validation, gas checks, signing, and sending transactions.
- Modern Python packaging with
uv,pyproject.toml, and Python 3.11+ support.
Installation
With uv:
uv add gigadex-sdk
With pip:
pip install gigadex-sdk
Quick start
Fetch portfolio data
from gigadex_sdk.graphql_client import GigaDexGraphQLClient
GRAPHQL_URL = "https://edge.gigadex.fi/v1/graphql"
CHAIN_ID = 4663
ACCOUNT = "0x0000000000000000000000000000000000000000"
client = GigaDexGraphQLClient(GRAPHQL_URL)
portfolio = client.fetch_portfolio(chain_id=CHAIN_ID, account=ACCOUNT)
for position in portfolio.positions:
print(position.token_id, position.pool, position.tick_lower, position.tick_upper)
List, filter, and sort pools
from gigadex_sdk.graphql_client import GigaDexGraphQLClient
from gigadex_sdk.pools import filter_pools, sort_pools
client = GigaDexGraphQLClient("https://edge.gigadex.fi/v1/graphql")
pools = client.fetch_pools(chain_id=4663, page_size=100)
cl_pools = filter_pools(pools, kind="cl")
top_by_tvl = sort_pools(cl_pools, by="tvl")[:10]
for pool in top_by_tvl:
print(pool.address, pool.token0, pool.token1, pool.fee, pool.total_value_locked_usd)
Fetch DEX-wide stats
from gigadex_sdk.graphql_client import GigaDexGraphQLClient
client = GigaDexGraphQLClient("https://edge.gigadex.fi/v1/graphql")
stats = client.fetch_dex_stats(chain_id=4663)
print(stats.total_value_locked_usd, stats.volume24h_usd, stats.pool_count)
Plan a swap without sending it
from gigadex_sdk.contracts import ROBINHOOD_CONTRACTS
from gigadex_sdk.swaps import ExactInputSingleSwap, SwapPlanner, min_amount_out
planner = SwapPlanner()
# Usually this comes from a quoter call or simulation. The helper only applies
# explicit slippage math; it does not fetch prices by itself.
quoted_out = 1_000_000
amount_out_min = min_amount_out(quoted_out, slippage_bps=50) # 0.50%
call = planner.exact_input_single_call(
ExactInputSingleSwap(
token_in=ROBINHOOD_CONTRACTS.weth,
token_out=ROBINHOOD_CONTRACTS.usdg,
fee=500,
recipient="0x0000000000000000000000000000000000000000",
amount_in=10**18,
amount_out_minimum=amount_out_min,
)
)
print(call.target) # smart router address
print(call.calldata) # review/simulate before signing elsewhere
Plan ERC-20 approvals and liquidity calls
from gigadex_sdk.contracts import ROBINHOOD_CONTRACTS
from gigadex_sdk.erc20 import ERC20Planner
from gigadex_sdk.position_manager import MintAmounts, MintPlan, PositionManagerPlanner
account = "0x0000000000000000000000000000000000000000"
erc20 = ERC20Planner()
approval = erc20.approve_call(
token=ROBINHOOD_CONTRACTS.usdg,
spender=ROBINHOOD_CONTRACTS.giga_positions,
amount=1_000_000,
)
positions = PositionManagerPlanner()
mint = positions.mint_call(
MintPlan(
token0=ROBINHOOD_CONTRACTS.weth,
token1=ROBINHOOD_CONTRACTS.usdg,
fee=500,
tick_lower=-200_200,
tick_upper=-199_800,
amounts=MintAmounts(10**18, 1_000_000, 99 * 10**16, 990_000),
recipient=account,
deadline=1_800_000_000,
)
)
print(approval.calldata)
print(mint.calldata)
Plan “claim all fees” for CL positions
from gigadex_sdk.position_manager import PositionManagerPlanner
planner = PositionManagerPlanner()
calldata = planner.claim_all_fees_multicall_calldata(
token_ids=[101, 102, 103],
recipient="0x0000000000000000000000000000000000000000",
)
print(calldata)
Work with concentrated-liquidity ticks
from decimal import Decimal
from gigadex_sdk.math import percentage_range_ticks, range_width_percent
current_tick = -200_000
tick_spacing = 10
tick_lower, tick_upper = percentage_range_ticks(
current_tick=current_tick,
percent_each_side=Decimal("5"),
tick_spacing=tick_spacing,
)
lower_pct, upper_pct = range_width_percent(tick_lower, tick_upper, current_tick)
print(tick_lower, tick_upper)
print(f"range: -{lower_pct:.2f}% / +{upper_pct:.2f}%")
Load packaged ABIs
from gigadex_sdk.abis import ERC20_ABI, GIGA_POSITIONS_ABI, abi_events
print(len(ERC20_ABI))
print(len(GIGA_POSITIONS_ABI))
print([event["name"] for event in abi_events(GIGA_POSITIONS_ABI)])
Use known Robinhood Chain contracts
from gigadex_sdk.contracts import ROBINHOOD_CHAIN_ID, contracts_for_chain
contracts = contracts_for_chain(ROBINHOOD_CHAIN_ID)
print(contracts.giga_positions)
print(contracts.cl_factory)
print(contracts.weth, contracts.usdg)
Create a Web3 contract
from dataclasses import dataclass
from gigadex_sdk.abis import ERC20_ABI
from gigadex_sdk.chain import ChainClient
from gigadex_sdk.contracts import ROBINHOOD_CHAIN_ID
@dataclass
class Settings:
rpc_url: str
chain_id: int = ROBINHOOD_CHAIN_ID
private_key: str = ""
account_address: str = ""
max_gas_price_wei: int | None = None
gas_limit_multiplier: float = 1.2
wait_for_receipt_seconds: int = 0
def require_rpc(self) -> None:
if not self.rpc_url:
raise ValueError("rpc_url is required")
def require_wallet(self) -> None:
if not self.private_key or not self.account_address:
raise ValueError("wallet config is required")
chain_client = ChainClient(Settings(rpc_url="https://your-rpc.example"))
token = chain_client.contract("0x0000000000000000000000000000000000000000", ERC20_ABI)
Common constants
GIGADEX_GRAPHQL_URL = "https://edge.gigadex.fi/v1/graphql"
ROBINHOOD_CHAIN_ID = 4663
Contract coverage
The SDK ships the known verified GigaDex contract addresses for Robinhood Chain:
- core/governance: controller, emission center, vault, fee center, fee receiver, WETH
- concentrated liquidity: CL factory/deployer/router/quoters, Giga Positions, CL MasterChef, LM pool deployer, position descriptor
- routing/classic liquidity: smart router, mixed quoter, tick lens, interface multicall, classic factory/router/MasterChef
Addresses are exposed as lowercase strings for stable comparisons and config.
Convert with Web3.to_checksum_address(...) before constructing Web3 contracts.
SDK boundary
This package is intentionally a reusable SDK, not a keeper bot. It provides the basic building blocks for GigaDex integrations: data fetching, typed models, contract addresses, ABI loading, Web3 helpers, CL math, and low-level calldata builders. Strategy code such as “rebalance when near edge”, alerting, retries, position sizing, private-key policy, or fully automated execution should live in separate applications that depend on this SDK.
The write-side modules deliberately return calldata or transaction-plan objects. They do not sign or send transactions by default. Review, simulate, and apply your own gas/slippage/private-key policy in the application layer.
Project status
gigadex-sdk is early software. The current focus is reliable read access, reusable data models, concentrated-liquidity math, and safe building blocks for bot authors.
On-chain write helpers are intentionally low-level. Applications should add their own policy layer for slippage, gas limits, simulation, private-key handling, retries, alerts, and human review.
Pool creation transaction execution is intentionally not implemented yet. The SDK exposes only safe calldata-building extension points where the packaged ABIs support them; full pool-creation workflows should be added later with tests, simulation guidance, and clear review steps.
Contributing
Contributions are welcome. For development setup, test commands, release steps, and PyPI publishing notes, see README-DEV.md.
License
MIT
Metadata
Release files for gigadex-sdk 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| gigadex_sdk-0.2.0.tar.gz | 33.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gigadex_sdk-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.9 kB
Release files / gigadex_sdk-0.2.0.tar.gz
| Download URL | gigadex_sdk-0.2.0.tar.gz |
|---|---|
| Size | 33.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c02bf6ff4d5f9c5f23c9b66392d8c458c3f801160f0f028f5b9ca3be7d1b41ff
|
|
BLAKE2b-256 checksum How to use checksums |
3a5a9e7aa6c1944c9355da9ebe93c05dc6c538a872380ebe557a65ddc45f3792
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.
Transparency logRelease files / gigadex_sdk-0.2.0-py3-none-any.whl
| Download URL | gigadex_sdk-0.2.0-py3-none-any.whl |
|---|---|
| Size | 44.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a1fe684e802d8b44cd558e6a06a5cda0966dbee3f5e0cc50d6d648a85575289
|
|
BLAKE2b-256 checksum How to use checksums |
e002617f55b5db06c20df5739612ba0c450fb5698748fb5c46bfff164dfe369b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.
Transparency logSecurity for gigadex-sdk 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for gigadex_sdk-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.