You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Replace private hosted custody contract source links with public explorer links and disclose pending explorer source verification/public source publication.
Copy file name to clipboardExpand all lines: changelog.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,14 @@
2
2
3
3
All notable changes to this project will be documented in this file.
4
4
5
+
## [2.49.10] - 2026-06-12
6
+
7
+
Hosted custody docs now link to the public contract explorer pages instead of private GitHub source paths, and explicitly disclose that explorer source verification/public source publication is still pending.
8
+
9
+
### Fixed
10
+
11
+
-**`docs/concepts/hosted-custody.mdx`**: Replaced the broken private `pmxt-dev/pmxt-trading` source links in the deployed-contracts table with public Polygonscan/BscScan explorer links for the current Polygon `PreFundedEscrow` (`0x3ad326f78b1390b9a5dc5f00e7f62f8632de23e2`) and BSC `VenueEscrow` (`0x6a273643d84edbb603b808d8a724fb963c7a298a`) deployments. Added a warning that the explorers show deployed bytecode but are not source-verified yet, so users should treat the explorer addresses plus the unaudited status as the current public security posture. Removed remaining private-source links from the admin-model and withdrawal-delay copy.
12
+
5
13
## [2.49.9] - 2026-06-11
6
14
7
15
Kalshi API hostname fix. The `api.external-api.kalshi.com` domain was decommissioned by Kalshi, causing all Kalshi ingest runs to fail with `ENOTFOUND` for approximately 2.6 days. Updated all hardcoded URLs to the current hostnames.
Copy file name to clipboardExpand all lines: docs/concepts/hosted-custody.mdx
+11-7Lines changed: 11 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,16 +11,20 @@ If anything here disagrees with what you read in [Hosted trading](/concepts/host
11
11
12
12
There are two contracts, on two chains. Both are non-upgradeable, non-pausable, with no Ownable role — only an immutable `operator` set at deploy time.
The explorer pages currently show the deployed contract bytecode, but the source code is not explorer-verified yet. Public source links will be added here once verification/public source publication is complete; until then, treat the explorer addresses above as the public deployment identifiers and the unaudited status below as the security posture.
26
+
</Warning>
27
+
24
28
<Info>
25
29
The SDK reads the live address from the trading API at runtime; if PMXT ever migrates the escrow, the SDK picks it up automatically. The mainnet addresses above are the current production deployment. Testnet deployments are environment-scoped and not listed here — check `trade.pmxt.dev`'s config endpoint, or your self-hosted trading-api's `PREFUNDED_ESCROW_ADDRESS` / `VENUE_ESCROW_ADDRESS` env vars.
26
30
</Info>
@@ -60,7 +64,7 @@ The trust property worth checking is "PMXT (the operator) cannot drain user fund
60
64
61
65
## Operator / admin model
62
66
63
-
There is no admin. The contracts have **no `Ownable`, no `Pausable`, no upgrade proxy, no upgrade timelock, no fee setter**. Read the source: the entire privileged surface is the `onlyOperator` modifier in [OutcomeCustody.sol](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol), and the `operator` address is `immutable` — set once in the constructor and unchangeable for the life of the contract.
67
+
There is no admin. The contracts have **no `Ownable`, no `Pausable`, no upgrade proxy, no upgrade timelock, no fee setter**. The entire privileged surface is the `onlyOperator` modifier in the shared `OutcomeCustody` base contract, and the `operator` address is `immutable` — set once in the constructor and unchangeable for the life of the contract.
64
68
65
69
What this means concretely:
66
70
@@ -113,7 +117,7 @@ PreFundedEscrow.withdraw(amount); // amount in USDC micro-units
113
117
This debits your in-escrow balance immediately and records a pending withdrawal claimable after `WITHDRAWAL_DELAY` seconds.
114
118
115
119
<Warning>
116
-
The deployed `WITHDRAWAL_DELAY` is **60 seconds**, set as a constant in [OutcomeCustody.sol#L36](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol). Older versions of [Escrow lifecycle](/guides/escrow-lifecycle) referred to "~1 hour" — that was a forward-looking value; the production contract uses 60 seconds today. We will lengthen the timelock before raising the value of funds the operator manages; this page will reflect the change.
120
+
The deployed `WITHDRAWAL_DELAY` is **60 seconds**. Older versions of [Escrow lifecycle](/guides/escrow-lifecycle) referred to "~1 hour" — that was a forward-looking value; the production contract uses 60 seconds today. We will lengthen the timelock before raising the value of funds the operator manages; this page will reflect the change.
117
121
</Warning>
118
122
119
123
### Step 3 — Wait the timelock, then claim
@@ -128,7 +132,7 @@ That's it — your USDC is back in your wallet without any signature from or cal
128
132
129
133
### If you also hold Opinion outcome tokens on BSC
130
134
131
-
`VenueEscrow` exposes the same shape on BSC. Use `withdrawTokens(tokenId, amount)` → wait → `claimTokensWithdrawal(tokenId)`. Source: [OutcomeCustody.sol](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol#L129).
135
+
`VenueEscrow` exposes the same shape on BSC. Use `withdrawTokens(tokenId, amount)` → wait → `claimTokensWithdrawal(tokenId)`.
Copy file name to clipboardExpand all lines: docs/llms-full.txt
+11-7Lines changed: 11 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -1614,17 +1614,21 @@ If anything here disagrees with what you read in [Hosted trading](https://pmxt.d
1614
1614
1615
1615
There are two contracts, on two chains. Both are non-upgradeable, non-pausable, with no Ownable role — only an immutable `operator` set at deploy time.
The explorer pages currently show the deployed contract bytecode, but the source code is not explorer-verified yet. Public source links will be added here once verification/public source publication is complete; until then, treat the explorer addresses above as the public deployment identifiers and the unaudited status below as the security posture.
1630
+
1631
+
1628
1632
> **Note:**
1629
1633
The SDK reads the live address from the trading API at runtime; if PMXT ever migrates the escrow, the SDK picks it up automatically. The mainnet addresses above are the current production deployment. Testnet deployments are environment-scoped and not listed here — check `trade.pmxt.dev`'s config endpoint, or your self-hosted trading-api's `PREFUNDED_ESCROW_ADDRESS` / `VENUE_ESCROW_ADDRESS` env vars.
1630
1634
@@ -1664,7 +1668,7 @@ The trust property worth checking is "PMXT (the operator) cannot drain user fund
1664
1668
1665
1669
#### Operator / admin model
1666
1670
1667
-
There is no admin. The contracts have **no `Ownable`, no `Pausable`, no upgrade proxy, no upgrade timelock, no fee setter**. Read the source: the entire privileged surface is the `onlyOperator` modifier in [OutcomeCustody.sol](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol), and the `operator` address is `immutable` — set once in the constructor and unchangeable for the life of the contract.
1671
+
There is no admin. The contracts have **no `Ownable`, no `Pausable`, no upgrade proxy, no upgrade timelock, no fee setter**. The entire privileged surface is the `onlyOperator` modifier in the shared `OutcomeCustody` base contract, and the `operator` address is `immutable` — set once in the constructor and unchangeable for the life of the contract.
1668
1672
1669
1673
What this means concretely:
1670
1674
@@ -1718,7 +1722,7 @@ This debits your in-escrow balance immediately and records a pending withdrawal
1718
1722
1719
1723
1720
1724
> **Warning:**
1721
-
The deployed `WITHDRAWAL_DELAY` is **60 seconds**, set as a constant in [OutcomeCustody.sol#L36](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol). Older versions of [Escrow lifecycle](https://pmxt.dev/docs/guides/escrow-lifecycle) referred to "~1 hour" — that was a forward-looking value; the production contract uses 60 seconds today. We will lengthen the timelock before raising the value of funds the operator manages; this page will reflect the change.
1725
+
The deployed `WITHDRAWAL_DELAY` is **60 seconds**. Older versions of [Escrow lifecycle](https://pmxt.dev/docs/guides/escrow-lifecycle) referred to "~1 hour" — that was a forward-looking value; the production contract uses 60 seconds today. We will lengthen the timelock before raising the value of funds the operator manages; this page will reflect the change.
1722
1726
1723
1727
1724
1728
##### Step 3 — Wait the timelock, then claim
@@ -1733,7 +1737,7 @@ That's it — your USDC is back in your wallet without any signature from or cal
1733
1737
1734
1738
##### If you also hold Opinion outcome tokens on BSC
1735
1739
1736
-
`VenueEscrow` exposes the same shape on BSC. Use `withdrawTokens(tokenId, amount)` → wait → `claimTokensWithdrawal(tokenId)`. Source: [OutcomeCustody.sol](https://github.com/pmxt-dev/pmxt-trading/blob/main/contracts/src/OutcomeCustody.sol#L129).
1740
+
`VenueEscrow` exposes the same shape on BSC. Use `withdrawTokens(tokenId, amount)` → wait → `claimTokensWithdrawal(tokenId)`.
0 commit comments