构建实时去中心化搜索引擎:Origin Protocol 事件监听与索引架构解析
构建实时去中心化搜索引擎Origin Protocol 事件监听与索引架构解析【免费下载链接】originMonorepo for our developer tools and decentralized marketplace application项目地址: https://gitcode.com/gh_mirrors/origin1/originOrigin Protocol 是构建在以太坊上的去中心化市场协议其核心难点之一就是如何为链上数据提供实时的搜索体验。本篇文章将深入解析 Origin Protocol 的去中心化搜索引擎架构从事件监听、数据索引到查询服务的完整链路带你理解一个区块链版搜索引擎是如何被一步步搭建起来的。文章基于开源项目 Origin 的 Discovery 服务展开相关代码位于infra/discovery/目录整体架构分为三大模块事件监听器listener、索引库lib与 GraphQL 查询服务apollo。为什么去中心化市场需要一套独立的搜索引擎在传统中心化平台中商品数据都存在数据库里SQL 一查就出来。但在区块链上所有 Listing商品列表和 Offer交易报价都以事件Event的形式散落在区块中天然不支持按关键词模糊搜索、按价格排序这类查询。如果每次搜索都去扫描链上数据不仅慢而且成本极高。Origin Protocol 的解法非常典型用事件监听器把链上数据搬运到链下的离线索引中再通过 GraphQL 接口对外提供实时搜索能力。这套架构与中心化搜索引擎如 Elasticsearch的采集 → 索引 → 查询三段式非常相似只不过数据源头换成了区块链。三大核心组件事件监听器、索引库与查询服务整个 Discovery 服务的代码结构非常清晰一眼就能看懂分工infra/discovery/src/listener/区块链事件监听器负责捕获链上事件并触发处理infra/discovery/src/lib/索引库负责把数据写入 Elasticsearch 与 Postgresinfra/discovery/src/apollo/GraphQL 查询服务面向 DApp 前端提供搜索 API三者构成一条完整的数据流水线链上事件 → 监听器 → 索引库 → 查询服务 → 前端搜索。下面我们逐一拆解。事件监听器如何实时捕获链上事件监听器的核心逻辑在 listener.js它的工作方式不是 WebSocket 推送而是定时轮询每 30 秒向以太坊节点查询一次最新区块高度然后抓取目标合约在上次处理区块到最新区块之间产生的所有事件。监听的目标合约包括各版本的市场合约Marketplace V0/V1/V2 等捕获商品与交易事件身份合约IdentityEvents捕获用户资料更新事件代理工厂合约ProxyFactory捕获账户代理创建事件断点续传与至少一次投递保障监听器最巧妙的设计在于断点续传。它会为每个合约记录已处理到的区块高度getLastBlock/setLastBlock状态可以持久化到 Postgres 的Listener表也可以写入本地 continue 文件。这样无论进程崩溃还是网络抖动重启后都能从上次的位置继续不会漏掉任何一个事件。同时代码注释里明确声明了两条保证至少一次At-least-once投递同一事件可能被重复处理因此下游消费方必须做到幂等按区块链顺序处理事件严格按照区块高度顺序逐个处理避免数据错乱针对节点不同步、RPC 超时等常见故障工具函数 utils.js 提供了带指数退避的重试机制withRetrys最多重试 10 次、单次最长等待 2 分钟重试仍失败则主动退出进程交由外部编排系统重启。事件分类与处理器分发机制监听器拿到原始事件后会通过 handler.js 中一张事件 → 处理器映射表进行分发。例如ListingCreated、ListingUpdated、ListingWithdrawn等商品事件 → 市场处理器OfferCreated、OfferAccepted、OfferDisputed、OfferFinalized等交易事件 → 市场处理器IdentityUpdated→ 身份处理器ProxyCreation→ 代理处理器每个处理器如 handler_marketplace.js会做两件事先从origin/graphql拉取该事件的完整业务数据商品详情、买卖双方信息等再把这些数据写入索引。此外处理器还支持把事件以 JSON 形式推送到多种下游渠道通知服务 Webhook、Discord 群通知、邮件列表以及 Google Cloud Pub/Sub 消息队列实现生态联动。从事件到索引数据如何写入 Elasticsearch市场处理器拿到商品数据后会调用 search.js 中的Listing.index()把商品写入 Elasticsearch 的listings索引。这里有几个值得学习的工程细节去除不稳定字段日历类jCal字段结构变化频繁容易破坏 Elasticsearch 的动态映射索引前会被剔除预处理评分写入前预先计算scoreMultiplier评分乘数避免查询时实时计算拖慢响应更新用 Painless 脚本审核人员对商品打标签时通过服务端脚本原子更新分数减少并发竞态价格归一化与多币种排序技巧去中心化市场最大的特色是多币种商品价格可能是 ETH、DAI、美元、欧元……直接排序没有意义。Origin 的解法是借助 Redis 中由桥接服务实时刷新的汇率数据把各币种价格统一折算成美元后排序见 search.js 中的getSortQuery。折算过程放在 Elasticsearch 的 Painless 脚本里执行还贴心地用 try/catch 兜底遇到格式异常的商品自动排在末尾保证查询永不报错。相关性打分不只是简单的关键词匹配为了让搜索结果更智能Origin 设计了一套多因子评分体系scoring.js文本匹配搜索词在标题中命中可获得 2 倍加权关键词邻近度slop也参与评分商品状态非在售状态的商品降权至 0.3 倍反垃圾超低价商品疑似洗钱/刷单降至 0.2 倍无图片商品降至 0.8 倍OGN 质押激励卖家质押 OGN 代币越多商品曝光权重越高最高 2.5 倍时效加权新发布的商品在 18 天内享受线性衰减的热度加成脚本见search的function_score审核标签被标记为 Super Featured 的商品获得 5 倍权重被 Hide 的商品直接消失值得一提的是查询层还会对已下架、无效、被审核隐藏的商品做硬性过滤must_not保证用户永远看不到违规内容。面向用户的 GraphQL 查询服务索引建好后如何把数据暴露给前端答案是 apollo 目录 下的 GraphQL 服务。它提供三类核心查询listings支持关键词、排序、筛选、分页的复合搜索同时返回价格区间等聚合统计listing按 ID 获取单个商品详情其中scoreTags等审核字段仅对授权管理员开放visibleListingIds根据审核操作记录表discovery_tag_action批量过滤被隐藏的商品DApp 前端只需一次 GraphQL 查询就能拿到按相关度排序、带价格区间的搜索结果页体验与中心化电商几乎无异。本地快速体验一键启动去中心化搜索引擎想亲身体验这套架构项目提供了完善的 Docker 编排支持在 README.md 中给出了完整步骤核心流程如下克隆仓库git clone https://gitcode.com/gh_mirrors/origin1/origin启动依赖服务docker-compose up postgres elasticsearch redis-master配置环境变量DATABASE_URL、ELASTICSEARCH_HOST、NETWORK先启动监听器npm run start:listener:development -- --networklocalhost --marketplace --identity --elasticsearch再启动查询服务npm run start:discovery:development -- --networklocalhost --marketplace --identity --elasticsearch监听器支持--concurrency参数开启回填模式backfill以多并发方式快速重建历史索引这在从零同步主网数据时非常实用。需要特别提醒的是Redis 中缺少汇率时系统会自动使用内置默认值不影响正常启动适合本地调试。架构全景图与数据流梳理最后我们把整条链路串起来看以太坊智能合约Marketplace / Identity / ProxyFactory │ 产生事件 ▼ 事件监听器每 30 秒轮询断点续传按序处理 │ 调用处理器拉取完整业务数据 ▼ 数据索引Elasticsearch 商品索引 Postgres 业务表 │ 预计算评分、汇率归一化 ▼ GraphQL 查询服务搜索 / 详情 / 审核过滤 │ ▼ Origin DApp 前端搜索页这套链上事件监听 链下索引 GraphQL 查询的三层架构成功把不可查询的区块链数据变成了毫秒级响应的实时搜索体验。无论你是想学习区块链数据索引的最佳实践还是准备为自己的 DApp 搭建搜索引擎Origin Protocol 的实现都提供了绝佳的参考模板——事件监听器的断点续传、多因子评分、多币种归一化排序等设计处处体现着生产级工程应有的严谨。如果你想深入了解代码细节建议从 listener.js 的轮询主循环读起再对照 search.js 的查询构造逻辑很快就能掌握这套架构的精髓。【免费下载链接】originMonorepo for our developer tools and decentralized marketplace application项目地址: https://gitcode.com/gh_mirrors/origin1/origin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

