28 个版本 (稳定版)

2.0.0-alpha.22023年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 神奇豆子

Download history 2/week @ 2024-05-13 11/week @ 2024-05-20 1/week @ 2024-06-03 23/week @ 2024-07-01 8/week @ 2024-07-08 42/week @ 2024-07-29 102/week @ 2024-08-05 21/week @ 2024-08-12

每月165次下载

Apache-2.0

495KB
6K SLoC

Oura

Cardano 的尾巴

GitHub Crates.io GitHub Workflow Status

警告 main 分支现在跟踪 V2。这个新版本是处理管道的全面重写,有多个破坏性变更。如果您正在寻找 V1,可以切换到名为 lts/v1 的长期支持分支

简介

我们有用于“探索”Cardano 区块链的工具,当您知道自己在寻找什么时很有用。我们认为还有一个不同的、互补的使用案例,即“观察”区块链并针对特定的事件模式做出反应。

Oura 是一个通过结合 Ouroboros 小协议(使用 Unix 套接字或 TCP 携带者)连接到 Cardano 节点末端的 rust 本地管道实现,它筛选匹配特定模式的事件,然后将简洁的、自包含的有效负载提交给名为“sinks”的可插拔观察者。

请查看我们的 文档 了解如何开始使用 Oura 的详细信息。

词源

工具的名称灵感来源于在类 Unix 系统中可用的 tail 命令,该命令用于显示文本文件或管道数据的尾部。Cardano 的共识协议名称 Ouroboros 是对古代象征的引用,描绘了一条蛇或龙吞噬其自己的尾巴,意味着“尾巴吃尾巴”。“Oura”是古希腊语中“尾巴”的意思。

终端输出演示

在这段终端记录中,我们可以看到连接到终端 sink 的测试网节点的几分钟的实时输出。

Terminal Demo

观看完整的 asciicast

内部结构

与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本质上只是一个处理事件的数据管道。管道的每个阶段都承担不同的角色

  • 源阶段:负责从区块链中提取数据,并将原始块映射到更小、更细粒度的事件。然后,每个事件都会通过阶段的输出端口发送,以进行进一步处理。
  • 过滤器阶段:接收来自源阶段的单个事件,并对每个事件应用某种类型的转换。应用的转换将取决于特定的用例,但通常涉及选择相关事件并丰富它们的信息。
  • 接收器阶段:接收来自过滤器阶段的最终事件,并将有效载荷提交到某些外部系统、数据库或服务进行进一步处理。

diagram

功能状态

  • 数据类型
    • 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