Skip to content

索引層

CloudBank 使用 Goldsky 上託管的 The Graph 協定將鏈上事件索引到可查詢的 GraphQL API 中。此子圖將原始區塊鏈事件轉換為針對前端消費而最佳化的結構化實體。

Overview

此子圖以 AssemblyScript(一種類似 TypeScript 的語言,可編譯為 WebAssembly)編寫,並部署到 Goldsky 的託管索引服務。目前部署目標 BSC Chapel (BNB 智慧鏈測試網)。

數據來源

此子圖追蹤來自多種合約類型的事件,配置為直接資料來源和範本。

直接資料來源

這些是部署在已知固定地址的合約:

數據來源ContractPurpose
FactoryRegistryFactoryRegistry追蹤工廠註冊和市場註冊事件
DCPPFactoryDCPPFactory索引二元市場創建事件
MultiOutcomeMarketFactoryMultiOutcomeMarketFactory指數 N 結果市場創造事件

範本資料來源

部署新合約時,範本會動態實例化:

TemplateContractTrigger
BinaryCPMMBinaryCPMM由 DCPPFactory 為每個新市場創建

當偵測到 MarketCreatedWithAMM 事件時,對應會建立一個新的 BinaryCPMM 範本實例以開始對該市場的交易活動編制索引。

實體模式

此子圖定義了以下核心實體:

EntityDescription
市場包含元資料、儲備、狀態和結算資訊的預測市場
貿易市面上的個人買賣交易
使用者已與平台互動過的錢包位址
UserPosition使用者目前在特定市場的持有量(YES/NO 股份,成本基礎)
MultiOutcomeMarket具有關聯結果槽的 N 選項市場
AMMMarketMapping將 BinaryCPMM 位址連結到其父市場實體
VolumeStats總結交易量統計(每日、每週、歷史)

事件處理程序

市場創造

來自 DCPPFactory 的 MarketCreatedWithAMM 事件觸發建立新的 DCPPFactory 實體:

  • 問題文字、類別和結束時間。
  • 來自種子流動性的初始 YES/NO 儲備。
  • 創建者地址和質押金額。
  • 用於貿易索引的新 BinaryCPMM 範本實例。

貿易指數

每個 BinaryCPMM 實例上的交易事件都會對應到 BinaryCPMM 實體:

Event貿易類型Description
CollateralSwappedForOutcome用戶用抵押品購買了結果代幣
OutcomeSoldForCollateral用戶將結果代幣賣回作為抵押品
Swapped代幣到代幣互換(透過互換元數據記錄為賣出)

每筆交易都會更新相關的 Market 儲備、User 實體的交易計數以及 UserPosition 成本基礎和份額餘額。

盈虧計算

此子圖即時計算每個用戶頭寸的已實現利潤和損失:

realizedPnL = proceeds - (costBasis * sharesSold / totalShares)
  • costBasis — 取得部位所花費的累積抵押品。
  • sharesSold — 目前交易中處置的股票數量。
  • totalShares — 交易前使用者的總股份餘額。
  • 收益 — 從銷售中收到的抵押品。

即使在以不同價格進行多次購買時建立頭寸時,這種基於比例成本的方法也可確保準確的盈虧追蹤。

IPFS 元資料

市場元資料(詳細描述、類別標籤、解析來源)儲存在 IPFS 上,並在市場建立事件中由 CID 引用。子圖在索引期間獲取此元資料以提取:

  • 類別 — 用於前端過濾(體育、加密貨幣、政治等)。
  • 子類別 — 每個類別內的較細緻的分類。
  • 圖 URL — UI 中市場卡的縮圖。

IPFS 取得是透過 The Graph 的內建 IPFS 資料來源功能進行處理的,並具有針對瞬時網關故障的重試邏輯。

網路設定

ParameterValue
NetworkBSC Chapel(測試網,鏈 ID 97)
啟動區塊根據部署區塊對每個資料來源進行配置
HostingGoldsky 託管服務
查詢端點部署後由 Goldsky 提供

子圖透過 Goldsky CLI 部署,作為 CI/CD 管道的一部分,並針對開發和登台環境進行單獨部署。