重装系统后装Office要一下午?LKY Office Tools一键自动化部署让你几分钟搞定

重装系统后装Office要一下午?LKY Office Tools一键自动化部署让你几分钟搞定

重装系统后装Office要一下午?LKY Office Tools一键自动化部署让你几分钟搞定 【免费下载链接】LKY_OfficeTools 一键自动化 下载、安装、激活 Office 的利器。 项目地址: https://gitcode.com/GitHub_Trending/lk/LKY_OfficeTools 上周五下班前,同…

2026/8/19 18:13:05 阅读更多 →
射频PCB逆向工程实战:一份值得收藏的Quansheng UV-K5完整KiCad设计文件解析

射频PCB逆向工程实战:一份值得收藏的Quansheng UV-K5完整KiCad设计文件解析

射频PCB逆向工程实战:一份值得收藏的Quansheng UV-K5完整KiCad设计文件解析 【免费下载链接】Quansheng_UV-K5_PCB_R51-V1.4_PCB_Reversing_Rev._0.9 Reverse engineering of the Quansheng UV-K5 V1.4 PCB in KiCad 7 项目地址: https://gitcode.com/GitHub_Tren…

2026/8/20 20:00:45 阅读更多 →
为什么相机在体积内部时画面疯狂闪烁?volsample 的诞生背景与实时体积渲染走样之谜

