ewardGPT/kinetic-risk-ontology

GitHub: ewardGPT/kinetic-risk-ontology

将 Polymarket 预测市场仓位与 Polygon 链上稳定币流向在同一钱包地址上关联,通过流式本体图谱实现威胁金融情报的早期预警检测。

Stars: 0 | Forks: 0

# 动态风险本体(KRO) ## 核心论点(30 秒) Polymarket 使用交易者自己的钱包在 Polygon 上进行结算。结果仓位是 Conditional Token Framework 中的 ERC-1155 代币,以 USDC.e 计价,并由 UMA 的 Optimistic Oracle 解析。**持有“YES — 第三季度前发生冲突”仓位的地址,与你可以追踪稳定币流入、跨链桥活动和交易所路由的地址是同一个。** 这不是两张图表之间的时间相关性——而是基于 `address` 的主键关联。 这就是 KRO 存在的全部原因。下游的一切(本体、实体解析、动态风险评分)都是为了利用这一关联而存在的。 ## 为什么这能与 Palantir 产生映射 Palantir 的核心抽象是 **Ontology** —— 类型化的 Objects、类型化的 Links 以及作用于其上的 Actions。Gotham(政府/情报产品)旨在让分析师能够从一个对象跳转到其关联关系,从而揭示一个网络。KRO 的结构也是一样的:我们将世界建模为一个类型化的本体,而“产品”则是分析师在 市场 → 钱包 → 集群 → 实体 → 流向 → 预警 之间进行联动排查的能力。 ## 架构 ``` Sources: Polymarket Gamma / CLOB WS / Data API Polygon RPC (eth_getLogs) OFAC SDN Ingestion: async Python collectors market-collector: CLOB WS price_change events chain-collector: Polygon USDC.e / USDT Transfer logs positions-collector: Polymarket trades feed + smart-money enrichment Bus: Redpanda (Kafka API) Stream proc: kinetic-risk engine - rolling z-score on per-market probability velocity - rolling z-score on per-cluster stablecoin flow - lead-lag cross-correlation - composite score → KineticRiskAlert Storage: TimescaleDB (hypertables, continuous aggregates) Neo4j (typed ontology, pivotable in Browser) pgvector (wallet embeddings, in same PG instance) Surfaces: Grafana (live time-series) Neo4j Browser (graph pivot) psql / cypher-shell (raw access) ``` ## 仓库结构 ``` docker-compose.yml Infra: Redpanda, Timescale, Neo4j, Grafana + all services PRD.md Original product requirements document libs/kro_common/ Shared types, config, db, bus, logging services/ market-collector/ Gamma metadata + CLOB WS ticks for curated basket chain-collector/ Polygon USDC.e / USDT Transfer logs (eth_getLogs) positions-collector/ Polymarket trades feed + smart-money enrichment entity-resolution/ OFAC + Leiden clustering + label propagation kinetic-risk/ Correlation engine: z-score, lead-lag, composite ontology-loader/ PG -> Neo4j ontology (Object/Link/Action) apps/ honesty-layer/ Wash-trade suppression, smart-money recompute infra/ timescaledb/init.sql Hypertables, continuous aggregates, schema grafana/ Datasources, dashboards (KRO main) neo4j/ Cypher constraints/indexes scripts/ bootstrap.sh Bring everything up seed_demo_alert.sh Inject a synthetic KineticRiskAlert for demos push_alerts_to_neo4j.py One-shot alert loader (bypasses slow loader path) data/ curated_markets.json Selected market basket (auto-generated) ``` ## 快速开始(VPS) ``` # 1. Sync rsync -az --delete --exclude=.git --exclude='.venv' \ ~/data-pool/Resume\ Projects/Palentir/ vps:~/projects/palentir/ # 2. 启动 infra + services ssh vps 'cd ~/projects/palentir && docker compose up -d --build' # 3. (可选)生成一个 demo alert,使 alert feed 不为空 ./scripts/seed_demo_alert.sh # 4. 打开 surfaces # Grafana: http://:3300/d/kro-main # Neo4j: http://:7474 # psql: docker exec -it palentir-timescaledb psql -U postgres -d kro ``` ## 核心指标(已运营化、站得住脚) | 指标 | 我们的报告内容 | |---|---| | **吞吐量** | 摄取了 15,000+ 个标准化事件(价格跳动 / 交易成交 / 解码的 Transfer)—— 在 Grafana 中展示实时*细分*。 | | **延迟** | *市场* 热路径上的 p99 tick-to-queryable 限制在 < 200 毫秒以内。链上路径受限于出块时间(约 2 秒),并且被*刻意排除*在该预算之外。 | | **实体解析** | 在保留的标注数据集上的成对 F1 分数;方法论是基于共同活动的贪婪 Jaccard 算法,结合 OFAC SDN + Leiden 整合。诚实的简短总结是:*“94% 的 F1 分数,而不是准确率——对于不平衡的成对问题,准确率毫无意义。”* | ## Cypher 中的本体(分析师的联动排查) 核心论点在这里体现:一个单一的市场、在上面进行交易的钱包、这些钱包发送的交易,以及它们解析到的集群(实体分组)和实体(现实世界的参与者)。 ``` MATCH (w:Wallet)-[:PLACED]->(t:Trade)-[:ON_MARKET]->(m:Market {curated: true}) OPTIONAL MATCH (w)-[:SENT]->(tx:Transaction) OPTIONAL MATCH (w)-[:MEMBER_OF]->(c:Cluster) OPTIONAL MATCH (w)-[:RESOLVES_TO]->(e:Entity) RETURN m.question AS market, w.address AS wallet, count(DISTINCT t) AS trades, count(DISTINCT tx) AS txs, c.cluster_id AS cluster, e.entity_id AS entity, e.risk_level AS risk ORDER BY txs DESC LIMIT 10; ``` ``` MATCH (a:KineticRiskAlert {state: 'open'})-[:FIRES_ON]->(m:Market), (a)-[:IMPLICATES]->(c:Cluster) RETURN a.composite_score, a.time, m.question, c.cluster_id, c.size ORDER BY a.composite_score DESC LIMIT 10; ``` 请参阅 [docs/CYPPER_QUERIES.md](docs/CYPPER_QUERIES.md) 获取 8 个可直接运行的查询。 ## 诚实的局限性 * **无 Polymarket 身份验证。** 需要 EIP-712 / HMAC 签名的 Data API 端点(按账户划分的单钱包成交记录、完整订单簿)是不可调用的。我们改用公开的 `trades` 数据流,这对于 钱包↔市场 的关联已经足够,但并未覆盖所有成交记录。 * **无 Kalshi。** Kalshi 需要 RSA-PSS 身份验证;我们没有密钥。PRD 将 Kalshi 列为跨场所的确认源——我们为此发布了一个存根,并且在其接入时,超前滞后检查(lead-lag check)保持相同的结构。 * **OFAC + 共同活动是一个薄弱的标签集。** 真正的成对 F1 测量需要一个人工标注的黄金数据集,其规模要大于公开的 OFAC + 共同活动所能提供的。我们诚实地报告了在自动构建的黄金数据集上的 F1 分数——面试中的任何人都可以对这种方法论提出质疑。 * **具备隐私意识的参与者会在设计上破坏聚类。** 混币器、新钱包的良好卫生习惯以及意图感知的中继器,其构建目的就是为了击败这种共同活动分析。我们将刻意的不可链接性本身视为一个微弱的信号;我们*不*声称完整性。 * **Polygon 出块时间的不对称性。** 链上热路径无法匹配市场数据 < 200 毫秒的预算——它受限于出块时间(约 2 秒)。相关性窗口的大小设计就是为了吸收这一差异。主动指出这一区别表明你了解区块链;假装不然是一个瞬间的危险信号。 ## 谈论它(面试脚本) ### 30秒推介 ### 2分钟推介 ### 可能的深入探讨问题(及诚实的回答) * **“这难道不是虚假的相关性吗?”** -> 钱包级别的关联(PRD 的第 0 部分)。我不是在对两个时间序列进行相关性分析;同一个地址位于两侧。而且我以流动性为门槛,用智能资金的 PnL 进行加权,并要求具备超前滞后(lead-lag)结构,而非巧合。 * **“94% 是怎么测量出来的?”** -> 在保留的标注黄金数据集上的成对 F1 分数,而不是准确率——对于不平衡的成对问题,准确率毫无意义。标签来自 OFAC SDN + 共同活动集群。 * **“你是如何达到 200 毫秒的?”** -> *市场* 热路径上的 p99 tick-to-queryable;这是该预算分配。链上路径受限于约 2 秒的出块时间,因此它被刻意*排除*在该数字之外,而相关性窗口吸收了这种不对称性。 * **“什么会破坏你的实体解析?”** -> 隐私工具——如混币器、新钱包的良好卫生习惯——其构建目的就是为了破坏聚类,因此对于复杂的参与者,召回率会下降。我将这种不可链接性本身视为一个微弱的信号。 * **“为什么选 Redpanda 而不是 Kafka?为什么选 Bytewax 而不是 Flink?”** -> 在这种规模下,运维负担是不合理的;两者都为我提供了正确的语义(Kafka API、流式窗口)而无需付出运维成本,而且如果规模有需求,我能够清晰地表述出其升级路径。
标签:区块链分析, 威胁情报, 开发者工具, 流处理, 请求拦截, 逆向工具, 金融风控, 预测市场