block_month | DATE | UTC month of the event block time (partition key) |
block_number | BIGINT | Block number in which the transaction was executed |
block_time | TIMESTAMP | UTC event block time |
tx_hash | VARBINARY | Transaction hash |
evt_index | INTEGER | Event index within the transaction |
action | VARCHAR | Type of trade (CLOB or AMM) |
contract_address | VARBINARY | Exchange contract that emitted the trade (v1: CTFExchange or NegRiskCTFExchange; v2: the unified CTFExchange V2 contracts) |
condition_id | VARBINARY | Unique identifier for the YES/NO pair |
event_market_name | VARCHAR | Overarching question for negRisk markets |
question | VARCHAR | Concrete outcome being bet on |
polymarket_link | VARCHAR | Link to Polymarket page (may be broken for archived markets) |
token_outcome | VARCHAR | YES or NO token outcome |
neg_risk | VARCHAR | Whether this is a neg_risk market |
asset_id | UINT256 | ERC1155 token ID |
price | DOUBLE | Price of the outcome token |
amount | DOUBLE | Amount in USD (v2: pUSD treated 1:1 as USD) |
shares | DOUBLE | Number of shares transferred |
fee | DOUBLE | Per-trade fee in USD. v1: usually 0 (fees were not charged in practice); v2: from the OrderFilled fee field, charged per-market as fee = C × r × p × (1 − p) |
maker | VARBINARY | Address whose order was filled. On the taker leg (is_taker_side) this is the trader who took liquidity |
taker | VARBINARY | Address filling the order. On the taker leg (is_taker_side) this is the exchange contract itself |
is_taker_side | BOOLEAN | TRUE on the taker leg of a CLOB match (one of the two OrderFilled events per match). Filter WHERE is_taker_side for single-counted volume that avoids 2x double-counting |
maker_side | VARCHAR | Side of the maker’s order w.r.t. asset_id: BUY if the maker is acquiring outcome tokens, SELL if releasing them. Always the inverse of taker_side |
taker_side | VARCHAR | Side of the taker’s leg for asset_id: BUY if the taker acquired outcome tokens, SELL if the taker released them. Always the inverse of maker_side, so whichever of maker or taker is your wallet, read its side directly. On the taker leg (is_taker_side) the taker is the exchange, so the trader’s side is maker_side |
outcome_index | INTEGER | Positional side of asset_id within its market: 0 for the market’s first token, 1 for the second. Settlement resolves against this position, not the token_outcome label, so use it for Up/Down or team-name markets. NULL when the token is unknown to market_details |
event_id | VARCHAR | ID of the overarching neg-risk event as a 0x... string; NULL for single markets. Same value as market_details.event_market_id |
contract_version | VARCHAR | Exchange contract version: v1 (original CTFExchange/NegRiskCTFExchange) or v2 (unified CTFExchange V2, pUSD collateral; rows from April 2026 onward) |
order_hash | VARBINARY | EIP-712 hash of the filled order, from OrderFilled.orderHash. Present on all contract versions; the same order_hash recurs across rows when one resting order is filled in multiple matches — group on it to reassemble the partial fills of a single signed order |
builder | VARBINARY | v2 only: builder attribution field (bytes32) embedded in signed orders. NULL for v1 rows |
metadata | VARBINARY | v2 only: arbitrary metadata field (bytes32) in signed orders. NULL for v1 rows |
unique_key | VARCHAR | Unique event/market key |
token_outcome_name | VARCHAR | Combined token outcome and question |
_updated_at | TIMESTAMP | When this row was last inserted or updated by the dbt pipeline |