diff --git a/.gitignore b/.gitignore index 07b5d3d..12e27c4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ **/.env **/__pycache__/ +python-client/.venv diff --git a/.gitmodules b/.gitmodules index 0d512b0..740ea56 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "Public-API-Data"] path = Public-API-Data url = git@github.com:sidepit/Public-API-Data.git + branch = betaV2 \ No newline at end of file diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md new file mode 100644 index 0000000..bc16da0 --- /dev/null +++ b/MIGRATION_GUIDE.md @@ -0,0 +1,551 @@ +# Sidepit API Migration Guide: Multiple Products & New Protocol + +## Overview +This guide documents the migration from single-ticker API to multi-product trading system with nested account structures. + +--- + +## 1. API Structure Changes + +### Old Structure (Single Ticker) +``` +AccountState (flat): + - sidepit_id + - net_locked + - available_balance + - positions: map // Flat map + - realized_pnl (single value) + - margin_required (single value) +``` + +### New Structure (Multi-Product) +``` +AccountMarginState (nested by contract): + - sidepit_id + - net_locked + - available_balance + - contract_margins: map + ContractMargin: + - symbol (e.g., "USDBTC") + - margin: PositionMargin + - realized_pnl + - margin_required + - reduce_only + - positions: map + AccountTickerPosition: + - ticker (e.g., "USDBTCH26") + - position: Position + - position (qty) + - avg_price + - margin: PositionMargin + - open_bids/open_asks +``` + +**Key Change**: Positions are now grouped by contract symbol, then by ticker within each contract. + +--- + +## 2. Multiple Tickers Per Session + +### Schedule Structure +```protobuf +message Schedule { + uint64 date = 10; + uint64 trading_open_time = 20; + uint64 trading_close_time = 30; + repeated string product = 40; // Multiple tickers: ["USDBTCH26", "USDBTCM26"] +} +``` + +### Product Response +```protobuf +message ActiveProduct { + string ticker = 2; // Current ticker + ActiveContractProduct active_contract_product = 10; + product { + ticker: "USDBTCH26" + is_active: true // Official active ticker + } + schedule { + product: "USDBTCH26" + product: "USDBTCM26" // All available tickers + } + ExchangeStatus exchange_status = 20; + ContractBar contractbar = 30; +} +``` + +**Implementation Pattern**: +```python +# Extract active ticker from product +active_ticker = product_pb.active_contract_product.product.ticker + +# Extract all available tickers from schedule +available_tickers = list(product_pb.exchange_status.session.schedule.product) +``` + +--- + +## 3. Request/Reply API Changes + +### Get Active Product (supports ticker parameter) +```python +# Old: Always returned single active product +product = req_client.get_active_product() + +# New: Can request specific ticker or get default active +product = req_client.get_active_product(ticker=None) # Active ticker +product = req_client.get_active_product(ticker="USDBTCM26") # Specific ticker +``` + +### Get Quote (supports ticker parameter) +```python +# Old: Single quote +quote = req_client.get_quote() + +# New: Quote for specific ticker +quote = req_client.get_quote(ticker="USDBTCH26") +quote = req_client.get_quote(ticker=None) # Default active +``` + +### Get Positions (unchanged parameter, changed structure) +```python +positions_data = req_client.get_positions(trader_id) +# Now returns AccountMarginState with nested structure +``` + +--- + +## 4. Extracting Position Data + +### Old Method (Flat) +```python +accountstate = data.get("accountstate") +positions = accountstate.get("positions") # Direct access +for ticker, position in positions.items(): + qty = position["position"] + price = position["avg_price"] +``` + +### New Method (Nested) +```python +accountstate = data.get("accountstate") +positions = {} +contract_margins = accountstate.get('contract_margins', {}) + +# Flatten positions from all contracts +for symbol, contract_margin in contract_margins.items(): + ticker_positions = contract_margin.get('positions', {}) + for ticker, ticker_pos_data in ticker_positions.items(): + position_data = ticker_pos_data.get('position', {}) + positions[ticker] = { + 'position': position_data.get('position', 0), + 'avg_price': position_data.get('avg_price', 0.0) + } +``` + +**Protobuf Direct Access**: +```python +# Access nested protobuf +for symbol, contract_margin in accountstate.contract_margins.items(): + for ticker, ticker_pos in contract_margin.positions.items(): + qty = ticker_pos.position.position + price = ticker_pos.position.avg_price +``` + +--- + +## 5. Account Metrics Display + +### Old Metrics (Flat) +```python +ACCOUNT_METRICS = [ + ("Net Locked", "net_locked"), + ("Realized PnL", "realized_pnl"), + ("Margin Required", "margin_required"), + ("Available Balance", "available_balance"), +] +``` + +### New Metrics (Global + Per-Contract) +```python +ACCOUNT_METRICS = [ + ("Net Locked", "net_locked"), + ("Available Balance", "available_balance"), + ("Available Margin", "available_margin"), +] + +# Then iterate contract_margins for per-contract data +for symbol, contract_margin in contract_margins.items(): + margin = contract_margin.margin + display(f"{symbol} Margin Required", margin.margin_required) + display(f"{symbol} Realized PnL", margin.realized_pnl) +``` + +--- + +## 6. Exchange State Handling + +### Exchange States (Enum) +``` +0: EXCHANGE_UNKNOWN +1: EXCHANGE_PENDING_OPEN +2: EXCHANGE_OPEN ← Trading allowed +3: EXCHANGE_RECOVERING +4: EXCHANGE_CLOSING +5: EXCHANGE_SETTLED +6: EXCHANGE_CLOSED ← Trading blocked +``` + +### Getting Status String +```python +# Protobuf enum returns integer +status = api_data.exchange_status.status.estate # Returns 6 + +# Convert to string name +from sidepit_api_pb2 import ExchangeState +status_str = ExchangeState.Name(status) # Returns "EXCHANGE_CLOSED" +``` + +### Implementation Pattern +```python +# Store exchange status +exchange_status = product_pb.exchange_status.status.estate + +# Check if trading allowed +def is_exchange_open(): + return exchange_status == 2 # EXCHANGE_OPEN + +# Use for UI feedback +menu_color = "green" if is_exchange_open() else "red" +``` + +--- + +## 7. Ticker Management + +### Tracking Active Ticker +```python +class Manager: + def __init__(self): + self.active_ticker = None # Currently selected + self.available_tickers = [] # All available in session + self.exchange_status = None + + def update_from_product(self, product_pb): + # Extract active ticker + if product_pb.active_contract_product.product.ticker: + self.active_ticker = product_pb.active_contract_product.product.ticker + + # Extract available tickers from schedule + if product_pb.exchange_status.session.schedule.product: + self.available_tickers = list( + product_pb.exchange_status.session.schedule.product + ) + + # Store exchange status + self.exchange_status = product_pb.exchange_status.status.estate +``` + +### Switching Tickers +```python +def switch_ticker(self, ticker_or_index): + # Support numeric selection + try: + index = int(ticker_or_index) - 1 + if 0 <= index < len(self.available_tickers): + ticker = self.available_tickers[index] + else: + return False + except ValueError: + ticker = ticker_or_index + + if ticker not in self.available_tickers: + return False + + self.active_ticker = ticker + return True +``` + +### Displaying Available Tickers +```python +def list_tickers(self): + for i, ticker in enumerate(self.available_tickers, 1): + marker = "[CURRENT]" if ticker == self.active_ticker else "" + print(f"{i}. {ticker} {marker}") +``` + +--- + +## 8. Dynamic Values in Transactions + +### Problem: Stale Ticker/ID +When users switch tickers or wallets, transactions must use current values. + +### Solution: Store Manager References +```python +# Bad: Store static values +class ApiClient: + def __init__(self, ticker, sidepit_id): + self.ticker = ticker # Stale after switch + self.sidepit_id = sidepit_id # Stale after wallet switch + +# Good: Store manager reference +class ApiClient: + def __init__(self, manager, id_manager): + self.manager = manager + self.id_manager = id_manager + + def create_order(self): + # Always get current values + ticker = self.manager.active_ticker + sidepit_id = self.manager.sidepit_id +``` + +--- + +## 9. Position Filtering + +### Show Relevant Positions Only +```python +def display_positions(self, active_ticker=None): + filtered_positions = {} + for ticker, details in self.positions.items(): + position_size = details.get("position", 0) + # Show if active ticker OR has non-zero position + if ticker == active_ticker or position_size != 0: + filtered_positions[ticker] = details +``` + +**Rationale**: Users typically care about: +- Current ticker they're trading +- Other tickers where they have open positions + +--- + +## 10. Direct Protobuf Communication + +### Old: REST + JSON +```python +# Convert to JSON +json_message = MessageToJson(stx) +# POST to REST API +response = requests.post(api_url, json=json_message) +``` + +### New: NNG Push Socket +```python +import pynng + +# Initialize once +socket = pynng.Push0() +socket.dial("tcp://localhost:12126") + +# Send protobuf directly +serialized_msg = stx.SerializeToString() +socket.send(serialized_msg) +``` + +**Benefits**: +- No JSON conversion overhead +- Direct binary protocol +- Lower latency +- Fewer serialization errors + +--- + +## 11. Reserved Keyword Handling + +### Protobuf Field Name Collision +```protobuf +message DepthItem { + int32 as = 60; // "as" is Python keyword +} +``` + +### Access Pattern +```python +# Option 1: Use underscore suffix +value = level.as_ + +# Option 2: Use getattr +value = getattr(level, 'as', 0) + +# Option 3: Dict access (after MessageToDict) +value = level_dict.get('as', 0) +``` + +--- + +## 12. Display Updates + +### Session Info with Tickers +```python +ticker_list = ", ".join(session.schedule.product) +active_marker = f" (Current: {product.ticker})" + +session_info = f""" +Exchange Status: {exchange_status_name} +Available Tickers: {ticker_list}{active_marker} +Session Times: + Start - {start_time} + End - {end_time} +""" +``` + +--- + +## 13. Complete Migration Checklist + +### Data Model +- [ ] Update AccountState to AccountMarginState +- [ ] Handle nested contract_margins structure +- [ ] Update position extraction to iterate contracts +- [ ] Update account metrics to show per-contract data + +### Multi-Ticker Support +- [ ] Track active_ticker and available_tickers +- [ ] Extract tickers from schedule.product array +- [ ] Implement ticker switching functionality +- [ ] Pass ticker parameter to quote/product requests +- [ ] Update transaction creation to use current ticker + +### Exchange Status +- [ ] Track exchange_status from product response +- [ ] Convert enum to string name for display +- [ ] Implement is_exchange_open() check +- [ ] Add visual feedback based on status + +### Dynamic Values +- [ ] Store manager references instead of static values +- [ ] Get current ticker from manager on each transaction +- [ ] Get current sidepit_id from manager on each transaction + +### Communication +- [ ] Switch from REST/JSON to NNG/Protobuf +- [ ] Initialize Push0 socket for transactions +- [ ] Initialize Req0 socket for queries +- [ ] Send serialized protobuf directly + +### Display +- [ ] Update position filtering (active + non-zero) +- [ ] Show available tickers in session info +- [ ] Highlight current ticker +- [ ] Show per-contract margin data +- [ ] Handle exchange state colors + +--- + +## 14. Code Examples + +### Complete Position Display +```python +def display_positions(self, active_ticker=None): + if not self.account_state: + return + + # Extract all positions + all_positions = {} + contract_margins = self.account_state.get('contract_margins', {}) + + for symbol, contract_margin in contract_margins.items(): + ticker_positions = contract_margin.get('positions', {}) + for ticker, ticker_pos_data in ticker_positions.items(): + position_data = ticker_pos_data.get('position', {}) + qty = position_data.get('position', 0) + price = position_data.get('avg_price', 0.0) + + # Filter: show active ticker or non-zero positions + if ticker == active_ticker or qty != 0: + all_positions[ticker] = { + 'position': qty, + 'avg_price': price + } + + # Display filtered positions + for ticker, pos in all_positions.items(): + print(f"{ticker}: {pos['position']} @ {pos['avg_price']}") +``` + +### Complete Manager with Ticker Tracking +```python +class TradingManager: + def __init__(self): + self.active_ticker = None + self.available_tickers = [] + self.exchange_status = None + self.sidepit_id = None + self.req_client = ReqClient() + + def update_product_info(self): + product_pb = self.req_client.get_active_product(self.active_ticker) + + # Extract active ticker + self.active_ticker = product_pb.active_contract_product.product.ticker + + # Extract available tickers + self.available_tickers = list( + product_pb.exchange_status.session.schedule.product + ) + + # Extract exchange status + self.exchange_status = product_pb.exchange_status.status.estate + + return product_pb + + def is_exchange_open(self): + return self.exchange_status == 2 + + def switch_ticker(self, ticker_or_index): + try: + index = int(ticker_or_index) - 1 + if 0 <= index < len(self.available_tickers): + ticker = self.available_tickers[index] + else: + return False + except ValueError: + ticker = ticker_or_index + + if ticker in self.available_tickers: + self.active_ticker = ticker + return True + return False +``` + +--- + +## 15. Testing Migration + +### Verification Steps +1. **Positions Load**: Verify positions display for multiple tickers +2. **Ticker Switch**: Switch between available tickers, verify quotes update +3. **Order Placement**: Place order, verify correct ticker in transaction +4. **Wallet Switch**: Switch wallet, verify correct sidepit_id in transaction +5. **Exchange Status**: Verify UI updates when exchange opens/closes +6. **Contract Margins**: Verify per-contract margin data displays correctly + +### Common Issues +- **Stale ticker**: Order goes to wrong ticker → Use manager.active_ticker dynamically +- **Stale ID**: Order signed with wrong key → Use manager.sidepit_id dynamically +- **Empty positions**: Can't find positions → Check contract_margins nesting +- **Enum display**: Shows "6" not "CLOSED" → Use ExchangeState.Name() +- **Reserved keywords**: Error on "as" field → Use as_ or getattr() + +--- + +## Summary + +**Core Changes**: +1. Nested structure: `contract_margins[symbol].positions[ticker]` +2. Multiple tickers per session via `schedule.product` array +3. Ticker parameter in requests: `get_quote(ticker)`, `get_active_product(ticker)` +4. Exchange status tracking for UI feedback +5. Dynamic ticker/ID retrieval from managers +6. Direct protobuf via NNG instead of REST/JSON + +**Migration Pattern**: +- Track `active_ticker` and `available_tickers` +- Store manager references, not static values +- Extract positions by iterating `contract_margins` +- Convert exchange status enum to string +- Filter positions to show active + non-zero only diff --git a/Public-API-Data b/Public-API-Data index c6e8f6d..969c4df 160000 --- a/Public-API-Data +++ b/Public-API-Data @@ -1 +1 @@ -Subproject commit c6e8f6d6fe2ca0b323709ff5bdcbdca55a2b3a30 +Subproject commit 969c4dff19fb7003dde7ca542f2ce3f93a40feba diff --git a/python-client/README.md b/python-client/README.md index 701c9c8..5e153ee 100644 --- a/python-client/README.md +++ b/python-client/README.md @@ -1,329 +1,917 @@ -# Sidepit Protocol Information -Information regarding `sidepit public api` input and output protocol +# Sidepit Python Client + +Sidepit Python Client Interface for Trading on Sidepit Exchange + +## Getting Started + +### 1. Clone the repository and navigate into it + +```sh +git clone https://github.com/sidepit/Public-API.git +cd python-client +``` + +### 2. Create a virtual environment + +```sh +python3 -m venv .venv +``` + +### 3. Activate the virtual environment + +**Windows:** +```sh +.venv\Scripts\activate +``` + +**Mac/Linux:** +```sh +source .venv/bin/activate +``` + +### 4. Dependencies + +```sh +pip install -r requirements.txt +``` + +### Proto compile: + +```bash +./Public-API/python-client$ protoc --proto_path=../Public-API-Data/ --python_out=./proto/ sidepit_api.proto +``` + +### Feed Demo +```bash +./Public-API/python-client$ python3 feed_demo.py +``` + +# Client Data Sample +http://localhost:8000/active_product/ + +``` +active_contract_product { + contract { + symbol: "USDBTC" + unit_size: 500 + unit: "USD" + price_quote: "SAT" + price_quote_units: 1 + tic_min: 1 + tic_value: 500 + price_limit_percent: 25 + initial_margin: 2000 + maint_margin: 1000 + position_limits: 200 + trading_open_time: 46800000 + trading_close_time: 3600000 + trading_open_time_zone: "06:00:00 America/Los_Angeles" + trading_close_time_zone: "18:00:00 America/Los_Angeles" + } + product { + ticker: "USDBTCH26" + contract_symbol: "USDBTC" + expiration_date: 1767419700000 + start_trading_date: 1767370500000 + is_active: true + } + schedule { + date: 1767379500000 + trading_open_time: 1767379200000 + trading_close_time: 1767379500000 + product: "USDBTCH26" + product: "USDBTCM26" + } +} +exchange_status { + session { + session_id: "1767379500000" + schedule { + date: 1767379500000 + trading_open_time: 1767379200000 + trading_close_time: 1767379500000 + product: "USDBTCH26" + product: "USDBTCM26" + } + prev_session_id: "1704067200000" + } + status { + estate: EXCHANGE_OPEN + session_id: "1767379500000" + } +} +contractbar { + day_open: 1105 + day_high: 1111 + day_low: 1101 + day_close: 1101 + day_volume: 26 + high: 1111 + low: 1101 + volume: 26 + open_interest: 26 +} +``` + +## Price Feed +http://localhost::8000/quote +wss::localhost::8000/feed + +``` +epoch: 1767379375000 +ticker: "USDBTCH26" +bar { + open: 1101 + high: 1101 + low: 1101 + close: 1101 +} +quote { + bidsize: 1 + bid: 1106 + ask: 1111 + asksize: 1 + last: 1101 + lastsize: 1 + ticker: "USDBTCH26" +} +depth { + b: 1106 + a: 1111 + bs: 1 + as: 1 +} +depth { + level: 1 + b: 1099 + a: 1112 + bs: 3 + as: 2 +} +depth { + level: 2 + b: 1098 + a: 1113 + bs: 7 + as: 4 +} +depth { + level: 3 + b: 1097 + a: 1115 + bs: 4 + as: 1 +} +``` +## Order Feed +ws://localhost::8000/order + +``` +epoch: 1767561656871 +bookorders { + side: -1 + price: 1084 + open_qty: 1 + canceled_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561657875" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561654754830848" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} +bookorders { + side: -1 + price: 1084 + open_qty: 1 + remaining_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561657875" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561655868600576" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} + +[2026-01-04 13:20:58.397 -08:00] [thread 2431538] [info] [client.h:140] *** orderdata test bs 623 ss 623 +epoch: 1767561657874 +bookorders { + side: 1 + price: 1083 + open_qty: 1 + canceled_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561658878" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561655866952960" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} +bookorders { + side: -1 + price: 1084 + open_qty: 1 + canceled_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561658878" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561655868600576" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} +bookorders { + side: 1 + price: 1083 + open_qty: 1 + remaining_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561658878" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561657008092672" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} +bookorders { + side: -1 + price: 1084 + open_qty: 1 + remaining_qty: 1 + ticker: "USDBTCH25" + update_time: "1767561658878" + orderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8:1767561657009142784" + traderid: "bc1q86ckzqru5wa77trszhw4asyhwtg5q4at5jkkx8" +} +``` +## Trader Positions + +https://localhost/request_position/bc1qafzt9puf4vrcg7gzqvrvcffprpck2uf80p0vw6 + +https://api.sidepit.com/request_position/bc1qa29486m9azmwer9hdf0rdc6yx9c7mdpsl4hn6m + +``` +traderid: "bc1qafzt9puf4vrcg7gzqvrvcffprpck2uf80p0vw6" +accountstate { + sidepit_id: "bc1qafzt9puf4vrcg7gzqvrvcffprpck2uf80p0vw6" + pubkey: "03b3520e97435c6f800481770a6b32230a6ae9a37c77b34b9bbb8945794d0146ca" + net_locked: 97868 + available_balance: 97868 + available_margin: 97868 + contract_margins { + key: "USDBTC" + value { + symbol: "USDBTC" + margin { + } + positions { + key: "USDBTCH26" + value { + ticker: "USDBTCH26" + position { + } + margin { + } + } + } + positions { + key: "USDBTCM26" + value { + ticker: "USDBTCM26" + position { + } + margin { + } + } + } + } + } +} +locks { + txid: "d2dafecf0c38062b06c02e1ec24dca112e92825e7f167163aa758e4bbc5f48b7" + pubkey: "03b3520e97435c6f800481770a6b32230a6ae9a37c77b34b9bbb8945794d0146ca" + btc_address: "bc1qafzt9puf4vrcg7gzqvrvcffprpck2uf80p0vw6" + lock_sats: 97868 +} +``` + +#### BetaV1 +https://api.sidepit.com/request_position/bc1qjd9mdr5z3utkder362fhmnrh2m0lujln7a4ku7 +``` +{ + "traderid": "bc1qjd9mdr5z3utkder362fhmnrh2m0lujln7a4ku7", + "accountstate": { + "sidepit_id": "bc1qjd9mdr5z3utkder362fhmnrh2m0lujln7a4ku7", + "pubkey": "02de4119288861e6a88a7a81307998f5420ca740cba769110785d6fc656692f0c0", + "net_locked": "469670", + "available_balance": "469670", + "available_margin": "469670", + "pending_unlock": "0", + "realized_pnl": "0", + "unrealized_pnl": "0", + "margin_required": "0", + "is_restricted": false, + "reduce_only": 0, + "positions": { + + }, + "carried_position": 0, + "new_position": 0, + "open_bids": 0, + "open_asks": 0 + }, + "locks": [ + { + "txid": "dcb350058b7918ef4af7a1e702117517594827dfc5180bbc5ce535d29fd58ad5", + "pubkey": "02de4119288861e6a88a7a81307998f5420ca740cba769110785d6fc656692f0c0", + "btc_address": "bc1qjd9mdr5z3utkder362fhmnrh2m0lujln7a4ku7", + "lock_sats": "469670", + "unlock_sats": "0", + "is_pending": false + } + ], + "symbol": "", + "orderfills": { + + } +} -## Sidepit Client -Client are users/traders sending orders to Sidepit - -### Client Protocol -Client sends messages using NNG `push` of the [Pipeline Scalability Protocol](https://nanomsg.org/gettingstarted/nng/pipeline.html). - -### Client API -client port# - 12121 - -[Protobuf messages](https://github.com/sidepit/Public-API/blob/main/nng-client/proto/spapi.proto) - -Clients sends signed `Transaction` messages - -1. Opening a `push` socket -1. Dialing `tcp://api.sidepit.com:12121` -1. Serializing into protobuf -1. Sending message - - -`Transaction` -``` -version -timestamp (nano seconds) -oneof - New, Cancel, Auction -id - ordinals address / pubkey -signature - signed ecdsa (bitcoin curve) -``` - -Each Transaction can be `oneof` -``` -NewOrder -cancel_orderid -AuctionBid -``` - -`NewOrder` -``` -side -price -symbol -user_ref -``` - -`cancel_orderid` -``` -orderid ( nanoseconds since contract start ) -``` - -`AuctionBid` -``` -epoch -hash -ordering_salt -bid ( in satoshis ) -``` - -Protobuf Definitions: https://github.com/sidepit/Public-API/blob/main/nng-client/proto/spapi.proto - -### OrderId -``` -OrderId - microseconds since open -Global Unique orderID = traderID + nanoseconds epoch since contract start -``` - -## Sidepit PRICE FEED Protocol -Receiving MarketData from server using NNG `sub` of the [Pub/Sub Scalability Protocol](https://nanomsg.org/gettingstarted/nng/pubsub.html). - -### PRICE FEED API -price feed port# - 12122 - -[Protobuf messages](https://github.com/sidepit/Public-API/blob/main/nng-client/proto/ogcex.proto) - -Price Feed Client subscribes by: -1. Opening as a `sub` socket - (with topic 0) -1. Dialing `tcp://api.sidepit.com:12122` -1. Receiving messages -1. Desterilizing into Protobuf - -PRICE FEED Clients receive `MarketData` protobuf messages - -`MarketData` -``` -version -epoch -EpochBar -MarketQuote -DepthItem (x10) -``` - -`EpochBar` -``` -symbol -epoch -open -high -low -close -volume -``` - -`MarketQuote` -``` -bidsize -bid -ask -asksize -last -lastsize -upordown -symbol -epoch -``` - -`DepthItem` -``` -level -b -a -bs -as -``` - -## Sidepit ORDER-FEED Protocol -Receiving MarketData from server using NNG `sub` of the [Pub/Sub Scalability Protocol](https://nanomsg.org/gettingstarted/nng/pubsub.html). - -### ORDER FEED API -order feed port# - 12124 - -[Protobuf messages](https://github.com/sidepit/Public-API/blob/main/nng-client/proto/ogcex.proto) - -Order Feed Client subscribes by: -1. Opening as a `sub` socket - (with topic 0) -2. future topics will contain `traderid` -1. Dialing `tcp://api.sidepit.com:12124` -1. Receiving messages -1. Desterilizing into Protobuf - -ORDER FEED Clients receive `OrderData` protobuf messages - -`OrderData` -``` -version -epoch (nano seconds) -BookOrder [0+] -FillData [0+] -``` - -`BookOrder` -``` -side -price -open_qty -filled_qty -remaining_qty -canceled_qty -agres_fill_qty -agres_avg_price -pass_fill_qty -avg_price -symbol -update_time -orderid -traderid -``` - -`FillData` -``` -agressiveid -passiveid -price -qty -agressive_side // -1 for agressive sell, 1 for buy -``` - -## Sidepit ECHO Protocol -Receiving live exchange data from server using NNG `sub` of the [Pub/Sub Scalability Protocol](https://nanomsg.org/gettingstarted/nng/pubsub.html). - -### ECHO API -echo port# - 12123 - -[Protobuf messages](https://github.com/sidepit/Public-API/blob/main/nng-client/proto/spapi.proto) - -ECHO Client subscribes by: -1. Opening as a `sub` socket - (with topic 0) -1. Dialing `tcp://api.sidepit.com:12123` -1. Receiving messages -1. Desterilizing into Protobuf - -ECHO Clients receive streaming `TxBlockStream` protobuf messages -`TxBlockStream ` -``` -epoch -txepoch -``` - -Each txepoch can be `oneof` -``` -EpochEvent -Transaction -``` - -`EpochEvent` -``` -epoch -hash -id -signature -``` - -`Transaction` -``` -version -timestamp (nano seconds) -oneof - New, Cancel, Auction -id - ordinals address / pubkey -signature - signed ecdsa (bitcoin curve) -``` - -Each Transaction can be `oneof` -``` -NewOrder -cancel_orderid -AuctionBid -``` - -`NewOrder` -``` -side -price -symbol -user_ref ``` - -`cancel_orderid` -``` -orderid ( nanoseconds since contract start ) -``` - -`AuctionBid` -``` -epoch -hash -ordering_salt -bid ( in satoshis ) -``` -## Sidepit POSITION Protocol -Receiving positions and order status per `traderid` from server using NNG `REQ` of the [Request/Reply (I ask, you answer), Scalability Protocol](https://nanomsg.org/gettingstarted/nng/reqrep.html). - -### POS API -pos port# - 12125 - -[Protobuf messages](https://github.com/sidepit/Public-API-Data/blob/main/ogcex.proto) - -POS Client sends Request and receives Reply -1. Opening as a `req` socket -1. Dialing `tcp://api.sidepit.com:12125` -1. Serialize request into Protobuf -1. Send Request message -1. Receive Reply message -1. Desterilizing reply into Protobuf - -Request: POS Clients sends `RequestPositions` protobuf messages - -`RequestPositions` -``` -traderid -symbol -``` - -Reply: POS Clients receive `TraderPositionOrders` protobuf messages - -`TraderPositionOrders` -``` -traderid -symbol -Position -map // OrderFills keyed on `orderid` -``` - -`Position` -``` -position // -1 for short 1, 1 for long 1 -avg_price -``` - -`OrderFills` -``` -BookOrder -FillData [0+] -``` - -`BookOrder` -``` -side -price -open_qty -filled_qty -remaining_qty -canceled_qty -agres_fill_qty -agres_avg_price -pass_fill_qty -avg_price -symbol -update_time -orderid -traderid -``` - -`FillData` -``` -agressiveid -passiveid -price -qty -agressive_side // -1 for agressive sell, 1 for buy -``` - -## Resources: -[NNG Docs](https://nng.nanomsg.org/man/tip/index.html) - -[NNG NodeJS](https://github.com/reqshark/nodenng) - -[NNG Python](codypiersall/pynng) - -[NNG manual](https://drive.google.com/file/d/1Wl_vcx86VnvClSC9pYytj9FVcveXjrjW/view?usp=sharing) \ No newline at end of file +## Sidepit_Id Order Entry + +NNG tcp://api.sidepit.com:12121 + +``` +// input +message Transaction { + int32 version = 1; + uint64 timestamp = 10; + oneof tx { + NewOrder new_order = 20; + string cancel_orderid = 30; + AuctionBid auction_bid = 40; + } + string id = 100; + bytes signature = 110; +} + +// Protobuf Serialized - New Order +stx { + transaction { + version: 1 + timestamp: 1767395841878 + new_order { + side: -1 + size: 2 + price: 1098 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "155668c5b3730ccb0e7123a7d3b8c53cab4fac64de7f8810eb57d9f8cb4db16a7d0d4eddb4f69677bdcb88e4edff9743f3459fe8204e2bab68068b3b37593ce0" +} + +// Protobuf Serialized - Auction Bid + +stx { + transaction { + version: 1 + timestamp: 1767395842029 + auction_bid { + ordering_salt: "rwZ2dBk" + bid: 2 + } + sidepit_id: "bc1qzzy7gyq8n8zen4zed90vtg2a0zmp4rv0expepc" + } + signature: "81a647b1bca3546df43386585a18a7f349c79305258d9c93773e4b1b2e81afc807a0299410b49a69ad3fa7fce2ec2858f9d3590667432f1acfdd27b80ea40c5c" +} + + +// Protobuf Serialized - Cancel Order +stx { + transaction { + version: 1 + timestamp: 1767395842331 + cancel_orderid: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5:1767395841878" + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "b13788009775aafeea2488cfdb88b6bdf3e9ff7ed3a9df7f384aae280534261133e634690ae5c22538ebd89799ed2e7f0a429f29fbb1159f47ee69e2f8c4ab8f" +} + +``` + + +## Echo - real time low latency stream +[ws://localhost:13123](ws://localhost:13123) + +nng: [tcp://localhost:12123](tcp://localhost:12123) + +[ws:/api.sidepit.com/echo](ws:/api.sidepit.com/echo) + +[ws:/api.sidepit.com:13123](ws:/api.sidepit.com:13123) + +``` +--- +epoch: 1767396791000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396791000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395841878 + new_order { + side: -1 + size: 2 + price: 1098 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "155668c5b3730ccb0e7123a7d3b8c53cab4fac64de7f8810eb57d9f8cb4db16a7d0d4eddb4f69677bdcb88e4edff9743f3459fe8204e2bab68068b3b37593ce0" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395842029 + auction_bid { + ordering_salt: "rwZ2dBk" + bid: 2 + } + sidepit_id: "bc1qzzy7gyq8n8zen4zed90vtg2a0zmp4rv0expepc" + } + signature: "81a647b1bca3546df43386585a18a7f349c79305258d9c93773e4b1b2e81afc807a0299410b49a69ad3fa7fce2ec2858f9d3590667432f1acfdd27b80ea40c5c" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395842180 + auction_bid { + ordering_salt: "BBjs3BG" + bid: 1 + } + sidepit_id: "bc1qp0j9t53xcp6j6jrreakjezlxme9a5tdzh5unk3" + } + signature: "6efcbe579dbb1f6556808b661f51a3f1a5de05501851487eca297cd95f35c6421d85bc0ba6d8aaa7e7a6859b5efd8f282cc43650fe77260e4ab08a0de6888efd" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395842331 + cancel_orderid: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5:1767395841878" + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "b13788009775aafeea2488cfdb88b6bdf3e9ff7ed3a9df7f384aae280534261133e634690ae5c22538ebd89799ed2e7f0a429f29fbb1159f47ee69e2f8c4ab8f" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395842582 + cancel_orderid: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5:1767394457389" + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "a3ad43e9b08203c10e77b9a4924c701c650f60aebe32f7e5f4a931b746711ada2e562f31579f417cd078fdd73e354aa93aae335610a31392a1e1918396e4b789" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395842742 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767395573635" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "323fb4c4401658a1e11dd8546091fb5c678d8182d12d2eb7df8cfe31def5eeaf7a2dd17db909b9d7979b1a2ed155c336115d721079db763a58ab185d4976da16" +} + +--- +epoch: 1767396792000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396792000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395842903 + new_order { + side: 1 + size: 2 + price: 1106 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qyf9txm2wrp52tclchlszmav3q0txq7yrgplzhu" + } + signature: "1a62ece2eca9853c5bd9631c95ce1bed629d2b729957c6e5690d20bcde90076c429e11649b8c235375aa0de0611afa1de9c11d751a6b8e012f01f8e1a0719511" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395843054 + new_order { + side: -1 + size: 1 + price: 1114 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "4d1d79062e606833a6c99a9f5371befa969f1dac401ed5e96dd66e1f19328cb044d80152d8d206128dbe3f71d4682233556e1602093daac78a763f00877adf1b" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395843205 + new_order { + side: -1 + size: 1 + price: 1110 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "73fb07cc6e46472ce9bc8ee441fc0e1970aab1038c3fe20773dde20ab572c6c01faf4b6cfe6c0a3e1e315ece3f7a82bdca8e1f3790c6288c487c6fb2220b6747" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395843356 + auction_bid { + ordering_salt: "EDteTIA" + bid: 1 + } + sidepit_id: "bc1qzzy7gyq8n8zen4zed90vtg2a0zmp4rv0expepc" + } + signature: "853bb90611034d9ef1a272741a70471f910bbd7f6d5e58d3c56ef3a473bcb1f21c5a9935059703b345e7399e080d24e63deb8525bb47ec59aa863925cbe64ced" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395843506 + cancel_orderid: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5:1767395843205" + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "1c1e5bc66c3fa2956b0401d5940a6654aa1b4466b6cebbde5e97768bda003a3e50cb342e00d9ff69fdc46777a06a88d013aea04d8849ac6f04d8223834c8f6f9" +} + +--- +epoch: 1767396793000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396793000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395843757 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767394088358" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "cae6d622e495a8267e594d8222f4b3ccdfde555c7dbb5eb22ac7dcf34553d4230c2d185863e8bb50a98ae61ef9fd54fac45c11813e1a563333216e7e767607f6" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395843918 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767393921951" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "d336661d837180eb66abcffc31087d1bd037ca50205bd9d77f58accf68914e330f04de68e45c30fa253b336823126ebd0dd9dc35263009804752539029d2d7a4" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395844079 + new_order { + side: 1 + size: 1 + price: 1102 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qyf9txm2wrp52tclchlszmav3q0txq7yrgplzhu" + } + signature: "b18216a3385be06059bed8f0f4c7fad6e0d4ec6e1c127bdbdc97b33551aee5a87d05ed1edf241cbaed388fbc6123e9450ad6f0fd28dfe90d273566b9dcc99bf0" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395844230 + new_order { + side: 1 + size: 1 + price: 1113 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qxzz2k7s7eyrvelwmndsfv05y3rllqu5tnh22ca" + } + signature: "54a9326cbe5cf8a0212022b238cfa0b1781c1d03059cdd65e2106adae17603a46129d47cf17b90a33260e2ae69fcf3706d1a9f9219e6de73aecb6d52b46a09bc" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395844380 + new_order { + side: -1 + size: 2 + price: 1099 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "6d9ee2c02de79173b750473613a36d7d79185725a6486906d44ad97a74f2881d3ce0747c33a34c1f3c8e0c3396f79b0ac686e5424f8ec2f37e93b07d2411abce" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395844531 + auction_bid { + ordering_salt: "2nZnzwD" + bid: 1 + } + sidepit_id: "bc1qzzy7gyq8n8zen4zed90vtg2a0zmp4rv0expepc" + } + signature: "d2912ff44738115adafe8dfe1d1cb4080ff4a71ce6af6a932062968017057c931fa5829ec380783104adf8edf7e3fdae9eb17275bd0213c77df97f1cc682bc5d" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395844682 + auction_bid { + ordering_salt: "TmtUNDl" + bid: 1 + } + sidepit_id: "bc1qp0j9t53xcp6j6jrreakjezlxme9a5tdzh5unk3" + } + signature: "af19b918895b5550025f509df1e6c6ac5fe29ebc3831d77a7bf8f21ff664b1c11a545fce860a0e36aefac1d1462767e292ed7dbd1fc475b0696402f2df75270e" +} + +--- +epoch: 1767396794000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396794000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395844832 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767395844380" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "b0d23c1c328011c3a24df9647d60ed4f6a58484ba45bf4588b358bc2f28d779e32f0083e80f1a425a01700816a26cf2119891e466a72040af76493d8cadfb784" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845083 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767395294261" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "ca3ce24bac781ccf7ba84522d01a7574e02029eacf11021625448b370e1627340b28b601a871ee2bd3250fecca6c14c73576b6f0d83e6fa27fa9a03daa2180e0" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845244 + new_order { + side: 1 + size: 2 + price: 1112 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qyf9txm2wrp52tclchlszmav3q0txq7yrgplzhu" + } + signature: "403da83a8624274ca92bc49257c4cdc5315178457ee6bb93f5d44e973ac2bd947908c0b92df453af3344cf32825ae6a53eef8ac30abb457d79b79aee6f5083c8" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845395 + new_order { + side: 1 + size: 2 + price: 1106 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qxzz2k7s7eyrvelwmndsfv05y3rllqu5tnh22ca" + } + signature: "baccbb9f401413ee9e4d6fd245d31d084e2991b4f2b1bb62c54d900851cc46e12e12cf17ad3ccca2fbcf925c1d27f60fbf57670a38b0b51708f64afac6437688" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845546 + new_order { + side: -1 + size: 1 + price: 1102 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "25fdd71305e09bce16c5641e1199ac25d8b35442ab0d0f4a995b8aa30f58d303274664d2c79836db104c822323af17a019bdca1bacef477723ffe6bbe1d4e3a2" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845696 + new_order { + side: -1 + size: 2 + price: 1115 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "4d1e2515dce4da8c89f9d6a70b74c0170c727a89f126a559c68e5a4b1520bc142b9443bd398d4492dc1cdc5230cda5841920bd0f43c70a4a033dea25247c7381" +} + +--- +epoch: 1767396795000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396795000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395845847 + new_order { + side: 1 + size: 1 + price: 1098 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qyf9txm2wrp52tclchlszmav3q0txq7yrgplzhu" + } + signature: "dcb1d5da7b53e9244a7c970e120b280936aa0cda8c4fc60f421ae773eb5b88666514a764b2d386eab643327fccca4b5c5cdacf006822d1e2ce7c609cc884abda" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395845998 + new_order { + side: -1 + size: 2 + price: 1107 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "88542927189b6d31be8f1c7c813aed968c893a0533170c4af3d02a75099f998a577e3195fd15604d2e59ea9000112b806c0dc9cd2cddb549e34d098c238b0f45" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395846149 + new_order { + side: -1 + size: 1 + price: 1115 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "d03070da8fd05b206073f9b9065cc69dbe363d27a4e49b32c55664c3307fe8eb12ca6c110ab206df75e67ac4b135ea921faf7c01d594fc227bd7b1d0968820d0" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395846300 + auction_bid { + ordering_salt: "MC6b8Du" + bid: 1 + } + sidepit_id: "bc1qzzy7gyq8n8zen4zed90vtg2a0zmp4rv0expepc" + } + signature: "5eac957b1f8a39ecce32784466e7b4b7e182d20359a8a9ee0599dbdd80d8a7ab51c646c8e06b6b0984b14edfaba665744dca0270124d63298069e00091bd37b3" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395846450 + auction_bid { + ordering_salt: "D6LFNj3" + bid: 2 + } + sidepit_id: "bc1qp0j9t53xcp6j6jrreakjezlxme9a5tdzh5unk3" + } + signature: "529b4e054530aea11d817b1b032f778d22b2507b23637fb01ceb41be511e81d3236adb85170dcb3ae23d7e09cd7d0688b9fdce972f9e5e3c6663910566361a39" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395846601 + cancel_orderid: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5:1767395846149" + sidepit_id: "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5" + } + signature: "4ee5b74bb7c1f76147960e518b017f7d625d80a4baa044002d2b897d81a9902807e83d3a3176d6dbb5c8989ff00f55fb07f2fe26a64668d513c4531fd61679b0" +} + +--- +epoch: 1767396796000 +estate: EXCHANGE_OPEN +epoch_event { + epoch: 1767396796000 +} + +====================== +stx { + transaction { + version: 1 + timestamp: 1767395846852 + cancel_orderid: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln:1767394812166" + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "544a1d970647d65e9e77b608c6899ad52f3b891d8bb1b055f21bb0553140c98b5da8db0174cb880fb8768994cad237462fe71256705bd35a10cfbae8aafda9c8" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395847013 + new_order { + side: 1 + size: 1 + price: 1114 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qyf9txm2wrp52tclchlszmav3q0txq7yrgplzhu" + } + signature: "00819ef9d097c3be6cef9ee0ce5c2f803041e9e603fff81b6e1fefdac58a140c6c02e3273a8bd5990ccb79cabb37795971a6460e4e470cbcf9867dd576b52590" +} + +--- +stx { + transaction { + version: 1 + timestamp: 1767395847164 + new_order { + side: -1 + size: 1 + price: 1108 + ticker: "USDBTCH26" + } + sidepit_id: "bc1qa4k32j4k609uh2z05k65de48hmgx74gl04gkln" + } + signature: "82f8edb0175c433773408a1fe8e79264a328aed4ba74b96bcde9076e09d555fe37804c3e2df9f37e734d80b66af784b6a94970ee187b55c981fd4904c9b1d090" +} + +--- + +``` + +## Epoch Time Converter +https://www.epochconverter.com/?q=1767396794000 + +Assuming that this timestamp is in milliseconds: +GMT: Fri, 02 Jan 2026 23:33:14 GMT +Your time zone: Fri Jan 02 2026 15:33:14 GMT-0800 (Pacific Standard Time) \ No newline at end of file diff --git a/python-client/constants.py b/python-client/constants.py index 11921a4..f2f8a31 100644 --- a/python-client/constants.py +++ b/python-client/constants.py @@ -1,8 +1,10 @@ PROTOCOL = "tcp://" -ADDRESS = "api.sidepit.com" # "localhost" +ADDRESS = "localhost" # "api.sidepit.com" # "localhost" CLIENT_PORT = "12121" FEED_PORT = "12122" ECHO_PORT = "12123" WS_FEED_PORT = "13122" WS_ECHO_PORT = "13123" - +REQ_PROTOCOL = "tcp://" +REQ_ADDRESS = "localhost" # 52.250.81.229" +REQ_PORT = "12125" diff --git a/python-client/feed_cli.py b/python-client/feed_cli.py new file mode 100644 index 0000000..262e8b7 --- /dev/null +++ b/python-client/feed_cli.py @@ -0,0 +1,70 @@ +import asyncio +import threading +from feed_nng_client import FeedClient +from constants import PROTOCOL, ADDRESS, FEED_PORT + +class FeedCLI: + def __init__(self): + self.feed_client = None + self.loop = None + self.thread = None + + def start_background_feed(self): + """Start the feed client in a background thread""" + feed_address = f"{PROTOCOL}{ADDRESS}:{FEED_PORT}" + self.feed_client = FeedClient(feed_address, set()) + + def run_async_loop(): + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + try: + self.loop.run_until_complete(self.feed_client.receive_messages()) + except Exception: + # Socket closed or loop stopped + pass + + self.thread = threading.Thread(target=run_async_loop, daemon=True) + self.thread.start() + print("Feed client started in background...") + + def get_latest(self): + """Get the latest message""" + if not self.feed_client: + return "Feed client not started. Run 'start' first." + + latest = self.feed_client.get_latest() + if latest: + return latest + else: + return "No messages received yet." + + def stop(self): + """Stop the feed client""" + if self.feed_client: + # Closing the socket will cause arecv to raise an exception + # and the receive_messages loop will exit + self.feed_client.close_connection() + print("Feed client stopped.") + +def main(): + cli = FeedCLI() + + print("Feed CLI - Commands: start, latest, stop, exit") + + while True: + command = input("\n> ").strip().lower() + + if command == "start": + cli.start_background_feed() + elif command == "latest": + print(cli.get_latest()) + elif command == "stop": + cli.stop() + elif command == "exit": + cli.stop() + break + else: + print("Unknown command. Use: start, latest, stop, exit") + +if __name__ == "__main__": + main() diff --git a/python-client/feed_demo.py b/python-client/feed_demo.py new file mode 100644 index 0000000..b6ea475 --- /dev/null +++ b/python-client/feed_demo.py @@ -0,0 +1,151 @@ +import asyncio +import threading +from feed_nng_client import FeedClient +from constants import PROTOCOL, ADDRESS, FEED_PORT +from fastapi import FastAPI +import uvicorn +import websockets +import json + +class FeedDemo: + def __init__(self): + self.feed_client = None + self.loop = None + self.thread = None + + def start_background_feed(self, silent=False): + """Start the feed client in a background thread""" + feed_address = f"{PROTOCOL}{ADDRESS}:{FEED_PORT}" + # Pass None to enable silent mode (no console printing) + clients = set() if silent else None + self.feed_client = FeedClient(feed_address, clients) + + def run_async_loop(): + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + try: + self.loop.run_until_complete(self.feed_client.receive_messages()) + except Exception: + # Socket closed or loop stopped + pass + + self.thread = threading.Thread(target=run_async_loop, daemon=True) + self.thread.start() + if not silent: + print("Feed client started in background...") + + def get_latest(self, ticker=None): + """Get the latest message(s)""" + if not self.feed_client: + return "Feed client not started. Run 'start' first." + + latest = self.feed_client.get_latest(ticker) + if ticker: + return latest if latest else "No messages received yet." + else: + return latest if latest else {} + + def stop(self): + """Stop the feed client""" + if self.feed_client: + # Closing the socket will cause arecv to raise an exception + # and the receive_messages loop will exit + self.feed_client.close_connection() + print("Feed client stopped.") + +# CLI Mode +def run_cli(): + demo = FeedDemo() + + print("Feed CLI - Commands: start, latest, stop, exit") + + while True: + command = input("\n> ").strip().lower() + + if command == "start": + demo.start_background_feed() + elif command == "latest": + print(demo.get_latest()) + elif command == "stop": + demo.stop() + elif command == "exit": + demo.stop() + break + else: + print("Unknown command. Use: start, latest, stop, exit") + +# WebSocket Client Mode +async def run_websocket_client(): + from constants import WS_FEED_PORT + ws_url = f"ws://localhost:{WS_FEED_PORT}" + + print(f"Connecting to WebSocket at {ws_url}...") + + try: + async with websockets.connect(ws_url) as websocket: + print("Connected! Receiving messages...") + while True: + message = await websocket.recv() + print(f"Received: {message}") + except KeyboardInterrupt: + print("\nDisconnected.") + except Exception as e: + print(f"Error: {e}") + +# HTTP API Mode +def run_http_api(): + demo = FeedDemo() + demo.start_background_feed(silent=True) # Silent mode for HTTP API + + app = FastAPI() + + @app.post("/quote/") + @app.get("/quote/") + async def get_quote(): + """Get all latest quotes""" + latest = demo.get_latest() + if latest: + # Parse all JSON strings into objects + parsed_data = {ticker: json.loads(msg) for ticker, msg in latest.items()} + return {"status": "success", "data": parsed_data} + return {"status": "error", "message": "No data available"} + + @app.post("/quote/{ticker}") + @app.get("/quote/{ticker}") + async def get_quote_by_ticker(ticker: str): + """Get the latest quote for a specific ticker""" + latest = demo.get_latest(ticker) + if latest and latest != "No messages received yet.": + return {"status": "success", "data": json.loads(latest)} + return {"status": "error", "message": f"Ticker {ticker} not found"} + + print("Starting HTTP API server on http://localhost:8000") + print("Endpoints:") + print(" GET http://localhost:8000/quote/") + print(" POST http://localhost:8000/quote/") + print(" GET http://localhost:8000/quote/{ticker}") + print(" POST http://localhost:8000/quote/{ticker}") + print("\nExample: http://localhost:8000/quote/USDBTCH26") + + uvicorn.run(app, host="0.0.0.0", port=8000) + +def main(): + print("=== Feed Demo ===") + print("Select mode:") + print("1. CLI - Interactive command-line interface") + print("2. WebSocket Client - Connect to WebSocket feed server") + print("3. HTTP API - Run REST API server with /quote/ endpoints") + + choice = input("\nEnter choice (1-3): ").strip() + + if choice == "1": + run_cli() + elif choice == "2": + asyncio.run(run_websocket_client()) + elif choice == "3": + run_http_api() + else: + print("Invalid choice. Exiting.") + +if __name__ == "__main__": + main() diff --git a/python-client/feed_nng_client.py b/python-client/feed_nng_client.py index 0942e04..45b14d8 100644 --- a/python-client/feed_nng_client.py +++ b/python-client/feed_nng_client.py @@ -1,6 +1,6 @@ import asyncio import pynng -from proto import ogcex_pb2 +from proto import sidepit_api_pb2 from utils import broadcast import json from constants import PROTOCOL, ADDRESS, FEED_PORT @@ -13,6 +13,7 @@ def __init__(self, feed_address: str, clients) -> None: self.socket.dial(self.feed_address) self.socket.subscribe(b"") self.clients = clients + self.latest_messages = {} # Store by ticker async def receive_messages(self) -> None: try: @@ -21,11 +22,52 @@ async def receive_messages(self) -> None: await self.broadcast_message(serialized_msg) except KeyboardInterrupt: print("Stopping subscription...") + except Exception: + # Socket was closed or other error occurred + pass async def broadcast_message(self, serialized_msg: bytes) -> None: - market_data = ogcex_pb2.MarketData() + market_data = sidepit_api_pb2.MarketData() market_data.ParseFromString(serialized_msg) - await broadcast(self.clients, MessageToJson(market_data,preserving_proto_field_name=True)) + json_message = MessageToJson(market_data,preserving_proto_field_name=True) + + # Parse and store by ticker + data = json.loads(json_message) + ticker = data.get("ticker") + if ticker: + self.latest_messages[ticker] = json_message + + # Only broadcast if there are clients (not None means silent mode) + if self.clients is not None: + if self.clients: # If set is not empty + await broadcast(self.clients, json_message) + else: + # Print when running standalone (clients is None) + print(f"Received: {json_message}") def close_connection(self) -> None: self.socket.close() + + def get_latest(self, ticker=None): + """Get the most recent message(s) + + Args: + ticker: Optional ticker to filter by. If None, returns all latest messages. + + Returns: + If ticker is specified: JSON string of that ticker's latest message + If ticker is None: Dictionary of all tickers and their latest messages + """ + if ticker: + return self.latest_messages.get(ticker) + return self.latest_messages + +async def main(): + feed_address = f"{PROTOCOL}{ADDRESS}:{FEED_PORT}" + feed_client = FeedClient(feed_address, set()) + + print("Subscribing to feed...") + await feed_client.receive_messages() + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/python-client/feed_ws_server.py b/python-client/feed_ws_server.py index 4b6b9ee..431af31 100644 --- a/python-client/feed_ws_server.py +++ b/python-client/feed_ws_server.py @@ -5,7 +5,7 @@ clients = set() -async def ws_handler(websocket, path): +async def ws_handler(websocket): clients.add(websocket) try: await websocket.wait_closed() @@ -16,11 +16,17 @@ async def main(): feed_address = f"{PROTOCOL}{ADDRESS}:{FEED_PORT}" feed_client = FeedClient(feed_address, clients) - start_server = websockets.serve(ws_handler, "localhost", int(WS_PORT)) + start_server = websockets.serve(ws_handler, "localhost", int(WS_FEED_PORT)) print("Subscribing to feed and starting WebSocket server...") - await asyncio.gather(feed_client.receive_messages(), start_server) - + print(f"Feed address: {feed_address}") + print(f"WebSocket server: ws://localhost:{WS_FEED_PORT}") + + try: + await asyncio.gather(feed_client.receive_messages(), start_server) + except Exception as e: + print(f"Error in main: {e}") + raise if __name__ == "__main__": asyncio.run(main()) diff --git a/python-client/proto/__init__.py b/python-client/proto/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python-client/proto/sidepit_api_pb2.py b/python-client/proto/sidepit_api_pb2.py index c152804..8f26356 100644 --- a/python-client/proto/sidepit_api_pb2.py +++ b/python-client/proto/sidepit_api_pb2.py @@ -1,2528 +1,133 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: sidepit_api.proto - - -from google.protobuf.internal import enum_type_wrapper +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection - +from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor.FileDescriptor( - name='sidepit_api.proto', - package='', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x11sidepit_api.proto\"\xcf\x01\n\x0bTransaction\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\n \x01(\x04\x12\x1e\n\tnew_order\x18\x14 \x01(\x0b\x32\t.NewOrderH\x00\x12\x18\n\x0e\x63\x61ncel_orderid\x18\x1e \x01(\tH\x00\x12\"\n\x0b\x61uction_bid\x18( \x01(\x0b\x32\x0b.AuctionBidH\x00\x12$\n\nunlock_req\x18\x32 \x01(\x0b\x32\x0e.UnlockRequestH\x00\x12\x12\n\nsidepit_id\x18\x65 \x01(\tB\x04\n\x02tx\"\x87\x01\n\x11SignedTransaction\x12\x19\n\x11signature_version\x18\x02 \x01(\x05\x12!\n\x0btransaction\x18\x0b \x01(\x0b\x32\x0c.Transaction\x12\x11\n\ttx_digest\x18\x15 \x01(\t\x12\x0e\n\x06pubkey\x18\x1f \x01(\t\x12\x11\n\tsignature\x18o \x01(\t\"E\n\x08NewOrder\x12\x0c\n\x04side\x18\x0b \x01(\x11\x12\x0c\n\x04size\x18\x14 \x01(\x05\x12\r\n\x05price\x18\x1e \x01(\x05\x12\x0e\n\x06ticker\x18( \x01(\t\"M\n\nAuctionBid\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\x15\n\rordering_salt\x18\x1e \x01(\t\x12\x0b\n\x03\x62id\x18( \x01(\x05\"N\n\rUnlockRequest\x12$\n\x06minmax\x18\x14 \x01(\x0e\x32\x14.UnlockRequestAmount\x12\x17\n\x0f\x65xplicit_amount\x18\x1e \x01(\x04\"H\n\nEpochEvent\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\n\n\x02id\x18\x64 \x01(\t\x12\x11\n\tsignature\x18n \x01(\x0c\".\n\rExchangeEvent\x12\x1d\n\x05state\x18\n \x01(\x0e\x32\x0e.ExchangeState\"\xba\x01\n\rTxBlockStream\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x14 \x01(\x0e\x32\x0e.ExchangeState\x12\"\n\x0b\x65poch_event\x18\x19 \x01(\x0b\x32\x0b.EpochEventH\x00\x12!\n\x03stx\x18\x1f \x01(\x0b\x32\x12.SignedTransactionH\x00\x12(\n\x0e\x65xchange_event\x18( \x01(\x0b\x32\x0e.ExchangeEventH\x00\x42\t\n\x07txepoch\"\x9a\x01\n\x0bMarketQuote\x12\x0f\n\x07\x62idsize\x18\n \x01(\x05\x12\x0b\n\x03\x62id\x18\x14 \x01(\x05\x12\x0b\n\x03\x61sk\x18\x1e \x01(\x05\x12\x0f\n\x07\x61sksize\x18( \x01(\x05\x12\x0c\n\x04last\x18\x32 \x01(\x05\x12\x10\n\x08lastsize\x18< \x01(\x05\x12\x10\n\x08upordown\x18\x46 \x01(\x08\x12\x0e\n\x06ticker\x18P \x01(\t\x12\r\n\x05\x65poch\x18Z \x01(\x04\"q\n\x08\x45pochBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x0c\n\x04open\x18\x14 \x01(\x05\x12\x0c\n\x04high\x18\x1e \x01(\x05\x12\x0b\n\x03low\x18( \x01(\x05\x12\r\n\x05\x63lose\x18\x32 \x01(\x05\x12\x0e\n\x06volume\x18< \x01(\x05\"\xe2\x01\n\x0b\x43ontractBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x10\n\x08\x64\x61y_open\x18\x14 \x01(\x05\x12\x10\n\x08\x64\x61y_high\x18\x1e \x01(\x05\x12\x0f\n\x07\x64\x61y_low\x18( \x01(\x05\x12\x11\n\tday_close\x18\x32 \x01(\x05\x12\x12\n\nday_volume\x18< \x01(\x05\x12\x0c\n\x04high\x18\x46 \x01(\x05\x12\x0b\n\x03low\x18P \x01(\x05\x12\x0e\n\x06volume\x18Z \x01(\x05\x12\x15\n\ropen_interest\x18\x64 \x01(\x05\x12\x16\n\x0eprevious_close\x18n \x01(\x05\"\x9e\x02\n\tBookOrder\x12\x0c\n\x04side\x18\n \x01(\x11\x12\r\n\x05price\x18\x14 \x01(\x05\x12\x10\n\x08open_qty\x18\x1e \x01(\x05\x12\x12\n\nfilled_qty\x18( \x01(\x05\x12\x15\n\rremaining_qty\x18\x32 \x01(\x05\x12\x14\n\x0c\x63\x61nceled_qty\x18< \x01(\x05\x12\x16\n\x0e\x61gres_fill_qty\x18> \x01(\x05\x12\x17\n\x0f\x61gres_avg_price\x18? \x01(\x02\x12\x15\n\rpass_fill_qty\x18@ \x01(\x05\x12\x11\n\tavg_price\x18\x41 \x01(\x02\x12\x0e\n\x06ticker\x18\x46 \x01(\t\x12\x13\n\x0bupdate_time\x18P \x01(\t\x12\x0f\n\x07orderid\x18Z \x01(\t\x12\x10\n\x08traderid\x18\x64 \x01(\t\"H\n\tDepthItem\x12\r\n\x05level\x18\n \x01(\x05\x12\t\n\x01\x62\x18\x1e \x01(\x05\x12\t\n\x01\x61\x18( \x01(\x05\x12\n\n\x02\x62s\x18\x32 \x01(\x05\x12\n\n\x02\x61s\x18< \x01(\x05\"|\n\nMarketData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x16\n\x03\x62\x61r\x18\x14 \x01(\x0b\x32\t.EpochBar\x12\x1b\n\x05quote\x18\x1e \x01(\x0b\x32\x0c.MarketQuote\x12\x19\n\x05\x64\x65pth\x18( \x03(\x0b\x32\n.DepthItem\"y\n\x08\x46illData\x12\x13\n\x0b\x61gressiveid\x18\n \x01(\t\x12\x11\n\tpassiveid\x18\x14 \x01(\t\x12\r\n\x05price\x18\x1e \x01(\r\x12\x0b\n\x03qty\x18( \x01(\r\x12\x16\n\x0e\x61gressive_side\x18\x32 \x01(\x05\x12\x11\n\tmicrotime\x18< \x01(\x04\"e\n\tOrderData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\nbookorders\x18( \x03(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xab\x02\n\x08\x43ontract\x12\x0e\n\x06symbol\x18\n \x01(\t\x12\x11\n\tunit_size\x18\x14 \x01(\r\x12\x0c\n\x04unit\x18\x1e \x01(\t\x12\x13\n\x0bprice_quote\x18( \x01(\t\x12\x19\n\x11price_quote_units\x18\x32 \x01(\x05\x12\x0f\n\x07tic_min\x18< \x01(\r\x12\x11\n\ttic_value\x18\x46 \x01(\r\x12\x1b\n\x13price_limit_percent\x18P \x01(\x05\x12\x16\n\x0einitial_margin\x18Z \x01(\x04\x12\x14\n\x0cmaint_margin\x18\x64 \x01(\x04\x12\x17\n\x0fposition_limits\x18n \x01(\x05\x12\x19\n\x11trading_open_time\x18x \x01(\x04\x12\x1b\n\x12trading_close_time\x18\x82\x01 \x01(\x04\"z\n\x07Product\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\x17\n\x0f\x63ontract_symbol\x18\x14 \x01(\t\x12\x17\n\x0f\x65xpiration_date\x18\x1e \x01(\x04\x12\x1a\n\x12start_trading_date\x18( \x01(\x04\x12\x11\n\tis_active\x18\x32 \x01(\x08\"`\n\x08Schedule\x12\x0c\n\x04\x64\x61te\x18\n \x01(\x04\x12\x19\n\x11trading_open_time\x18\x14 \x01(\x04\x12\x1a\n\x12trading_close_time\x18\x1e \x01(\x04\x12\x0f\n\x07product\x18( \x03(\t\"Z\n\x0eTradingSession\x12\x12\n\nsession_id\x18\n \x01(\t\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x17\n\x0fprev_session_id\x18\x32 \x01(\t\"C\n\rSessionStatus\x12\x1e\n\x06\x65state\x18\n \x01(\x0e\x32\x0e.ExchangeState\x12\x12\n\nsession_id\x18\x14 \x01(\t\"R\n\x0e\x45xchangeStatus\x12 \n\x07session\x18\n \x01(\x0b\x32\x0f.TradingSession\x12\x1e\n\x06status\x18\x14 \x01(\x0b\x32\x0e.SessionStatus\"l\n\x15\x41\x63tiveContractProduct\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x19\n\x07product\x18\x14 \x01(\x0b\x32\x08.Product\x12\x1b\n\x08schedule\x18\x1e \x01(\x0b\x32\t.Schedule\"/\n\x08Position\x12\x10\n\x08position\x18\n \x01(\x11\x12\x11\n\tavg_price\x18\x15 \x01(\x02\"A\n\nOrderFills\x12\x19\n\x05order\x18\n \x01(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xce\x03\n\x0c\x41\x63\x63ountState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x16\n\x0eunrealized_pnl\x18< \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12/\n\tpositions\x18x \x03(\x0b\x32\x1c.AccountState.PositionsEntry\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\x1a;\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x18\n\x05value\x18\x02 \x01(\x0b\x32\t.Position:\x02\x38\x01\"y\n\x08\x42tcLocks\x12\x0c\n\x04txid\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x13\n\x0b\x62tc_address\x18\x1e \x01(\t\x12\x11\n\tlock_sats\x18( \x01(\x04\x12\x13\n\x0bunlock_sats\x18\x32 \x01(\x04\x12\x12\n\nis_pending\x18< \x01(\x08\"B\n\x0cRequestReply\x12\x10\n\x08TypeMask\x18\x01 \x01(\x05\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06ticker\x18\x1e \x01(\t\"\x9b\x01\n\x0cReplyRequest\x12\x10\n\x08TypeMask\x18\n \x01(\x05\x12/\n\x10trader_positions\x18\x14 \x01(\x0b\x32\x15.TraderPositionOrders\x12&\n\x0e\x61\x63tive_product\x18\x1e \x01(\x0b\x32\x0e.ActiveProduct\x12 \n\x0bmarket_data\x18( \x01(\x0b\x32\x0b.MarketData\"\xf2\x01\n\x14TraderPositionOrders\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06symbol\x18\x14 \x01(\t\x12\x39\n\norderfills\x18( \x03(\x0b\x32%.TraderPositionOrders.OrderfillsEntry\x12#\n\x0c\x61\x63\x63ountstate\x18\x32 \x01(\x0b\x32\r.AccountState\x12\x18\n\x05locks\x18< \x03(\x0b\x32\t.BtcLocks\x1a>\n\x0fOrderfillsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1a\n\x05value\x18\x02 \x01(\x0b\x32\x0b.OrderFills:\x02\x38\x01\"\x95\x01\n\rActiveProduct\x12\x37\n\x17\x61\x63tive_contract_product\x18\n \x01(\x0b\x32\x16.ActiveContractProduct\x12(\n\x0f\x65xchange_status\x18\x14 \x01(\x0b\x32\x0f.ExchangeStatus\x12!\n\x0b\x63ontractbar\x18\x1e \x01(\x0b\x32\x0c.ContractBar*C\n\x13UnlockRequestAmount\x12\x0c\n\x08NONE_AMT\x10\x00\x12\x07\n\x03MAX\x10\x01\x12\x07\n\x03MIN\x10\x02\x12\x0c\n\x08\x45XPLICIT\x10\x03*K\n\x11ReplyRequestTypes\x12\x08\n\x04NONE\x10\x00\x12\x12\n\x0e\x41\x43TIVE_PRODUCT\x10\x01\x12\r\n\tPOSITIONS\x10\x02\x12\t\n\x05QUOTE\x10\x04*\xad\x01\n\rExchangeState\x12\x14\n\x10\x45XCHANGE_UNKNOWN\x10\x00\x12\x19\n\x15\x45XCHANGE_PENDING_OPEN\x10\x01\x12\x11\n\rEXCHANGE_OPEN\x10\x02\x12\x17\n\x13\x45XCHANGE_RECOVERING\x10\x03\x12\x14\n\x10\x45XCHANGE_CLOSING\x10\x04\x12\x14\n\x10\x45XCHANGE_SETTLED\x10\x05\x12\x13\n\x0f\x45XCHANGE_CLOSED\x10\x06\x62\x06proto3' -) - -_UNLOCKREQUESTAMOUNT = _descriptor.EnumDescriptor( - name='UnlockRequestAmount', - full_name='UnlockRequestAmount', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE_AMT', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MAX', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MIN', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXPLICIT', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=4332, - serialized_end=4399, -) -_sym_db.RegisterEnumDescriptor(_UNLOCKREQUESTAMOUNT) - -UnlockRequestAmount = enum_type_wrapper.EnumTypeWrapper(_UNLOCKREQUESTAMOUNT) -_REPLYREQUESTTYPES = _descriptor.EnumDescriptor( - name='ReplyRequestTypes', - full_name='ReplyRequestTypes', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ACTIVE_PRODUCT', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='POSITIONS', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='QUOTE', index=3, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=4401, - serialized_end=4476, -) -_sym_db.RegisterEnumDescriptor(_REPLYREQUESTTYPES) - -ReplyRequestTypes = enum_type_wrapper.EnumTypeWrapper(_REPLYREQUESTTYPES) -_EXCHANGESTATE = _descriptor.EnumDescriptor( - name='ExchangeState', - full_name='ExchangeState', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='EXCHANGE_UNKNOWN', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_PENDING_OPEN', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_OPEN', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_RECOVERING', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_CLOSING', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_SETTLED', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_CLOSED', index=6, number=6, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=4479, - serialized_end=4652, -) -_sym_db.RegisterEnumDescriptor(_EXCHANGESTATE) - -ExchangeState = enum_type_wrapper.EnumTypeWrapper(_EXCHANGESTATE) -NONE_AMT = 0 -MAX = 1 -MIN = 2 -EXPLICIT = 3 -NONE = 0 -ACTIVE_PRODUCT = 1 -POSITIONS = 2 -QUOTE = 4 -EXCHANGE_UNKNOWN = 0 -EXCHANGE_PENDING_OPEN = 1 -EXCHANGE_OPEN = 2 -EXCHANGE_RECOVERING = 3 -EXCHANGE_CLOSING = 4 -EXCHANGE_SETTLED = 5 -EXCHANGE_CLOSED = 6 - - - -_TRANSACTION = _descriptor.Descriptor( - name='Transaction', - full_name='Transaction', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='Transaction.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='Transaction.timestamp', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='new_order', full_name='Transaction.new_order', index=2, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='cancel_orderid', full_name='Transaction.cancel_orderid', index=3, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='auction_bid', full_name='Transaction.auction_bid', index=4, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unlock_req', full_name='Transaction.unlock_req', index=5, - number=50, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sidepit_id', full_name='Transaction.sidepit_id', index=6, - number=101, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='tx', full_name='Transaction.tx', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=22, - serialized_end=229, -) - - -_SIGNEDTRANSACTION = _descriptor.Descriptor( - name='SignedTransaction', - full_name='SignedTransaction', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='signature_version', full_name='SignedTransaction.signature_version', index=0, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='transaction', full_name='SignedTransaction.transaction', index=1, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='tx_digest', full_name='SignedTransaction.tx_digest', index=2, - number=21, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='pubkey', full_name='SignedTransaction.pubkey', index=3, - number=31, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='signature', full_name='SignedTransaction.signature', index=4, - number=111, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=232, - serialized_end=367, -) - - -_NEWORDER = _descriptor.Descriptor( - name='NewOrder', - full_name='NewOrder', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='side', full_name='NewOrder.side', index=0, - number=11, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='size', full_name='NewOrder.size', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price', full_name='NewOrder.price', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ticker', full_name='NewOrder.ticker', index=3, - number=40, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=369, - serialized_end=438, -) - - -_AUCTIONBID = _descriptor.Descriptor( - name='AuctionBid', - full_name='AuctionBid', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='AuctionBid.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='hash', full_name='AuctionBid.hash', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ordering_salt', full_name='AuctionBid.ordering_salt', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bid', full_name='AuctionBid.bid', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=440, - serialized_end=517, -) - - -_UNLOCKREQUEST = _descriptor.Descriptor( - name='UnlockRequest', - full_name='UnlockRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='minmax', full_name='UnlockRequest.minmax', index=0, - number=20, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='explicit_amount', full_name='UnlockRequest.explicit_amount', index=1, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=519, - serialized_end=597, -) - - -_EPOCHEVENT = _descriptor.Descriptor( - name='EpochEvent', - full_name='EpochEvent', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='EpochEvent.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='hash', full_name='EpochEvent.hash', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='EpochEvent.id', index=2, - number=100, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='signature', full_name='EpochEvent.signature', index=3, - number=110, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=599, - serialized_end=671, -) - - -_EXCHANGEEVENT = _descriptor.Descriptor( - name='ExchangeEvent', - full_name='ExchangeEvent', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='state', full_name='ExchangeEvent.state', index=0, - number=10, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=673, - serialized_end=719, -) - - -_TXBLOCKSTREAM = _descriptor.Descriptor( - name='TxBlockStream', - full_name='TxBlockStream', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='TxBlockStream.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='estate', full_name='TxBlockStream.estate', index=1, - number=20, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch_event', full_name='TxBlockStream.epoch_event', index=2, - number=25, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='stx', full_name='TxBlockStream.stx', index=3, - number=31, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='exchange_event', full_name='TxBlockStream.exchange_event', index=4, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='txepoch', full_name='TxBlockStream.txepoch', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=722, - serialized_end=908, -) - - -_MARKETQUOTE = _descriptor.Descriptor( - name='MarketQuote', - full_name='MarketQuote', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='bidsize', full_name='MarketQuote.bidsize', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bid', full_name='MarketQuote.bid', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ask', full_name='MarketQuote.ask', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='asksize', full_name='MarketQuote.asksize', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='last', full_name='MarketQuote.last', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='lastsize', full_name='MarketQuote.lastsize', index=5, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='upordown', full_name='MarketQuote.upordown', index=6, - number=70, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ticker', full_name='MarketQuote.ticker', index=7, - number=80, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch', full_name='MarketQuote.epoch', index=8, - number=90, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=911, - serialized_end=1065, -) - - -_EPOCHBAR = _descriptor.Descriptor( - name='EpochBar', - full_name='EpochBar', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='EpochBar.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch', full_name='EpochBar.epoch', index=1, - number=15, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='open', full_name='EpochBar.open', index=2, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='high', full_name='EpochBar.high', index=3, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='low', full_name='EpochBar.low', index=4, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='close', full_name='EpochBar.close', index=5, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='volume', full_name='EpochBar.volume', index=6, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1067, - serialized_end=1180, -) - - -_CONTRACTBAR = _descriptor.Descriptor( - name='ContractBar', - full_name='ContractBar', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='ContractBar.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch', full_name='ContractBar.epoch', index=1, - number=15, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='day_open', full_name='ContractBar.day_open', index=2, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='day_high', full_name='ContractBar.day_high', index=3, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='day_low', full_name='ContractBar.day_low', index=4, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='day_close', full_name='ContractBar.day_close', index=5, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='day_volume', full_name='ContractBar.day_volume', index=6, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='high', full_name='ContractBar.high', index=7, - number=70, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='low', full_name='ContractBar.low', index=8, - number=80, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='volume', full_name='ContractBar.volume', index=9, - number=90, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='open_interest', full_name='ContractBar.open_interest', index=10, - number=100, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='previous_close', full_name='ContractBar.previous_close', index=11, - number=110, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1183, - serialized_end=1409, -) - - -_BOOKORDER = _descriptor.Descriptor( - name='BookOrder', - full_name='BookOrder', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='side', full_name='BookOrder.side', index=0, - number=10, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price', full_name='BookOrder.price', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='open_qty', full_name='BookOrder.open_qty', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='filled_qty', full_name='BookOrder.filled_qty', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='remaining_qty', full_name='BookOrder.remaining_qty', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='canceled_qty', full_name='BookOrder.canceled_qty', index=5, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='agres_fill_qty', full_name='BookOrder.agres_fill_qty', index=6, - number=62, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='agres_avg_price', full_name='BookOrder.agres_avg_price', index=7, - number=63, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='pass_fill_qty', full_name='BookOrder.pass_fill_qty', index=8, - number=64, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='avg_price', full_name='BookOrder.avg_price', index=9, - number=65, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ticker', full_name='BookOrder.ticker', index=10, - number=70, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='update_time', full_name='BookOrder.update_time', index=11, - number=80, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='orderid', full_name='BookOrder.orderid', index=12, - number=90, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='traderid', full_name='BookOrder.traderid', index=13, - number=100, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1412, - serialized_end=1698, -) - - -_DEPTHITEM = _descriptor.Descriptor( - name='DepthItem', - full_name='DepthItem', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='level', full_name='DepthItem.level', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='b', full_name='DepthItem.b', index=1, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='a', full_name='DepthItem.a', index=2, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bs', full_name='DepthItem.bs', index=3, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='as', full_name='DepthItem.as', index=4, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1700, - serialized_end=1772, -) - - -_MARKETDATA = _descriptor.Descriptor( - name='MarketData', - full_name='MarketData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='MarketData.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch', full_name='MarketData.epoch', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bar', full_name='MarketData.bar', index=2, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='quote', full_name='MarketData.quote', index=3, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='depth', full_name='MarketData.depth', index=4, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1774, - serialized_end=1898, -) - - -_FILLDATA = _descriptor.Descriptor( - name='FillData', - full_name='FillData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='agressiveid', full_name='FillData.agressiveid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='passiveid', full_name='FillData.passiveid', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price', full_name='FillData.price', index=2, - number=30, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='qty', full_name='FillData.qty', index=3, - number=40, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='agressive_side', full_name='FillData.agressive_side', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='microtime', full_name='FillData.microtime', index=5, - number=60, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1900, - serialized_end=2021, -) - - -_ORDERDATA = _descriptor.Descriptor( - name='OrderData', - full_name='OrderData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='OrderData.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='epoch', full_name='OrderData.epoch', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bookorders', full_name='OrderData.bookorders', index=2, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fills', full_name='OrderData.fills', index=3, - number=50, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2023, - serialized_end=2124, -) - - -_CONTRACT = _descriptor.Descriptor( - name='Contract', - full_name='Contract', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='symbol', full_name='Contract.symbol', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unit_size', full_name='Contract.unit_size', index=1, - number=20, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unit', full_name='Contract.unit', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price_quote', full_name='Contract.price_quote', index=3, - number=40, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price_quote_units', full_name='Contract.price_quote_units', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='tic_min', full_name='Contract.tic_min', index=5, - number=60, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='tic_value', full_name='Contract.tic_value', index=6, - number=70, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='price_limit_percent', full_name='Contract.price_limit_percent', index=7, - number=80, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='initial_margin', full_name='Contract.initial_margin', index=8, - number=90, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='maint_margin', full_name='Contract.maint_margin', index=9, - number=100, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='position_limits', full_name='Contract.position_limits', index=10, - number=110, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='trading_open_time', full_name='Contract.trading_open_time', index=11, - number=120, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='trading_close_time', full_name='Contract.trading_close_time', index=12, - number=130, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2127, - serialized_end=2426, -) - - -_PRODUCT = _descriptor.Descriptor( - name='Product', - full_name='Product', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='Product.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='contract_symbol', full_name='Product.contract_symbol', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='expiration_date', full_name='Product.expiration_date', index=2, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='start_trading_date', full_name='Product.start_trading_date', index=3, - number=40, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_active', full_name='Product.is_active', index=4, - number=50, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2428, - serialized_end=2550, -) - - -_SCHEDULE = _descriptor.Descriptor( - name='Schedule', - full_name='Schedule', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='date', full_name='Schedule.date', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='trading_open_time', full_name='Schedule.trading_open_time', index=1, - number=20, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='trading_close_time', full_name='Schedule.trading_close_time', index=2, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='product', full_name='Schedule.product', index=3, - number=40, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2552, - serialized_end=2648, -) - - -_TRADINGSESSION = _descriptor.Descriptor( - name='TradingSession', - full_name='TradingSession', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='session_id', full_name='TradingSession.session_id', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='schedule', full_name='TradingSession.schedule', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='prev_session_id', full_name='TradingSession.prev_session_id', index=2, - number=50, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2650, - serialized_end=2740, -) - - -_SESSIONSTATUS = _descriptor.Descriptor( - name='SessionStatus', - full_name='SessionStatus', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='estate', full_name='SessionStatus.estate', index=0, - number=10, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='session_id', full_name='SessionStatus.session_id', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2742, - serialized_end=2809, -) - - -_EXCHANGESTATUS = _descriptor.Descriptor( - name='ExchangeStatus', - full_name='ExchangeStatus', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='session', full_name='ExchangeStatus.session', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='ExchangeStatus.status', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2811, - serialized_end=2893, -) - - -_ACTIVECONTRACTPRODUCT = _descriptor.Descriptor( - name='ActiveContractProduct', - full_name='ActiveContractProduct', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='contract', full_name='ActiveContractProduct.contract', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='product', full_name='ActiveContractProduct.product', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='schedule', full_name='ActiveContractProduct.schedule', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2895, - serialized_end=3003, -) - - -_POSITION = _descriptor.Descriptor( - name='Position', - full_name='Position', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='position', full_name='Position.position', index=0, - number=10, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='avg_price', full_name='Position.avg_price', index=1, - number=21, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3005, - serialized_end=3052, -) - - -_ORDERFILLS = _descriptor.Descriptor( - name='OrderFills', - full_name='OrderFills', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='order', full_name='OrderFills.order', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fills', full_name='OrderFills.fills', index=1, - number=50, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3054, - serialized_end=3119, -) - - -_ACCOUNTSTATE_POSITIONSENTRY = _descriptor.Descriptor( - name='PositionsEntry', - full_name='AccountState.PositionsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='AccountState.PositionsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='AccountState.PositionsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=b'8\001', - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3525, - serialized_end=3584, -) - -_ACCOUNTSTATE = _descriptor.Descriptor( - name='AccountState', - full_name='AccountState', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sidepit_id', full_name='AccountState.sidepit_id', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='pubkey', full_name='AccountState.pubkey', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='net_locked', full_name='AccountState.net_locked', index=2, - number=30, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='pending_unlock', full_name='AccountState.pending_unlock', index=3, - number=40, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='realized_pnl', full_name='AccountState.realized_pnl', index=4, - number=50, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unrealized_pnl', full_name='AccountState.unrealized_pnl', index=5, - number=60, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='margin_required', full_name='AccountState.margin_required', index=6, - number=80, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='available_balance', full_name='AccountState.available_balance', index=7, - number=90, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='available_margin', full_name='AccountState.available_margin', index=8, - number=100, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_restricted', full_name='AccountState.is_restricted', index=9, - number=110, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reduce_only', full_name='AccountState.reduce_only', index=10, - number=112, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='positions', full_name='AccountState.positions', index=11, - number=120, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='carried_position', full_name='AccountState.carried_position', index=12, - number=130, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='new_position', full_name='AccountState.new_position', index=13, - number=140, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='open_bids', full_name='AccountState.open_bids', index=14, - number=150, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='open_asks', full_name='AccountState.open_asks', index=15, - number=160, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[_ACCOUNTSTATE_POSITIONSENTRY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3122, - serialized_end=3584, -) - - -_BTCLOCKS = _descriptor.Descriptor( - name='BtcLocks', - full_name='BtcLocks', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='txid', full_name='BtcLocks.txid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='pubkey', full_name='BtcLocks.pubkey', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='btc_address', full_name='BtcLocks.btc_address', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='lock_sats', full_name='BtcLocks.lock_sats', index=3, - number=40, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='unlock_sats', full_name='BtcLocks.unlock_sats', index=4, - number=50, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_pending', full_name='BtcLocks.is_pending', index=5, - number=60, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3586, - serialized_end=3707, -) - - -_REQUESTREPLY = _descriptor.Descriptor( - name='RequestReply', - full_name='RequestReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='TypeMask', full_name='RequestReply.TypeMask', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='traderid', full_name='RequestReply.traderid', index=1, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ticker', full_name='RequestReply.ticker', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3709, - serialized_end=3775, -) - - -_REPLYREQUEST = _descriptor.Descriptor( - name='ReplyRequest', - full_name='ReplyRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='TypeMask', full_name='ReplyRequest.TypeMask', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='trader_positions', full_name='ReplyRequest.trader_positions', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='active_product', full_name='ReplyRequest.active_product', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='market_data', full_name='ReplyRequest.market_data', index=3, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3778, - serialized_end=3933, -) - - -_TRADERPOSITIONORDERS_ORDERFILLSENTRY = _descriptor.Descriptor( - name='OrderfillsEntry', - full_name='TraderPositionOrders.OrderfillsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='TraderPositionOrders.OrderfillsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='TraderPositionOrders.OrderfillsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=b'8\001', - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4116, - serialized_end=4178, -) - -_TRADERPOSITIONORDERS = _descriptor.Descriptor( - name='TraderPositionOrders', - full_name='TraderPositionOrders', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='traderid', full_name='TraderPositionOrders.traderid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='symbol', full_name='TraderPositionOrders.symbol', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='orderfills', full_name='TraderPositionOrders.orderfills', index=2, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='accountstate', full_name='TraderPositionOrders.accountstate', index=3, - number=50, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='locks', full_name='TraderPositionOrders.locks', index=4, - number=60, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[_TRADERPOSITIONORDERS_ORDERFILLSENTRY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3936, - serialized_end=4178, -) - - -_ACTIVEPRODUCT = _descriptor.Descriptor( - name='ActiveProduct', - full_name='ActiveProduct', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='active_contract_product', full_name='ActiveProduct.active_contract_product', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='exchange_status', full_name='ActiveProduct.exchange_status', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='contractbar', full_name='ActiveProduct.contractbar', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4181, - serialized_end=4330, -) - -_TRANSACTION.fields_by_name['new_order'].message_type = _NEWORDER -_TRANSACTION.fields_by_name['auction_bid'].message_type = _AUCTIONBID -_TRANSACTION.fields_by_name['unlock_req'].message_type = _UNLOCKREQUEST -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['new_order']) -_TRANSACTION.fields_by_name['new_order'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['cancel_orderid']) -_TRANSACTION.fields_by_name['cancel_orderid'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['auction_bid']) -_TRANSACTION.fields_by_name['auction_bid'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['unlock_req']) -_TRANSACTION.fields_by_name['unlock_req'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_SIGNEDTRANSACTION.fields_by_name['transaction'].message_type = _TRANSACTION -_UNLOCKREQUEST.fields_by_name['minmax'].enum_type = _UNLOCKREQUESTAMOUNT -_EXCHANGEEVENT.fields_by_name['state'].enum_type = _EXCHANGESTATE -_TXBLOCKSTREAM.fields_by_name['estate'].enum_type = _EXCHANGESTATE -_TXBLOCKSTREAM.fields_by_name['epoch_event'].message_type = _EPOCHEVENT -_TXBLOCKSTREAM.fields_by_name['stx'].message_type = _SIGNEDTRANSACTION -_TXBLOCKSTREAM.fields_by_name['exchange_event'].message_type = _EXCHANGEEVENT -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['epoch_event']) -_TXBLOCKSTREAM.fields_by_name['epoch_event'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['stx']) -_TXBLOCKSTREAM.fields_by_name['stx'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['exchange_event']) -_TXBLOCKSTREAM.fields_by_name['exchange_event'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_MARKETDATA.fields_by_name['bar'].message_type = _EPOCHBAR -_MARKETDATA.fields_by_name['quote'].message_type = _MARKETQUOTE -_MARKETDATA.fields_by_name['depth'].message_type = _DEPTHITEM -_ORDERDATA.fields_by_name['bookorders'].message_type = _BOOKORDER -_ORDERDATA.fields_by_name['fills'].message_type = _FILLDATA -_TRADINGSESSION.fields_by_name['schedule'].message_type = _SCHEDULE -_SESSIONSTATUS.fields_by_name['estate'].enum_type = _EXCHANGESTATE -_EXCHANGESTATUS.fields_by_name['session'].message_type = _TRADINGSESSION -_EXCHANGESTATUS.fields_by_name['status'].message_type = _SESSIONSTATUS -_ACTIVECONTRACTPRODUCT.fields_by_name['contract'].message_type = _CONTRACT -_ACTIVECONTRACTPRODUCT.fields_by_name['product'].message_type = _PRODUCT -_ACTIVECONTRACTPRODUCT.fields_by_name['schedule'].message_type = _SCHEDULE -_ORDERFILLS.fields_by_name['order'].message_type = _BOOKORDER -_ORDERFILLS.fields_by_name['fills'].message_type = _FILLDATA -_ACCOUNTSTATE_POSITIONSENTRY.fields_by_name['value'].message_type = _POSITION -_ACCOUNTSTATE_POSITIONSENTRY.containing_type = _ACCOUNTSTATE -_ACCOUNTSTATE.fields_by_name['positions'].message_type = _ACCOUNTSTATE_POSITIONSENTRY -_REPLYREQUEST.fields_by_name['trader_positions'].message_type = _TRADERPOSITIONORDERS -_REPLYREQUEST.fields_by_name['active_product'].message_type = _ACTIVEPRODUCT -_REPLYREQUEST.fields_by_name['market_data'].message_type = _MARKETDATA -_TRADERPOSITIONORDERS_ORDERFILLSENTRY.fields_by_name['value'].message_type = _ORDERFILLS -_TRADERPOSITIONORDERS_ORDERFILLSENTRY.containing_type = _TRADERPOSITIONORDERS -_TRADERPOSITIONORDERS.fields_by_name['orderfills'].message_type = _TRADERPOSITIONORDERS_ORDERFILLSENTRY -_TRADERPOSITIONORDERS.fields_by_name['accountstate'].message_type = _ACCOUNTSTATE -_TRADERPOSITIONORDERS.fields_by_name['locks'].message_type = _BTCLOCKS -_ACTIVEPRODUCT.fields_by_name['active_contract_product'].message_type = _ACTIVECONTRACTPRODUCT -_ACTIVEPRODUCT.fields_by_name['exchange_status'].message_type = _EXCHANGESTATUS -_ACTIVEPRODUCT.fields_by_name['contractbar'].message_type = _CONTRACTBAR -DESCRIPTOR.message_types_by_name['Transaction'] = _TRANSACTION -DESCRIPTOR.message_types_by_name['SignedTransaction'] = _SIGNEDTRANSACTION -DESCRIPTOR.message_types_by_name['NewOrder'] = _NEWORDER -DESCRIPTOR.message_types_by_name['AuctionBid'] = _AUCTIONBID -DESCRIPTOR.message_types_by_name['UnlockRequest'] = _UNLOCKREQUEST -DESCRIPTOR.message_types_by_name['EpochEvent'] = _EPOCHEVENT -DESCRIPTOR.message_types_by_name['ExchangeEvent'] = _EXCHANGEEVENT -DESCRIPTOR.message_types_by_name['TxBlockStream'] = _TXBLOCKSTREAM -DESCRIPTOR.message_types_by_name['MarketQuote'] = _MARKETQUOTE -DESCRIPTOR.message_types_by_name['EpochBar'] = _EPOCHBAR -DESCRIPTOR.message_types_by_name['ContractBar'] = _CONTRACTBAR -DESCRIPTOR.message_types_by_name['BookOrder'] = _BOOKORDER -DESCRIPTOR.message_types_by_name['DepthItem'] = _DEPTHITEM -DESCRIPTOR.message_types_by_name['MarketData'] = _MARKETDATA -DESCRIPTOR.message_types_by_name['FillData'] = _FILLDATA -DESCRIPTOR.message_types_by_name['OrderData'] = _ORDERDATA -DESCRIPTOR.message_types_by_name['Contract'] = _CONTRACT -DESCRIPTOR.message_types_by_name['Product'] = _PRODUCT -DESCRIPTOR.message_types_by_name['Schedule'] = _SCHEDULE -DESCRIPTOR.message_types_by_name['TradingSession'] = _TRADINGSESSION -DESCRIPTOR.message_types_by_name['SessionStatus'] = _SESSIONSTATUS -DESCRIPTOR.message_types_by_name['ExchangeStatus'] = _EXCHANGESTATUS -DESCRIPTOR.message_types_by_name['ActiveContractProduct'] = _ACTIVECONTRACTPRODUCT -DESCRIPTOR.message_types_by_name['Position'] = _POSITION -DESCRIPTOR.message_types_by_name['OrderFills'] = _ORDERFILLS -DESCRIPTOR.message_types_by_name['AccountState'] = _ACCOUNTSTATE -DESCRIPTOR.message_types_by_name['BtcLocks'] = _BTCLOCKS -DESCRIPTOR.message_types_by_name['RequestReply'] = _REQUESTREPLY -DESCRIPTOR.message_types_by_name['ReplyRequest'] = _REPLYREQUEST -DESCRIPTOR.message_types_by_name['TraderPositionOrders'] = _TRADERPOSITIONORDERS -DESCRIPTOR.message_types_by_name['ActiveProduct'] = _ACTIVEPRODUCT -DESCRIPTOR.enum_types_by_name['UnlockRequestAmount'] = _UNLOCKREQUESTAMOUNT -DESCRIPTOR.enum_types_by_name['ReplyRequestTypes'] = _REPLYREQUESTTYPES -DESCRIPTOR.enum_types_by_name['ExchangeState'] = _EXCHANGESTATE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), { - 'DESCRIPTOR' : _TRANSACTION, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Transaction) - }) -_sym_db.RegisterMessage(Transaction) - -SignedTransaction = _reflection.GeneratedProtocolMessageType('SignedTransaction', (_message.Message,), { - 'DESCRIPTOR' : _SIGNEDTRANSACTION, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:SignedTransaction) - }) -_sym_db.RegisterMessage(SignedTransaction) - -NewOrder = _reflection.GeneratedProtocolMessageType('NewOrder', (_message.Message,), { - 'DESCRIPTOR' : _NEWORDER, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:NewOrder) - }) -_sym_db.RegisterMessage(NewOrder) - -AuctionBid = _reflection.GeneratedProtocolMessageType('AuctionBid', (_message.Message,), { - 'DESCRIPTOR' : _AUCTIONBID, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AuctionBid) - }) -_sym_db.RegisterMessage(AuctionBid) - -UnlockRequest = _reflection.GeneratedProtocolMessageType('UnlockRequest', (_message.Message,), { - 'DESCRIPTOR' : _UNLOCKREQUEST, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:UnlockRequest) - }) -_sym_db.RegisterMessage(UnlockRequest) - -EpochEvent = _reflection.GeneratedProtocolMessageType('EpochEvent', (_message.Message,), { - 'DESCRIPTOR' : _EPOCHEVENT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:EpochEvent) - }) -_sym_db.RegisterMessage(EpochEvent) - -ExchangeEvent = _reflection.GeneratedProtocolMessageType('ExchangeEvent', (_message.Message,), { - 'DESCRIPTOR' : _EXCHANGEEVENT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ExchangeEvent) - }) -_sym_db.RegisterMessage(ExchangeEvent) - -TxBlockStream = _reflection.GeneratedProtocolMessageType('TxBlockStream', (_message.Message,), { - 'DESCRIPTOR' : _TXBLOCKSTREAM, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TxBlockStream) - }) -_sym_db.RegisterMessage(TxBlockStream) - -MarketQuote = _reflection.GeneratedProtocolMessageType('MarketQuote', (_message.Message,), { - 'DESCRIPTOR' : _MARKETQUOTE, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:MarketQuote) - }) -_sym_db.RegisterMessage(MarketQuote) - -EpochBar = _reflection.GeneratedProtocolMessageType('EpochBar', (_message.Message,), { - 'DESCRIPTOR' : _EPOCHBAR, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:EpochBar) - }) -_sym_db.RegisterMessage(EpochBar) - -ContractBar = _reflection.GeneratedProtocolMessageType('ContractBar', (_message.Message,), { - 'DESCRIPTOR' : _CONTRACTBAR, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ContractBar) - }) -_sym_db.RegisterMessage(ContractBar) - -BookOrder = _reflection.GeneratedProtocolMessageType('BookOrder', (_message.Message,), { - 'DESCRIPTOR' : _BOOKORDER, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:BookOrder) - }) -_sym_db.RegisterMessage(BookOrder) - -DepthItem = _reflection.GeneratedProtocolMessageType('DepthItem', (_message.Message,), { - 'DESCRIPTOR' : _DEPTHITEM, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:DepthItem) - }) -_sym_db.RegisterMessage(DepthItem) - -MarketData = _reflection.GeneratedProtocolMessageType('MarketData', (_message.Message,), { - 'DESCRIPTOR' : _MARKETDATA, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:MarketData) - }) -_sym_db.RegisterMessage(MarketData) - -FillData = _reflection.GeneratedProtocolMessageType('FillData', (_message.Message,), { - 'DESCRIPTOR' : _FILLDATA, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:FillData) - }) -_sym_db.RegisterMessage(FillData) - -OrderData = _reflection.GeneratedProtocolMessageType('OrderData', (_message.Message,), { - 'DESCRIPTOR' : _ORDERDATA, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:OrderData) - }) -_sym_db.RegisterMessage(OrderData) - -Contract = _reflection.GeneratedProtocolMessageType('Contract', (_message.Message,), { - 'DESCRIPTOR' : _CONTRACT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Contract) - }) -_sym_db.RegisterMessage(Contract) - -Product = _reflection.GeneratedProtocolMessageType('Product', (_message.Message,), { - 'DESCRIPTOR' : _PRODUCT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Product) - }) -_sym_db.RegisterMessage(Product) - -Schedule = _reflection.GeneratedProtocolMessageType('Schedule', (_message.Message,), { - 'DESCRIPTOR' : _SCHEDULE, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Schedule) - }) -_sym_db.RegisterMessage(Schedule) - -TradingSession = _reflection.GeneratedProtocolMessageType('TradingSession', (_message.Message,), { - 'DESCRIPTOR' : _TRADINGSESSION, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TradingSession) - }) -_sym_db.RegisterMessage(TradingSession) - -SessionStatus = _reflection.GeneratedProtocolMessageType('SessionStatus', (_message.Message,), { - 'DESCRIPTOR' : _SESSIONSTATUS, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:SessionStatus) - }) -_sym_db.RegisterMessage(SessionStatus) - -ExchangeStatus = _reflection.GeneratedProtocolMessageType('ExchangeStatus', (_message.Message,), { - 'DESCRIPTOR' : _EXCHANGESTATUS, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ExchangeStatus) - }) -_sym_db.RegisterMessage(ExchangeStatus) - -ActiveContractProduct = _reflection.GeneratedProtocolMessageType('ActiveContractProduct', (_message.Message,), { - 'DESCRIPTOR' : _ACTIVECONTRACTPRODUCT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ActiveContractProduct) - }) -_sym_db.RegisterMessage(ActiveContractProduct) - -Position = _reflection.GeneratedProtocolMessageType('Position', (_message.Message,), { - 'DESCRIPTOR' : _POSITION, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Position) - }) -_sym_db.RegisterMessage(Position) - -OrderFills = _reflection.GeneratedProtocolMessageType('OrderFills', (_message.Message,), { - 'DESCRIPTOR' : _ORDERFILLS, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:OrderFills) - }) -_sym_db.RegisterMessage(OrderFills) - -AccountState = _reflection.GeneratedProtocolMessageType('AccountState', (_message.Message,), { - - 'PositionsEntry' : _reflection.GeneratedProtocolMessageType('PositionsEntry', (_message.Message,), { - 'DESCRIPTOR' : _ACCOUNTSTATE_POSITIONSENTRY, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AccountState.PositionsEntry) - }) - , - 'DESCRIPTOR' : _ACCOUNTSTATE, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AccountState) - }) -_sym_db.RegisterMessage(AccountState) -_sym_db.RegisterMessage(AccountState.PositionsEntry) - -BtcLocks = _reflection.GeneratedProtocolMessageType('BtcLocks', (_message.Message,), { - 'DESCRIPTOR' : _BTCLOCKS, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:BtcLocks) - }) -_sym_db.RegisterMessage(BtcLocks) - -RequestReply = _reflection.GeneratedProtocolMessageType('RequestReply', (_message.Message,), { - 'DESCRIPTOR' : _REQUESTREPLY, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:RequestReply) - }) -_sym_db.RegisterMessage(RequestReply) - -ReplyRequest = _reflection.GeneratedProtocolMessageType('ReplyRequest', (_message.Message,), { - 'DESCRIPTOR' : _REPLYREQUEST, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ReplyRequest) - }) -_sym_db.RegisterMessage(ReplyRequest) - -TraderPositionOrders = _reflection.GeneratedProtocolMessageType('TraderPositionOrders', (_message.Message,), { - - 'OrderfillsEntry' : _reflection.GeneratedProtocolMessageType('OrderfillsEntry', (_message.Message,), { - 'DESCRIPTOR' : _TRADERPOSITIONORDERS_ORDERFILLSENTRY, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TraderPositionOrders.OrderfillsEntry) - }) - , - 'DESCRIPTOR' : _TRADERPOSITIONORDERS, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TraderPositionOrders) - }) -_sym_db.RegisterMessage(TraderPositionOrders) -_sym_db.RegisterMessage(TraderPositionOrders.OrderfillsEntry) - -ActiveProduct = _reflection.GeneratedProtocolMessageType('ActiveProduct', (_message.Message,), { - 'DESCRIPTOR' : _ACTIVEPRODUCT, - '__module__' : 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ActiveProduct) - }) -_sym_db.RegisterMessage(ActiveProduct) - -_ACCOUNTSTATE_POSITIONSENTRY._options = None -_TRADERPOSITIONORDERS_ORDERFILLSENTRY._options = None +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11sidepit_api.proto\"\xcf\x01\n\x0bTransaction\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\n \x01(\x04\x12\x1e\n\tnew_order\x18\x14 \x01(\x0b\x32\t.NewOrderH\x00\x12\x18\n\x0e\x63\x61ncel_orderid\x18\x1e \x01(\tH\x00\x12\"\n\x0b\x61uction_bid\x18( \x01(\x0b\x32\x0b.AuctionBidH\x00\x12$\n\nunlock_req\x18\x32 \x01(\x0b\x32\x0e.UnlockRequestH\x00\x12\x12\n\nsidepit_id\x18\x65 \x01(\tB\x04\n\x02tx\"\x87\x01\n\x11SignedTransaction\x12\x19\n\x11signature_version\x18\x02 \x01(\x05\x12!\n\x0btransaction\x18\x0b \x01(\x0b\x32\x0c.Transaction\x12\x11\n\ttx_digest\x18\x15 \x01(\t\x12\x0e\n\x06pubkey\x18\x1f \x01(\t\x12\x11\n\tsignature\x18o \x01(\t\"Z\n\x13RejectedTransaction\x12!\n\x0btransaction\x18n \x01(\x0b\x32\x0c.Transaction\x12 \n\x0breject_code\x18x \x01(\x0e\x32\x0b.RejectCode\"E\n\x08NewOrder\x12\x0c\n\x04side\x18\x0b \x01(\x11\x12\x0c\n\x04size\x18\x14 \x01(\x05\x12\r\n\x05price\x18\x1e \x01(\x05\x12\x0e\n\x06ticker\x18( \x01(\t\"M\n\nAuctionBid\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\x15\n\rordering_salt\x18\x1e \x01(\t\x12\x0b\n\x03\x62id\x18( \x01(\x05\"\x8b\x01\n\rUnlockRequest\x12)\n\x06minmax\x18\x14 \x01(\x0e\x32\x19.UnlockRequest.AmountType\x12\x17\n\x0f\x65xplicit_amount\x18\x1e \x01(\x04\"6\n\nAmountType\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03MAX\x10\x01\x12\x07\n\x03MIN\x10\x02\x12\x0c\n\x08\x45XPLICIT\x10\x03\"H\n\nEpochEvent\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\n\n\x02id\x18\x64 \x01(\t\x12\x11\n\tsignature\x18n \x01(\x0c\".\n\rExchangeEvent\x12\x1d\n\x05state\x18\n \x01(\x0e\x32\x0e.ExchangeState\"\xba\x01\n\rTxBlockStream\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x14 \x01(\x0e\x32\x0e.ExchangeState\x12\"\n\x0b\x65poch_event\x18\x19 \x01(\x0b\x32\x0b.EpochEventH\x00\x12!\n\x03stx\x18\x1f \x01(\x0b\x32\x12.SignedTransactionH\x00\x12(\n\x0e\x65xchange_event\x18( \x01(\x0b\x32\x0e.ExchangeEventH\x00\x42\t\n\x07txepoch\"\x9a\x01\n\x0bMarketQuote\x12\x0f\n\x07\x62idsize\x18\n \x01(\x05\x12\x0b\n\x03\x62id\x18\x14 \x01(\x05\x12\x0b\n\x03\x61sk\x18\x1e \x01(\x05\x12\x0f\n\x07\x61sksize\x18( \x01(\x05\x12\x0c\n\x04last\x18\x32 \x01(\x05\x12\x10\n\x08lastsize\x18< \x01(\x05\x12\x10\n\x08upordown\x18\x46 \x01(\x08\x12\x0e\n\x06ticker\x18P \x01(\t\x12\r\n\x05\x65poch\x18Z \x01(\x04\"q\n\x08\x45pochBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x0c\n\x04open\x18\x14 \x01(\x05\x12\x0c\n\x04high\x18\x1e \x01(\x05\x12\x0b\n\x03low\x18( \x01(\x05\x12\r\n\x05\x63lose\x18\x32 \x01(\x05\x12\x0e\n\x06volume\x18< \x01(\x05\"\xe2\x01\n\x0b\x43ontractBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x10\n\x08\x64\x61y_open\x18\x14 \x01(\x05\x12\x10\n\x08\x64\x61y_high\x18\x1e \x01(\x05\x12\x0f\n\x07\x64\x61y_low\x18( \x01(\x05\x12\x11\n\tday_close\x18\x32 \x01(\x05\x12\x12\n\nday_volume\x18< \x01(\x05\x12\x0c\n\x04high\x18\x46 \x01(\x05\x12\x0b\n\x03low\x18P \x01(\x05\x12\x0e\n\x06volume\x18Z \x01(\x05\x12\x15\n\ropen_interest\x18\x64 \x01(\x05\x12\x16\n\x0eprevious_close\x18n \x01(\x05\"\xb0\x02\n\tBookOrder\x12\x0c\n\x04side\x18\n \x01(\x11\x12\r\n\x05price\x18\x14 \x01(\x05\x12\x10\n\x08open_qty\x18\x1e \x01(\x05\x12\x12\n\nfilled_qty\x18( \x01(\x05\x12\x15\n\rremaining_qty\x18\x32 \x01(\x05\x12\x14\n\x0c\x63\x61nceled_qty\x18< \x01(\x05\x12\x16\n\x0e\x61gres_fill_qty\x18> \x01(\x05\x12\x17\n\x0f\x61gres_avg_price\x18? \x01(\x02\x12\x15\n\rpass_fill_qty\x18@ \x01(\x05\x12\x11\n\tavg_price\x18\x41 \x01(\x02\x12\x0e\n\x06ticker\x18\x46 \x01(\t\x12\x13\n\x0bupdate_time\x18P \x01(\t\x12\x0f\n\x07orderid\x18Z \x01(\t\x12\x10\n\x08traderid\x18\x64 \x01(\t\x12\x10\n\x08sequence\x18x \x01(\x04\"H\n\tDepthItem\x12\r\n\x05level\x18\n \x01(\x05\x12\t\n\x01\x62\x18\x1e \x01(\x05\x12\t\n\x01\x61\x18( \x01(\x05\x12\n\n\x02\x62s\x18\x32 \x01(\x05\x12\n\n\x02\x61s\x18< \x01(\x05\"\x8c\x01\n\nMarketData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0e\n\x06ticker\x18\x0c \x01(\t\x12\x16\n\x03\x62\x61r\x18\x14 \x01(\x0b\x32\t.EpochBar\x12\x1b\n\x05quote\x18\x1e \x01(\x0b\x32\x0c.MarketQuote\x12\x19\n\x05\x64\x65pth\x18( \x03(\x0b\x32\n.DepthItem\"y\n\x08\x46illData\x12\x13\n\x0b\x61gressiveid\x18\n \x01(\t\x12\x11\n\tpassiveid\x18\x14 \x01(\t\x12\r\n\x05price\x18\x1e \x01(\r\x12\x0b\n\x03qty\x18( \x01(\r\x12\x16\n\x0e\x61gressive_side\x18\x32 \x01(\x05\x12\x11\n\tmicrotime\x18< \x01(\x04\"u\n\tOrderData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0e\n\x06ticker\x18\x0c \x01(\t\x12\x1e\n\nbookorders\x18( \x03(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xee\x02\n\x08\x43ontract\x12\x0e\n\x06symbol\x18\n \x01(\t\x12\x11\n\tunit_size\x18\x14 \x01(\r\x12\x0c\n\x04unit\x18\x1e \x01(\t\x12\x13\n\x0bprice_quote\x18( \x01(\t\x12\x19\n\x11price_quote_units\x18\x32 \x01(\x05\x12\x0f\n\x07tic_min\x18< \x01(\r\x12\x11\n\ttic_value\x18\x46 \x01(\r\x12\x1b\n\x13price_limit_percent\x18P \x01(\x05\x12\x16\n\x0einitial_margin\x18Z \x01(\x04\x12\x14\n\x0cmaint_margin\x18\x64 \x01(\x04\x12\x17\n\x0fposition_limits\x18n \x01(\x05\x12\x19\n\x11trading_open_time\x18x \x01(\x04\x12\x1b\n\x12trading_close_time\x18\x82\x01 \x01(\x04\x12\x1f\n\x16trading_open_time_zone\x18\x8c\x01 \x01(\t\x12 \n\x17trading_close_time_zone\x18\x96\x01 \x01(\t\"z\n\x07Product\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\x17\n\x0f\x63ontract_symbol\x18\x14 \x01(\t\x12\x17\n\x0f\x65xpiration_date\x18\x1e \x01(\x04\x12\x1a\n\x12start_trading_date\x18( \x01(\x04\x12\x11\n\tis_active\x18\x32 \x01(\x08\"`\n\x08Schedule\x12\x0c\n\x04\x64\x61te\x18\n \x01(\x04\x12\x19\n\x11trading_open_time\x18\x14 \x01(\x04\x12\x1a\n\x12trading_close_time\x18\x1e \x01(\x04\x12\x0f\n\x07product\x18( \x03(\t\"Z\n\x0eTradingSession\x12\x12\n\nsession_id\x18\n \x01(\t\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x17\n\x0fprev_session_id\x18\x32 \x01(\t\"C\n\rSessionStatus\x12\x1e\n\x06\x65state\x18\n \x01(\x0e\x32\x0e.ExchangeState\x12\x12\n\nsession_id\x18\x14 \x01(\t\"R\n\x0e\x45xchangeStatus\x12 \n\x07session\x18\n \x01(\x0b\x32\x0f.TradingSession\x12\x1e\n\x06status\x18\x14 \x01(\x0b\x32\x0e.SessionStatus\"l\n\x15\x41\x63tiveContractProduct\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x19\n\x07product\x18\x14 \x01(\x0b\x32\x08.Product\x12\x1b\n\x08schedule\x18\x1e \x01(\x0b\x32\t.Schedule\"p\n\x18\x43ontractScheduleProducts\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x1a\n\x08products\x18\x1e \x03(\x0b\x32\x08.Product\"@\n\x08Position\x12\x10\n\x08position\x18\n \x01(\x11\x12\x11\n\tavg_price\x18\x15 \x01(\x02\x12\x0f\n\x07old_avg\x18\x14 \x01(\r\"A\n\nOrderFills\x12\x19\n\x05order\x18\n \x01(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xd4\x03\n\x0fXXXAccountState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x16\n\x0eunrealized_pnl\x18< \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12\x32\n\tpositions\x18x \x03(\x0b\x32\x1f.XXXAccountState.PositionsEntry\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\x1a;\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x18\n\x05value\x18\x02 \x01(\x0b\x32\t.Position:\x02\x38\x01\"y\n\x08\x42tcLocks\x12\x0c\n\x04txid\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x13\n\x0b\x62tc_address\x18\x1e \x01(\t\x12\x11\n\tlock_sats\x18( \x01(\x04\x12\x13\n\x0bunlock_sats\x18\x32 \x01(\x04\x12\x12\n\nis_pending\x18< \x01(\x08\"\xa5\x01\n\rActiveProduct\x12\x0e\n\x06ticker\x18\x02 \x01(\t\x12\x37\n\x17\x61\x63tive_contract_product\x18\n \x01(\x0b\x32\x16.ActiveContractProduct\x12(\n\x0f\x65xchange_status\x18\x14 \x01(\x0b\x32\x0f.ExchangeStatus\x12!\n\x0b\x63ontractbar\x18\x1e \x01(\x0b\x32\x0c.ContractBar\"\xa3\x01\n\x0b\x45pochOrders\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x0f \x01(\x0e\x32\x0e.ExchangeState\x12(\n\x06orders\x18\x14 \x03(\x0b\x32\x18.EpochOrders.OrdersEntry\x1a;\n\x0bOrdersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.Transaction:\x02\x38\x01\"\x86\x01\n\x0ePositionMargin\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\"\x8d\x01\n\x15\x41\x63\x63ountTickerPosition\x12\x0e\n\x06ticker\x18\x01 \x01(\t\x12\x1b\n\x08position\x18\n \x01(\x0b\x32\t.Position\x12\x1f\n\x06margin\x18\x14 \x01(\x0b\x32\x0f.PositionMargin\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\"\xde\x03\n\x14\x41\x63\x63ountContractState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x0e\n\x06symbol\x18q \x01(\t\x12\x1f\n\x06margin\x18s \x01(\x0b\x32\x0f.PositionMargin\x12\x37\n\tpositions\x18y \x03(\x0b\x32$.AccountContractState.PositionsEntry\x12\x1e\n\x15\x63\x61rried_open_interest\x18\xc8\x01 \x01(\x11\x12\x1a\n\x11net_open_interest\x18\xd2\x01 \x01(\x11\x12\x1c\n\x13\x62id_margin_required\x18\xdc\x01 \x01(\x05\x12\x1c\n\x13\x61sk_margin_required\x18\xe6\x01 \x01(\x05\x1aH\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.AccountTickerPosition:\x02\x38\x01\"\xb6\x02\n\x0e\x43ontractMargin\x12\x0e\n\x06symbol\x18q \x01(\t\x12\x1f\n\x06margin\x18s \x01(\x0b\x32\x0f.PositionMargin\x12\x31\n\tpositions\x18y \x03(\x0b\x32\x1e.ContractMargin.PositionsEntry\x12\x1e\n\x15\x63\x61rried_open_interest\x18\xc8\x01 \x01(\x11\x12\x1a\n\x11net_open_interest\x18\xd2\x01 \x01(\x11\x12\x1c\n\x13\x62id_margin_required\x18\xdc\x01 \x01(\x05\x12\x1c\n\x13\x61sk_margin_required\x18\xe6\x01 \x01(\x05\x1aH\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.AccountTickerPosition:\x02\x38\x01\"\xbd\x02\n\x12\x41\x63\x63ountMarginState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x42\n\x10\x63ontract_margins\x18y \x03(\x0b\x32(.AccountMarginState.ContractMarginsEntry\x1aG\n\x14\x43ontractMarginsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.ContractMargin:\x02\x38\x01\"B\n\x0cRequestReply\x12\x10\n\x08TypeMask\x18\x01 \x01(\x05\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06ticker\x18\x1e \x01(\t\"\x9b\x01\n\x0cReplyRequest\x12\x10\n\x08TypeMask\x18\n \x01(\x05\x12/\n\x10trader_positions\x18\x14 \x01(\x0b\x32\x15.TraderPositionOrders\x12&\n\x0e\x61\x63tive_product\x18\x1e \x01(\x0b\x32\x0e.ActiveProduct\x12 \n\x0bmarket_data\x18( \x01(\x0b\x32\x0b.MarketData\"\xf8\x01\n\x14TraderPositionOrders\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06symbol\x18\x14 \x01(\t\x12\x39\n\norderfills\x18( \x03(\x0b\x32%.TraderPositionOrders.OrderfillsEntry\x12)\n\x0c\x61\x63\x63ountstate\x18\x32 \x01(\x0b\x32\x13.AccountMarginState\x12\x18\n\x05locks\x18< \x03(\x0b\x32\t.BtcLocks\x1a>\n\x0fOrderfillsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1a\n\x05value\x18\x02 \x01(\x0b\x32\x0b.OrderFills:\x02\x38\x01*\x9c\x01\n\nRejectCode\x12\x0b\n\x07RC_NONE\x10\x00\x12\r\n\tRC_VERIFY\x10\x01\x12\n\n\x06RC_DUP\x10\x02\x12\t\n\x05RC_ID\x10\x04\x12\n\n\x06RC_BAD\x10\x05\x12\r\n\tRC_REDUCE\x10\x06\x12\r\n\tRC_MARGIN\x10\x07\x12\t\n\x05RC_DK\x10\x08\x12\x0b\n\x07RC_CDUP\x10\t\x12\x0b\n\x07RC_CREJ\x10\n\x12\x0c\n\x08RC_OTHER\x10\x64*\xad\x01\n\rExchangeState\x12\x14\n\x10\x45XCHANGE_UNKNOWN\x10\x00\x12\x19\n\x15\x45XCHANGE_PENDING_OPEN\x10\x01\x12\x11\n\rEXCHANGE_OPEN\x10\x02\x12\x17\n\x13\x45XCHANGE_RECOVERING\x10\x03\x12\x14\n\x10\x45XCHANGE_CLOSING\x10\x04\x12\x14\n\x10\x45XCHANGE_SETTLED\x10\x05\x12\x13\n\x0f\x45XCHANGE_CLOSED\x10\x06*Y\n\x11ReplyRequestTypes\x12\x08\n\x04NONE\x10\x00\x12\x12\n\x0e\x41\x43TIVE_PRODUCT\x10\x01\x12\r\n\tPOSITIONS\x10\x02\x12\t\n\x05QUOTE\x10\x04\x12\x0c\n\x08SNAPSHOT\x10\x08\x62\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sidepit_api_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + _XXXACCOUNTSTATE_POSITIONSENTRY._options = None + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_options = b'8\001' + _EPOCHORDERS_ORDERSENTRY._options = None + _EPOCHORDERS_ORDERSENTRY._serialized_options = b'8\001' + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._options = None + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_options = b'8\001' + _CONTRACTMARGIN_POSITIONSENTRY._options = None + _CONTRACTMARGIN_POSITIONSENTRY._serialized_options = b'8\001' + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._options = None + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_options = b'8\001' + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._options = None + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_options = b'8\001' + _REJECTCODE._serialized_start=6325 + _REJECTCODE._serialized_end=6481 + _EXCHANGESTATE._serialized_start=6484 + _EXCHANGESTATE._serialized_end=6657 + _REPLYREQUESTTYPES._serialized_start=6659 + _REPLYREQUESTTYPES._serialized_end=6748 + _TRANSACTION._serialized_start=22 + _TRANSACTION._serialized_end=229 + _SIGNEDTRANSACTION._serialized_start=232 + _SIGNEDTRANSACTION._serialized_end=367 + _REJECTEDTRANSACTION._serialized_start=369 + _REJECTEDTRANSACTION._serialized_end=459 + _NEWORDER._serialized_start=461 + _NEWORDER._serialized_end=530 + _AUCTIONBID._serialized_start=532 + _AUCTIONBID._serialized_end=609 + _UNLOCKREQUEST._serialized_start=612 + _UNLOCKREQUEST._serialized_end=751 + _UNLOCKREQUEST_AMOUNTTYPE._serialized_start=697 + _UNLOCKREQUEST_AMOUNTTYPE._serialized_end=751 + _EPOCHEVENT._serialized_start=753 + _EPOCHEVENT._serialized_end=825 + _EXCHANGEEVENT._serialized_start=827 + _EXCHANGEEVENT._serialized_end=873 + _TXBLOCKSTREAM._serialized_start=876 + _TXBLOCKSTREAM._serialized_end=1062 + _MARKETQUOTE._serialized_start=1065 + _MARKETQUOTE._serialized_end=1219 + _EPOCHBAR._serialized_start=1221 + _EPOCHBAR._serialized_end=1334 + _CONTRACTBAR._serialized_start=1337 + _CONTRACTBAR._serialized_end=1563 + _BOOKORDER._serialized_start=1566 + _BOOKORDER._serialized_end=1870 + _DEPTHITEM._serialized_start=1872 + _DEPTHITEM._serialized_end=1944 + _MARKETDATA._serialized_start=1947 + _MARKETDATA._serialized_end=2087 + _FILLDATA._serialized_start=2089 + _FILLDATA._serialized_end=2210 + _ORDERDATA._serialized_start=2212 + _ORDERDATA._serialized_end=2329 + _CONTRACT._serialized_start=2332 + _CONTRACT._serialized_end=2698 + _PRODUCT._serialized_start=2700 + _PRODUCT._serialized_end=2822 + _SCHEDULE._serialized_start=2824 + _SCHEDULE._serialized_end=2920 + _TRADINGSESSION._serialized_start=2922 + _TRADINGSESSION._serialized_end=3012 + _SESSIONSTATUS._serialized_start=3014 + _SESSIONSTATUS._serialized_end=3081 + _EXCHANGESTATUS._serialized_start=3083 + _EXCHANGESTATUS._serialized_end=3165 + _ACTIVECONTRACTPRODUCT._serialized_start=3167 + _ACTIVECONTRACTPRODUCT._serialized_end=3275 + _CONTRACTSCHEDULEPRODUCTS._serialized_start=3277 + _CONTRACTSCHEDULEPRODUCTS._serialized_end=3389 + _POSITION._serialized_start=3391 + _POSITION._serialized_end=3455 + _ORDERFILLS._serialized_start=3457 + _ORDERFILLS._serialized_end=3522 + _XXXACCOUNTSTATE._serialized_start=3525 + _XXXACCOUNTSTATE._serialized_end=3993 + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_start=3934 + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_end=3993 + _BTCLOCKS._serialized_start=3995 + _BTCLOCKS._serialized_end=4116 + _ACTIVEPRODUCT._serialized_start=4119 + _ACTIVEPRODUCT._serialized_end=4284 + _EPOCHORDERS._serialized_start=4287 + _EPOCHORDERS._serialized_end=4450 + _EPOCHORDERS_ORDERSENTRY._serialized_start=4391 + _EPOCHORDERS_ORDERSENTRY._serialized_end=4450 + _POSITIONMARGIN._serialized_start=4453 + _POSITIONMARGIN._serialized_end=4587 + _ACCOUNTTICKERPOSITION._serialized_start=4590 + _ACCOUNTTICKERPOSITION._serialized_end=4731 + _ACCOUNTCONTRACTSTATE._serialized_start=4734 + _ACCOUNTCONTRACTSTATE._serialized_end=5212 + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_start=5140 + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_end=5212 + _CONTRACTMARGIN._serialized_start=5215 + _CONTRACTMARGIN._serialized_end=5525 + _CONTRACTMARGIN_POSITIONSENTRY._serialized_start=5140 + _CONTRACTMARGIN_POSITIONSENTRY._serialized_end=5212 + _ACCOUNTMARGINSTATE._serialized_start=5528 + _ACCOUNTMARGINSTATE._serialized_end=5845 + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_start=5774 + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_end=5845 + _REQUESTREPLY._serialized_start=5847 + _REQUESTREPLY._serialized_end=5913 + _REPLYREQUEST._serialized_start=5916 + _REPLYREQUEST._serialized_end=6071 + _TRADERPOSITIONORDERS._serialized_start=6074 + _TRADERPOSITIONORDERS._serialized_end=6322 + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_start=6260 + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_end=6322 # @@protoc_insertion_point(module_scope) diff --git a/python-client/req_client.py b/python-client/req_client.py new file mode 100644 index 0000000..4e8eed1 --- /dev/null +++ b/python-client/req_client.py @@ -0,0 +1,130 @@ +import pynng +from proto import sidepit_api_pb2 +from google.protobuf.json_format import ParseDict + +class SidepitReqClient: + """Simple synchronous client for Sidepit Request/Reply API""" + + def __init__(self, address=None, protocol="tcp://", host="localhost", port="12125"): + """Initialize the request client + + Args: + address: Full address string (e.g., "tcp://localhost:12125"). + If provided, overrides protocol/host/port. + protocol: Protocol to use (default: "tcp://") + host: Hostname or IP (default: "localhost") + port: Port number (default: "12125") + """ + if address is None: + address = f"{protocol}{host}:{port}" + + self.address = address + self.socket = pynng.Req0() + self.socket.dial(self.address) + print(f"Connected to {self.address}") + + def _send_request(self, request_dict): + """Send a request and return the protobuf response""" + # Create and serialize request + request = sidepit_api_pb2.RequestReply() + ParseDict(request_dict, request, ignore_unknown_fields=True) + serialized = request.SerializeToString() + + # Send and receive synchronously + self.socket.send(serialized) + response_data = self.socket.recv() + + # Parse response + response = sidepit_api_pb2.ReplyRequest() + response.ParseFromString(response_data) + return response + + def get_active_product(self, ticker=None): + """Get active product information + + Args: + ticker: Optional ticker to filter by + + Returns: + ActiveProduct protobuf object + """ + request_dict = {"TypeMask": sidepit_api_pb2.ACTIVE_PRODUCT} + if ticker: + request_dict["ticker"] = ticker + + response = self._send_request(request_dict) + return response.active_product + + def get_positions(self, trader_id): + """Get positions for a trader + + Args: + trader_id: The trader's sidepit ID + + Returns: + TraderPositionOrders protobuf object + """ + request_dict = { + "TypeMask": sidepit_api_pb2.POSITIONS, + "traderid": trader_id + } + + response = self._send_request(request_dict) + return response.trader_positions + + def get_quote(self, ticker=None): + """Get market quote + + Args: + ticker: Optional ticker to filter by + + Returns: + MarketData protobuf object + """ + request_dict = {"TypeMask": sidepit_api_pb2.QUOTE} + if ticker: + request_dict["ticker"] = ticker + + response = self._send_request(request_dict) + return response.market_data + + def close(self): + """Close connection""" + self.socket.close() + print("Connection closed") + + +def main(): + """Simple CLI demo""" + print("=== Sidepit Request Client Demo ===") + print("Connecting to request server...") + + client = SidepitReqClient() + + print("\n1. Getting active product...") + try: + result = client.get_active_product() + print(result) + except Exception as e: + print(f"Error: {e}") + + print("\n2. Getting quote...") + try: + result = client.get_quote() + print(result) + except Exception as e: + print(f"Error: {e}") + + # Example: get positions (uncomment and add trader_id) + # print("\n3. Getting positions...") + # try: + # result = client.get_positions("your_trader_id_here") + # print(result) + # except Exception as e: + # print(f"Error: {e}") + + client.close() + + +if __name__ == "__main__": + main() diff --git a/python-client/reqrep-server.py b/python-client/reqrep-server.py new file mode 100644 index 0000000..a7e3eaf --- /dev/null +++ b/python-client/reqrep-server.py @@ -0,0 +1,153 @@ +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel +from typing import Optional +import uvicorn +import pynng +import sidepit_api_pb2 +# from spapi_pb2 import ReplyRequestTypes +from google.protobuf.json_format import ParseDict, MessageToJson +import asyncio +import signal +import json + +from constants import REQ_PROTOCOL, REQ_ADDRESS, REQ_PORT + +app = FastAPI() +req_client = None + +class RequestReplyModel(BaseModel): + TypeMask: int = sidepit_api_pb2.ACTIVE_PRODUCT + traderid: Optional[str] = None + ticker: Optional[str] = None + +class ReqClient: + def __init__(self, request_address: str) -> None: + global req_client + self.request_address = request_address + self.socket = pynng.Req0() + try: + self.socket.dial(self.request_address) + print(f"Connected to {self.request_address}.") + except Exception as e: + print(f"Failed to connect to {self.request_address}: {e}") + raise + + self.stack = [] + for i in range(100): + self.stack.append(self.socket.new_context()) + + req_client = self + + async def send_request(self, request_data: dict) -> sidepit_api_pb2.ReplyRequest: + request = sidepit_api_pb2.RequestReply() + ParseDict(request_data, request, ignore_unknown_fields=True) + + serialized_request = request.SerializeToString() + if not serialized_request: + print("Serialization failed.") + raise ValueError("Failed to serialize the request.") + try: + ctx = self.stack.pop() + await ctx.asend(serialized_request) + response_data = await ctx.arecv() + self.stack.append(ctx) + if response_data is None: + raise ValueError("No response received from server.") + response = sidepit_api_pb2.ReplyRequest() + response.ParseFromString(response_data) + # print(response) + return response + except Exception as e: + print(f"Failed to send request: {e}") + raise + + def close_connection(self) -> None: + for ctx in self.stack: + ctx.close() + self.socket.close() + print("Connection closed.") + + +async def execute_request(request_data: dict): + request_address = f"{REQ_PROTOCOL}{REQ_ADDRESS}:{REQ_PORT}" + global req_client + if req_client is None: + try: + req_client = ReqClient(request_address) + except Exception as e: + print(f"Failed to initialize ReqClient: {e}") + raise HTTPException(status_code=500, detail=str(e)) + try: + response = await req_client.send_request(request_data) + if response.TypeMask == sidepit_api_pb2.POSITIONS: + return response.trader_positions + elif response.TypeMask == sidepit_api_pb2.QUOTE: + return response.market_data + else: + return response.active_product + + except Exception as e: + print(f"Error during request execution: {e}") + raise HTTPException(status_code=500, detail=str(e)) + +@app.post("/request_position/") +async def request_position(request: RequestReplyModel): + print(request) + request.TypeMask = sidepit_api_pb2.POSITIONS + try: + response = await execute_request(request.dict()) + json_response = MessageToJson(response, preserving_proto_field_name=True, including_default_value_fields=True) + # print(json.loads(json_response)) + + return { + "message": "Request processed successfully.", + "response": json.loads(json_response), + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + +@app.get("/request_position/{trader_id}") +async def request_position(trader_id: str): + # print(trader_id) + request = RequestReplyModel (traderid=trader_id, TypeMask= sidepit_api_pb2.POSITIONS) + try: + response = await execute_request(request.dict()) + json_response = MessageToJson(response, preserving_proto_field_name=True, including_default_value_fields=True) + return json.loads(json_response) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + +@app.get("/active_product/") +@app.post("/active_product/") +async def active_product(): + try: + request = RequestReplyModel(TypeMask= sidepit_api_pb2.ACTIVE_PRODUCT) + response = await execute_request(request.dict()) + # print(response) + json_response = MessageToJson(response, preserving_proto_field_name=True, including_default_value_fields=True) + return json.loads(json_response) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + +@app.get("/quote/") +@app.post("/quote/") +async def active_product(): + try: + request = RequestReplyModel(TypeMask=sidepit_api_pb2.QUOTE) + response = await execute_request(request.dict()) + json_response = MessageToJson(response, preserving_proto_field_name=True, including_default_value_fields=True) + return json.loads(json_response) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + +def shutdown(signal, frame): + print("Shutting down...") + if req_client is not None: + req_client.close_connection() + asyncio.get_event_loop().stop() + + +if __name__ == "__main__": + signal.signal(signal.SIGINT, shutdown) + signal.signal(signal.SIGTERM, shutdown) + uvicorn.run(app, host="0.0.0.0", port=13125) diff --git a/python-client/requirements.txt b/python-client/requirements.txt new file mode 100644 index 0000000..898b960 --- /dev/null +++ b/python-client/requirements.txt @@ -0,0 +1,5 @@ +protobuf==3.20.1 +pynng +fastapi +uvicorn +websockets diff --git a/python-client/utils.py b/python-client/utils.py index c4d75d7..b2d853a 100644 --- a/python-client/utils.py +++ b/python-client/utils.py @@ -9,4 +9,4 @@ async def broadcast(clients, message): except: to_remove.add(client) for client in to_remove: - clients.remove(client) + clients.discard(client) # Use discard to avoid KeyError if already removed diff --git a/users-cli/README.md b/users-cli/README.md index 87568c5..f9d27e2 100644 --- a/users-cli/README.md +++ b/users-cli/README.md @@ -40,8 +40,18 @@ The bitcoinlib package depends on fastecdsa which requires (the gmp.h from the) sudo apt-get install libgmp-dev sudo apt-get install python-dev-is-python3 ``` -# Proto compile: +### Proto compile: ```bash ./api/users-cli$ protoc --proto_path=../../proto/ --python_out=./cli/ sidepit_api.proto ``` +### Run Client Cli: +```bash +./api/users-cli$ pyhton3 cli/main.py +``` + +{47A93F62-BAFC-4BD4-99B8-3ECE3D3EFE64} +image + + + diff --git a/users-cli/cli/constants.py b/users-cli/cli/constants.py index 9424850..67faf82 100644 --- a/users-cli/cli/constants.py +++ b/users-cli/cli/constants.py @@ -2,3 +2,13 @@ SIDEPIT_WALLET="bc1qn9szw2tfte4m2l7enhentvjpvnque932xr2m03" BLOCKSTREAM_API_URL="https://blockstream.info/api/" MEMPOOL_API_URL="https://mempool.space/api/v1/fees/recommended" + +# Direct NNG connection settings +SIDEPIT_REQ_HOST = "localhost" # "api.sidepit.com" +SIDEPIT_REQ_PORT = "12125" +SIDEPIT_REQ_PROTOCOL = "tcp://" + +# Transaction publish settings +PUBLISH_PROTOCOL = "tcp://" +PUBLISH_ADDRESS = "localhost" +PUBLISH_PORT = "12121" diff --git a/users-cli/cli/id_manager.py b/users-cli/cli/id_manager.py index 2ec2edc..9b1432c 100644 --- a/users-cli/cli/id_manager.py +++ b/users-cli/cli/id_manager.py @@ -34,6 +34,7 @@ def __init__(self) -> None: files = os.listdir(self.FOLDER_WALLETS_PATH) #if self.FOLDER_WALLETS_PATH.exists() else [] self.wallet_file_path = self.FOLDER_WALLETS_PATH / files[0] if files else "" self.active_wallet = files[0] if files else "" + self.watch_only_id = None # For watch-only mode without private key def have_folder(self) ->bool: return self.FOLDER_WALLETS_PATH.exists() @@ -42,11 +43,25 @@ def create_folder(self) -> None: os.makedirs(self.FOLDER_WALLETS_PATH) def have_id(self) -> bool: - return bool(self.wallet_file_path) + return bool(self.wallet_file_path) or bool(self.watch_only_id) + + def is_watch_only(self) -> bool: + """Check if current ID is watch-only (no private key)""" + return bool(self.watch_only_id) and not bool(self.wallet_file_path) def get_id(self) -> str: + if self.watch_only_id: + return self.watch_only_id self.btcaddress = self.load_sidepit_id() - return self.btcaddress + return self.btcaddress + + def set_watch_only_id(self, trader_id: str) -> None: + """Set a watch-only trader ID without needing private key""" + # Basic validation - should be a bech32 address + if not trader_id.startswith('bc1'): + raise ValueError("Invalid trader ID format. Should start with 'bc1'") + self.watch_only_id = trader_id + self.wallet_file_path = "" # Clear wallet path for watch-only mode def create_sidepit_id(self) -> None: privkey = PrivateKey(secrets.token_bytes(32)) @@ -67,14 +82,20 @@ def write_key(self, wif): def verify_wif(self, wif): PrivateKey(self.wif_to_private_key(wif), False) - def read_wif(self) -> str: + def read_wif(self) -> str: + if self.is_watch_only(): + raise RuntimeError("Cannot access private key in watch-only mode") with open(self.wallet_file_path, "r") as sp_wallet: return sp_wallet.read() def wif(self) -> str: + if self.is_watch_only(): + raise RuntimeError("Cannot access WIF in watch-only mode") return self.read_wif().strip() def load_sidepit_id(self) -> str: + if self.is_watch_only(): + return self.watch_only_id wif_content = self.read_wif() pk_hex = self.wif_to_private_key(wif_content) # might need to use compressed in the future.. return self.toSegwit0Address(pk_hex) @@ -151,6 +172,8 @@ def import_wif(self, wif: str) -> None: click.secho("\n!!!! Error ocurred - wif not imported !!!!!", fg = "bright_red") def sign_it(self, digest): + if self.is_watch_only(): + raise RuntimeError("Cannot sign transactions in watch-only mode. This ID is read-only.") priv = PrivateKey(self.wif_to_private_key(self.wif()), False) sig = priv.ecdsa_sign(digest,True) return priv.ecdsa_serialize_compact(sig).hex() diff --git a/users-cli/cli/main.py b/users-cli/cli/main.py index b0202d9..aa53284 100644 --- a/users-cli/cli/main.py +++ b/users-cli/cli/main.py @@ -3,12 +3,22 @@ from sidepit_cli_handler import SidepitCLIHandler @click.command() -def run_sidepit_cli() -> None: +@click.option('--watch-only', default=None, help='Monitor a trader_id in read-only mode (e.g., bc1...)') +def run_sidepit_cli(watch_only) -> None: """ Sidepit Command-Line Interface (CLI). """ handler = SidepitCLIHandler() + # If watch-only trader_id is provided via command line, set it immediately + if watch_only: + try: + handler.sidepit_id_manager.set_watch_only_id(watch_only) + click.secho(f"Watching trader: {watch_only} (read-only mode)", fg="yellow") + except ValueError as e: + click.secho(f"Error: {e}", fg="red") + return + click.secho("Welcome to the Sidepid CLI!\n", fg="cyan") if not handler.have_folder(): diff --git a/users-cli/cli/sidepit_api_client.py b/users-cli/cli/sidepit_api_client.py index 24d9e72..a309eeb 100644 --- a/users-cli/cli/sidepit_api_client.py +++ b/users-cli/cli/sidepit_api_client.py @@ -6,12 +6,26 @@ from hashlib import sha256 from google.protobuf.json_format import MessageToJson from constants import SIDEPIT_API_URL +import pynng class SidepitApiClient: - def __init__(self, id: str, sid: SidepitIDManager) -> None: - self.sidepit_id = id - self.ticker = "USDBTCz24" - self.idmanager = sid + def __init__(self, sidepit_manager, id_manager: SidepitIDManager) -> None: + self.sidepit_manager = sidepit_manager # Reference to get current ticker and ID + self.idmanager = id_manager + self.socket = None + self._init_socket() + + def _init_socket(self): + """Initialize pynng Push0 socket for sending transactions""" + try: + from constants import PUBLISH_PROTOCOL, PUBLISH_ADDRESS, PUBLISH_PORT + publish_address = f"{PUBLISH_PROTOCOL}{PUBLISH_ADDRESS}:{PUBLISH_PORT}" + self.socket = pynng.Push0() + self.socket.dial(publish_address) + print(f"Connected to {publish_address}") + except Exception as e: + print(f"Failed to connect to publish socket: {e}") + self.socket = None def create_transaction_message(self) -> sidepit_api_pb2.SignedTransaction: """ @@ -28,7 +42,8 @@ def create_transaction_message(self) -> sidepit_api_pb2.SignedTransaction: transaction_msg = signedTransaction.transaction transaction_msg.version = 1 transaction_msg.timestamp = int(time.time() * 1e9) - transaction_msg.sidepit_id = self.sidepit_id + # Get current sidepit_id from manager (handles wallet switching) + transaction_msg.sidepit_id = self.sidepit_manager.sidepit_id return signedTransaction @@ -40,32 +55,49 @@ def sign_digest(self, tx): def do_neworder(self, side, price, size): """Place a new order.""" - # Construct the side - stx = self.create_transaction_message() new_order = stx.transaction.new_order new_order.side = side new_order.size = size new_order.price = price - new_order.ticker = self.ticker + # Get current active ticker from manager (handles ticker switching) + new_order.ticker = self.sidepit_manager.active_ticker stx.signature = self.sign_digest(stx.transaction) + # Send protobuf directly via pynng + if self.socket: + serialized_msg = stx.SerializeToString() + try: + self.socket.send(serialized_msg) + print(f"Transaction sent: {side} {size}@{price}") + print(stx) + except Exception as e: + print(f"Failed to send transaction: {e}") + else: + print("Socket not connected, cannot send transaction") - json_message = json.loads(MessageToJson(stx, preserving_proto_field_name=True)) - print (json_message) + def do_cancel(self, oid): + """Cancel an order.""" + stx = self.create_transaction_message() + stx.transaction.cancel_orderid = oid + stx.signature = self.sign_digest(stx.transaction) - # json_message = '{ "transaction": { "version": 1, "timestamp": 1733196967903, "newOrder": { "side": -1, "size": 2, "price": 1111,"ticker": "usdbtcz24"},"sidepit_id": "bc1qkl80muggyp9aqn8th0vdpudmt4zftd97ms4rg5"},"signature": "1de61805dbce4149d1e2d44ebb49ed06696b5b7d7363cd5f4033fd827ed2e29a2c44f5d736abeb654b2bc514c9166e622d36d82d92ea0e8d9b1bc87a8ff3abd6"}' + # Send protobuf directly via pynng + if self.socket: + serialized_msg = stx.SerializeToString() + try: + self.socket.send(serialized_msg) + print(f"Cancel transaction sent: {oid}") + print(stx) + except Exception as e: + print(f"Failed to send transaction: {e}") + else: + print("Socket not connected, cannot send transaction") - ret = self.send_order_to_api(json_message) - # print(ret) - - def send_order_to_api(self, payload): - api_url = SIDEPIT_API_URL + "transaction/" # Replace with actual API endpoint - headers = {"Content-Type": "application/json"} - try: - response = requests.post(api_url, data=json.dumps(payload), headers=headers) - return response.json() - except requests.RequestException as e: - return {"status": "error", "error": str(e)} + def close_connection(self): + """Close the pynng socket connection""" + if self.socket: + self.socket.close() + print("Connection closed.") diff --git a/users-cli/cli/sidepit_api_pb2.py b/users-cli/cli/sidepit_api_pb2.py index 38ec0a4..8f26356 100644 --- a/users-cli/cli/sidepit_api_pb2.py +++ b/users-cli/cli/sidepit_api_pb2.py @@ -1,12 +1,10 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: sidepit_api.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) @@ -15,2458 +13,121 @@ -DESCRIPTOR = _descriptor.FileDescriptor( - name='sidepit_api.proto', - package='', - syntax='proto3', - serialized_options=None, - serialized_pb=_b('\n\x11sidepit_api.proto\"\xcf\x01\n\x0bTransaction\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\n \x01(\x04\x12\x1e\n\tnew_order\x18\x14 \x01(\x0b\x32\t.NewOrderH\x00\x12\x18\n\x0e\x63\x61ncel_orderid\x18\x1e \x01(\tH\x00\x12\"\n\x0b\x61uction_bid\x18( \x01(\x0b\x32\x0b.AuctionBidH\x00\x12$\n\nunlock_req\x18\x32 \x01(\x0b\x32\x0e.UnlockRequestH\x00\x12\x12\n\nsidepit_id\x18\x65 \x01(\tB\x04\n\x02tx\"\x87\x01\n\x11SignedTransaction\x12\x19\n\x11signature_version\x18\x02 \x01(\x05\x12!\n\x0btransaction\x18\x0b \x01(\x0b\x32\x0c.Transaction\x12\x11\n\ttx_digest\x18\x15 \x01(\t\x12\x0e\n\x06pubkey\x18\x1f \x01(\t\x12\x11\n\tsignature\x18o \x01(\t\"E\n\x08NewOrder\x12\x0c\n\x04side\x18\x0b \x01(\x11\x12\x0c\n\x04size\x18\x14 \x01(\x05\x12\r\n\x05price\x18\x1e \x01(\x05\x12\x0e\n\x06ticker\x18( \x01(\t\"M\n\nAuctionBid\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\x15\n\rordering_salt\x18\x1e \x01(\t\x12\x0b\n\x03\x62id\x18( \x01(\x05\"N\n\rUnlockRequest\x12$\n\x06minmax\x18\x14 \x01(\x0e\x32\x14.UnlockRequestAmount\x12\x17\n\x0f\x65xplicit_amount\x18\x1e \x01(\x04\"H\n\nEpochEvent\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\n\n\x02id\x18\x64 \x01(\t\x12\x11\n\tsignature\x18n \x01(\x0c\".\n\rExchangeEvent\x12\x1d\n\x05state\x18\n \x01(\x0e\x32\x0e.ExchangeState\"\xba\x01\n\rTxBlockStream\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x14 \x01(\x0e\x32\x0e.ExchangeState\x12\"\n\x0b\x65poch_event\x18\x19 \x01(\x0b\x32\x0b.EpochEventH\x00\x12!\n\x03stx\x18\x1f \x01(\x0b\x32\x12.SignedTransactionH\x00\x12(\n\x0e\x65xchange_event\x18( \x01(\x0b\x32\x0e.ExchangeEventH\x00\x42\t\n\x07txepoch\"\x9a\x01\n\x0bMarketQuote\x12\x0f\n\x07\x62idsize\x18\n \x01(\x05\x12\x0b\n\x03\x62id\x18\x14 \x01(\x05\x12\x0b\n\x03\x61sk\x18\x1e \x01(\x05\x12\x0f\n\x07\x61sksize\x18( \x01(\x05\x12\x0c\n\x04last\x18\x32 \x01(\x05\x12\x10\n\x08lastsize\x18< \x01(\x05\x12\x10\n\x08upordown\x18\x46 \x01(\x08\x12\x0e\n\x06ticker\x18P \x01(\t\x12\r\n\x05\x65poch\x18Z \x01(\x04\"q\n\x08\x45pochBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x0c\n\x04open\x18\x14 \x01(\x05\x12\x0c\n\x04high\x18\x1e \x01(\x05\x12\x0b\n\x03low\x18( \x01(\x05\x12\r\n\x05\x63lose\x18\x32 \x01(\x05\x12\x0e\n\x06volume\x18< \x01(\x05\"\xe2\x01\n\x0b\x43ontractBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x10\n\x08\x64\x61y_open\x18\x14 \x01(\x05\x12\x10\n\x08\x64\x61y_high\x18\x1e \x01(\x05\x12\x0f\n\x07\x64\x61y_low\x18( \x01(\x05\x12\x11\n\tday_close\x18\x32 \x01(\x05\x12\x12\n\nday_volume\x18< \x01(\x05\x12\x0c\n\x04high\x18\x46 \x01(\x05\x12\x0b\n\x03low\x18P \x01(\x05\x12\x0e\n\x06volume\x18Z \x01(\x05\x12\x15\n\ropen_interest\x18\x64 \x01(\x05\x12\x16\n\x0eprevious_close\x18n \x01(\x05\"\x9e\x02\n\tBookOrder\x12\x0c\n\x04side\x18\n \x01(\x11\x12\r\n\x05price\x18\x14 \x01(\x05\x12\x10\n\x08open_qty\x18\x1e \x01(\x05\x12\x12\n\nfilled_qty\x18( \x01(\x05\x12\x15\n\rremaining_qty\x18\x32 \x01(\x05\x12\x14\n\x0c\x63\x61nceled_qty\x18< \x01(\x05\x12\x16\n\x0e\x61gres_fill_qty\x18> \x01(\x05\x12\x17\n\x0f\x61gres_avg_price\x18? \x01(\x02\x12\x15\n\rpass_fill_qty\x18@ \x01(\x05\x12\x11\n\tavg_price\x18\x41 \x01(\x02\x12\x0e\n\x06ticker\x18\x46 \x01(\t\x12\x13\n\x0bupdate_time\x18P \x01(\t\x12\x0f\n\x07orderid\x18Z \x01(\t\x12\x10\n\x08traderid\x18\x64 \x01(\t\"H\n\tDepthItem\x12\r\n\x05level\x18\n \x01(\x05\x12\t\n\x01\x62\x18\x1e \x01(\x05\x12\t\n\x01\x61\x18( \x01(\x05\x12\n\n\x02\x62s\x18\x32 \x01(\x05\x12\n\n\x02\x61s\x18< \x01(\x05\"|\n\nMarketData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x16\n\x03\x62\x61r\x18\x14 \x01(\x0b\x32\t.EpochBar\x12\x1b\n\x05quote\x18\x1e \x01(\x0b\x32\x0c.MarketQuote\x12\x19\n\x05\x64\x65pth\x18( \x03(\x0b\x32\n.DepthItem\"y\n\x08\x46illData\x12\x13\n\x0b\x61gressiveid\x18\n \x01(\t\x12\x11\n\tpassiveid\x18\x14 \x01(\t\x12\r\n\x05price\x18\x1e \x01(\r\x12\x0b\n\x03qty\x18( \x01(\r\x12\x16\n\x0e\x61gressive_side\x18\x32 \x01(\x05\x12\x11\n\tmicrotime\x18< \x01(\x04\"e\n\tOrderData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\nbookorders\x18( \x03(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xab\x02\n\x08\x43ontract\x12\x0e\n\x06symbol\x18\n \x01(\t\x12\x11\n\tunit_size\x18\x14 \x01(\r\x12\x0c\n\x04unit\x18\x1e \x01(\t\x12\x13\n\x0bprice_quote\x18( \x01(\t\x12\x19\n\x11price_quote_units\x18\x32 \x01(\x05\x12\x0f\n\x07tic_min\x18< \x01(\r\x12\x11\n\ttic_value\x18\x46 \x01(\r\x12\x1b\n\x13price_limit_percent\x18P \x01(\x05\x12\x16\n\x0einitial_margin\x18Z \x01(\x04\x12\x14\n\x0cmaint_margin\x18\x64 \x01(\x04\x12\x17\n\x0fposition_limits\x18n \x01(\x05\x12\x19\n\x11trading_open_time\x18x \x01(\x04\x12\x1b\n\x12trading_close_time\x18\x82\x01 \x01(\x04\"z\n\x07Product\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\x17\n\x0f\x63ontract_symbol\x18\x14 \x01(\t\x12\x17\n\x0f\x65xpiration_date\x18\x1e \x01(\x04\x12\x1a\n\x12start_trading_date\x18( \x01(\x04\x12\x11\n\tis_active\x18\x32 \x01(\x08\"`\n\x08Schedule\x12\x0c\n\x04\x64\x61te\x18\n \x01(\x04\x12\x19\n\x11trading_open_time\x18\x14 \x01(\x04\x12\x1a\n\x12trading_close_time\x18\x1e \x01(\x04\x12\x0f\n\x07product\x18( \x03(\t\"Z\n\x0eTradingSession\x12\x12\n\nsession_id\x18\n \x01(\t\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x17\n\x0fprev_session_id\x18\x32 \x01(\t\"C\n\rSessionStatus\x12\x1e\n\x06\x65state\x18\n \x01(\x0e\x32\x0e.ExchangeState\x12\x12\n\nsession_id\x18\x14 \x01(\t\"R\n\x0e\x45xchangeStatus\x12 \n\x07session\x18\n \x01(\x0b\x32\x0f.TradingSession\x12\x1e\n\x06status\x18\x14 \x01(\x0b\x32\x0e.SessionStatus\"l\n\x15\x41\x63tiveContractProduct\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x19\n\x07product\x18\x14 \x01(\x0b\x32\x08.Product\x12\x1b\n\x08schedule\x18\x1e \x01(\x0b\x32\t.Schedule\"/\n\x08Position\x12\x10\n\x08position\x18\n \x01(\x11\x12\x11\n\tavg_price\x18\x14 \x01(\r\"A\n\nOrderFills\x12\x19\n\x05order\x18\n \x01(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xce\x03\n\x0c\x41\x63\x63ountState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x16\n\x0eunrealized_pnl\x18< \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12/\n\tpositions\x18x \x03(\x0b\x32\x1c.AccountState.PositionsEntry\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\x1a;\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x18\n\x05value\x18\x02 \x01(\x0b\x32\t.Position:\x02\x38\x01\"y\n\x08\x42tcLocks\x12\x0c\n\x04txid\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x13\n\x0b\x62tc_address\x18\x1e \x01(\t\x12\x11\n\tlock_sats\x18( \x01(\x04\x12\x13\n\x0bunlock_sats\x18\x32 \x01(\x04\x12\x12\n\nis_pending\x18< \x01(\x08\"B\n\x0cRequestReply\x12\x10\n\x08TypeMask\x18\x01 \x01(\x05\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06ticker\x18\x1e \x01(\t\"\x9b\x01\n\x0cReplyRequest\x12\x10\n\x08TypeMask\x18\n \x01(\x05\x12/\n\x10trader_positions\x18\x14 \x01(\x0b\x32\x15.TraderPositionOrders\x12&\n\x0e\x61\x63tive_product\x18\x1e \x01(\x0b\x32\x0e.ActiveProduct\x12 \n\x0bmarket_data\x18( \x01(\x0b\x32\x0b.MarketData\"\xf2\x01\n\x14TraderPositionOrders\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06symbol\x18\x14 \x01(\t\x12\x39\n\norderfills\x18( \x03(\x0b\x32%.TraderPositionOrders.OrderfillsEntry\x12#\n\x0c\x61\x63\x63ountstate\x18\x32 \x01(\x0b\x32\r.AccountState\x12\x18\n\x05locks\x18< \x03(\x0b\x32\t.BtcLocks\x1a>\n\x0fOrderfillsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1a\n\x05value\x18\x02 \x01(\x0b\x32\x0b.OrderFills:\x02\x38\x01\"\x95\x01\n\rActiveProduct\x12\x37\n\x17\x61\x63tive_contract_product\x18\n \x01(\x0b\x32\x16.ActiveContractProduct\x12(\n\x0f\x65xchange_status\x18\x14 \x01(\x0b\x32\x0f.ExchangeStatus\x12!\n\x0b\x63ontractbar\x18\x1e \x01(\x0b\x32\x0c.ContractBar*C\n\x13UnlockRequestAmount\x12\x0c\n\x08NONE_AMT\x10\x00\x12\x07\n\x03MAX\x10\x01\x12\x07\n\x03MIN\x10\x02\x12\x0c\n\x08\x45XPLICIT\x10\x03*O\n\x11ReplyRequestTypes\x12\x0c\n\x08NONE_REP\x10\x00\x12\x12\n\x0e\x41\x43TIVE_PRODUCT\x10\x01\x12\r\n\tPOSITIONS\x10\x02\x12\t\n\x05QUOTE\x10\x04*\xad\x01\n\rExchangeState\x12\x14\n\x10\x45XCHANGE_UNKNOWN\x10\x00\x12\x19\n\x15\x45XCHANGE_PENDING_OPEN\x10\x01\x12\x11\n\rEXCHANGE_OPEN\x10\x02\x12\x17\n\x13\x45XCHANGE_RECOVERING\x10\x03\x12\x14\n\x10\x45XCHANGE_CLOSING\x10\x04\x12\x14\n\x10\x45XCHANGE_SETTLED\x10\x05\x12\x13\n\x0f\x45XCHANGE_CLOSED\x10\x06\x62\x06proto3') -) - -_UNLOCKREQUESTAMOUNT = _descriptor.EnumDescriptor( - name='UnlockRequestAmount', - full_name='UnlockRequestAmount', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE_AMT', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAX', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MIN', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXPLICIT', index=3, number=3, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=4332, - serialized_end=4399, -) -_sym_db.RegisterEnumDescriptor(_UNLOCKREQUESTAMOUNT) - -UnlockRequestAmount = enum_type_wrapper.EnumTypeWrapper(_UNLOCKREQUESTAMOUNT) -_REPLYREQUESTTYPES = _descriptor.EnumDescriptor( - name='ReplyRequestTypes', - full_name='ReplyRequestTypes', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE_REP', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ACTIVE_PRODUCT', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POSITIONS', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='QUOTE', index=3, number=4, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=4401, - serialized_end=4480, -) -_sym_db.RegisterEnumDescriptor(_REPLYREQUESTTYPES) - -ReplyRequestTypes = enum_type_wrapper.EnumTypeWrapper(_REPLYREQUESTTYPES) -_EXCHANGESTATE = _descriptor.EnumDescriptor( - name='ExchangeState', - full_name='ExchangeState', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='EXCHANGE_UNKNOWN', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_PENDING_OPEN', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_OPEN', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_RECOVERING', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_CLOSING', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_SETTLED', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EXCHANGE_CLOSED', index=6, number=6, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=4483, - serialized_end=4656, -) -_sym_db.RegisterEnumDescriptor(_EXCHANGESTATE) - -ExchangeState = enum_type_wrapper.EnumTypeWrapper(_EXCHANGESTATE) -NONE_AMT = 0 -MAX = 1 -MIN = 2 -EXPLICIT = 3 -NONE_REP = 0 -ACTIVE_PRODUCT = 1 -POSITIONS = 2 -QUOTE = 4 -EXCHANGE_UNKNOWN = 0 -EXCHANGE_PENDING_OPEN = 1 -EXCHANGE_OPEN = 2 -EXCHANGE_RECOVERING = 3 -EXCHANGE_CLOSING = 4 -EXCHANGE_SETTLED = 5 -EXCHANGE_CLOSED = 6 - - - -_TRANSACTION = _descriptor.Descriptor( - name='Transaction', - full_name='Transaction', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='Transaction.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='timestamp', full_name='Transaction.timestamp', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='new_order', full_name='Transaction.new_order', index=2, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='cancel_orderid', full_name='Transaction.cancel_orderid', index=3, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='auction_bid', full_name='Transaction.auction_bid', index=4, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unlock_req', full_name='Transaction.unlock_req', index=5, - number=50, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sidepit_id', full_name='Transaction.sidepit_id', index=6, - number=101, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='tx', full_name='Transaction.tx', - index=0, containing_type=None, fields=[]), - ], - serialized_start=22, - serialized_end=229, -) - - -_SIGNEDTRANSACTION = _descriptor.Descriptor( - name='SignedTransaction', - full_name='SignedTransaction', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='signature_version', full_name='SignedTransaction.signature_version', index=0, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='transaction', full_name='SignedTransaction.transaction', index=1, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='tx_digest', full_name='SignedTransaction.tx_digest', index=2, - number=21, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pubkey', full_name='SignedTransaction.pubkey', index=3, - number=31, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='signature', full_name='SignedTransaction.signature', index=4, - number=111, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=232, - serialized_end=367, -) - - -_NEWORDER = _descriptor.Descriptor( - name='NewOrder', - full_name='NewOrder', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='side', full_name='NewOrder.side', index=0, - number=11, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='size', full_name='NewOrder.size', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price', full_name='NewOrder.price', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ticker', full_name='NewOrder.ticker', index=3, - number=40, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=369, - serialized_end=438, -) - - -_AUCTIONBID = _descriptor.Descriptor( - name='AuctionBid', - full_name='AuctionBid', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='AuctionBid.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hash', full_name='AuctionBid.hash', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ordering_salt', full_name='AuctionBid.ordering_salt', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bid', full_name='AuctionBid.bid', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=440, - serialized_end=517, -) - - -_UNLOCKREQUEST = _descriptor.Descriptor( - name='UnlockRequest', - full_name='UnlockRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='minmax', full_name='UnlockRequest.minmax', index=0, - number=20, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='explicit_amount', full_name='UnlockRequest.explicit_amount', index=1, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=519, - serialized_end=597, -) - - -_EPOCHEVENT = _descriptor.Descriptor( - name='EpochEvent', - full_name='EpochEvent', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='EpochEvent.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hash', full_name='EpochEvent.hash', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='id', full_name='EpochEvent.id', index=2, - number=100, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='signature', full_name='EpochEvent.signature', index=3, - number=110, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=599, - serialized_end=671, -) - - -_EXCHANGEEVENT = _descriptor.Descriptor( - name='ExchangeEvent', - full_name='ExchangeEvent', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='state', full_name='ExchangeEvent.state', index=0, - number=10, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=673, - serialized_end=719, -) - - -_TXBLOCKSTREAM = _descriptor.Descriptor( - name='TxBlockStream', - full_name='TxBlockStream', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='epoch', full_name='TxBlockStream.epoch', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='estate', full_name='TxBlockStream.estate', index=1, - number=20, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch_event', full_name='TxBlockStream.epoch_event', index=2, - number=25, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='stx', full_name='TxBlockStream.stx', index=3, - number=31, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='exchange_event', full_name='TxBlockStream.exchange_event', index=4, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='txepoch', full_name='TxBlockStream.txepoch', - index=0, containing_type=None, fields=[]), - ], - serialized_start=722, - serialized_end=908, -) - - -_MARKETQUOTE = _descriptor.Descriptor( - name='MarketQuote', - full_name='MarketQuote', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='bidsize', full_name='MarketQuote.bidsize', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bid', full_name='MarketQuote.bid', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ask', full_name='MarketQuote.ask', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='asksize', full_name='MarketQuote.asksize', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='last', full_name='MarketQuote.last', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lastsize', full_name='MarketQuote.lastsize', index=5, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='upordown', full_name='MarketQuote.upordown', index=6, - number=70, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ticker', full_name='MarketQuote.ticker', index=7, - number=80, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch', full_name='MarketQuote.epoch', index=8, - number=90, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=911, - serialized_end=1065, -) - - -_EPOCHBAR = _descriptor.Descriptor( - name='EpochBar', - full_name='EpochBar', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='EpochBar.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch', full_name='EpochBar.epoch', index=1, - number=15, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='open', full_name='EpochBar.open', index=2, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='high', full_name='EpochBar.high', index=3, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='low', full_name='EpochBar.low', index=4, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='close', full_name='EpochBar.close', index=5, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='volume', full_name='EpochBar.volume', index=6, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1067, - serialized_end=1180, -) - - -_CONTRACTBAR = _descriptor.Descriptor( - name='ContractBar', - full_name='ContractBar', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='ContractBar.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch', full_name='ContractBar.epoch', index=1, - number=15, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='day_open', full_name='ContractBar.day_open', index=2, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='day_high', full_name='ContractBar.day_high', index=3, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='day_low', full_name='ContractBar.day_low', index=4, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='day_close', full_name='ContractBar.day_close', index=5, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='day_volume', full_name='ContractBar.day_volume', index=6, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='high', full_name='ContractBar.high', index=7, - number=70, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='low', full_name='ContractBar.low', index=8, - number=80, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='volume', full_name='ContractBar.volume', index=9, - number=90, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='open_interest', full_name='ContractBar.open_interest', index=10, - number=100, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='previous_close', full_name='ContractBar.previous_close', index=11, - number=110, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1183, - serialized_end=1409, -) - - -_BOOKORDER = _descriptor.Descriptor( - name='BookOrder', - full_name='BookOrder', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='side', full_name='BookOrder.side', index=0, - number=10, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price', full_name='BookOrder.price', index=1, - number=20, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='open_qty', full_name='BookOrder.open_qty', index=2, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='filled_qty', full_name='BookOrder.filled_qty', index=3, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='remaining_qty', full_name='BookOrder.remaining_qty', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='canceled_qty', full_name='BookOrder.canceled_qty', index=5, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='agres_fill_qty', full_name='BookOrder.agres_fill_qty', index=6, - number=62, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='agres_avg_price', full_name='BookOrder.agres_avg_price', index=7, - number=63, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pass_fill_qty', full_name='BookOrder.pass_fill_qty', index=8, - number=64, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='avg_price', full_name='BookOrder.avg_price', index=9, - number=65, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ticker', full_name='BookOrder.ticker', index=10, - number=70, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='update_time', full_name='BookOrder.update_time', index=11, - number=80, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderid', full_name='BookOrder.orderid', index=12, - number=90, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='traderid', full_name='BookOrder.traderid', index=13, - number=100, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1412, - serialized_end=1698, -) - - -_DEPTHITEM = _descriptor.Descriptor( - name='DepthItem', - full_name='DepthItem', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='level', full_name='DepthItem.level', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='b', full_name='DepthItem.b', index=1, - number=30, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='a', full_name='DepthItem.a', index=2, - number=40, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bs', full_name='DepthItem.bs', index=3, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='as', full_name='DepthItem.as', index=4, - number=60, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1700, - serialized_end=1772, -) - - -_MARKETDATA = _descriptor.Descriptor( - name='MarketData', - full_name='MarketData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='MarketData.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch', full_name='MarketData.epoch', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bar', full_name='MarketData.bar', index=2, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='quote', full_name='MarketData.quote', index=3, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='depth', full_name='MarketData.depth', index=4, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1774, - serialized_end=1898, -) - - -_FILLDATA = _descriptor.Descriptor( - name='FillData', - full_name='FillData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='agressiveid', full_name='FillData.agressiveid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='passiveid', full_name='FillData.passiveid', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price', full_name='FillData.price', index=2, - number=30, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='qty', full_name='FillData.qty', index=3, - number=40, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='agressive_side', full_name='FillData.agressive_side', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='microtime', full_name='FillData.microtime', index=5, - number=60, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1900, - serialized_end=2021, -) - - -_ORDERDATA = _descriptor.Descriptor( - name='OrderData', - full_name='OrderData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='OrderData.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='epoch', full_name='OrderData.epoch', index=1, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bookorders', full_name='OrderData.bookorders', index=2, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fills', full_name='OrderData.fills', index=3, - number=50, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2023, - serialized_end=2124, -) - - -_CONTRACT = _descriptor.Descriptor( - name='Contract', - full_name='Contract', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='symbol', full_name='Contract.symbol', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unit_size', full_name='Contract.unit_size', index=1, - number=20, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unit', full_name='Contract.unit', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price_quote', full_name='Contract.price_quote', index=3, - number=40, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price_quote_units', full_name='Contract.price_quote_units', index=4, - number=50, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='tic_min', full_name='Contract.tic_min', index=5, - number=60, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='tic_value', full_name='Contract.tic_value', index=6, - number=70, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='price_limit_percent', full_name='Contract.price_limit_percent', index=7, - number=80, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='initial_margin', full_name='Contract.initial_margin', index=8, - number=90, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='maint_margin', full_name='Contract.maint_margin', index=9, - number=100, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='position_limits', full_name='Contract.position_limits', index=10, - number=110, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trading_open_time', full_name='Contract.trading_open_time', index=11, - number=120, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trading_close_time', full_name='Contract.trading_close_time', index=12, - number=130, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2127, - serialized_end=2426, -) - - -_PRODUCT = _descriptor.Descriptor( - name='Product', - full_name='Product', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='ticker', full_name='Product.ticker', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='contract_symbol', full_name='Product.contract_symbol', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='expiration_date', full_name='Product.expiration_date', index=2, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='start_trading_date', full_name='Product.start_trading_date', index=3, - number=40, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_active', full_name='Product.is_active', index=4, - number=50, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2428, - serialized_end=2550, -) - - -_SCHEDULE = _descriptor.Descriptor( - name='Schedule', - full_name='Schedule', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='date', full_name='Schedule.date', index=0, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trading_open_time', full_name='Schedule.trading_open_time', index=1, - number=20, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trading_close_time', full_name='Schedule.trading_close_time', index=2, - number=30, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='product', full_name='Schedule.product', index=3, - number=40, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2552, - serialized_end=2648, -) - - -_TRADINGSESSION = _descriptor.Descriptor( - name='TradingSession', - full_name='TradingSession', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='session_id', full_name='TradingSession.session_id', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='schedule', full_name='TradingSession.schedule', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='prev_session_id', full_name='TradingSession.prev_session_id', index=2, - number=50, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2650, - serialized_end=2740, -) - - -_SESSIONSTATUS = _descriptor.Descriptor( - name='SessionStatus', - full_name='SessionStatus', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='estate', full_name='SessionStatus.estate', index=0, - number=10, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='session_id', full_name='SessionStatus.session_id', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2742, - serialized_end=2809, -) - - -_EXCHANGESTATUS = _descriptor.Descriptor( - name='ExchangeStatus', - full_name='ExchangeStatus', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='session', full_name='ExchangeStatus.session', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='status', full_name='ExchangeStatus.status', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2811, - serialized_end=2893, -) - - -_ACTIVECONTRACTPRODUCT = _descriptor.Descriptor( - name='ActiveContractProduct', - full_name='ActiveContractProduct', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='contract', full_name='ActiveContractProduct.contract', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='product', full_name='ActiveContractProduct.product', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='schedule', full_name='ActiveContractProduct.schedule', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2895, - serialized_end=3003, -) - - -_POSITION = _descriptor.Descriptor( - name='Position', - full_name='Position', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='position', full_name='Position.position', index=0, - number=10, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='avg_price', full_name='Position.avg_price', index=1, - number=20, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3005, - serialized_end=3052, -) - - -_ORDERFILLS = _descriptor.Descriptor( - name='OrderFills', - full_name='OrderFills', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='order', full_name='OrderFills.order', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fills', full_name='OrderFills.fills', index=1, - number=50, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3054, - serialized_end=3119, -) - - -_ACCOUNTSTATE_POSITIONSENTRY = _descriptor.Descriptor( - name='PositionsEntry', - full_name='AccountState.PositionsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='AccountState.PositionsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='AccountState.PositionsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=_b('8\001'), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3525, - serialized_end=3584, -) - -_ACCOUNTSTATE = _descriptor.Descriptor( - name='AccountState', - full_name='AccountState', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='sidepit_id', full_name='AccountState.sidepit_id', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pubkey', full_name='AccountState.pubkey', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='net_locked', full_name='AccountState.net_locked', index=2, - number=30, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pending_unlock', full_name='AccountState.pending_unlock', index=3, - number=40, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='realized_pnl', full_name='AccountState.realized_pnl', index=4, - number=50, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unrealized_pnl', full_name='AccountState.unrealized_pnl', index=5, - number=60, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='margin_required', full_name='AccountState.margin_required', index=6, - number=80, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='available_balance', full_name='AccountState.available_balance', index=7, - number=90, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='available_margin', full_name='AccountState.available_margin', index=8, - number=100, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_restricted', full_name='AccountState.is_restricted', index=9, - number=110, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='reduce_only', full_name='AccountState.reduce_only', index=10, - number=112, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='positions', full_name='AccountState.positions', index=11, - number=120, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='carried_position', full_name='AccountState.carried_position', index=12, - number=130, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='new_position', full_name='AccountState.new_position', index=13, - number=140, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='open_bids', full_name='AccountState.open_bids', index=14, - number=150, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='open_asks', full_name='AccountState.open_asks', index=15, - number=160, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_ACCOUNTSTATE_POSITIONSENTRY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3122, - serialized_end=3584, -) - - -_BTCLOCKS = _descriptor.Descriptor( - name='BtcLocks', - full_name='BtcLocks', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='txid', full_name='BtcLocks.txid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pubkey', full_name='BtcLocks.pubkey', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='btc_address', full_name='BtcLocks.btc_address', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lock_sats', full_name='BtcLocks.lock_sats', index=3, - number=40, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unlock_sats', full_name='BtcLocks.unlock_sats', index=4, - number=50, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_pending', full_name='BtcLocks.is_pending', index=5, - number=60, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3586, - serialized_end=3707, -) - - -_REQUESTREPLY = _descriptor.Descriptor( - name='RequestReply', - full_name='RequestReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='TypeMask', full_name='RequestReply.TypeMask', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='traderid', full_name='RequestReply.traderid', index=1, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ticker', full_name='RequestReply.ticker', index=2, - number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3709, - serialized_end=3775, -) - - -_REPLYREQUEST = _descriptor.Descriptor( - name='ReplyRequest', - full_name='ReplyRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='TypeMask', full_name='ReplyRequest.TypeMask', index=0, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='trader_positions', full_name='ReplyRequest.trader_positions', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='active_product', full_name='ReplyRequest.active_product', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='market_data', full_name='ReplyRequest.market_data', index=3, - number=40, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3778, - serialized_end=3933, -) - - -_TRADERPOSITIONORDERS_ORDERFILLSENTRY = _descriptor.Descriptor( - name='OrderfillsEntry', - full_name='TraderPositionOrders.OrderfillsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='TraderPositionOrders.OrderfillsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='TraderPositionOrders.OrderfillsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=_b('8\001'), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4116, - serialized_end=4178, -) - -_TRADERPOSITIONORDERS = _descriptor.Descriptor( - name='TraderPositionOrders', - full_name='TraderPositionOrders', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='traderid', full_name='TraderPositionOrders.traderid', index=0, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='symbol', full_name='TraderPositionOrders.symbol', index=1, - number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderfills', full_name='TraderPositionOrders.orderfills', index=2, - number=40, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='accountstate', full_name='TraderPositionOrders.accountstate', index=3, - number=50, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='locks', full_name='TraderPositionOrders.locks', index=4, - number=60, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_TRADERPOSITIONORDERS_ORDERFILLSENTRY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3936, - serialized_end=4178, -) - - -_ACTIVEPRODUCT = _descriptor.Descriptor( - name='ActiveProduct', - full_name='ActiveProduct', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='active_contract_product', full_name='ActiveProduct.active_contract_product', index=0, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='exchange_status', full_name='ActiveProduct.exchange_status', index=1, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='contractbar', full_name='ActiveProduct.contractbar', index=2, - number=30, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4181, - serialized_end=4330, -) - -_TRANSACTION.fields_by_name['new_order'].message_type = _NEWORDER -_TRANSACTION.fields_by_name['auction_bid'].message_type = _AUCTIONBID -_TRANSACTION.fields_by_name['unlock_req'].message_type = _UNLOCKREQUEST -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['new_order']) -_TRANSACTION.fields_by_name['new_order'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['cancel_orderid']) -_TRANSACTION.fields_by_name['cancel_orderid'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['auction_bid']) -_TRANSACTION.fields_by_name['auction_bid'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_TRANSACTION.oneofs_by_name['tx'].fields.append( - _TRANSACTION.fields_by_name['unlock_req']) -_TRANSACTION.fields_by_name['unlock_req'].containing_oneof = _TRANSACTION.oneofs_by_name['tx'] -_SIGNEDTRANSACTION.fields_by_name['transaction'].message_type = _TRANSACTION -_UNLOCKREQUEST.fields_by_name['minmax'].enum_type = _UNLOCKREQUESTAMOUNT -_EXCHANGEEVENT.fields_by_name['state'].enum_type = _EXCHANGESTATE -_TXBLOCKSTREAM.fields_by_name['estate'].enum_type = _EXCHANGESTATE -_TXBLOCKSTREAM.fields_by_name['epoch_event'].message_type = _EPOCHEVENT -_TXBLOCKSTREAM.fields_by_name['stx'].message_type = _SIGNEDTRANSACTION -_TXBLOCKSTREAM.fields_by_name['exchange_event'].message_type = _EXCHANGEEVENT -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['epoch_event']) -_TXBLOCKSTREAM.fields_by_name['epoch_event'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['stx']) -_TXBLOCKSTREAM.fields_by_name['stx'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_TXBLOCKSTREAM.oneofs_by_name['txepoch'].fields.append( - _TXBLOCKSTREAM.fields_by_name['exchange_event']) -_TXBLOCKSTREAM.fields_by_name['exchange_event'].containing_oneof = _TXBLOCKSTREAM.oneofs_by_name['txepoch'] -_MARKETDATA.fields_by_name['bar'].message_type = _EPOCHBAR -_MARKETDATA.fields_by_name['quote'].message_type = _MARKETQUOTE -_MARKETDATA.fields_by_name['depth'].message_type = _DEPTHITEM -_ORDERDATA.fields_by_name['bookorders'].message_type = _BOOKORDER -_ORDERDATA.fields_by_name['fills'].message_type = _FILLDATA -_TRADINGSESSION.fields_by_name['schedule'].message_type = _SCHEDULE -_SESSIONSTATUS.fields_by_name['estate'].enum_type = _EXCHANGESTATE -_EXCHANGESTATUS.fields_by_name['session'].message_type = _TRADINGSESSION -_EXCHANGESTATUS.fields_by_name['status'].message_type = _SESSIONSTATUS -_ACTIVECONTRACTPRODUCT.fields_by_name['contract'].message_type = _CONTRACT -_ACTIVECONTRACTPRODUCT.fields_by_name['product'].message_type = _PRODUCT -_ACTIVECONTRACTPRODUCT.fields_by_name['schedule'].message_type = _SCHEDULE -_ORDERFILLS.fields_by_name['order'].message_type = _BOOKORDER -_ORDERFILLS.fields_by_name['fills'].message_type = _FILLDATA -_ACCOUNTSTATE_POSITIONSENTRY.fields_by_name['value'].message_type = _POSITION -_ACCOUNTSTATE_POSITIONSENTRY.containing_type = _ACCOUNTSTATE -_ACCOUNTSTATE.fields_by_name['positions'].message_type = _ACCOUNTSTATE_POSITIONSENTRY -_REPLYREQUEST.fields_by_name['trader_positions'].message_type = _TRADERPOSITIONORDERS -_REPLYREQUEST.fields_by_name['active_product'].message_type = _ACTIVEPRODUCT -_REPLYREQUEST.fields_by_name['market_data'].message_type = _MARKETDATA -_TRADERPOSITIONORDERS_ORDERFILLSENTRY.fields_by_name['value'].message_type = _ORDERFILLS -_TRADERPOSITIONORDERS_ORDERFILLSENTRY.containing_type = _TRADERPOSITIONORDERS -_TRADERPOSITIONORDERS.fields_by_name['orderfills'].message_type = _TRADERPOSITIONORDERS_ORDERFILLSENTRY -_TRADERPOSITIONORDERS.fields_by_name['accountstate'].message_type = _ACCOUNTSTATE -_TRADERPOSITIONORDERS.fields_by_name['locks'].message_type = _BTCLOCKS -_ACTIVEPRODUCT.fields_by_name['active_contract_product'].message_type = _ACTIVECONTRACTPRODUCT -_ACTIVEPRODUCT.fields_by_name['exchange_status'].message_type = _EXCHANGESTATUS -_ACTIVEPRODUCT.fields_by_name['contractbar'].message_type = _CONTRACTBAR -DESCRIPTOR.message_types_by_name['Transaction'] = _TRANSACTION -DESCRIPTOR.message_types_by_name['SignedTransaction'] = _SIGNEDTRANSACTION -DESCRIPTOR.message_types_by_name['NewOrder'] = _NEWORDER -DESCRIPTOR.message_types_by_name['AuctionBid'] = _AUCTIONBID -DESCRIPTOR.message_types_by_name['UnlockRequest'] = _UNLOCKREQUEST -DESCRIPTOR.message_types_by_name['EpochEvent'] = _EPOCHEVENT -DESCRIPTOR.message_types_by_name['ExchangeEvent'] = _EXCHANGEEVENT -DESCRIPTOR.message_types_by_name['TxBlockStream'] = _TXBLOCKSTREAM -DESCRIPTOR.message_types_by_name['MarketQuote'] = _MARKETQUOTE -DESCRIPTOR.message_types_by_name['EpochBar'] = _EPOCHBAR -DESCRIPTOR.message_types_by_name['ContractBar'] = _CONTRACTBAR -DESCRIPTOR.message_types_by_name['BookOrder'] = _BOOKORDER -DESCRIPTOR.message_types_by_name['DepthItem'] = _DEPTHITEM -DESCRIPTOR.message_types_by_name['MarketData'] = _MARKETDATA -DESCRIPTOR.message_types_by_name['FillData'] = _FILLDATA -DESCRIPTOR.message_types_by_name['OrderData'] = _ORDERDATA -DESCRIPTOR.message_types_by_name['Contract'] = _CONTRACT -DESCRIPTOR.message_types_by_name['Product'] = _PRODUCT -DESCRIPTOR.message_types_by_name['Schedule'] = _SCHEDULE -DESCRIPTOR.message_types_by_name['TradingSession'] = _TRADINGSESSION -DESCRIPTOR.message_types_by_name['SessionStatus'] = _SESSIONSTATUS -DESCRIPTOR.message_types_by_name['ExchangeStatus'] = _EXCHANGESTATUS -DESCRIPTOR.message_types_by_name['ActiveContractProduct'] = _ACTIVECONTRACTPRODUCT -DESCRIPTOR.message_types_by_name['Position'] = _POSITION -DESCRIPTOR.message_types_by_name['OrderFills'] = _ORDERFILLS -DESCRIPTOR.message_types_by_name['AccountState'] = _ACCOUNTSTATE -DESCRIPTOR.message_types_by_name['BtcLocks'] = _BTCLOCKS -DESCRIPTOR.message_types_by_name['RequestReply'] = _REQUESTREPLY -DESCRIPTOR.message_types_by_name['ReplyRequest'] = _REPLYREQUEST -DESCRIPTOR.message_types_by_name['TraderPositionOrders'] = _TRADERPOSITIONORDERS -DESCRIPTOR.message_types_by_name['ActiveProduct'] = _ACTIVEPRODUCT -DESCRIPTOR.enum_types_by_name['UnlockRequestAmount'] = _UNLOCKREQUESTAMOUNT -DESCRIPTOR.enum_types_by_name['ReplyRequestTypes'] = _REPLYREQUESTTYPES -DESCRIPTOR.enum_types_by_name['ExchangeState'] = _EXCHANGESTATE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), dict( - DESCRIPTOR = _TRANSACTION, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Transaction) - )) -_sym_db.RegisterMessage(Transaction) - -SignedTransaction = _reflection.GeneratedProtocolMessageType('SignedTransaction', (_message.Message,), dict( - DESCRIPTOR = _SIGNEDTRANSACTION, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:SignedTransaction) - )) -_sym_db.RegisterMessage(SignedTransaction) - -NewOrder = _reflection.GeneratedProtocolMessageType('NewOrder', (_message.Message,), dict( - DESCRIPTOR = _NEWORDER, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:NewOrder) - )) -_sym_db.RegisterMessage(NewOrder) - -AuctionBid = _reflection.GeneratedProtocolMessageType('AuctionBid', (_message.Message,), dict( - DESCRIPTOR = _AUCTIONBID, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AuctionBid) - )) -_sym_db.RegisterMessage(AuctionBid) - -UnlockRequest = _reflection.GeneratedProtocolMessageType('UnlockRequest', (_message.Message,), dict( - DESCRIPTOR = _UNLOCKREQUEST, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:UnlockRequest) - )) -_sym_db.RegisterMessage(UnlockRequest) - -EpochEvent = _reflection.GeneratedProtocolMessageType('EpochEvent', (_message.Message,), dict( - DESCRIPTOR = _EPOCHEVENT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:EpochEvent) - )) -_sym_db.RegisterMessage(EpochEvent) - -ExchangeEvent = _reflection.GeneratedProtocolMessageType('ExchangeEvent', (_message.Message,), dict( - DESCRIPTOR = _EXCHANGEEVENT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ExchangeEvent) - )) -_sym_db.RegisterMessage(ExchangeEvent) - -TxBlockStream = _reflection.GeneratedProtocolMessageType('TxBlockStream', (_message.Message,), dict( - DESCRIPTOR = _TXBLOCKSTREAM, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TxBlockStream) - )) -_sym_db.RegisterMessage(TxBlockStream) - -MarketQuote = _reflection.GeneratedProtocolMessageType('MarketQuote', (_message.Message,), dict( - DESCRIPTOR = _MARKETQUOTE, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:MarketQuote) - )) -_sym_db.RegisterMessage(MarketQuote) - -EpochBar = _reflection.GeneratedProtocolMessageType('EpochBar', (_message.Message,), dict( - DESCRIPTOR = _EPOCHBAR, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:EpochBar) - )) -_sym_db.RegisterMessage(EpochBar) - -ContractBar = _reflection.GeneratedProtocolMessageType('ContractBar', (_message.Message,), dict( - DESCRIPTOR = _CONTRACTBAR, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ContractBar) - )) -_sym_db.RegisterMessage(ContractBar) - -BookOrder = _reflection.GeneratedProtocolMessageType('BookOrder', (_message.Message,), dict( - DESCRIPTOR = _BOOKORDER, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:BookOrder) - )) -_sym_db.RegisterMessage(BookOrder) - -DepthItem = _reflection.GeneratedProtocolMessageType('DepthItem', (_message.Message,), dict( - DESCRIPTOR = _DEPTHITEM, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:DepthItem) - )) -_sym_db.RegisterMessage(DepthItem) - -MarketData = _reflection.GeneratedProtocolMessageType('MarketData', (_message.Message,), dict( - DESCRIPTOR = _MARKETDATA, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:MarketData) - )) -_sym_db.RegisterMessage(MarketData) - -FillData = _reflection.GeneratedProtocolMessageType('FillData', (_message.Message,), dict( - DESCRIPTOR = _FILLDATA, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:FillData) - )) -_sym_db.RegisterMessage(FillData) - -OrderData = _reflection.GeneratedProtocolMessageType('OrderData', (_message.Message,), dict( - DESCRIPTOR = _ORDERDATA, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:OrderData) - )) -_sym_db.RegisterMessage(OrderData) - -Contract = _reflection.GeneratedProtocolMessageType('Contract', (_message.Message,), dict( - DESCRIPTOR = _CONTRACT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Contract) - )) -_sym_db.RegisterMessage(Contract) - -Product = _reflection.GeneratedProtocolMessageType('Product', (_message.Message,), dict( - DESCRIPTOR = _PRODUCT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Product) - )) -_sym_db.RegisterMessage(Product) - -Schedule = _reflection.GeneratedProtocolMessageType('Schedule', (_message.Message,), dict( - DESCRIPTOR = _SCHEDULE, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Schedule) - )) -_sym_db.RegisterMessage(Schedule) - -TradingSession = _reflection.GeneratedProtocolMessageType('TradingSession', (_message.Message,), dict( - DESCRIPTOR = _TRADINGSESSION, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TradingSession) - )) -_sym_db.RegisterMessage(TradingSession) - -SessionStatus = _reflection.GeneratedProtocolMessageType('SessionStatus', (_message.Message,), dict( - DESCRIPTOR = _SESSIONSTATUS, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:SessionStatus) - )) -_sym_db.RegisterMessage(SessionStatus) - -ExchangeStatus = _reflection.GeneratedProtocolMessageType('ExchangeStatus', (_message.Message,), dict( - DESCRIPTOR = _EXCHANGESTATUS, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ExchangeStatus) - )) -_sym_db.RegisterMessage(ExchangeStatus) - -ActiveContractProduct = _reflection.GeneratedProtocolMessageType('ActiveContractProduct', (_message.Message,), dict( - DESCRIPTOR = _ACTIVECONTRACTPRODUCT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ActiveContractProduct) - )) -_sym_db.RegisterMessage(ActiveContractProduct) - -Position = _reflection.GeneratedProtocolMessageType('Position', (_message.Message,), dict( - DESCRIPTOR = _POSITION, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:Position) - )) -_sym_db.RegisterMessage(Position) - -OrderFills = _reflection.GeneratedProtocolMessageType('OrderFills', (_message.Message,), dict( - DESCRIPTOR = _ORDERFILLS, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:OrderFills) - )) -_sym_db.RegisterMessage(OrderFills) - -AccountState = _reflection.GeneratedProtocolMessageType('AccountState', (_message.Message,), dict( - - PositionsEntry = _reflection.GeneratedProtocolMessageType('PositionsEntry', (_message.Message,), dict( - DESCRIPTOR = _ACCOUNTSTATE_POSITIONSENTRY, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AccountState.PositionsEntry) - )) - , - DESCRIPTOR = _ACCOUNTSTATE, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:AccountState) - )) -_sym_db.RegisterMessage(AccountState) -_sym_db.RegisterMessage(AccountState.PositionsEntry) - -BtcLocks = _reflection.GeneratedProtocolMessageType('BtcLocks', (_message.Message,), dict( - DESCRIPTOR = _BTCLOCKS, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:BtcLocks) - )) -_sym_db.RegisterMessage(BtcLocks) - -RequestReply = _reflection.GeneratedProtocolMessageType('RequestReply', (_message.Message,), dict( - DESCRIPTOR = _REQUESTREPLY, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:RequestReply) - )) -_sym_db.RegisterMessage(RequestReply) - -ReplyRequest = _reflection.GeneratedProtocolMessageType('ReplyRequest', (_message.Message,), dict( - DESCRIPTOR = _REPLYREQUEST, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ReplyRequest) - )) -_sym_db.RegisterMessage(ReplyRequest) - -TraderPositionOrders = _reflection.GeneratedProtocolMessageType('TraderPositionOrders', (_message.Message,), dict( - - OrderfillsEntry = _reflection.GeneratedProtocolMessageType('OrderfillsEntry', (_message.Message,), dict( - DESCRIPTOR = _TRADERPOSITIONORDERS_ORDERFILLSENTRY, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TraderPositionOrders.OrderfillsEntry) - )) - , - DESCRIPTOR = _TRADERPOSITIONORDERS, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:TraderPositionOrders) - )) -_sym_db.RegisterMessage(TraderPositionOrders) -_sym_db.RegisterMessage(TraderPositionOrders.OrderfillsEntry) - -ActiveProduct = _reflection.GeneratedProtocolMessageType('ActiveProduct', (_message.Message,), dict( - DESCRIPTOR = _ACTIVEPRODUCT, - __module__ = 'sidepit_api_pb2' - # @@protoc_insertion_point(class_scope:ActiveProduct) - )) -_sym_db.RegisterMessage(ActiveProduct) - - -_ACCOUNTSTATE_POSITIONSENTRY._options = None -_TRADERPOSITIONORDERS_ORDERFILLSENTRY._options = None +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11sidepit_api.proto\"\xcf\x01\n\x0bTransaction\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\n \x01(\x04\x12\x1e\n\tnew_order\x18\x14 \x01(\x0b\x32\t.NewOrderH\x00\x12\x18\n\x0e\x63\x61ncel_orderid\x18\x1e \x01(\tH\x00\x12\"\n\x0b\x61uction_bid\x18( \x01(\x0b\x32\x0b.AuctionBidH\x00\x12$\n\nunlock_req\x18\x32 \x01(\x0b\x32\x0e.UnlockRequestH\x00\x12\x12\n\nsidepit_id\x18\x65 \x01(\tB\x04\n\x02tx\"\x87\x01\n\x11SignedTransaction\x12\x19\n\x11signature_version\x18\x02 \x01(\x05\x12!\n\x0btransaction\x18\x0b \x01(\x0b\x32\x0c.Transaction\x12\x11\n\ttx_digest\x18\x15 \x01(\t\x12\x0e\n\x06pubkey\x18\x1f \x01(\t\x12\x11\n\tsignature\x18o \x01(\t\"Z\n\x13RejectedTransaction\x12!\n\x0btransaction\x18n \x01(\x0b\x32\x0c.Transaction\x12 \n\x0breject_code\x18x \x01(\x0e\x32\x0b.RejectCode\"E\n\x08NewOrder\x12\x0c\n\x04side\x18\x0b \x01(\x11\x12\x0c\n\x04size\x18\x14 \x01(\x05\x12\r\n\x05price\x18\x1e \x01(\x05\x12\x0e\n\x06ticker\x18( \x01(\t\"M\n\nAuctionBid\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\x15\n\rordering_salt\x18\x1e \x01(\t\x12\x0b\n\x03\x62id\x18( \x01(\x05\"\x8b\x01\n\rUnlockRequest\x12)\n\x06minmax\x18\x14 \x01(\x0e\x32\x19.UnlockRequest.AmountType\x12\x17\n\x0f\x65xplicit_amount\x18\x1e \x01(\x04\"6\n\nAmountType\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03MAX\x10\x01\x12\x07\n\x03MIN\x10\x02\x12\x0c\n\x08\x45XPLICIT\x10\x03\"H\n\nEpochEvent\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0c\n\x04hash\x18\x14 \x01(\t\x12\n\n\x02id\x18\x64 \x01(\t\x12\x11\n\tsignature\x18n \x01(\x0c\".\n\rExchangeEvent\x12\x1d\n\x05state\x18\n \x01(\x0e\x32\x0e.ExchangeState\"\xba\x01\n\rTxBlockStream\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x14 \x01(\x0e\x32\x0e.ExchangeState\x12\"\n\x0b\x65poch_event\x18\x19 \x01(\x0b\x32\x0b.EpochEventH\x00\x12!\n\x03stx\x18\x1f \x01(\x0b\x32\x12.SignedTransactionH\x00\x12(\n\x0e\x65xchange_event\x18( \x01(\x0b\x32\x0e.ExchangeEventH\x00\x42\t\n\x07txepoch\"\x9a\x01\n\x0bMarketQuote\x12\x0f\n\x07\x62idsize\x18\n \x01(\x05\x12\x0b\n\x03\x62id\x18\x14 \x01(\x05\x12\x0b\n\x03\x61sk\x18\x1e \x01(\x05\x12\x0f\n\x07\x61sksize\x18( \x01(\x05\x12\x0c\n\x04last\x18\x32 \x01(\x05\x12\x10\n\x08lastsize\x18< \x01(\x05\x12\x10\n\x08upordown\x18\x46 \x01(\x08\x12\x0e\n\x06ticker\x18P \x01(\t\x12\r\n\x05\x65poch\x18Z \x01(\x04\"q\n\x08\x45pochBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x0c\n\x04open\x18\x14 \x01(\x05\x12\x0c\n\x04high\x18\x1e \x01(\x05\x12\x0b\n\x03low\x18( \x01(\x05\x12\r\n\x05\x63lose\x18\x32 \x01(\x05\x12\x0e\n\x06volume\x18< \x01(\x05\"\xe2\x01\n\x0b\x43ontractBar\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\r\n\x05\x65poch\x18\x0f \x01(\x04\x12\x10\n\x08\x64\x61y_open\x18\x14 \x01(\x05\x12\x10\n\x08\x64\x61y_high\x18\x1e \x01(\x05\x12\x0f\n\x07\x64\x61y_low\x18( \x01(\x05\x12\x11\n\tday_close\x18\x32 \x01(\x05\x12\x12\n\nday_volume\x18< \x01(\x05\x12\x0c\n\x04high\x18\x46 \x01(\x05\x12\x0b\n\x03low\x18P \x01(\x05\x12\x0e\n\x06volume\x18Z \x01(\x05\x12\x15\n\ropen_interest\x18\x64 \x01(\x05\x12\x16\n\x0eprevious_close\x18n \x01(\x05\"\xb0\x02\n\tBookOrder\x12\x0c\n\x04side\x18\n \x01(\x11\x12\r\n\x05price\x18\x14 \x01(\x05\x12\x10\n\x08open_qty\x18\x1e \x01(\x05\x12\x12\n\nfilled_qty\x18( \x01(\x05\x12\x15\n\rremaining_qty\x18\x32 \x01(\x05\x12\x14\n\x0c\x63\x61nceled_qty\x18< \x01(\x05\x12\x16\n\x0e\x61gres_fill_qty\x18> \x01(\x05\x12\x17\n\x0f\x61gres_avg_price\x18? \x01(\x02\x12\x15\n\rpass_fill_qty\x18@ \x01(\x05\x12\x11\n\tavg_price\x18\x41 \x01(\x02\x12\x0e\n\x06ticker\x18\x46 \x01(\t\x12\x13\n\x0bupdate_time\x18P \x01(\t\x12\x0f\n\x07orderid\x18Z \x01(\t\x12\x10\n\x08traderid\x18\x64 \x01(\t\x12\x10\n\x08sequence\x18x \x01(\x04\"H\n\tDepthItem\x12\r\n\x05level\x18\n \x01(\x05\x12\t\n\x01\x62\x18\x1e \x01(\x05\x12\t\n\x01\x61\x18( \x01(\x05\x12\n\n\x02\x62s\x18\x32 \x01(\x05\x12\n\n\x02\x61s\x18< \x01(\x05\"\x8c\x01\n\nMarketData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0e\n\x06ticker\x18\x0c \x01(\t\x12\x16\n\x03\x62\x61r\x18\x14 \x01(\x0b\x32\t.EpochBar\x12\x1b\n\x05quote\x18\x1e \x01(\x0b\x32\x0c.MarketQuote\x12\x19\n\x05\x64\x65pth\x18( \x03(\x0b\x32\n.DepthItem\"y\n\x08\x46illData\x12\x13\n\x0b\x61gressiveid\x18\n \x01(\t\x12\x11\n\tpassiveid\x18\x14 \x01(\t\x12\r\n\x05price\x18\x1e \x01(\r\x12\x0b\n\x03qty\x18( \x01(\r\x12\x16\n\x0e\x61gressive_side\x18\x32 \x01(\x05\x12\x11\n\tmicrotime\x18< \x01(\x04\"u\n\tOrderData\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x0e\n\x06ticker\x18\x0c \x01(\t\x12\x1e\n\nbookorders\x18( \x03(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xee\x02\n\x08\x43ontract\x12\x0e\n\x06symbol\x18\n \x01(\t\x12\x11\n\tunit_size\x18\x14 \x01(\r\x12\x0c\n\x04unit\x18\x1e \x01(\t\x12\x13\n\x0bprice_quote\x18( \x01(\t\x12\x19\n\x11price_quote_units\x18\x32 \x01(\x05\x12\x0f\n\x07tic_min\x18< \x01(\r\x12\x11\n\ttic_value\x18\x46 \x01(\r\x12\x1b\n\x13price_limit_percent\x18P \x01(\x05\x12\x16\n\x0einitial_margin\x18Z \x01(\x04\x12\x14\n\x0cmaint_margin\x18\x64 \x01(\x04\x12\x17\n\x0fposition_limits\x18n \x01(\x05\x12\x19\n\x11trading_open_time\x18x \x01(\x04\x12\x1b\n\x12trading_close_time\x18\x82\x01 \x01(\x04\x12\x1f\n\x16trading_open_time_zone\x18\x8c\x01 \x01(\t\x12 \n\x17trading_close_time_zone\x18\x96\x01 \x01(\t\"z\n\x07Product\x12\x0e\n\x06ticker\x18\n \x01(\t\x12\x17\n\x0f\x63ontract_symbol\x18\x14 \x01(\t\x12\x17\n\x0f\x65xpiration_date\x18\x1e \x01(\x04\x12\x1a\n\x12start_trading_date\x18( \x01(\x04\x12\x11\n\tis_active\x18\x32 \x01(\x08\"`\n\x08Schedule\x12\x0c\n\x04\x64\x61te\x18\n \x01(\x04\x12\x19\n\x11trading_open_time\x18\x14 \x01(\x04\x12\x1a\n\x12trading_close_time\x18\x1e \x01(\x04\x12\x0f\n\x07product\x18( \x03(\t\"Z\n\x0eTradingSession\x12\x12\n\nsession_id\x18\n \x01(\t\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x17\n\x0fprev_session_id\x18\x32 \x01(\t\"C\n\rSessionStatus\x12\x1e\n\x06\x65state\x18\n \x01(\x0e\x32\x0e.ExchangeState\x12\x12\n\nsession_id\x18\x14 \x01(\t\"R\n\x0e\x45xchangeStatus\x12 \n\x07session\x18\n \x01(\x0b\x32\x0f.TradingSession\x12\x1e\n\x06status\x18\x14 \x01(\x0b\x32\x0e.SessionStatus\"l\n\x15\x41\x63tiveContractProduct\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x19\n\x07product\x18\x14 \x01(\x0b\x32\x08.Product\x12\x1b\n\x08schedule\x18\x1e \x01(\x0b\x32\t.Schedule\"p\n\x18\x43ontractScheduleProducts\x12\x1b\n\x08\x63ontract\x18\n \x01(\x0b\x32\t.Contract\x12\x1b\n\x08schedule\x18\x14 \x01(\x0b\x32\t.Schedule\x12\x1a\n\x08products\x18\x1e \x03(\x0b\x32\x08.Product\"@\n\x08Position\x12\x10\n\x08position\x18\n \x01(\x11\x12\x11\n\tavg_price\x18\x15 \x01(\x02\x12\x0f\n\x07old_avg\x18\x14 \x01(\r\"A\n\nOrderFills\x12\x19\n\x05order\x18\n \x01(\x0b\x32\n.BookOrder\x12\x18\n\x05\x66ills\x18\x32 \x03(\x0b\x32\t.FillData\"\xd4\x03\n\x0fXXXAccountState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x16\n\x0eunrealized_pnl\x18< \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12\x32\n\tpositions\x18x \x03(\x0b\x32\x1f.XXXAccountState.PositionsEntry\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\x1a;\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x18\n\x05value\x18\x02 \x01(\x0b\x32\t.Position:\x02\x38\x01\"y\n\x08\x42tcLocks\x12\x0c\n\x04txid\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x13\n\x0b\x62tc_address\x18\x1e \x01(\t\x12\x11\n\tlock_sats\x18( \x01(\x04\x12\x13\n\x0bunlock_sats\x18\x32 \x01(\x04\x12\x12\n\nis_pending\x18< \x01(\x08\"\xa5\x01\n\rActiveProduct\x12\x0e\n\x06ticker\x18\x02 \x01(\t\x12\x37\n\x17\x61\x63tive_contract_product\x18\n \x01(\x0b\x32\x16.ActiveContractProduct\x12(\n\x0f\x65xchange_status\x18\x14 \x01(\x0b\x32\x0f.ExchangeStatus\x12!\n\x0b\x63ontractbar\x18\x1e \x01(\x0b\x32\x0c.ContractBar\"\xa3\x01\n\x0b\x45pochOrders\x12\r\n\x05\x65poch\x18\n \x01(\x04\x12\x1e\n\x06\x65state\x18\x0f \x01(\x0e\x32\x0e.ExchangeState\x12(\n\x06orders\x18\x14 \x03(\x0b\x32\x18.EpochOrders.OrdersEntry\x1a;\n\x0bOrdersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.Transaction:\x02\x38\x01\"\x86\x01\n\x0ePositionMargin\x12\x14\n\x0crealized_pnl\x18\x32 \x01(\x03\x12\x17\n\x0fmargin_required\x18P \x01(\x03\x12\x13\n\x0breduce_only\x18p \x01(\x05\x12\x19\n\x10\x63\x61rried_position\x18\x82\x01 \x01(\x11\x12\x15\n\x0cnew_position\x18\x8c\x01 \x01(\x11\"\x8d\x01\n\x15\x41\x63\x63ountTickerPosition\x12\x0e\n\x06ticker\x18\x01 \x01(\t\x12\x1b\n\x08position\x18\n \x01(\x0b\x32\t.Position\x12\x1f\n\x06margin\x18\x14 \x01(\x0b\x32\x0f.PositionMargin\x12\x12\n\topen_bids\x18\x96\x01 \x01(\x05\x12\x12\n\topen_asks\x18\xa0\x01 \x01(\x05\"\xde\x03\n\x14\x41\x63\x63ountContractState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x0e\n\x06symbol\x18q \x01(\t\x12\x1f\n\x06margin\x18s \x01(\x0b\x32\x0f.PositionMargin\x12\x37\n\tpositions\x18y \x03(\x0b\x32$.AccountContractState.PositionsEntry\x12\x1e\n\x15\x63\x61rried_open_interest\x18\xc8\x01 \x01(\x11\x12\x1a\n\x11net_open_interest\x18\xd2\x01 \x01(\x11\x12\x1c\n\x13\x62id_margin_required\x18\xdc\x01 \x01(\x05\x12\x1c\n\x13\x61sk_margin_required\x18\xe6\x01 \x01(\x05\x1aH\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.AccountTickerPosition:\x02\x38\x01\"\xb6\x02\n\x0e\x43ontractMargin\x12\x0e\n\x06symbol\x18q \x01(\t\x12\x1f\n\x06margin\x18s \x01(\x0b\x32\x0f.PositionMargin\x12\x31\n\tpositions\x18y \x03(\x0b\x32\x1e.ContractMargin.PositionsEntry\x12\x1e\n\x15\x63\x61rried_open_interest\x18\xc8\x01 \x01(\x11\x12\x1a\n\x11net_open_interest\x18\xd2\x01 \x01(\x11\x12\x1c\n\x13\x62id_margin_required\x18\xdc\x01 \x01(\x05\x12\x1c\n\x13\x61sk_margin_required\x18\xe6\x01 \x01(\x05\x1aH\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.AccountTickerPosition:\x02\x38\x01\"\xbd\x02\n\x12\x41\x63\x63ountMarginState\x12\x12\n\nsidepit_id\x18\n \x01(\t\x12\x0e\n\x06pubkey\x18\x14 \x01(\t\x12\x12\n\nnet_locked\x18\x1e \x01(\x03\x12\x16\n\x0epending_unlock\x18( \x01(\x03\x12\x19\n\x11\x61vailable_balance\x18Z \x01(\x03\x12\x18\n\x10\x61vailable_margin\x18\x64 \x01(\x03\x12\x15\n\ris_restricted\x18n \x01(\x08\x12\x42\n\x10\x63ontract_margins\x18y \x03(\x0b\x32(.AccountMarginState.ContractMarginsEntry\x1aG\n\x14\x43ontractMarginsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.ContractMargin:\x02\x38\x01\"B\n\x0cRequestReply\x12\x10\n\x08TypeMask\x18\x01 \x01(\x05\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06ticker\x18\x1e \x01(\t\"\x9b\x01\n\x0cReplyRequest\x12\x10\n\x08TypeMask\x18\n \x01(\x05\x12/\n\x10trader_positions\x18\x14 \x01(\x0b\x32\x15.TraderPositionOrders\x12&\n\x0e\x61\x63tive_product\x18\x1e \x01(\x0b\x32\x0e.ActiveProduct\x12 \n\x0bmarket_data\x18( \x01(\x0b\x32\x0b.MarketData\"\xf8\x01\n\x14TraderPositionOrders\x12\x10\n\x08traderid\x18\n \x01(\t\x12\x0e\n\x06symbol\x18\x14 \x01(\t\x12\x39\n\norderfills\x18( \x03(\x0b\x32%.TraderPositionOrders.OrderfillsEntry\x12)\n\x0c\x61\x63\x63ountstate\x18\x32 \x01(\x0b\x32\x13.AccountMarginState\x12\x18\n\x05locks\x18< \x03(\x0b\x32\t.BtcLocks\x1a>\n\x0fOrderfillsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1a\n\x05value\x18\x02 \x01(\x0b\x32\x0b.OrderFills:\x02\x38\x01*\x9c\x01\n\nRejectCode\x12\x0b\n\x07RC_NONE\x10\x00\x12\r\n\tRC_VERIFY\x10\x01\x12\n\n\x06RC_DUP\x10\x02\x12\t\n\x05RC_ID\x10\x04\x12\n\n\x06RC_BAD\x10\x05\x12\r\n\tRC_REDUCE\x10\x06\x12\r\n\tRC_MARGIN\x10\x07\x12\t\n\x05RC_DK\x10\x08\x12\x0b\n\x07RC_CDUP\x10\t\x12\x0b\n\x07RC_CREJ\x10\n\x12\x0c\n\x08RC_OTHER\x10\x64*\xad\x01\n\rExchangeState\x12\x14\n\x10\x45XCHANGE_UNKNOWN\x10\x00\x12\x19\n\x15\x45XCHANGE_PENDING_OPEN\x10\x01\x12\x11\n\rEXCHANGE_OPEN\x10\x02\x12\x17\n\x13\x45XCHANGE_RECOVERING\x10\x03\x12\x14\n\x10\x45XCHANGE_CLOSING\x10\x04\x12\x14\n\x10\x45XCHANGE_SETTLED\x10\x05\x12\x13\n\x0f\x45XCHANGE_CLOSED\x10\x06*Y\n\x11ReplyRequestTypes\x12\x08\n\x04NONE\x10\x00\x12\x12\n\x0e\x41\x43TIVE_PRODUCT\x10\x01\x12\r\n\tPOSITIONS\x10\x02\x12\t\n\x05QUOTE\x10\x04\x12\x0c\n\x08SNAPSHOT\x10\x08\x62\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sidepit_api_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + _XXXACCOUNTSTATE_POSITIONSENTRY._options = None + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_options = b'8\001' + _EPOCHORDERS_ORDERSENTRY._options = None + _EPOCHORDERS_ORDERSENTRY._serialized_options = b'8\001' + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._options = None + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_options = b'8\001' + _CONTRACTMARGIN_POSITIONSENTRY._options = None + _CONTRACTMARGIN_POSITIONSENTRY._serialized_options = b'8\001' + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._options = None + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_options = b'8\001' + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._options = None + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_options = b'8\001' + _REJECTCODE._serialized_start=6325 + _REJECTCODE._serialized_end=6481 + _EXCHANGESTATE._serialized_start=6484 + _EXCHANGESTATE._serialized_end=6657 + _REPLYREQUESTTYPES._serialized_start=6659 + _REPLYREQUESTTYPES._serialized_end=6748 + _TRANSACTION._serialized_start=22 + _TRANSACTION._serialized_end=229 + _SIGNEDTRANSACTION._serialized_start=232 + _SIGNEDTRANSACTION._serialized_end=367 + _REJECTEDTRANSACTION._serialized_start=369 + _REJECTEDTRANSACTION._serialized_end=459 + _NEWORDER._serialized_start=461 + _NEWORDER._serialized_end=530 + _AUCTIONBID._serialized_start=532 + _AUCTIONBID._serialized_end=609 + _UNLOCKREQUEST._serialized_start=612 + _UNLOCKREQUEST._serialized_end=751 + _UNLOCKREQUEST_AMOUNTTYPE._serialized_start=697 + _UNLOCKREQUEST_AMOUNTTYPE._serialized_end=751 + _EPOCHEVENT._serialized_start=753 + _EPOCHEVENT._serialized_end=825 + _EXCHANGEEVENT._serialized_start=827 + _EXCHANGEEVENT._serialized_end=873 + _TXBLOCKSTREAM._serialized_start=876 + _TXBLOCKSTREAM._serialized_end=1062 + _MARKETQUOTE._serialized_start=1065 + _MARKETQUOTE._serialized_end=1219 + _EPOCHBAR._serialized_start=1221 + _EPOCHBAR._serialized_end=1334 + _CONTRACTBAR._serialized_start=1337 + _CONTRACTBAR._serialized_end=1563 + _BOOKORDER._serialized_start=1566 + _BOOKORDER._serialized_end=1870 + _DEPTHITEM._serialized_start=1872 + _DEPTHITEM._serialized_end=1944 + _MARKETDATA._serialized_start=1947 + _MARKETDATA._serialized_end=2087 + _FILLDATA._serialized_start=2089 + _FILLDATA._serialized_end=2210 + _ORDERDATA._serialized_start=2212 + _ORDERDATA._serialized_end=2329 + _CONTRACT._serialized_start=2332 + _CONTRACT._serialized_end=2698 + _PRODUCT._serialized_start=2700 + _PRODUCT._serialized_end=2822 + _SCHEDULE._serialized_start=2824 + _SCHEDULE._serialized_end=2920 + _TRADINGSESSION._serialized_start=2922 + _TRADINGSESSION._serialized_end=3012 + _SESSIONSTATUS._serialized_start=3014 + _SESSIONSTATUS._serialized_end=3081 + _EXCHANGESTATUS._serialized_start=3083 + _EXCHANGESTATUS._serialized_end=3165 + _ACTIVECONTRACTPRODUCT._serialized_start=3167 + _ACTIVECONTRACTPRODUCT._serialized_end=3275 + _CONTRACTSCHEDULEPRODUCTS._serialized_start=3277 + _CONTRACTSCHEDULEPRODUCTS._serialized_end=3389 + _POSITION._serialized_start=3391 + _POSITION._serialized_end=3455 + _ORDERFILLS._serialized_start=3457 + _ORDERFILLS._serialized_end=3522 + _XXXACCOUNTSTATE._serialized_start=3525 + _XXXACCOUNTSTATE._serialized_end=3993 + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_start=3934 + _XXXACCOUNTSTATE_POSITIONSENTRY._serialized_end=3993 + _BTCLOCKS._serialized_start=3995 + _BTCLOCKS._serialized_end=4116 + _ACTIVEPRODUCT._serialized_start=4119 + _ACTIVEPRODUCT._serialized_end=4284 + _EPOCHORDERS._serialized_start=4287 + _EPOCHORDERS._serialized_end=4450 + _EPOCHORDERS_ORDERSENTRY._serialized_start=4391 + _EPOCHORDERS_ORDERSENTRY._serialized_end=4450 + _POSITIONMARGIN._serialized_start=4453 + _POSITIONMARGIN._serialized_end=4587 + _ACCOUNTTICKERPOSITION._serialized_start=4590 + _ACCOUNTTICKERPOSITION._serialized_end=4731 + _ACCOUNTCONTRACTSTATE._serialized_start=4734 + _ACCOUNTCONTRACTSTATE._serialized_end=5212 + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_start=5140 + _ACCOUNTCONTRACTSTATE_POSITIONSENTRY._serialized_end=5212 + _CONTRACTMARGIN._serialized_start=5215 + _CONTRACTMARGIN._serialized_end=5525 + _CONTRACTMARGIN_POSITIONSENTRY._serialized_start=5140 + _CONTRACTMARGIN_POSITIONSENTRY._serialized_end=5212 + _ACCOUNTMARGINSTATE._serialized_start=5528 + _ACCOUNTMARGINSTATE._serialized_end=5845 + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_start=5774 + _ACCOUNTMARGINSTATE_CONTRACTMARGINSENTRY._serialized_end=5845 + _REQUESTREPLY._serialized_start=5847 + _REQUESTREPLY._serialized_end=5913 + _REPLYREQUEST._serialized_start=5916 + _REPLYREQUEST._serialized_end=6071 + _TRADERPOSITIONORDERS._serialized_start=6074 + _TRADERPOSITIONORDERS._serialized_end=6322 + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_start=6260 + _TRADERPOSITIONORDERS_ORDERFILLSENTRY._serialized_end=6322 # @@protoc_insertion_point(module_scope) diff --git a/users-cli/cli/sidepit_cli_handler.py b/users-cli/cli/sidepit_cli_handler.py index 04f7274..18e48a1 100644 --- a/users-cli/cli/sidepit_cli_handler.py +++ b/users-cli/cli/sidepit_cli_handler.py @@ -34,7 +34,7 @@ def balance_menu(self) -> None: if self.sidepit_manager.available_balance > 0: click.secho("'trade' ", fg="magenta") else: - click.secho("'info' get Ssidepit exchange information", fg="magenta") + click.secho("'info' get Sidepit exchange information", fg="magenta") click.secho("'quit'", fg="red") @@ -43,12 +43,15 @@ def setup_id(self) -> None: click.secho(f"Choose to create/import Sidepit_Id and store keys at: {self.sidepit_id_manager.wallet_file_path}", fg="cyan") click.secho("'create' New Sidepit Id on this computer", fg="green") click.secho("'import' Sidepit Id with 'wif' private keys", fg="magenta") + click.secho("'watch' Monitor a trader_id (read-only, no trading)", fg="yellow") click.secho("'manage' add or switch wallet", fg="magenta") click.secho("'quit'", fg="red") def trading_menu(self) -> None: self.sidepit_manager.print_last() - click.secho("\n'new', 'cancel', 'quote','product','pos','open' orders,'closed' orders, 'all' orders, 'lock','quit',", fg="green") + # Change color based on exchange status + menu_color = "green" if self.sidepit_manager.is_exchange_open() else "red" + click.secho("\n'new', 'cancel', 'quote','product','pos','open' orders,'closed' orders, 'all' orders, 'tickers', 'wallet','quit',", fg=menu_color) # click.secho("'sell'", fg="red") # click.secho("'cancel'", fg="blue") # click.secho("'quote'", fg="blue") @@ -67,14 +70,20 @@ def print_trading(self): def ask_user(self, prompt_text, default=None): return click.prompt(prompt_text, default=default) - def do_neworder(self, side, price, size): + def do_neworder(self, side, price, size): + if self.sidepit_id_manager.is_watch_only(): + click.secho("Cannot place orders in watch-only mode. This ID is read-only.", fg='red') + return self.sidepit_api_trader.do_neworder(side, price, size) - def do_cancel(self, oid): - return "orderid" + def do_cancel(self, oid): + if self.sidepit_id_manager.is_watch_only(): + click.secho("Cannot cancel orders in watch-only mode. This ID is read-only.", fg='red') + return + self.sidepit_api_trader.do_cancel(oid) def handle_trading_actions(self) -> None: - self.sidepit_api_trader = SidepitApiClient(self.sidepit_manager.sidepit_id,self.sidepit_id_manager) + self.sidepit_api_trader = SidepitApiClient(self.sidepit_manager, self.sidepit_id_manager) self.sidepit_manager.print_product() self.sidepit_manager.print_quote() @@ -108,6 +117,10 @@ def handle_trading_actions(self) -> None: if yn == 'y': self.do_cancel(oid) continue + elif action == "pos": + self.sidepit_manager.update_balance() + self.print_trading() + continue elif action == "quote": self.sidepit_manager.print_product() self.sidepit_manager.print_quote() @@ -129,8 +142,16 @@ def handle_trading_actions(self) -> None: self.sidepit_manager.update_balance() self.print_trading() self.sidepit_manager.print_all() - continue - elif action == "lock": + continue + elif action == "tickers": + self.sidepit_manager.list_tickers() + switch = self.ask_user("Switch ticker? (ticker name or 'n')", default='n') + if switch != 'n': + if self.sidepit_manager.switch_ticker(switch): + self.sidepit_manager.print_product() + self.sidepit_manager.print_quote() + continue + elif action == "wallet": self.handle_balance_actions() self.print_trading() @@ -178,6 +199,14 @@ def handle_key_actions(self) -> None: elif action == "import" or action == "wif": wif = click.prompt("Enter WIF private key") self.sidepit_id_manager.import_wif(wif) + elif action == "watch": + trader_id = click.prompt("Enter trader_id to monitor (bc1...)") + try: + self.sidepit_id_manager.set_watch_only_id(trader_id) + click.secho(f"Now watching trader: {trader_id} (read-only mode)", fg="yellow") + except ValueError as e: + click.secho(f"Error: {e}", fg="red") + continue self.new_id() def have_folder(self) ->bool: @@ -349,7 +378,7 @@ def print_account_action_list(self): click.secho("'switch' switch to a different wallet", fg="green") click.secho("'import' Sidepit Id with 'wif' private keys", fg="magenta") click.secho("'create' New Sidepit Id on this computer", fg="magenta") - click.secho("'quit'", fg="red") + click.secho("'back'", fg="red") def handle_accounts_actions(self): while True: @@ -357,7 +386,7 @@ def handle_accounts_actions(self): self.print_account_action_list() action = click.prompt("\nEnter action") - if action == "quit": + if action == "back": return elif action == "change name": old_name=click.prompt("\nEnter the name of the wallet you want to change") @@ -378,7 +407,7 @@ def handle_accounts_actions(self): if new_active_wallet_name == self.sidepit_id_manager.active_wallet: continue self.switch_wallet(new_active_wallet_name) - continue + return elif action == "import": wif = click.prompt("Enter WIF private key") wallet_name=self.sidepit_id_manager.import_wif(wif) diff --git a/users-cli/cli/sidepit_manager.py b/users-cli/cli/sidepit_manager.py index d2dcf22..3e72480 100644 --- a/users-cli/cli/sidepit_manager.py +++ b/users-cli/cli/sidepit_manager.py @@ -8,6 +8,10 @@ from rich.console import Console from rich.table import Table from constants import SIDEPIT_API_URL +import sys +import os +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../python-client')) +from req_client import SidepitReqClient class SidepitManager: DEBUG=False @@ -18,7 +22,25 @@ def __init__(self) -> None: self.net_locked = 0 self.pnding_locked_balance = 0 self.positions = None - + self.req_client = None + self.active_ticker = None + self.available_tickers = [] + self.exchange_status = None # Track exchange state + self._init_req_client() + + def _init_req_client(self): + """Initialize the request client for protobuf communication""" + try: + from constants import SIDEPIT_REQ_HOST, SIDEPIT_REQ_PORT, SIDEPIT_REQ_PROTOCOL + self.req_client = SidepitReqClient( + protocol=SIDEPIT_REQ_PROTOCOL, + host=SIDEPIT_REQ_HOST, + port=SIDEPIT_REQ_PORT + ) + except Exception as e: + click.secho(f"Warning: Could not connect to request server: {e}", fg='yellow') + self.req_client = None + def use_id(self, sidepit_id) -> None: self.sidepit_id = sidepit_id # print("using id", sidepit_id) @@ -26,13 +48,13 @@ def use_id(self, sidepit_id) -> None: def update_balance(self): try: - url = SIDEPIT_API_URL + "request_position/" + self.sidepit_id - response = requests.get(url) - if response.status_code != 200: - click.secho(f"Error getting locked balance: {response.text}", fg='red') - return - - self.get_positions_json = response.json() + # Use protobuf client - store protobuf object + self.positions_data = self.req_client.get_positions(self.sidepit_id) + # For compatibility with existing code that needs JSON + from google.protobuf.json_format import MessageToDict + self.get_positions_json = MessageToDict(self.positions_data, + preserving_proto_field_name=True, + including_default_value_fields=True) self.terminal.new_data(self.get_positions_json) tx_arr=[int(tx['lock_sats']) for tx in self.get_positions_json['locks'] if tx['is_pending']] @@ -42,7 +64,18 @@ def update_balance(self): if self.accountstate is not None: self.available_balance = int(self.accountstate['available_balance']) self.net_locked = int(self.accountstate['net_locked']) - self.positions = self.accountstate['positions'] + + # Extract positions from new nested structure + self.positions = {} + contract_margins = self.accountstate.get('contract_margins', {}) + for symbol, contract_margin in contract_margins.items(): + ticker_positions = contract_margin.get('positions', {}) + for ticker, ticker_pos_data in ticker_positions.items(): + position_data = ticker_pos_data.get('position', {}) + self.positions[ticker] = { + 'position': position_data.get('position', 0), + 'avg_price': position_data.get('avg_price', 0.0) + } if self.DEBUG: @@ -78,7 +111,7 @@ def print_pos(self, pretty: bool = False ): if pretty: self.terminal.display_trader_info() self.terminal.create_account_table() - self.terminal.display_positions() + self.terminal.display_positions(self.active_ticker) return print("Positions:") @@ -294,23 +327,60 @@ def print_all(self, pretty = False): # filtered_rows = [[row[i] for i in columns_to_keep] for row in rows] # print(tabulate(filtered_rows, headers=filtered_headers, tablefmt="pretty")) - def print_quote(self): - self.quotron.display(self.get_api("quote")) - - def print_last(self): - self.quotron.display(self.get_api("quote"), True) - - def print_product(self): - self.quotron.display_product(self.get_api("active_product")) - - def get_api(self, api): - url = SIDEPIT_API_URL + api + "/" - response = requests.get(url) - if response.status_code != 200: - click.secho(f"Error getting quote: {response.text}", fg='red') + def print_quote(self): + quote_pb = self.req_client.get_quote(self.active_ticker) + self.quotron.display(quote_pb) + + def print_last(self): + quote_pb = self.req_client.get_quote(self.active_ticker) + self.quotron.display(quote_pb, last_only=True) + + def list_tickers(self): + """Display available tickers from schedule""" + if not self.available_tickers: + click.secho("No tickers available. Call print_product first.", fg='yellow') return + click.secho("\nAvailable Tickers:", fg='cyan') + for i, ticker in enumerate(self.available_tickers, 1): + marker = "[CURRENT]" if ticker == self.active_ticker else "" + click.secho(f" {i}. {ticker} {marker}", fg='green' if marker else 'white') + + def switch_ticker(self, ticker_or_index): + """Switch to a different ticker by name or number""" + # Try to parse as numeric index + try: + index = int(ticker_or_index) - 1 # Convert 1-based to 0-based + if 0 <= index < len(self.available_tickers): + ticker = self.available_tickers[index] + else: + click.secho(f"Invalid ticker number. Choose 1-{len(self.available_tickers)}", fg='red') + return False + except ValueError: + # Not a number, treat as ticker name + ticker = ticker_or_index - return response.json() + if ticker not in self.available_tickers: + click.secho(f"Ticker {ticker} not available in schedule", fg='red') + return False + self.active_ticker = ticker + click.secho(f"Switched to ticker: {ticker}", fg='green') + return True + + def print_product(self): + product_pb = self.req_client.get_active_product(self.active_ticker) + # Extract and store active ticker from product + if product_pb.active_contract_product.product.ticker: + self.active_ticker = product_pb.active_contract_product.product.ticker + # Extract available tickers from schedule + if product_pb.exchange_status.session.schedule.product: + self.available_tickers = list(product_pb.exchange_status.session.schedule.product) + # Store exchange status + self.exchange_status = product_pb.exchange_status.status.estate + self.quotron.display_product(product_pb) + + def is_exchange_open(self): + """Check if exchange is open (status = 2 = EXCHANGE_OPEN)""" + return self.exchange_status == 2 def active(self) -> bool: return self.pnding_locked_balance > 0 or self.available_balance != 0 or self.net_locked > 0 diff --git a/users-cli/cli/sidepit_position.py b/users-cli/cli/sidepit_position.py index 70e8ca7..10b8c0d 100644 --- a/users-cli/cli/sidepit_position.py +++ b/users-cli/cli/sidepit_position.py @@ -6,11 +6,8 @@ class SidepitTrader: ACCOUNT_METRICS = [ ("Net Locked", "net_locked"), - ("Margin Required", "margin_required"), ("Available Balance", "available_balance"), ("Available Margin", "available_margin"), - ("Realized PnL", "realized_pnl"), - ("Unrealized PnL", "unrealized_pnl") ] def __init__(self) -> None: @@ -52,9 +49,33 @@ def create_account_table(self) -> None: # Columns table.add_column("Metric", style="cyan") table.add_column("Value", style="bold yellow") - # Rows + + # Basic account metrics for label, key in self.ACCOUNT_METRICS: - table.add_row(label, self.account_state[key]) + value = self.account_state.get(key, 0) if isinstance(self.account_state, dict) else getattr(self.account_state, key, 0) + table.add_row(label, str(value)) + + # Add contract-specific margin data if available + if isinstance(self.account_state, dict): + contract_margins = self.account_state.get('contract_margins', {}) + else: + contract_margins = getattr(self.account_state, 'contract_margins', {}) + + if contract_margins: + table.add_row("", "") # Separator + for symbol, contract_margin in contract_margins.items(): + if isinstance(contract_margin, dict): + margin = contract_margin.get('margin', {}) + margin_required = margin.get('margin_required', 0) + realized_pnl = margin.get('realized_pnl', 0) + else: + margin = getattr(contract_margin, 'margin', None) + margin_required = getattr(margin, 'margin_required', 0) if margin else 0 + realized_pnl = getattr(margin, 'realized_pnl', 0) if margin else 0 + + table.add_row(f"{symbol} Margin Required", str(margin_required)) + table.add_row(f"{symbol} Realized PnL", str(realized_pnl)) + # Print self.console.print(table) @@ -108,21 +129,30 @@ def display_fills(self, fills) -> None: # self.console.print(panel) - def display_positions(self) -> None: + def display_positions(self, active_ticker=None) -> None: if self.positions: - # Table - table = Table(title="Open Positions", header_style="bold green") - # Columns - table.add_column("Ticker", style="cyan") - table.add_column("Position Size", style="bold yellow") - table.add_column("Average Price", style="bold yellow") - # Rows + # Filter positions: show active ticker + any with non-zero position + filtered_positions = {} for ticker, details in self.positions.items(): - position = str(details["position"]) - avg_price = str(details["avg_price"]) - table.add_row(ticker, position, avg_price) - # Print - self.console.print(table) + position_size = details.get("position", 0) + # Show if it's the active ticker OR has non-zero position + if ticker == active_ticker or position_size != 0: + filtered_positions[ticker] = details + + if filtered_positions: + # Table + table = Table(title="Open Positions", header_style="bold green") + # Columns + table.add_column("Ticker", style="cyan") + table.add_column("Position Size", style="bold yellow") + table.add_column("Average Price", style="bold yellow") + # Rows + for ticker, details in filtered_positions.items(): + position = str(details["position"]) + avg_price = str(details["avg_price"]) + table.add_row(ticker, position, avg_price) + # Print + self.console.print(table) # else: # panel = Panel("[bold red]No open positions.[/bold red]", border_style="red") # self.console.print(panel) @@ -154,14 +184,29 @@ def new_data(self, data): try: self.data = data self.account_state = self.data.get("accountstate", None) - self.positions = self.account_state.get("positions", None) + + # Extract positions from new nested structure + self.positions = {} + if self.account_state: + contract_margins = self.account_state.get('contract_margins', {}) + # Flatten positions from all contracts + for symbol, contract_margin in contract_margins.items(): + ticker_positions = contract_margin.get('positions', {}) + for ticker, ticker_pos_data in ticker_positions.items(): + position_data = ticker_pos_data.get('position', {}) + self.positions[ticker] = { + 'position': position_data.get('position', 0), + 'avg_price': position_data.get('avg_price', 0.0) + } + self.orderfills = self.data.get("orderfills", None) self.locks = self.data.get("locks", None) except Exception as e: + print(f"Error processing position data: {e}") return - def display(self) -> None: + def display(self, active_ticker=None) -> None: self.display_trader_info() # Display Account State if not self.account_state: @@ -170,7 +215,7 @@ def display(self) -> None: self.create_account_table() # Display Open Positions - self.display_positions() + self.display_positions(active_ticker) # Display Order Fills self.display_order_details() # Display Locks diff --git a/users-cli/cli/sidepit_quote.py b/users-cli/cli/sidepit_quote.py index 15368cb..013b197 100644 --- a/users-cli/cli/sidepit_quote.py +++ b/users-cli/cli/sidepit_quote.py @@ -45,30 +45,19 @@ def __init__(self) -> None: self.local_timezone = str(datetime.now(timezone.utc).astimezone().tzinfo) - def display(self, data, last_only = False): + def display(self, data, last_only=False): # Convert epoch to datetime - epoch_time = datetime.fromtimestamp(int(data["epoch"]) / 1000) - - # Display summary info - - # summary_table = Table(show_header=True, header_style="bold magenta") - # summary_table.add_column("USDBTC") - # summary_table.add_column("Epoch") - # summary_table.add_row(str(last_price), str(epoch_time)) - # self.console.print(summary_table) - - # Display last price with up/down arrow - # self.console.rule("[bold green]Last Price") - # print(data) - quote = data.get("quote", None) - - if quote == None: - return + epoch_time = datetime.fromtimestamp(data.epoch / 1000) + + # Get quote data + quote = data.quote + if not quote.ticker and not quote.bid: # Empty quote + return - arrow = "↑" if quote["upordown"] else "↓" - arrow_color = "green" if quote["upordown"] else "red" + arrow = "↑" if quote.upordown else "↓" + arrow_color = "green" if quote.upordown else "red" print("\n") - last_price = Text("USDBTC ") + Text(f"{quote['last']} {arrow}", style=arrow_color) + Text(" SATS/$ ") + Text(f"{epoch_time}") + last_price = Text("USDBTC ") + Text(f"{quote.last} {arrow}", style=arrow_color) + Text(" SATS/$ ") + Text(f"{epoch_time}") last_price.stylize("bold") if not last_only: @@ -79,35 +68,35 @@ def display(self, data, last_only = False): self.console.rule(last_price) # Display quote info - quote = data["quote"] quote_table = Table(show_header=True, header_style="bold yellow") quote_table.add_column("Bid Size") quote_table.add_column("Bid") quote_table.add_column("Ask") quote_table.add_column("Ask Size") quote_table.add_row( - str(quote["bidsize"]), - str(quote["bid"]), - str(quote["ask"]), - str(quote["asksize"]), + str(quote.bidsize), + str(quote.bid), + str(quote.ask), + str(quote.asksize), ) if not last_only: self.console.rule("[bold green]Quote Info") self.console.print(quote_table) + # Display depth depth_table = Table(show_header=True, header_style="bold white") depth_table.add_column("Bid Size") depth_table.add_column("Bid") depth_table.add_column("Ask") depth_table.add_column("Ask Size") - for level in data["depth"]: + for level in data.depth: depth_table.add_row( - str(level["bs"]) if level["bs"] != 0 else "N/A", - str(level["b"]) if level["b"] != 0 else "N/A", - str(level["a"]) if level["a"] != 0 else "N/A", - str(level["as"]) if level["as"] != 0 else "N/A", + str(level.bs) if level.bs != 0 else "N/A", + str(level.b) if level.b != 0 else "N/A", + str(level.a) if level.a != 0 else "N/A", + str(getattr(level, 'as', 0) if getattr(level, 'as', 0) != 0 else "N/A"), ) if not last_only: @@ -117,55 +106,63 @@ def display(self, data, last_only = False): product_data = { "active_contract_product": { "contract": { - "symbol": "TUSDBTC", - "unit_size": 100, + "symbol": "USDBTC", + "unit_size": 500, "unit": "USD", "price_quote": "SAT", "price_quote_units": 1, "tic_min": 1, - "tic_value": 100, + "tic_value": 500, "price_limit_percent": 25, - "initial_margin": "50000", - "maint_margin": "25000", - "position_limits": 10, - "trading_open_time": "79200000", - "trading_close_time": "75600000" + "initial_margin": "200000", + "maint_margin": "100000", + "position_limits": 200, + "trading_open_time": "50400000", + "trading_close_time": "7200000", + "trading_open_time_zone": "03:00:00 America/Los_Angeles", + "trading_close_time_zone": "00:00:00 America/Los_Angeles" }, "product": { - "ticker": "TUSDBTCZ24", - "contract_symbol": "TUSDBTC", - "expiration_date": "1735257600000", - "start_trading_date": "1727740800000", + "ticker": "USDBTCH26", + "contract_symbol": "USDBTC", + "expiration_date": "1774569600000", + "start_trading_date": "1758844800000", "is_active": True + }, + "schedule": { + "date": "1767744000000", + "trading_open_time": "1767697200000", + "trading_close_time": "1767772800000", + "product": ["USDBTCH26", "USDBTCM26"] } }, "exchange_status": { "session": { - "session_id": "1733443200000", + "session_id": "1767744000000", "schedule": { - "date": "1733443200000", - "trading_open_time": "1733436000000", - "trading_close_time": "1733518800000", - "product": ["TUSDBTCZ24"] + "date": "1767744000000", + "trading_open_time": "1767697200000", + "trading_close_time": "1767772800000", + "product": ["USDBTCH26", "USDBTCM26"] }, - "prev_session_id": "1733356800000" + "prev_session_id": "1767657600000" }, "status": { - "estate": "EXCHANGE_OPEN", - "session_id": "1733443200000" + "estate": "EXCHANGE_CLOSED", + "session_id": "1767744000000" } }, "contractbar": { - "day_open": 1010, - "day_high": 1010, - "day_low": 1010, - "day_close": 1010, - "day_volume": 3, - "high": 1025, - "low": 1010, - "volume": 44, - "open_interest": 44, - "previous_close": 1024, + "day_open": 1115, + "day_high": 1115, + "day_low": 1104, + "day_close": 1104, + "day_volume": 29, + "high": 1115, + "low": 999, + "volume": 90, + "open_interest": 90, + "previous_close": 1111, "ticker": "", "epoch": "0" } @@ -175,56 +172,72 @@ def convert_timestamp(self,ts,strfmt = "%Y-%m-%d %H:%M:%S "): return datetime.fromtimestamp(int(ts) / 1000).strftime(strfmt) + self.local_timezone def display_product(self, api_data): - # Convert timestamp to human-readable datetime - - # Contract Information Bar - contract = api_data["active_contract_product"]["contract"] - product = api_data["active_contract_product"]["product"] + # Extract protobuf objects + contract = api_data.active_contract_product.contract + product = api_data.active_contract_product.product + status = api_data.exchange_status.status + session = api_data.exchange_status.session + contractbar = api_data.contractbar + + # Convert enum to string name + try: + # Import the protobuf module to get enum names + import sys + import os + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../python-client/proto')) + from sidepit_api_pb2 import ExchangeState + exchange_status_str = ExchangeState.Name(status.estate) + except: + # Fallback to number if import fails + exchange_status_str = str(status.estate) + contract_info = f""" - [bold cyan]Symbol[/bold cyan]: {contract['symbol']} ({product['ticker']}) - [bold cyan]Expiration[/bold cyan]: {self.convert_timestamp(product['expiration_date'])} - [bold cyan]Unit[/bold cyan]: {contract['unit']} ({contract['unit_size']} {contract['unit']}) - [bold cyan]Quote[/bold cyan]: {contract['price_quote']} per {contract['price_quote_units']} {contract['unit']} - [bold cyan]Minimum Tic[/bold cyan]: {contract['tic_min']} - [bold cyan]Tic Value[/bold cyan]: {contract['tic_value']} {contract['price_quote']}S - [bold cyan]Margins (BTC)[/bold cyan]: Initial - {int(contract['initial_margin'])/1e8} / Maintenance - {int(contract['maint_margin'])/1e8} - [bold cyan]Position Limits[/bold cyan]: {contract['position_limits']} + [bold cyan]Symbol[/bold cyan]: {contract.symbol} ({product.ticker}) + [bold cyan]Expiration[/bold cyan]: {self.convert_timestamp(product.expiration_date)} + [bold cyan]Unit[/bold cyan]: {contract.unit} ({contract.unit_size} {contract.unit}) + [bold cyan]Quote[/bold cyan]: {contract.price_quote} per {contract.price_quote_units} {contract.unit} + [bold cyan]Minimum Tic[/bold cyan]: {contract.tic_min} + [bold cyan]Tic Value[/bold cyan]: {contract.tic_value} {contract.price_quote}S + [bold cyan]Margins (BTC)[/bold cyan]: Initial - {int(contract.initial_margin or 0)/1e8} / Maintenance - {int(contract.maint_margin or 0)/1e8} + [bold cyan]Position Limits[/bold cyan]: {contract.position_limits} [bold cyan]Trading Times[/bold cyan]: - Start - {self.convert_timestamp(contract['trading_open_time'],"%H:%M:%S ")} - End - {self.convert_timestamp(contract['trading_close_time'],"%H:%M:%S ")} + Start - {self.convert_timestamp(contract.trading_open_time,"%H:%M:%S ")} + End - {self.convert_timestamp(contract.trading_close_time,"%H:%M:%S ")} """ contract_panel = Panel(contract_info, title="Contract Details", border_style="green") # Session and Status Information - status = api_data["exchange_status"]["status"] - session = api_data["exchange_status"]["session"] + # Build ticker list + ticker_list = ", ".join(session.schedule.product) if session.schedule.product else "None" + active_marker = f" ([bold green]Current: {product.ticker}[/bold green])" if product.ticker else "" + session_info = f""" - [bold cyan]Exchange Status[/bold cyan]: {status['estate']} - [bold cyan]Session ID[/bold cyan]: {session['session_id']} + [bold cyan]Exchange Status[/bold cyan]: {exchange_status_str} + [bold cyan]Session ID[/bold cyan]: {session.session_id} + [bold cyan]Available Tickers[/bold cyan]: {ticker_list}{active_marker} [bold cyan]Session Times[/bold cyan]: - Start - {self.convert_timestamp(session['schedule']['trading_open_time'])} - End - {self.convert_timestamp(session['schedule']['trading_close_time'])} + Start - {self.convert_timestamp(session.schedule.trading_open_time)} + End - {self.convert_timestamp(session.schedule.trading_close_time)} """ session_panel = Panel(session_info, title="Session Information", border_style="blue") # Market Data Bar - contractbar = api_data["contractbar"] market_data_table = Table(title="Market Data", show_header=True, header_style="bold magenta") market_data_table.add_column("Metric", style="cyan") market_data_table.add_column("Value", style="bold yellow") - market_data_table.add_row("Day Open", str(contractbar["day_open"])) - market_data_table.add_row("Day High", str(contractbar["day_high"])) - market_data_table.add_row("Day Low", str(contractbar["day_low"])) - market_data_table.add_row("Day Close", str(contractbar["day_close"])) - market_data_table.add_row("Day Volume", str(contractbar["day_volume"])) - market_data_table.add_row("High", str(contractbar["high"])) - market_data_table.add_row("Low", str(contractbar["low"])) - market_data_table.add_row("Volume", str(contractbar["volume"])) - market_data_table.add_row("Open Interest", str(contractbar["open_interest"])) - market_data_table.add_row("Previous Close", str(contractbar["previous_close"])) + market_data_table.add_row("Day Open", str(contractbar.day_open)) + market_data_table.add_row("Day High", str(contractbar.day_high)) + market_data_table.add_row("Day Low", str(contractbar.day_low)) + market_data_table.add_row("Day Close", str(contractbar.day_close)) + market_data_table.add_row("Day Volume", str(contractbar.day_volume)) + market_data_table.add_row("High", str(contractbar.high)) + market_data_table.add_row("Low", str(contractbar.low)) + market_data_table.add_row("Volume", str(contractbar.volume)) + market_data_table.add_row("Open Interest", str(contractbar.open_interest)) + market_data_table.add_row("Previous Close", str(contractbar.previous_close)) # Display Panels self.console.print(contract_panel) diff --git a/users-cli/requirements.txt b/users-cli/requirements.txt index 4fb8e08..ea286d0 100644 --- a/users-cli/requirements.txt +++ b/users-cli/requirements.txt @@ -9,4 +9,5 @@ bitcoinlib tabulate rich protobuf==3.20.1 -pycoin \ No newline at end of file +pycoin +pynng