Skip to content

Commit cc0169b

Browse files
committed
release: 2.50.15 — fix Opinion SELL BSC VenueEscrow allowlist (was empty)
1 parent 477acab commit cc0169b

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [2.50.15] - 2026-06-18
6+
7+
### Fixed
8+
9+
- **`sdks/python/pmxt/constants.py` + `sdks/typescript/pmxt/constants.ts` — Opinion SELL was fully blocked on hosted clients with `InvalidSignature: typed_data schema mismatch: no allowlisted verifyingContract configured for chain 56`.** Per the brain (`docs/engineering/architecture/Cross-Chain Settlement (Buy + Sell).md`, `docs/knowledge/pitfalls/cross-chain-eip712-domain.md`), Opinion SELL is a dual-signed parallel flow: the Polygon "pay" leg (`CrossChainSellPayParams`) signs against the Polygon `PreFundedEscrow` domain, and the BSC "pull" leg (`CrossChainSellPullParams`) signs against the BSC `VenueEscrow` domain — `ecrecover` runs on BSC for that leg, so the typed-data domain MUST use chainId 56 with the BSC contract's address. The SDK's `_VENUE_DOMAIN` schema for `opinion_sell_bsc_pull` correctly references chain 56 with `verifyingContract` allowlist `VENUE_ESCROW_ADDRESSES`, but both Python and TS constants files declared `VENUE_ESCROW_ADDRESSES` as an empty set with a "TODO: add the BSC VenueEscrow address" comment. Any hosted Opinion SELL hit the empty allowlist and was rejected client-side before submit. Added the BSC VenueEscrow address `0x6a273643d84edbb603b808d8a724fb963c7a298a` to both constants files. Verified live: order id `375`, position `0bf83067-…` on Spain market closed from 15.171726 → 0, USDC balance went 48.056457 → 49.735623 (Δ +1.679166 USDC; ~15.17 shares × ~$0.111 effective fill price).
10+
511
## [2.50.14] - 2026-06-18
612

713
### Fixed

sdks/python/pmxt/constants.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ def resolve_pmxt_base_url(
8585
})
8686

8787
#: Known VenueEscrow contract addresses on BSC (chain 56).
88-
#: Add the BSC VenueEscrow address before Opinion sells go live.
89-
VENUE_ESCROW_ADDRESSES: frozenset[str] = frozenset()
88+
VENUE_ESCROW_ADDRESSES: frozenset[str] = frozenset({
89+
"0x6a273643d84edbb603b808d8a724fb963c7a298a",
90+
})
9091

9192
#: Limitless VenueEscrow on Base (chain 8453).
9293
LIMITLESS_VENUE_ESCROW_ADDRESSES: frozenset[str] = frozenset({

sdks/typescript/pmxt/constants.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ export const PREFUNDED_ESCROW_ADDRESSES: ReadonlySet<string> = new Set([
7676
]);
7777

7878
/**
79-
* Lowercase 0x-prefixed escrow addresses that the hosted trading API treats
80-
* as venue-owned escrows. Currently empty; populated as venues onboard.
79+
* Lowercase 0x-prefixed VenueEscrow addresses on BSC (chain 56).
8180
*/
82-
export const VENUE_ESCROW_ADDRESSES: ReadonlySet<string> = new Set<string>();
81+
export const VENUE_ESCROW_ADDRESSES: ReadonlySet<string> = new Set<string>([
82+
"0x6a273643d84edbb603b808d8a724fb963c7a298a",
83+
]);
8384

8485
/**
8586
* Limitless VenueEscrow contract addresses on Base (chain 8453).

0 commit comments

Comments
 (0)