Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
SendTransactionRequest,
SetDefaultWalletRequest,
ShowPrivateKeyRequest,
UpdateApiKeysRequest,
)

# Gateway Trading models (Swap + CLMM only, AMM removed)
Expand Down Expand Up @@ -290,6 +291,7 @@
"GatewayBalanceRequest",
"AddPoolRequest",
"AddTokenRequest",
"UpdateApiKeysRequest",
# Backtesting models
"BacktestingConfig",
# Pagination models
Expand Down
21 changes: 18 additions & 3 deletions models/gateway.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from pydantic import BaseModel, Field
from typing import Optional, List
from typing import List, Optional

from pydantic import BaseModel, Field

# ============================================
# Container Management Models
# ============================================


class GatewayConfig(BaseModel):
"""Configuration for Gateway container deployment"""
passphrase: str = Field(description="Gateway passphrase for configuration encryption")
Expand Down Expand Up @@ -77,7 +78,10 @@ class AddPoolRequest(BaseModel):
"""Request to add a liquidity pool"""
connector_name: str = Field(description="DEX connector name (e.g., 'raydium', 'meteora')")
type: str = Field(description="Pool type ('clmm' or 'amm')")
network: str = Field(description="Network name (e.g., 'mainnet-beta')")
network: Optional[str] = Field(
default=None,
description="Network name (e.g., 'mainnet-beta') - optional for /networks/{network_id}/pools"
)
address: str = Field(description="Pool contract address")
base: str = Field(description="Base token symbol")
quote: str = Field(description="Quote token symbol")
Expand All @@ -103,3 +107,14 @@ class GatewayBalanceRequest(BaseModel):
account_name: str = Field(description="Account name")
chain: str = Field(description="Blockchain chain")
tokens: Optional[List[str]] = Field(default=None, description="List of token symbols to query (optional)")


# ============================================
# API Keys Management Models
# ============================================

class UpdateApiKeysRequest(BaseModel):
"""Request to update Gateway API keys"""
api_keys: dict = Field(
description="Dict mapping provider name to API key value (e.g., {'helius': 'abc123', 'infura': 'xyz789'})"
)
49 changes: 8 additions & 41 deletions models/gateway_trading.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Note: AMM support has been removed. Use Router for simple swaps, CLMM for liquidity provision.
"""
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field
from decimal import Decimal
from typing import Any, Dict, List, Optional

from pydantic import BaseModel, Field

# ============================================
# Swap Models (Router: Jupiter, 0x)
Expand Down Expand Up @@ -278,58 +278,25 @@ class TimeBasedMetrics(BaseModel):


class CLMMPoolListItem(BaseModel):
"""Individual pool item in CLMM pool listing"""
"""Individual pool item in CLMM pool listing - matches Gateway fetch-pools response"""
address: str = Field(description="Pool address")
name: str = Field(description="Pool name (e.g., 'SOL-USDC')")
trading_pair: str = Field(description="Trading pair derived from tokens")
mint_x: str = Field(description="Base token mint address")
mint_y: str = Field(description="Quote token mint address")
bin_step: int = Field(description="Bin step size")
bin_step: int = Field(description="Bin step / tick spacing")
current_price: Decimal = Field(description="Current pool price")
liquidity: str = Field(description="Total liquidity in pool")
reserve_x: str = Field(description="Base token reserves")
reserve_y: str = Field(description="Quote token reserves")
reserve_x_amount: Optional[Decimal] = Field(default=None, description="Base token reserves as decimal amount")
reserve_y_amount: Optional[Decimal] = Field(default=None, description="Quote token reserves as decimal amount")

# Fee structure
liquidity: str = Field(description="Total value locked (TVL) in USD")
base_fee_percentage: Optional[str] = Field(default=None, description="Base fee percentage")
max_fee_percentage: Optional[str] = Field(default=None, description="Maximum fee percentage")
protocol_fee_percentage: Optional[str] = Field(default=None, description="Protocol fee percentage")

# APR/APY
apr: Optional[Decimal] = Field(default=None, description="Annual percentage rate")
apy: Optional[Decimal] = Field(default=None, description="Annual percentage yield")
farm_apr: Optional[Decimal] = Field(default=None, description="Farming annual percentage rate")
farm_apy: Optional[Decimal] = Field(default=None, description="Farming annual percentage yield")

# Volume and fees
volume_24h: Optional[Decimal] = Field(default=None, description="24h trading volume")
fees_24h: Optional[Decimal] = Field(default=None, description="24h fees collected")
today_fees: Optional[Decimal] = Field(default=None, description="Today's fees collected")
cumulative_trade_volume: Optional[str] = Field(default=None, description="Cumulative trade volume")
cumulative_fee_volume: Optional[str] = Field(default=None, description="Cumulative fee volume")

# Time-based metrics
volume: Optional[TimeBasedMetrics] = Field(default=None, description="Volume across different time periods")
fees: Optional[TimeBasedMetrics] = Field(default=None, description="Fees across different time periods")
fee_tvl_ratio: Optional[TimeBasedMetrics] = Field(default=None, description="Fee-to-TVL ratio across different time periods")

# Rewards
reward_mint_x: Optional[str] = Field(default=None, description="Base token reward mint address")
reward_mint_y: Optional[str] = Field(default=None, description="Quote token reward mint address")

# Metadata
tags: Optional[List[str]] = Field(default=None, description="Pool tags")
is_verified: bool = Field(default=False, description="Whether tokens are verified")
is_blacklisted: Optional[bool] = Field(default=None, description="Whether pool is blacklisted")
hide: Optional[bool] = Field(default=None, description="Whether pool should be hidden")
launchpad: Optional[str] = Field(default=None, description="Associated launchpad")


class CLMMPoolListResponse(BaseModel):
"""Response with list of available CLMM pools"""
"""Response with list of available CLMM pools - matches Gateway fetch-pools response"""
pools: List[CLMMPoolListItem] = Field(description="List of available pools")
total: int = Field(description="Total number of pools")
total: int = Field(description="Total number of matching pools")
page: int = Field(description="Current page number")
limit: int = Field(description="Results per page")
pageSize: int = Field(description="Number of pools per page")
12 changes: 7 additions & 5 deletions models/trading.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from typing import Dict, List, Optional, Any, Literal
from pydantic import BaseModel, Field, field_validator
from decimal import Decimal
from datetime import datetime
from hummingbot.core.data_type.common import OrderType, TradeType, PositionAction
from decimal import Decimal
from typing import Any, Dict, List, Literal, Optional

from hummingbot.core.data_type.common import OrderType, PositionAction, TradeType
from pydantic import BaseModel, Field, field_validator

from .pagination import PaginationParams, TimeRangePaginationParams


Expand Down Expand Up @@ -190,7 +192,7 @@ class PortfolioStateFilterRequest(BaseModel):
account_names: Optional[List[str]] = Field(default=None, description="List of account names to filter by")
connector_names: Optional[List[str]] = Field(default=None, description="List of connector names to filter by")
skip_gateway: bool = Field(default=False, description="Skip Gateway wallet balance updates for faster CEX-only queries")
refresh: bool = Field(default=False, description="If True, refresh balances before returning. If False, return cached state")
refresh: bool = Field(default=False, description="If True, refresh balances from exchanges. If False, return cached state.")


class PortfolioHistoryFilterRequest(TimeRangePaginationParams):
Expand Down
Loading
Loading