Gap
Core's SuiBetsExchange.fetchPositions() requires credentials.walletAddress (throws AuthenticationError otherwise). The TypeScript SDK's SuiBets class has a walletAddress constructor option; the Python SDK's SuiBets class has no wallet_address parameter at all — unlike every other wallet-gated exchange class in the same file. This is strictly worse than the TypeScript SDK, and distinct from the already-filed "TypeScript SDK SuiBetsOptions adds walletAddress but not a baseUrl credential field; Python SDK has the same gap" issue, which is about a different, single missing field (baseUrl) — not the total absence of wallet_address.
Core
core/src/exchanges/suibets/index.ts:137-148 requires credentials.walletAddress; SuibetsCredentials.walletAddress is defined at suibets/index.ts:15-20.
TypeScript SDK
Present — sdks/typescript/pmxt/client.ts:3523-3571 (SuiBetsOptions.walletAddress, plus a getCredentials() override that injects it into the sidecar payload).
Python SDK
Missing — sdks/python/pmxt/_exchanges.py:495-516. SuiBets.__init__ signature is (base_url=None, auto_start_server=None, pmxt_api_key=None) — no wallet_address parameter, and it is never passed to super().__init__(). By contrast, every other Python exchange class with wallet-gated reads in the same file accepts and forwards wallet_address: Polymarket (line 26/54), Limitless (87/111), Myriad (269/287), Opinion (307/331), Hunch (554/572).
Evidence
Grepped wallet_address across _exchanges.py and confirmed by class boundary (grep -n "^class \|wallet_address") that SuiBets (class starts line 495, next class Rain starts line 520) is the only wallet-relevant exchange class with zero wallet_address occurrences in its body.
Impact
There is no way to construct a Python SuiBets client that can ever call fetch_positions() — the attribute is never set on the instance in the first place, which is strictly worse than the TypeScript SDK, where at least the constructor plumbing exists (even though the sidecar dispatch gate, tracked separately, still blocks it end-to-end).
Found by automated Core-to-SDK surface coverage audit
Gap
Core's
SuiBetsExchange.fetchPositions()requirescredentials.walletAddress(throwsAuthenticationErrorotherwise). The TypeScript SDK'sSuiBetsclass has awalletAddressconstructor option; the Python SDK'sSuiBetsclass has nowallet_addressparameter at all — unlike every other wallet-gated exchange class in the same file. This is strictly worse than the TypeScript SDK, and distinct from the already-filed "TypeScript SDKSuiBetsOptionsaddswalletAddressbut not abaseUrlcredential field; Python SDK has the same gap" issue, which is about a different, single missing field (baseUrl) — not the total absence ofwallet_address.Core
core/src/exchanges/suibets/index.ts:137-148requirescredentials.walletAddress;SuibetsCredentials.walletAddressis defined atsuibets/index.ts:15-20.TypeScript SDK
Present —
sdks/typescript/pmxt/client.ts:3523-3571(SuiBetsOptions.walletAddress, plus agetCredentials()override that injects it into the sidecar payload).Python SDK
Missing —
sdks/python/pmxt/_exchanges.py:495-516.SuiBets.__init__signature is(base_url=None, auto_start_server=None, pmxt_api_key=None)— nowallet_addressparameter, and it is never passed tosuper().__init__(). By contrast, every other Python exchange class with wallet-gated reads in the same file accepts and forwardswallet_address:Polymarket(line 26/54),Limitless(87/111),Myriad(269/287),Opinion(307/331),Hunch(554/572).Evidence
Grepped
wallet_addressacross_exchanges.pyand confirmed by class boundary (grep -n "^class \|wallet_address") thatSuiBets(class starts line 495, next classRainstarts line 520) is the only wallet-relevant exchange class with zerowallet_addressoccurrences in its body.Impact
There is no way to construct a Python
SuiBetsclient that can ever callfetch_positions()— the attribute is never set on the instance in the first place, which is strictly worse than the TypeScript SDK, where at least the constructor plumbing exists (even though the sidecar dispatch gate, tracked separately, still blocks it end-to-end).Found by automated Core-to-SDK surface coverage audit