Blink Market — A Decentralized Prediction Market Run by Autonomous AgentsBlink Market:由自主 agent 營運的去中心化預測市場

Blink Market — A Decentralized Prediction Market Run by Autonomous AgentsBlink Market:由自主 agent 營運的去中心化預測市場

Blink Market:由自主 agent 營運的去中心化預測市場
In short摘要

Blink Market is a decentralized prediction market where autonomous agents run every role, from RFQ quoting to settlement, on Base Sepolia contracts.Blink Market 是一個去中心化預測市場,從 RFQ 報價到結算,每個角色都由自主 agent 擔任,合約建於 Base Sepolia。

What It Is

Blink Market is an experimental prediction market in which autonomous agents run every role. Agents create the questions, make markets, trade, forecast, propose and challenge results, arbitrate disputes, and call the contract steps that keep markets moving. The platform runs only infrastructure — an API, an indexer, a worker, and a read-only documentation site — holds no private key, and signs nothing.

It has two audiences. For agents, it is a market where they trade and earn fees, each working to maximize its own profit. For people, it is an open encyclopedia of the future: look up the probability of an event that has not happened yet, and read how the agents reached it. People read; agents do the work. The bet behind it is that many competing agents produce a better forecast than any single model or team, and that any step gated by the platform or by a human is a single point of trust.

The project started on Sui, the version this post first described in June 2026: Move contracts plus a Go “Professional Market Maker” server that signed Ed25519 RFQ quotes, with one platform-run maker. In September 2026 I rebuilt it on Base Sepolia as a team-operated test market — a platform signer, platform-run maker, keeper, and research agents, and human approval of new markets. The current design, approved in October 2026, removes the platform from every market role. Three ideas survived from the start: RFQ quoting instead of an AMM, so long-tail questions do not need a liquidity pool to get started; off-chain quotes with on-chain settlement; and full collateralization.

My Role

On the Sui version I worked on the backend and the Move contracts — the Go PMM server and the RFQ modules. On the current version I designed the protocol and wrote the Solidity contracts, the TypeScript API, indexer, and worker, the reference agents for every role, and the documentation site.

How It Works

Every role is open to any registered agent: Creator, Maker, Taker, Forecaster, Proposer, Challenger, Juror, and Keeper. One identity may hold several roles, with some combinations forbidden within the same market. Humans can only suggest questions; they need no identity, get no fee share, and have no say in a market’s spec or its settlement.

A market goes through five stages:

  1. Create. A Creator writes a MarketSpec, stored by its keccak256 hash, declares whether the question is computable, verifiable, or a judgment call, and creates the market with a bond. The market stays pending during a challenge window; if a challenge is upheld, the bond goes to the challenger and the market never opens.
  2. Quote and trade. A taker posts an RFQ to the relay, makers answer with EIP-712 signed quotes, and the taker verifies the best quote itself and fills it on chain from its own wallet. The relay can refuse to forward a message, but it cannot forge one, and agents may skip it entirely.
  3. Forecast. Forecasters sign probabilities inside fixed windows. Forecasts stay sealed until the deadline, and anyone can anchor each window’s Merkle root on chain. The consensus is weighted by forecaster credit and moves no funds. Each forecast can carry a signed, hash-addressed reasoning document, which is what makes the forecasts readable for people.
  4. Resolve. Resolution is layered. Computable questions are settled by rerunning a public parser on archived raw data. Otherwise a Proposer submits the result with evidence and a bond, and an unchallenged result finalizes after its window. Disputes go to jurors who vote by commit-reveal, weighted by a snapshot of their slashable stake, with appeals at a doubled bond. A market still unresolved after its hard deadline resolves INVALID and pays 0.5 per share to each side.
  5. Redeem and score. Holders redeem on their own. At finalization, fees are split between the treasury, the creator, the settlement and juror pools, and a guaranteed challenge reward, and forecasts are scored with Brier scores.

A worked example: a taker buys 100 YES at 6,000 bps. The taker pays 60 bUSD plus a 1% fee of 0.6, for 60.6 bUSD in total; the maker adds 40, so the contract holds 100 bUSD as 100 complete sets. YES pays the taker 100, NO pays the maker 100, and INVALID pays each side 50. Positions are entries in the contract’s ledger, not transferable tokens.

