28 个版本 (稳定版)
2.0.0-alpha.2 | 2023年4月14日 |
---|---|
1.9.0 | 2024年8月4日 |
1.8.5 | 2024年2月5日 |
1.8.4 | 2023年12月16日 |
0.3.8 | 2021年12月31日 |
#334 in 神奇豆子
每月165次下载
495KB
6K SLoC
Cardano 的尾巴
警告
main
分支现在跟踪 V2。这个新版本是处理管道的全面重写,有多个破坏性变更。如果您正在寻找 V1,可以切换到名为lts/v1
的长期支持分支
简介
我们有用于“探索”Cardano 区块链的工具,当您知道自己在寻找什么时很有用。我们认为还有一个不同的、互补的使用案例,即“观察”区块链并针对特定的事件模式做出反应。
Oura 是一个通过结合 Ouroboros 小协议(使用 Unix 套接字或 TCP 携带者)连接到 Cardano 节点末端的 rust 本地管道实现,它筛选匹配特定模式的事件,然后将简洁的、自包含的有效负载提交给名为“sinks”的可插拔观察者。
请查看我们的 文档 了解如何开始使用 Oura 的详细信息。
词源
工具的名称灵感来源于在类 Unix 系统中可用的 tail
命令,该命令用于显示文本文件或管道数据的尾部。Cardano 的共识协议名称 Ouroboros 是对古代象征的引用,描绘了一条蛇或龙吞噬其自己的尾巴,意味着“尾巴吃尾巴”。“Oura”是古希腊语中“尾巴”的意思。
终端输出演示
在这段终端记录中,我们可以看到连接到终端 sink 的测试网节点的几分钟的实时输出。
内部结构
与Cardano节点通信所需的所有繁重工作都由Pallas库来完成,该库提供了Ouroboros多路复用器以及一些所需的迷你协议状态机(特别是ChainSync和LocalState)的实现。
数据管道是通过Gasket库实现的,该库提供了一个构建分阶段、事件驱动应用程序的框架。在这个抽象层面下,管道的每个组件(即:阶段)都在自己的线程中运行,并通过发送消息与其他阶段进行通信(非常类似于Actor模式)。
用例
通过CLI监控实时交易
您可以通过运行oura watch <socket>
将TX数据从本地或远程节点的顶部打印到终端。这对于开发者作为调试工具或只是好奇想看看网络中正在发生什么(例如,查看空投或预言机发布新信息)非常有用。
作为其他持久化机制的桥梁
与IOHK提供的著名db-sync工具类似,Oura可以作为守护进程使用,以跟踪节点并将数据输出到更适合您最终用例的不同数据存储技术。与db-sync的主要区别是,Oura是为了方便与数据流管道集成而设计的,而不是与关系数据库。
鉴于其小的内存/ CPU占用,Oura甚至可以在资源受限的环境中(如树莓派)与您的Cardano节点一起部署。
作为自定义操作的触发器
在daemon
模式下运行的Oura可以配置为使用自定义过滤器来定位特定的交易模式,并在找到匹配项时触发操作。例如:当特定的策略/资产组合出现在交易中时发送电子邮件;当钱包将委托给特定的池时调用AWS Lambda函数;每次元数据键出现在TX负载中时向webhook发送http调用;
作为自定义场景的库
如果现成的功能不能满足您的特定用例,Oura可以作为Rust项目中的库使用,以设置定制的管道。在Oura中的每个组件(源、过滤器、接收器等)都旨在是自包含和可重用的。例如,在重用现有源的同时可以构建自定义过滤器和接收器。
工作原理
Oura本质上只是一个处理事件的数据管道。管道的每个阶段都承担不同的角色
- 源阶段:负责从区块链中提取数据,并将原始块映射到更小、更细粒度的事件。然后,每个事件都会通过阶段的输出端口发送,以进行进一步处理。
- 过滤器阶段:接收来自源阶段的单个事件,并对每个事件应用某种类型的转换。应用的转换将取决于特定的用例,但通常涉及选择相关事件并丰富它们的信息。
- 接收器阶段:接收来自过滤器阶段的最终事件,并将有效载荷提交到某些外部系统、数据库或服务进行进一步处理。
功能状态
- 数据类型
- CBOR块
- CBOR交易
- Oura v1模型(用于向后兼容)
- 解析交易(具有所有交易数据的结构化对象)
- 通用JSON(任何类型的JSON值)
- 源
- 本地节点的chain-sync
- 远程中继节点的chain-sync + 块检索
- 带有块数据的S3存储桶
- 带有块数据的Kafka主题
- 接收器
- Kafka主题
- Elasticsearch索引/数据流
- 带压缩的旋转日志文件
- Redis流
- AWS SQS队列
- AWS Lambda调用
- AWS S3对象
- GCP PubSub
- GCP云函数
- Azure接收器
- webhook(http POST)
- 终端(追加型,类似tail的)
- 过滤器
- 解析块/交易CBOR
- 将区块拆分为交易
- 根据匹配规则选择交易(地址、元数据、策略等)
- 用相关输入丰富交易数据
- 自定义TypeScript代码(使用Deno)
- 自定义WASM插件
- 具有补偿操作的回滚缓冲区
- 其他
- 有状态链光标以从重启中恢复
- 缓冲阶段以保持区块直到达到一定深度
- 管道指标以跟踪进度和性能
已知限制
- Oura从铸造的区块/交易中读取事件。尚未实现对mempool的查询支持。
贡献
欢迎所有贡献,但在开始编码之前,请阅读项目的贡献指南。
许可证
本项目采用Apache-2.0许可证。有关详细信息,请参阅LICENSE文件。
依赖项
~24–72MB
~1.5M SLoC