为什么相机在体积内部时画面疯狂闪烁?volsample 的诞生背景与实时体积渲染走样之谜

为什么相机在体积内部时画面疯狂闪烁?volsample 的诞生背景与实时体积渲染走样之谜 【免费下载链接】volsample Structured Volume Sampling - sample placement algorithm for real-time volume rendering with low aliasing, for camera-in-volume case. 项目地…

2026/8/20 20:00:22 阅读更多 →

最新新闻

一套键鼠管三台电脑:Input Leap 跨设备键鼠共享从入门到排查全指南

一套键鼠管三台电脑:Input Leap 跨设备键鼠共享从入门到排查全指南

一套键鼠管三台电脑:Input Leap 跨设备键鼠共享从入门到排查全指南 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 先别急着换外设,看一个每天都要重复的动作 你的桌面大概率是…

2026/8/20 20:01:10 阅读更多 →
甩掉空白图标!QuickLookVideo 让 Mac Finder 视频预览覆盖 MKV、AVI 与 WebM

甩掉空白图标!QuickLookVideo 让 Mac Finder 视频预览覆盖 MKV、AVI 与 WebM

甩掉空白图标!QuickLookVideo 让 Mac Finder 视频预览覆盖 MKV、AVI 与 WebM 【免费下载链接】QuickLookVideo Finder Thumbnails, Quick Look previews, Get Info metadata and previews for most types of audio and video files. 项目地址: https://gitcode.co…

2026/8/20 20:01:10 阅读更多 →
Loose Leaf 内存管理实战:让 iPad 应用流畅运行海量页面的秘密

Loose Leaf 内存管理实战:让 iPad 应用流畅运行海量页面的秘密

Loose Leaf 内存管理实战:让 iPad 应用流畅运行海量页面的秘密 【免费下载链接】loose-leaf Intuitive note taking app. Import and annotate PDFs, manipulate imported photos with intuitive gestures, and take notes with Apple Pencil. 项目地址: https://…

2026/8/20 20:01:10 阅读更多 →
进阶之路:如何为 MovieHeavens 扩展新片源,打造属于自己的电影搜索工具?

进阶之路:如何为 MovieHeavens 扩展新片源,打造属于自己的电影搜索工具?

进阶之路:如何为 MovieHeavens 扩展新片源,打造属于自己的电影搜索工具? 【免费下载链接】MovieHeavens 🎬 基于Pyqt5的简单电影搜索工具 项目地址: https://gitcode.com/gh_mirrors/mo/MovieHeavens MovieHeavens 是一款基…

2026/8/20 20:01:10 阅读更多 →
Dolphin 文件操作撤销魔法:如何用 Undo 一键找回误删的文件

Dolphin 文件操作撤销魔法:如何用 Undo 一键找回误删的文件

Dolphin 文件操作撤销魔法:如何用 Undo 一键找回误删的文件 【免费下载链接】dolphin File manager by KDE 项目地址: https://gitcode.com/gh_mirrors/dolphin/dolphin Dolphin 是 KDE 桌面环境默认自带的文件管理器,也是 Linux 上最受欢迎的图形…

2026/8/20 20:01:10 阅读更多 →
Pangolin-NPU 避坑清单:CPU 回退禁令、HF32 时序要求与 5 个高频错误

Pangolin-NPU 避坑清单:CPU 回退禁令、HF32 时序要求与 5 个高频错误

Pangolin-NPU 避坑清单:CPU 回退禁令、HF32 时序要求与 5 个高频错误 【免费下载链接】pangolin-npu 项目地址: https://ai.gitcode.com/atlasleong/pangolin-npu 在昇腾 NPU 上跑通 Pangolin RNA 剪接位点预测模型,远比想象中容易踩坑。Pangoli…

2026/8/20 20:00:10 阅读更多 →

日新闻

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新引“变砖”危机2026年7月7日,Framework向用户quantum5发送邮件,建议其安装BIOS 3.20更新。然而,更新后电脑出现严重问题,屏幕显示三角形和随机像素图案,风扇狂转,系统完全挂起。qua…

2026/8/20 0:00:46 阅读更多 →
2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!据艾瑞咨询发布的《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,同比增长18.7%。中国互联网络信息中心数据显示,截至2025年底…

2026/8/20 0:00:46 阅读更多 →
2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?据艾瑞咨询《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,其中高端定制网站服务占比突破42%。更值得关注的是,91%的规模以上企业…

2026/8/20 0:00:46 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/19 11:55:13 阅读更多 →