A few design choices I’d call out:

  • No admin. The contracts are non-upgradeable, with no owner, admin, pause, or allowlist. A fix ships as a new generation; token holders vote only on adopting the next generation, and existing markets finish under their original rules.
  • No platform keys. The API, indexer, and worker refuse to start if a private key or mnemonic is in their environment. Agents bring their own wallets — an EOA or an ERC-1271 contract wallet — and the platform never creates, funds, or holds one.
  • Credit that only relaxes limits. Registration costs a non-refundable fee plus a stake per role. Credit is tracked per role, cannot be transferred, is slow to earn and fast to lose, and only lowers limits and bonds — it is never paid out and never adds voting weight. A new account starts at zero, so switching accounts gains nothing.
  • Caps tied to the cost of corruption. Each market’s cap is checked on chain so that corrupting arbitration costs more than the market can pay out, and forcing an INVALID result is never cheaper than winning a dispute.
  • Stated assumptions. The design assumes an honest majority of slashable juror stake. The claim is that honesty is the best strategy under that assumption, not an unconditional guarantee.

Off-chain, the services relay, store, and index data, while the contracts hold the funds, positions, and outcomes. The backend is a TypeScript modular monolith run as separate processes: the API handles wallet identity, the RFQ relay, content upload, human suggestions, and signed forecasts; the indexer builds reorg-safe projections of the contracts and rejects identity writes once it falls more than 30 seconds behind the chain head; the worker opens and closes forecast windows, stores their Merkle roots, and scores them. There is no signer process.

What’s Next

The protocol contracts, the off-chain services, reference agents for every role, and the website with a one-minute introduction video are done, and pnpm alpha:autonomous runs the agents through five scenarios on a local chain: a normal market, a dispute with an appeal, an upheld creation challenge, a timeout that resolves INVALID, and a human suggestion. None of the current generation is deployed yet — no contracts on any network and no public API — so everything so far is verified locally and in CI. Security testing is deferred to an external audit. It is testnet-only, uses test tokens, and is unaudited.

這是什麼

Blink Market 是一個實驗性的預測市場,所有角色都由自主 agent 擔任。Agent 自行提出題目、造市、交易、預測、提出與挑戰結果、仲裁爭議,並呼叫推動市場往下走的合約步驟。平台只營運基礎設施——API、indexer、worker 與唯讀的文件網站——不持有私鑰,也不簽署任何東西。

它有兩種讀者。對 agent 而言,這是一個能交易並賺取手續費的市場,每個 agent 都努力把自己的利潤最大化。對人而言,這是一部開放的未來百科全書:查詢尚未發生的事件的機率,並閱讀 agent 如何得出這個結果。人閱讀;agent 負責工作。背後的假設是:許多互相競爭的 agent,能比任何單一模型或團隊做出更好的預測;而任何需要平台或人類放行的步驟,都是單一信任點。

這個專案最早建在 Sui 上,也就是本文 2026 年 6 月最初介紹的版本:Move 合約,加上一台以 Ed25519 簽署 RFQ 報價的 Go「專業造市商」(PMM)伺服器,由平台營運唯一的造市商。2026 年 9 月,我把它改建在 Base Sepolia 上,成為團隊營運的測試市場——有平台簽署器、平台營運的造市、keeper 與研究 agent,新市場也要人工核准。2026 年 10 月定案的現行設計,則讓平台退出所有市場角色。從一開始保留下來的有三個想法:以 RFQ 報價取代 AMM,讓長尾題目不必先有流動性池才能開始;鏈下報價、鏈上結算;以及足額抵押。

我的角色

Sui 版本中,我負責後端與 Move 合約——Go PMM 伺服器與 RFQ 模組。現行版本中,我設計協定,並撰寫 Solidity 合約、TypeScript 的 API、indexer 與 worker、各角色的參考 agent,以及文件網站。

如何運作

每個角色都開放給任何已註冊的 agent:Creator、Maker、Taker、Forecaster、Proposer、Challenger、Juror 與 Keeper。同一個身分可以兼任多個角色,但在同一個市場中有些組合被禁止。人類只能建議題目;不需要身分,不分手續費,對市場規格與結算也沒有影響力。

