项目介绍
Rootmark 是 Portaldot V3 链的可验证数据与查询中间件。
Portaldot V3 在两个执行环境中运行一条链:通过 EVM 端点运行 Solidity 合约,通过 pallet_contracts 运行 ink! 合约。Rootmark 将两者索引为单一的标准化 EventRecord(包含 vm, chainId, blockNumber, blockHash, txHash, contract, event, args, leaf 字段),并通过统一的查询 API 和控制台提供服务,同时在链上提交每一批次的 Merkle 根。任何读取者都可以获取结果及其 Merkle 路径,在本地重建根节点,并将其与锚定合约中存储的根节点进行比较。如果索引器伪造了记录,验证将失败。
赛道:模块化云与中间件。已在 Portaldot V3 测试网上线,链 ID 为 420420777。
解决的问题
这两个虚拟机暴露了不同的事件模型(Solidity 日志与 Substrate system.events 加上 ink! ContractEmitted),没有共享索引,且每个通过索引器读取的应用都必须信任其提供的信息。
Rootmark 用“验证”取代了“信任”。一个索引涵盖两个 VM。每批数据都归约为一个 32 字节的根,存储在 PortalAnchor 合约中。验证在读取者自己的进程中重新计算(浏览器标签页或脚本),而非直接从服务器输出获取。未上链承诺的批次会明确标记为 unsigned,因此界面永远不会暗示其并不具备的证明。
链接
实时网站: https://rootmark-seven.vercel.app
控制台(查询加验证): Console: query and verify every record | Rootmark
锚点(批次、根节点、交易): Anchors: Merkle batches on chain | Rootmark
合约(链上实时状态): Contracts: anchor state live from chain | Rootmark
演示视频(30秒,真实屏幕,光标点击“验证”): https://youtu.be/HhubgdyP3U8
路演文稿: Rootmark - Pitch Deck | Rootmark
API: GET /api/v1/events, GET /api/v1/proof/:id, GET /api/v1/anchors
链上证明(从 PortalAnchor 存储中读回):
PortalAnchor(EVM):0x92B79C5cD9CC8235e3e2718a739BE825e2bd5430,部署交易0x6e33aa2d09f1a32b076df8297529e8cf87f57bb9a777570ed2624ec9e822a923(区块 204392)Emitter(测试事件):0x178B9ED9dB766d2ecda393ca0b780A643a12C31E- 最新提示批次
0x068e2ffd...0bf8f798,根节点0x3aa9be70...c0c7f21083,计数 1,记录区块 204924,锚定交易0x3f5a2af5...位于区块 204947 PortalAnchor上共有 4 个真实锚点,已于 11 月 2 日从合约存储中验证
技术亮点
1. 跨越两个 VM 的统一记录格式
索引器同时追踪 EVM 端点(eth_getBlockByNumber、收据、ABI 解码日志)和 Substrate 节点(system.events,包括 ink! ContractEmitted)。两个数据源都标准化为一种可查询的格式。控制台的 Env 列显示每一行数据来自哪个 VM,单次查询结合事件和合约过滤器即可跨越两者。
2. 每批数据都锚定在链上,并附带收据
记录分组为批次,哈希为叶子节点,进行 Merkle 化,并通过 anchor(root, count, fromBlock) 提交。目前 PortalAnchor 存储中有四个锚点,包含批次 ID、根节点、计数、区块范围和交易哈希。落地页上的最新提示行即为实时最新数据,而非模拟数据。
3. 验证在您的浏览器中运行
点击控制台任意行上的“验证”,面板将显示四个值:叶子节点、本地重建的根节点、锚定的根节点以及从合约存储中读取的根节点。重建过程使用与索引器相同的哈希代码,在标签页中执行。伪造的记录会产生不匹配,并以红色显示。
4. 设计上的诚实信任状态
公共部署是无状态的,因此其 26 条记录的快照和 8 个快照批次被标记为 unsigned(onChainRoot: null;verified: true 意味着本地 Merkle 计算通过,而非链上一致)。真实批次携带交易哈希和区块信息。这一区别在 API 和 UI 中均有明确体现。
5. 完全可复现的评审路径
从全新克隆到生成证明只需几分钟:npm install, npm run typecheck, npm test, npm run build,然后运行 npm run indexer 配合 npm run dev。无状态索引无需密钥。使用持有资金 tPOT 的 PORTALDOT_MNEMONIC,同一索引器可签署并锚定新批次。仓库包含 README、部署说明、架构图(docs/architecture.svg)、演示脚本(DEMO.md)以及 contracts/deployments.json 流程。
团队
由 Sketchify 独立构建。
- GitHub: @Sketchify-Dev
- 端到端负责范围:双 VM 索引器、Solidity 锚点、Merkle 证明系统、REST API、Next.js 控制台、合约部署、文档和路演文稿
评委与投票契合度
对于评委: Rootmark 是中间件,而非又一个仪表盘。它直接对应评分标准:技术可行性(工作正常的双 VM 索引器、具有可验证交易的已部署合约、通过的类型检查加测试加构建、浏览器端证明重算);创新性(专为双 VM 链设计的可检查索引,其中唯一受信任的值是每批次一个 32 字节的根节点);生态系统贡献(开源的查询加证明 API,任何 Portaldot 开发者均可复用,附带文档和架构);商业潜力(每一个读取链的应用都需要一个不必盲目信任的索引)。
对于社区投票者: 如果你曾好奇一个浏览器或索引器是否说了真话,这是为你打造的。打开控制台,运行一个跨越两个 VM 的查询,点击任意行的“验证”,看着根节点在你自己的标签页中重新计算。无需安装,无需钱包,无需注册。