Sentinel 是一个灵活的异步区块链事件处理框架,专注于实时监控和处理区块链事件。项目受 Artemis 启发,采用模块化的收集器(Collector)、策略(Strategy)和执行器(Executor)架构,让您能够轻松构建自定义的区块链数据处理流水线。
- 🚀 异步设计,基于 Python asyncio
- 🔌 插件化架构,易于扩展
- 🎯 灵活的事件处理策略
- 🛠 简单的 TOML 配置
git clone https://github.com/neal-zhu/sentinel.git
cd sentinel
pip install -r requirements.txt
- 复制示例配置文件:
# 复制示例配置文件
cp config.toml.example config.toml
# 根据需要修改配置
vim config.toml
-
添加你需要的组件(collectors, strategies, executors), 如果需要自定义组件,请参考 自定义组件
-
运行 Sentinel:
# 使用默认配置文件 config.toml
python -m main
# 或指定配置文件路径
python -m main -config path/to/config.toml
这样运行后,Sentinel 会自动加载配置文件并启动监控。您可以通过 Ctrl+C 来优雅地停止程序。
Sentinel 采用三层架构设计:
负责事件收集,支持:
- 区块链交易监控
- 智能合约事件监听
- 区块头订阅
- 自定义数据源
处理事件并生成操作指令:
- 交易分析
- 模式识别
- 阈值触发
- 自定义策略逻辑
执行策略生成的操作:
- 数据存储
- 通知推送
- API 调用
- 自定义动作
- 创建收集器类:
from sentinel.base import Collector
from sentinel.events import Event
class CustomCollector(Collector):
async def events(self):
while True:
# 自定义事件收集逻辑
yield Event(name="custom", data={"key": "value"})
await asyncio.sleep(1)
- 在
sentinel/collectors/__init__.py
中注册:
from .custom import CustomCollector
__all__ = [
"CustomCollector",
# ... 其他收集器
]
- 创建策略类:
from sentinel.base import Strategy
from sentinel.events import Event, Action
class PriceAlertStrategy(Strategy):
async def process_event(self, event: Event) -> List[Action]:
if event.name == "price_update":
if event.data["price"] > 1000:
return [Action(name="alert", data={"message": "Price threshold exceeded!"})]
return []
- 在
sentinel/strategies/__init__.py
中注册:
from .price_alert import PriceAlertStrategy
__all__ = [
"PriceAlertStrategy",
# ... 其他策略
]
- 创建执行器类:
from sentinel.base import Executor
from sentinel.events import Action
class CustomExecutor(Executor):
async def execute(self, action: Action):
# 自定义执行逻辑
print(f"Executing action: {action.name}")
- 在
sentinel/executors/__init__.py
中注册:
from .custom import CustomExecutor
__all__ = [
"CustomExecutor",
# ... 其他执行器
]
注册完成后,您就可以在配置文件中使用这些自定义组件:
[collectors]
enabled = ["custom"]
[strategies]
enabled = ["price_alert"]
[executors]
enabled = ["custom"]
完整的配置选项:
# General Settings
name = "sentinel"
log_level = "INFO"
# Collectors Configuration
[collectors]
enabled = ["web3_transaction"]
[collectors.web3_transaction]
rpc_url = "https://eth.llamarpc.com"
# Strategies Configuration
[strategies]
enabled = ["dummy"]
[executors]
enabled = ["logger"]
- 支持更多区块链网络
- 增加更多预置策略
- 优化性能和资源使用
欢迎提交 Pull Requests!对于重大更改,请先开 issue 讨论您想要更改的内容。
- 感谢 Artemis 项目的启发
- 感谢所有贡献者的支持
如有问题或建议,请提交 issue。