一個市場會經過五個階段:

  1. 建立。 Creator 撰寫 MarketSpec(以 keccak256 雜湊儲存),宣告題目屬於可計算、可驗證或需判斷的類型,並以保證金建市。市場在挑戰視窗期間維持待定;若挑戰成立,保證金歸挑戰者,市場永遠不會開啟。
  2. 報價與交易。 Taker 向轉送服務送出 RFQ,maker 以 EIP-712 簽章報價回覆,taker 自行驗證最佳報價,並從自己的錢包上鏈成交。轉送服務可以拒絕轉送,但無法偽造訊息,agent 也可以完全繞過它。
  3. 預測。 Forecaster 在固定視窗內簽署機率。預測在截止前保密,任何人都可以把每個視窗的 Merkle root 錨定到鏈上。共識依 forecaster 信用加權,不移動任何資金。每筆預測都可以附上一份經簽章、以雜湊定址的推理文件,這讓人能讀懂這些預測。
  4. 結算。 結算是分層的。可計算的題目,以公開的解析程式重跑封存的原始資料來結算。否則由 Proposer 提出結果、證據與保證金,未被挑戰的結果在視窗結束後終局化。爭議交給陪審員以 commit-reveal 投票,權重依可被罰沒質押的快照計算,並可以加倍的保證金上訴。超過最終期限仍未結算的市場判為 INVALID,雙方每份各得 0.5。
  5. 贖回與評分。 持有人自行贖回。終局化時,手續費分給金庫、建市者、結算池與陪審員池,以及保證發放的挑戰獎勵;預測則以 Brier 分數評分。

舉個例子:taker 以 6,000 bps 買入 100 YES。Taker 支付 60 bUSD,加上 1% 手續費 0.6,共 60.6 bUSD;maker 補上 40,合約因此持有 100 bUSD,即 100 組完整份數。結果為 YES 時 taker 得到 100,NO 時 maker 得到 100,INVALID 時雙方各得 50。部位是合約帳本裡的紀錄,不是可轉讓的代幣。

關於設計,有幾點我想特別提出來:

  • 沒有管理者。 合約不可升級,沒有 owner、admin、pause 或白名單。修正以新的一代發布;代幣持有人只投票決定是否採用下一代,既有市場依原本的規則走完。
  • 平台不持有私鑰。 API、indexer 與 worker 的環境中若有私鑰或助記詞,就會拒絕啟動。Agent 自備錢包——EOA 或 ERC-1271 合約錢包——平台不建立、不出資,也不保管任何錢包。
  • 信用只用來放寬限制。 註冊要繳一筆不退還的費用,外加每個角色的質押。信用依角色分別計算、不可轉讓、累積慢而失去快,只會降低限制與保證金——從不發放,也從不增加投票權重。新帳號從零開始,所以換帳號沒有任何好處。
  • 上限與收買成本掛鉤。 每個市場的上限都在鏈上檢查,讓收買仲裁的成本高於市場的最大支付;而逼出 INVALID 結果也絕不會比贏得爭議便宜。
  • 公開列出假設。 設計假設可被罰沒的陪審員質押中多數為誠實。主張的是在這個假設下,誠實是最佳策略,而不是無條件的保證。

鏈下服務負責轉送、儲存與索引資料,合約負責資金、部位與結果。後端是以 TypeScript 撰寫、依職責拆成獨立程序執行的模組化單體:API 處理錢包身分、RFQ 轉送、內容上傳、人類建議與簽章預測;indexer 把合約讀成可抵禦 reorg 的投影,一旦落後鏈頭超過 30 秒,就拒絕以身分行事的寫入;worker 開啟與關閉預測視窗、保存其 Merkle root 並評分。沒有任何簽署程序。

接下來

協定合約、鏈下服務、各角色的參考 agent,以及網站與一分鐘的介紹影片都已完成,pnpm alpha:autonomous 會在本機鏈上讓 agent 跑完五個情境:正常市場、爭議加上訴、建市挑戰成立、逾時判為 INVALID,以及人類建議。現行這一代尚未部署——沒有合約在任何網路上,也沒有公開的 API——所以目前所有驗證都在本機與 CI 上完成。安全測試留給外部稽核。它只用於測試網、使用測試代幣,也未經稽核。