Polymarket 底層算法全解
原作:@MrRyanChi,@insidersdotbot 預測市場交易平台創始人
序言:你不知道的 Polymarket B面
在過去的六個月間,推特上出現了數億千計的預測市場文章。
其中90%是再講AI寫程序怎麼帶來暴富神話。這是"緣",是你接觸這個剛剛開始的市場的第一步。
另外9%講的是具體的交易策略,市場分享,聰明錢策略解析。這便是"道",是你開始摸索自己交易策略,開始理解預測市場上賺錢思路的第一步。
然而這"法",也就是預測市場底層的交易設計,PNL計算,金錢流動的規則,雖有那1%的人講,但大多分散在一些短小精悍的推文當中。這些隱士高手,似乎始終不願意,或者沒有精力,將自己完整的法門一次性分享給所有人。
所以,在 insiders.bot 剛剛上線,Polymarket剛剛完成v2更新的今天,我想從最底層的技術,來一次性解構這個我們一直交易的市場底層的"法"。
去年10月,我寫了一篇簡易版,大致帶大家了解了Polymarket的幾個核心組件。這次,我想真正把所有技術上的設計細節展示給大家看,並且用大白話解釋清楚。
這篇文章包含了我們團隊過去八個月的心血。
這八個月間,@insidersdotbot 團隊拆解了所有Polymarket的底層智能合約與算法架構,來實現最快速的交易,以及最精準的PNL計算。這點,只有我們自己做的API能夠實現,直到今天,沒有別人做得到。
所以,我想,我們或許正式最能拆解Polymarket底層的"法"的人。
這篇文章中,我會帶你理解底層的 ctf-exchange-v2 智能合約如何處理每一筆資金,Relayer 是如何幫你墊付 Gas ,一路明白 Negative Risk 是如何在數學上保證價值守恆的。
這不是一篇簡單的科普。這是我用開發者的視角重新拆解 Polymarket 底層機制的算法全解。
我們先從最基礎的開始。也就是,當你下達一個訂單時,你到底發送了什麼?
P.S 這篇文章也經過了AI進行文風和結構適配,歡迎發給你的OpenClaw,Manus,Hermes,或者任何AI Agent作為訓練語料!!!
第一章:從點擊到上鏈,到底發生了什麼
1.1 訂單不是交易,是"意圖"
在傳統的去中心化交易所(比如 Uniswap),當你交易時,你的錢包會彈出一個確認框,你需要支付 Gas 費,然後把一筆交易(Transaction)發送到區塊鏈的網絡(Mempool)裡等待礦工打包。
但在 Polymarket,當你下單時,你的錢包彈出的通常是一個"簽名"(Sign)請求,而不是"交易"(Transaction)請求。而且,你不需要支付任何 Gas。
這不僅僅是用戶體驗的優化,這是整個底層架構的根本區別。
在 Polymarket 上,一個訂單(Order)本質上是一段符合 EIP-712 標準的結構化數據。這段數據包含了你想要做什麼:
你是 Maker 還是 Taker?你想買哪個 Token(tokenId)?
你想付出多少(makerAmount)?
你想得到多少(takerAmount)?
當你簽名時,你只是用你的私鑰對這段數據蓋了個章,證明"我確實想這麼幹"。然後,這段帶有簽名的數據被發送到了 Polymarket 的中心化伺服器上,存入了一個鏈下(Off-chain)的中央限價訂單簿(CLOB)。
在這個階段,區塊鏈上什麼都沒有發生。你的錢還在你的錢包裡,代幣也沒有轉移。你的訂單只是數據庫裡的一行記錄。
1.2 價格的隱式表達
我們先將時間暫停到你發送訂單的這個瞬間。如果你仔細看 Polymarket 底層合約的訂單結構,你會發現一個非常反直覺的事情:訂單簽名數據裡沒有"價格"(Price)這個字段。
這怎麼可能?沒有價格怎麼交易?
在 Polymarket 的協議底層設計中,價格是隱式的。它是由你願意付出的數量和你想得到的數量算出來的。
如果你想以 $0.60 的價格買入 100 個 YES 合約:
你需要付出:$60 pUSD(makerAmount = 60)
你想得到:100 個 YES 合約(takerAmount = 100)
隱含價格 = makerAmount / takerAmount = 60 / 100 = $0.60
如果你想以 $0.60 的價格賣出 100 個 YES 合約:
你需要付出:100 個 YES 合約(makerAmount = 100)
你想得到:$60 pUSD(takerAmount = 60)
隱含價格 = takerAmount / makerAmount = 60 / 100 = $0.60
(注:雖然在最新的 V2 SDK 中,開發者可以直接傳入 price 和 size,但 SDK 在底層簽名時,依然會將其轉換為 makerAmount 和 takerAmount。這種設計的巧妙之處在於,智能合約不需要理解什麼是"價格",它只需要處理"資產 A 換資產 B"的邏輯。這大大簡化了鏈上的計算邏輯,降低了 Gas 消耗。)
1.3 Operator:Polymarket 的"交通警察"
既然訂單都在鏈下,那它們是怎麼變成鏈上真實的資產轉移的?
這就引出了 Polymarket 架構中最核心的黑盒角色:Operator(操作員)。
在 ctf-exchange-v2 智能合約中,有一個極其關鍵的修飾符:onlyOperator。這意味著,只有 Polymarket 官方控制的那個特定地址,才有權限調用 matchOrders 和 fillOrder 等執行函數。
這與傳統的 DeFi 完全不同。在 Uniswap,任何人都可以調用路由合約。但在 Polymarket,你不能自己去鏈上撮合交易。所有的匹配,必須由 Operator 來提交。
為什麼要這麼設計?為了消滅 MEV(礦工可提取價值)和搶跑(Front-running)。
在傳統的鏈上訂單簿中,如果有人掛了一個價格很低的大單,所有的套利機器人都會在 Mempool 裡瘋狂競價(提高 Gas 費),試圖搶在別人前面吃掉這個單子。這會導致 Gas 費飆升,普通用戶體驗極差。
而在 Polymarket,所有的訂單都在鏈下的 CLOB 裡。Operator 的匹配引擎(Matching Engine)在伺服器上計算出誰和誰應該成交,然後把結果打包成一筆交易,由 Operator 發送到鏈上。
因為只有 Operator 能提交匹配結果,Mempool 裡的機器人就算看到了這筆交易,也無法搶跑,因為他們沒有權限調用執行函數。
這是一種典型的"混合去中心化"架構。撮合和排序是中心化的(由 Operator 決定),但結算和資金保管是去中心化的(由智能合約執行)。
Operator 可以決定先匹配誰後匹配誰,但它絕對無法盜走你的資金,因為它必須提供你簽名的那段 EIP-712 數據,合約會嚴格驗證簽名。
P.S: 不過,這裡還是要稍微提一嘴。我們 @insidersdotbot 最近似乎發現了這個機制一個可以利用地方,能夠讓跟單進行搶跑,或者進行極大幅度的延遲降低。如果有任何更新,我們會第一時間在官方帳號公布。
第二章:Relayer 的經濟學
2.1 "免 Gas"的錯覺
Polymarket 最大的賣點之一就是對用戶"免 Gas"(Gasless Transactions)。你只需要有 pUSD 就可以交易,不需要買 POL(前 MATIC)放在錢包裡。
但區塊鏈的物理定律是不可違背的:只要在 Polygon 上發生了狀態改變(比如資產轉移),就必須有人支付 Gas 費。
既然你沒付,那是誰付的?答案是:Relayer(中繼器)。
2.2 Relayer 的接力網絡
Polymarket 並沒有讓用戶自己去發交易,而是部署了一套名為 Relayer Client 的基礎設施(relayer-v2.polymarket.com)。
在早期架構中,這類服務通常依賴 OpenZeppelin Defender Relay 這樣的企業級服務,通過維護一個簽名器池(Signer Pool)來解決高並發下的 nonce(交易序號)衝突問題。
當你的 App 創建了一筆交易(比如 Approve 代幣、Redeem 收益),你用私鑰簽名後發給 Relayer。Relayer 會作為"交易贊助商"(Transaction Sponsor),把這筆交易提交到鏈上,並用自己的資金池為你墊付 Gas 費。
Relayer架構與經濟循環
2.3 羊毛出在羊身上?
在早期的很多元交易(Meta-transaction)架構中,Relayer 垫付 Gas 後,通常會從用戶的存款中扣除一筆手續費(比如 0.3% 或固定幾美元)來彌補 Gas 成本。
但 Polymarket 極其激進:在當前的 V2 架構中,他們真的為你全額買單了。
官方文檔明確寫道:"Polymarket pays gas for all operations routed through the relayer"。無論是部署錢包、授權代幣,還是拆分(Split)、合併(Merge)、贖回(Redeem),全部免 Gas 費,且不收任何隱性操作費。
為什麼 Polymarket 願意做這個虧本買賣?
因為 Polygon 上的 Gas 成本極低(通常只有幾美分),而免 Gas 帶來的絲滑體驗,能吸引海量的 Web2 用戶入場。只要用戶在交易中產生了微小的 Taker 手續費(後面會講),就足以覆蓋這筆極低的 Gas 成本。
知道了這個,下個問題自然就來了:這個"免 Gas"架構對我們交易有什麼影響?
最大的隱性成本就是延遲(Latency)。你的訂單不僅要經過 Polymarket 的匹配引擎,如果是直接上鏈的操作,還要經過 Relayer 的驗證、Gas 估算、隊列分配。
第三章:三種匹配方式,以及為什麼買家和買家也能成交?
現在我們進入了整個 Polymarket 架構中最硬核、最反直覺的部分。
在傳統的交易所(比如幣安的訂單簿),匹配邏輯非常簡單:Alice 想用 $60 買 1 個代幣,Bob 想用 $60 賣 1 個代幣。交易所把他們撮合在一起,代幣從 Bob 到 Alice,錢從 Alice 到 Bob。結束。
但在 Polymarket(基於條件代幣框架 CTF),事情完全不同。因為在這裡,代幣是可以被"憑空印出來"和"憑空銷毀"的。
當你打開 ctf-exchange-v2 的源碼,你會發現底層有三種完全不同的資產結算路徑:COMPLEMENTARY、MINT 和 MERGE。
Complementary, Mint, Merge 大致結構
3.1 COMPLEMENTARY(互補匹配):傳統的二手交易
這是最容易理解的一種匹配方式,也是傳統交易所唯一擁有的方式。
場景: 市場已經存在一段時間,大家手裡都有籌碼。
Alice 想以 $0.60 買入 100 個 YES。
Bob 手裡有 YES,他想以 $0.60 賣出 100 個 YES。
Operator 發現這兩個訂單(BUY vs SELL),把它們打包上鏈。智能合約執行直接的點對點轉帳:
把 100 個 YES 從 Bob 的地址轉給 Alice。
把 $60 pUSD 從 Alice 的地址轉給 Bob。
這個機制有如下數學與工程特徵:
零和遊戲:系統的總代幣供應量沒有發生任何變化。
Gas 消耗最低:只涉及基礎的轉帳,不涉及 CTF 的複雜操作。
標準化:在一個成熟、流動性充足的市場中,絕大多數日常交易都是這種方式。
3.2 MINT(鑄造匹配):憑空創造流動性
這或許是 Polymarket,乃至整個金融史上最為革命性的創新。
為了更好的解釋,我們可以參考這個場景: 一個全新的市場剛剛上線,沒有任何人手裡有 YES 或 NO 代幣。
Alice 極度看好,她想以 $0.60 買入 100 個 YES。
Bob 極度看衰,他想以 $0.40 買入 100 個 NO。
注意:他們兩個都是買家!他們都沒有對方想要的代幣!
在傳統的訂單簿裡,這兩個訂單只能幹瞪眼,永遠無法成交。在 Polymarket,如果遇到 BUY vs BUY(且代幣互補),Operator 會把這兩個訂單撮合在一起!
智能合約從 Alice 賬戶扣除 $60 pUSD。
智能合約從 Bob 賬戶扣除 $40 pUSD。
智能合約拿到這 $100 pUSD,將其鎖定為抵押品,然後調用
_mint函數,憑空鑄造出 100 個 YES 和 100 個 NO。把 100 個 YES 發給 Alice。
把 100 個 NO 發給 Bob。
這種機制的觸發,必須基於一個嚴格的數學條件:買方出價之和必須大於等於 $1.00。
如果 Alice 出價 $0.60 買 YES,Bob 出價 $0.35 買 NO,加起來只有 $0.95。智能合約是無法用 $0.95 鑄造出價值 $1.00 的完整代幣對的。這個匹配會直接失敗。
MINT匹配機制
從做市商角度看,這個機制是解決"冷啟動"問題的終極武器。當市場剛開盤時,做市商不需要自己先去花錢鑄造一堆代幣放在手裡(這會佔用大量資金)。他們只需要在 YES 和 NO 兩邊同時掛出買單(比如 $0.49 買 YES,$0.49 買 NO)。當散戶來賣的時候,就會觸發鑄造邏輯。
3.3 MERGE(合併匹配):流動性的湮滅
有創造就有毀滅。MERGE 是 MINT 的反向過程。
我們看一個反過來的案例。市場即將結束,大家都在平倉。
Alice 手裡有 100 個 YES,她想以 $0.60 賣出。
Bob 手裡有 100 個 NO,他也想以 $0.40 賣出。
注意:他們兩個都是賣家! 沒有任何人願意出 pUSD 來買他們的代幣。
Polymarket的機制這時候便會再度發力。當遇到 SELL vs SELL 時,Operator 再次施展魔法:
智能合約從 Alice 那裡拿走 100 個 YES。
智能合約從 Bob 那裡拿走 100 個 NO。
智能合約調用
_merge函數,將這 100 對 YES+NO 徹底銷毀,並從金庫中解鎖 $100 pUSD。把 $60 pUSD 發給 Alice。
把 $40 pUSD 發給 Bob。
而Merge機制則有以下數學與金融特徵:
通縮機制:系統的總代幣供應量減少了。
退出通道:它保證了即使沒有"接盤俠",只要 YES 和 NO 的賣家價格能湊夠 $1.00(實際上是讓出 $1.00 的空間),大家依然可以套現離場。
理解了這三種匹配方式,你就理解了 Polymarket 市場的生命周期:
早期(MINT 主導):市場剛開,沒有代幣。多空雙方通過 MINT 機制不斷把資金注入系統,換取代幣。總供應量迅速上升。
中期(COMPLEMENTARY 主導):市場流動性充足,大部分交易都是現有代幣的換手。總供應量穩定。
晚期(MERGE 主導):結果逐漸明朗,大家開始平倉。多空雙方通過 MERGE 機制銷毀代幣,換回資金。總供應量下降。
請注意,這三種路徑不是由 Operator 主觀選擇的,而是由訂單的買賣方向(BUY vs SELL)嚴格決定的智能合約路由規則。
市場生命周期
第四章:Split/Merge/Redeem,以及你的 PnL 為什麼是錯的?
了解了匹配機制,我們再來看三個你可能每天都在用,但從未真正理解其財務影響的底層操作:Split(拆分) 、Merge(合併) 和 Redeem(贖回)。
這三個操作是 Polymarket 的原子級操作。它們不是"交易"(不經過訂單簿,不收取手續費),而是直接與智能合約互動的資產轉換。
Split:你給合約 $1 pUSD,合約給你 1 個 YES 和 1 個 NO。成本永遠是精確的 $1。
Merge:你給合約 1 個 YES 和 1 個 NO,合約還你 $1 pUSD。收益永遠是精確的 $1。
Redeem:市場決出勝負後,贏的代幣換回 $1 pUSD,輸的代幣清零。
Split操作前後對比
4.1 誰在使用這些操作?
做市商(Market Makers):他們是 Split 的最大用戶。做市商需要在兩邊同時掛單,但他們不想去市場上買代幣(會被收手續費)。他們直接把 $10 萬資金 Split 成 10 萬個 YES 和 10 萬個 NO,然後掛在訂單簿上。
套利者(Arbitrageurs) :他們是 Merge 的最大用戶。當市場出現短暫的錯價,比如 YES 跌到 $0.40,NO 跌到 $0.55。套利者會迅速買入 1 個 YES 和 1 個 NO(總成本 $0.95),然後立刻調用 Merge 換回 $1,無風險淨賺 $0.05。這個數學條件非常清晰:當
Price(YES) + Price(NO) < 1 - 手續費時,無腦買入並 Merge。
所以,當你試圖跟單一個套利者的聰明錢,或者做市商的聰明錢時,你必須準確判斷Split/Merge對PNL帶來的影響。否則,這就不是一個值得參考的"聰明錢"。
而當今市場上,包括Polymarket本身在內,都無法解決PNL的計算問題。當然,你可能已經猜到了 - insiders.bot 已經在PNL計算和聰明錢瀏覽器中解決了這個問題。
4.2 PnL 陷阱:為什麼你的利潤是錯的?
正如上文所說,這是整個 Polymarket 生態中最普遍的錯誤。幾乎所有的第三方 PnL(盈虧)追蹤工具,甚至包括官方的一些 API,都在這裡栽了跟頭。
我給你算一筆帳,你就知道這個陷阱有多深。
步驟 0:假設你本金有 $100。你看好"以太坊突破 $5000"這個市場。
步驟 1:你花了 $50 執行了一次 Split。現在你手裡有 50 個 YES 和 50 個 NO。你的現金還剩 $50。
步驟 2:你覺得 50 個 YES 不夠,又去市場上以 $0.40 的價格買了 50 個 YES。花費 $20。現金還剩 $30。
步驟 3:你把手裡的 50 個 NO 以 $0.35 的價格賣掉。收回 $17.50。現金變成 $47.50。
現在,你手裡有 100 個 YES 合約。你的真實成本是多少?
大多數排行榜是怎麼算的(錯誤算法):
他們只看你的"交易"記錄。他們看到你買入了 50 個 YES,花費 $20。他們完全忽略了 Split(因為那不是交易)。
所以他們認為你的成本是:$20 / 50 = $0.40/個。
如果現在 YES 的市場價漲到了 $0.60,他們會顯示你的利潤是:100 × $0.60 - $20 = $40。
實際上你應該怎麼算(正確算法,以及 insiders.bot 正在使用的算法):
你的總現金流出:$50(Split) + $20(買入) = $70。
你的總現金流入:$17.50(賣出 NO)
你的淨投入:$70 - $17.50 = $52.50
你的真實成本:$52.50 / 100 = $0.525/個。
如果現在 YES 的市場價是 $0.60,你的真實利潤是:100 × $0.60 - $52.50 = $7.50
看到差距了嗎?排行榜顯示你賺了 $40,但你實際上只賺了 $7.50。中間那 $32.50 的"幻覺利潤",就是因為系統沒有正確處理 Split 的成本和賣出 NO 的收益。
正確的 PnL 數學公式應該是:
總盈虧 = Σ(賣出收入) + Σ(Merge 收入) + Σ(Redeem 收入) - Σ(買入支出) - Σ(Split 支出) + 當前持倉市值
這就是為什麼你在排行榜上看到某些大佬顯示虧損幾百萬,但實際上他們賺得盆滿钵滿。因為贏的倉位被 Redeem 之後,很多工具會把這些持倉從歷史記錄中"抹掉",只留下那些還在虧損的爛攤子。
PnL計算陷阱
第五章:手續費曲線
如果你經常交易,你會發現 Polymarket 的手續費並不是一個固定的百分比。有時你買 $1000 的合約被收了 $10,有時卻只收了 $2。
為什麼?讓我們來看看隱藏在代碼深處的費用公式:
Fee = C × feeRate × p × (1 - p) (其中 C 是交易數量,p 是價格)
5.1 為什麼是 p(1-p)?
假設你想買 100 個 YES,費率是 2%:
如果 YES 的價格是 $0.50:
手續費 = 100 × 2% × 0.50 × 0.50 = $0.50如果 YES 的價格是 $0.90:
手續費 = 100 × 2% × 0.90 × 0.10 = $0.18如果 YES 的價格是 $0.10:
手續費 = 100 × 2% × 0.10 × 0.90 = $0.18
你發現規律了嗎?當價格在 0.50(五五開)時,手續費最高。當價格接近 0 或 1(大局已定)時,手續費極低。
更重要的是對稱性。買入 $0.90 的 YES,和買入 $0.10 的 NO,在數學上是等價的。如果你買 $0.90 的 YES 收費很高,而買 $0.10 的 NO 收費很低,套利者就會瘋狂買入 NO 然後通過 MINT 機制套利。p(1-p) 這個設計,保證了無論你從哪一面表達觀點,系統收取的摩擦成本都是絕對對稱的。
5.2 隱藏的數學之美
如果你學過統計學,你會對 p(1-p) 這個公式非常眼熟。它是伯努利分布(拋硬幣)的方差公式。
在 Polymarket 的整個系統設計中,p(1-p) 就是"上帝公式":
它是手續費曲線:不確定性(方差)越高,系統收取的費用越高。
它是信息熵的體現:你在 50% 時下注,你為市場提供了最多的新信息,所以你付出的代價最大。
誰支付手續費?永遠是 Taker(吃單者)。Maker(掛單者)永遠免手續費。
這個機制完美地對齊了激勵:在市場最迷茫(50/50)時候,早期入場者會被收取最高的手續費,這保護了做市商免受無謂的衝擊;而在市場幾乎確定的時候,極低的手續費鼓勵套利者進場,把價格推向最終的 1 或 0。
手續費曲線
第六章:Negative Risk,aka DeFi 領域最優雅的魔術
如果你在 Polymarket 上玩過大選、奧斯卡或者體育比賽等多結果(Multi-outcome)市場,你一定接觸過負風險(Negative Risk)市場。
這是整個文章中最燒腦,但也最能體現智能合約工程美學的部分。
P.S 這也是我們的聯創 @DakshBigShit 在開發我們自己的API時,通過36小時馬拉松爆肝才解決的部分。
6.1 傳統多結果市場的痛點
假設有四個候選人:A、B、C、D。 你極度討厭 A,你确信 A 絕對贏不了。你想"做空" A。
在傳統的二元市場,你只需要買入 A 的 NO 合約。 但在多結果市場中,A 輸了,意味著 B、C、D 中必然有一個贏了。 所以,"做空 A" 在數學上嚴格等價於 "做多 B + 做多 C + 做多 D"。(這句很重要,反復讀到讀懂為止。)
如果你去市場上分別買入 B、C、D 的 YES 合約,你會遇到一個巨大的問題:資金效率極低。因為你需要分別墊付三筆錢,而且如果這三個人的價格加起來大於 $1.00,你甚至可能虧本。
6.2 負風險適配器(NegRiskAdapter)的魔法
Polymarket 部署了一個專門的智能合約 NegRiskAdapter 來解決這個問題。它提供了一個叫 convertPositions 的函數。
這個函數的作用是:把你手裡的 NO 合約,瞬間轉換成其他所有候選人的 YES 合約,並且退還給你一筆現金。
讓我們用硬核的數學來證明這個轉換為什麼是價值守恆的。
場景設定: 有 n 個候選人。
你手裡有 A 份候選人 1 的 NO 合約,以及 A 份候選人 2 的 NO 合約(你同時做空了 1 和 2)。
你總共持有 m 個不同的 NO 合約(這裡 m=2)。
轉換前,你持倉的真實價值(在所有可能的世界線中):
如果候選人 1 贏了:NO1 變廢紙,NO2 價值 $1。總價值 = A。
如果候選人 2 贏了:NO1 價值 $1,NO2 變廢紙。總價值 = A。
如果候選人 3 贏了(你沒有做空的任何人贏了):NO1 價值 $1,NO2 價值 $1。總價值 = 2A。
調用 convertPositions 後,合約給你發了什麼?
公式是:退還給你 A × (m-1) 的資金,外加 A 份候選人 3、4、… n 的 YES 合約。
在這個例子中,退還:A × (2-1) = A 份的現金!外加 A 份候選人 3 的 YES,A 份候選人 4 的 YES…
轉換後,你持倉的真實價值(在所有可能的世界線中):
如果候選人 1 贏了:你手裡的 YES3, YES4 全變廢紙。你只剩下現金 A。總價值 = A。(與轉換前相等!)
如果候選人 2 贏了:你手裡的 YES3, YES4 全變廢紙。你只剩下現金 A。總價值 = A。(與轉換前相等!)
如果候選人 3 贏了:你手裡的 YES_3 價值 $1,其他變廢紙。加上現金 A。總價值 = A + A = 2A。(與轉換前相等!)
Q.E.D. 無論世界怎麼發展,轉換前後的價值絕對相等。
Negative Risk 轉換數學證明
6.3 為什麼這是一個"單向不可逆"的熵增過程?
這個轉換機制有一個極其迷人的物理學特性:它是單向不可逆的。
你可以把 NO 轉換成 YES + 現金。但你絕不能把 YES + 現金反向轉換成 NO。
為什麼?因為在智能合約底層,當你把 NO 轉換成 YES 時,合約實際上是把你的 NO 合約發送到了黑洞地址(Burn 銷毀),然後利用這部分釋放出來的抵押品空間,"合成"出了新的 YES 合約。這不需要注入新的外部資金。
但如果你想反過來,把 YES 變成 NO,你需要憑空創造出新的抵押品(因為 NO 合約的覆蓋面比 YES 廣得多)。適配器沒有這個權限去動用國庫的資金。
這就像打碎一個雞蛋。NO 是那個完整的雞蛋,包含了所有的可能性。轉換操作就是把雞蛋打碎,分成了蛋黃(YES)和蛋清(現金)。過程價值守恆,但你永遠無法把它們拼回一個完整的雞蛋。
這裡有個巨大的套利空間:如果你發現市場上某個候選人的 NO 價格,大於其他所有候選人 YES 價格的總和。你就可以買入這個 NO,調用 convertPositions 拿到現金和一堆 YES,然後立刻把這些 YES 賣掉。這就是在多結果市場中最高階的無風險套利策略。
第七章:速度的物理極
最後,我們來談談交易中最殘酷的維度:時間。
在傳統的高頻交易中,我們在討論微秒(百萬分之一秒)。在 Polymarket,我們在討論毫秒。但這裡有一個巨大的、結構性的不平等。
如果你在 Reddit 的算法交易板塊混跡過,你會發現所有開發 Polymarket 機器人的程序員都曾抱怨過同一件事:"為什麼我下 Taker 單總是要等 300 毫秒,而 Maker 單只要 25 毫秒?"
7.1 為什麼 Maker 快,Taker 慢?
當你下達一個 Maker(掛單)時 : 你的訂單(簽名數據)發送到 Polymarket 的伺服器。伺服器檢查一下簽名有效,直接把這條記錄塞進內存裡的 CLOB(訂單簿)數據庫。然後立刻給你返回一個 ACK(確認)。整個過程完全在鏈下發生,只需要一次數據庫寫入。耗時:~25 毫秒。
當你下達一個 Taker(吃單)時: 你的訂單發送到伺服器。匹配引擎發現你的單子可以和訂單簿裡的某個 Maker 匹配。 此時,Operator 必須啟動複雜的結算流水線:
決定使用哪種匹配路徑(COMPLEMENTARY, MINT, 還是 MERGE)。
構造包含雙方簽名的鏈上交易數據。
把交易發給 Relayer。
Relayer 估算 Gas,分配 Nonce。
將交易廣播到 Polygon 節點。
等待節點確認這筆交易不會因為餘額不足等原因 Revert。
整個過程跨越了多個微服務,甚至觸及了區塊鏈的邊緣。耗時:~250 到 300 毫秒。
7.2 這 250 毫秒意味著什麼?
這 250 毫秒的物理鴻溝,深刻地塑造了 Polymarket 的生態。
第一,你很難在 Polymarket 上搶跑(Front-run)。 因為所有的 Taker 單都必須排隊等待 Operator 處理,你無法通過提高 Gas 費來插隊。Mempool 搶跑在這裡暫時是個偽命題。
第二,Maker 策略的絕對優勢。 因為撤單(Cancel)和 Maker 掛單一樣,都是鏈下操作,只需要 25 毫秒。當突發新聞發生時,聰明的做市商可以利用這 250 毫秒的時間差,搶在 Taker 的訂單被結算之前,把自己的掛單撤掉(這就叫規避逆向選擇 Adverse Selection)。
7.3 每週二早晨的 90 秒停機
關於時間,還有一個鮮為人知的細節。 根據官方文檔,每週二美國東部時間早上 7:00,Polymarket 的匹配引擎會重啟。在這大約 90 秒的時間裡,系統停止處理任何匹配,API 會返回 HTTP 425(Too Early)錯誤。
更殘酷的是,V2 引入了 Heartbeat(心跳)機制。如果伺服器 10 秒內沒有收到客戶端的心跳,就會自動取消該用戶所有的開倉訂單。在重啟的這 90 秒內,做市商的心跳被迫中斷,他們的訂單會被系統集體清空。
這 90 秒,是系統中真正的"流動性真空"。對於期權定價模型來說,這 90 秒的 Theta(時間衰減)如何計價,以及如何在第 91 秒引擎恢復時第一時間搶佔盘口,是留給頂級平台和量化工作室的終極謎題。
延遲時間線對比
第八章:V2 大規模重構與"幽靈成交"(Ghost Fill)的終極戰役
如果你一直讀到這裡,你已經掌握了 Polymarket 的核心骨架。但如果你想在 2026 年繼續在這個市場上賺錢,你必須了解剛剛發生的一場大地震。
在 2026 年 2 月到 5 月期間,Polymarket 悄然進行了一次史詩級的 V2 架構升級。這次升級不僅重構了抵押物和手續費公式,更重要的是,它打響了解決預測市場最臭名昭著的 Bug,也就是幽靈成交(Ghost Fill)的終極戰役。
8.1 什麼是幽靈成交?鏈上與鏈下的狀態割裂
在 Polymarket V2 升級前,無數做市商和量化機器人被一個現象折磨得死去活來: 你的機器人在 5 分鐘線級別市場(比如 BTC Up/Down 5m)捕捉到了一个绝佳的机会,立刻發出了吃單(Taker)請求。Polymarket 的 API 瞬間返回:"Matched! Success!",你的 Telegram 報警也彈出了"FILLED"的狂歡。 但當你打開 Polygonscan 查區塊鏈瀏覽器時,卻發現這筆交易被標記為 REVERTED(失敗),白白浪費了 Gas 費。而你的持倉毫無變化。
訂單簿明明顯示成交了,區塊鏈卻說沒發生。這就是幽靈成交(Ghost Fill)。
要理解這個 Bug 的本質,我們需要回到第一章講的底層架構:鏈下撮合(Off-chain Matching)+ 鏈上結算(On-chain Settlement)。
當 Alice 的買單和 Bob 的賣單在鏈下中央限價訂單簿(CLOB)中匹配時,系統只是在數據庫裡把這兩筆訂單畫了個等號。真正的資產轉移,需要 Operator 將雙方的簽名打包,提交到 Polygon 鏈上執行 TransferFrom。
這就產生了一個致命的時間差。在這個時間差裡,用戶的錢包狀態可能會發生改變。
8.2 幽靈成交的兩種攻擊路徑
在早期的 V1 和 V2 剛上線時,黑客和惡意做市商利用這個時間差,發明了兩種極具破壞性的攻擊手法:
第一種:低成本的 incrementNonce 攻擊(V1 時代)
在 V1 架構中,訂單狀態由一個全局的 nonce(隨機數)管理。惡意玩家可以在鏈下瘋狂掛出極具吸引力的假單(Spoofing)。當有真實的買家咬鉤,訂單在鏈下顯示匹配後,惡意玩家搶在 Operator 提交上鏈前,直接在鏈上調用
incrementNonce函數。這個操作成本極低(幾美分 Gas),卻能瞬間讓該地址下所有舊 nonce 的訂單全部失效。當 Operator 把匹配好的交易提交上鏈時,智能合約發現 nonce 不對,直接 Revert。攻擊者全身而退,而真實的買家不僅錯失了交易時機,還可能被虛假的盘口誤導。
第二種:空錢包的"殭屍訂單"(V2 早期)
V2 升級移除了全局 nonce,改用單個訂單 Hash 來管理取消狀態,堵住了第一條路。但黑客很快發現了更底層的漏洞:餘額欺騙。 一個惡意用戶可以往錢包裡充值 $1000,簽署一堆總價值 $10000 的掛單放到訂單簿上,然後立刻把錢包裡的錢全部轉走。 因為 Polymarket 的訂單是離線簽名的,只要簽名有效、代幣授權(Approval)沒撤銷,這些訂單在鏈下撮合引擎看來就是"合法"的。但實際上,這個錢包的餘額是 $0。
當你的機器人吃掉了這些"殭屍訂單",Operator 提交上鏈時,底層調用的 Solady 庫函數 TransferFrom 就會因為對方餘額不足而報錯(錯誤碼 0x7939f424)。你的交易再次 Revert。
8.3 為什麼傳統交易所沒有這個問題?
你可能會問:為什麼幣安或者傳統的去中心化交易所(如 Uniswap)沒有這個問題?
因為幣安是純中心化的,你的錢存在它的數據庫裡,它擁有絕對的控制權,撮合和扣款是原子性同時發生的。 而 Uniswap 是純鏈上的,撮合和扣款都在一個智能合約的同一筆交易裡完成,也是原子性的。
但 Polymarket 選擇了混合架構:鏈下撮合追求极速,鏈上結算追求透明。而用戶的資金存放在完全自托管的錢包(如 EOA 或 Gnosis Safe)中,用戶擁有絕對的處置權,可以隨時隨地把錢轉走。
只要撮合兩端的資金狀態與用戶真正自由的自托管錢包掛鉤,"狀態割裂"就永遠存在。
8.4 終極解決方案:Deposit Wallet(關聯金庫)
2026 年 5 月 4 日,Polymarket 官方宣布了一項核心協議級的重大更新,直接將幽靈成交的比例從巔峰期的 30% 降到了 0.17%,並趨近於零。
他們是怎麼做到的?答案是引入了 Deposit Wallet(關聯金庫)。
Polymarket 終於意識到,解決幽靈成交的根本方法,是限制用戶資金的"絕對自由"。 在新架構下,用戶不能再直接用自己的原生錢包(EOA)參與鏈下撮合。你必須先將資金存入一個由智能合約控制的 Deposit Wallet。
在這個金庫中:
你有所有權,但沒有絕對的即時處置權。
當你在鏈下掛單時,金庫會在邏輯上鎖定相應的可用餘額。
如果你想把錢從金庫提走,這個提款操作(State Revocation)本身被賦予了物理時間成本。它必須經過智能合約的校驗,確保你沒有正在撮合中的未決訂單。
通過引入這個緩衝層,Polymarket 強行把鏈下的撮合狀態和鏈上的資金狀態綁定在了一起,徹底消滅了"空錢包掛單"的可能性。這不僅是工程上的勝利,更是對去中心化金融中"自托管"與"交易效率"之間矛盾的一次深刻妥協與重構。
8.5 V2 的其他硬核升級
除了終極解決 Ghost Fill,V2 架構還包含了幾個深刻改變市場格局的升級:
pUSD 的權力交接:4 月 28 日,底層抵押物從 USDC.e 全面切換為 pUSD。這讓 Polymarket 獲得了底層資產的生息控制權,從而能夠為用戶提供高達 4.00% 的年化持倉獎勵。pUSD 成為了新的資本效率基礎設施。
完美公式 p(1-p) 的實裝 :拋棄了 V1 時代粗糙的 min(p, 1-p) 近似值,直接將手續費公式修改為完美的伯努利方差公式
p × (1-p)。數學上的絕對平滑,讓套利者的定價模型更加精確。拆除人為減速帶:在早期,為了保護做市商免受 API 機器人的毒打,代碼裡硬編碼了高達 500 毫秒的 Taker 延遲。隨著 V2 引擎性能的提升和 Heartbeat(心跳)機制的引入(斷聯 10 秒即清空訂單),官方在 2 月底徹底移除了這個人為減速帶,宣告 Polymarket 正式進入微秒級的 HFT(高頻交易)肉搏戰。(這也是為什麼我們 insiders.bot 準備在近期开源API,加入這場戰鬥)
結語:從0開始看透這台機器
從你點擊下單的那一刻起:
你的簽名被送入了鏈下的訂單簿。
Relayer 燃燒了它的 Gas 為你鋪平了道路。
Operator 在 COMPLEMENTARY 、MINT 和 MERGE 中為你尋找最優的匹配路徑。
手續費曲線用
p(1-p)的優雅公式抽走了微小的摩擦成本。如果你操作複雜,
NegRiskAdapter甚至會為你施展物質守恆的煉金術。
最終,一切都在那決定生死的 250毫秒 內塵埃落定。(這也是為什麼 insiders.bot 把跟單的透明性和速度看的至關重要)
你的錢沒有消失。它只是嚴格遵循著這台名為 ctf-exchange-v2 的精密機器的物理定律,流向了它該去的地方。
下次當你在 Polymarket 上看到一個離譜的賠率,或者一個誘人的套利機會時,不要急著點擊 Buy。先在腦子裡跑一遍這台機器的齒輪。
了解了這些基礎的"法",在配以正確的"道",你必將戰無不勝。
P.S 本文的PDF版也已經準備完畢。關注 @insidersdotbot 並 DM "PDF" 即可快速獲取。
參考文獻
[1] Polymarket Official Documentation: Matching Engine Restarts and Heartbeat Mechanism.
[2] Polymarket Official Documentation: Fees and p(1-p) Calculation Formula.
[3] Polymarket/ctf-exchange-v2 Smart Contract Source Code (GitHub).
[4] NegRiskAdapter.sol: Mathematical Implementation of Multi-outcome Conversions.
[5] leolabs.me: "Why Your Polymarket PnL is Wrong" (Split/Merge accounting analysis).
[6] Reddit r/algotrading \& Binance Square: Polymarket Taker delay removal announcements (Feb 2026).
[7] Polymarket V2 Migration Guide: Transition from USDC.e to pUSD (April 2026).














