Files

79 lines
2.1 KiB
Python

from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any
from decimal import Decimal
from datetime import datetime
class UserAuthRequest(BaseModel):
address: str = Field(..., description="EVM 钱包地址")
signature: str = Field(..., description="签名")
message: str = Field(..., description="SIWE 原始签名消息")
class TokenResponse(BaseModel):
access_token: str
token_type: str = "bearer"
address: str
class AccountBalanceDTO(BaseModel):
address: str
collateral_symbol: str
available_balance: Decimal
frozen_balance: Decimal
class LedgerEntryDTO(BaseModel):
id: int
entry_type: str
amount: Decimal
balance_after: Decimal
frozen_after: Decimal
related_market: Optional[str] = None
created_at: datetime
class CreateMarketMetadataRequest(BaseModel):
market_address: str
question_id: str
title: str
description: Optional[str] = None
category: str = "Others" # 默认 Others,支持用户自定义
outcomes: List[str] = Field(..., min_length=2, max_length=255) # 支持最多 255 个选项
resolution_time: datetime
creator: str
class MarketDTO(BaseModel):
market_address: str
question_id: str
title: str
description: Optional[str] = None
category: str
tier: int
creator: str
status: str
outcomes: List[str]
winning_outcome: Optional[int] = None
resolution_time: datetime
created_at: datetime
class ResolveMarketRequest(BaseModel):
market_address: str
question_id: str
winning_outcome_index: int = Field(..., ge=0, le=255)
class CreateOrderRequest(BaseModel):
market_address: str
vault_address: Optional[str] = None
outcome_index: int = Field(..., ge=0, le=255)
side: str = Field(..., pattern="^(BUY|SELL)$")
amount: Decimal = Field(..., gt=0)
price: Optional[Decimal] = None
session_signature: Optional[str] = None
class OrderDTO(BaseModel):
order_id: str
market_address: str
user_address: str
side: str
outcome_index: int
amount: Decimal
status: str
fee: Decimal
created_at: datetime