mcpField
M
mirror

mirror

github.com/goldsky-io数据与数据库124.1k 次安装今天更新
代码仓库

关于 mirror

mirror 是用于配置和管理 Goldsky Mirror 流式管道的技能,涵盖子图与直接索引数据源、可选转换,以及写入数据库或消息队列;适用于需要子图数据源的管道。

主要功能

  1. 01子图与数据集数据源
  2. 02可选 SQL 和 HTTP 转换
  3. 03数据库、队列及对象存储目标
  4. 04YAML 管道配置
  5. 05通过 CLI 部署及管理生命周期

适用场景

  1. 01将子图实体流式写入 PostgreSQL
  2. 02用 SQL 筛选或重塑链上数据
  3. 03将记录发送至 Kafka 或对象存储

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/goldsky-io/goldsky-agent --skill mirror

安装后在 Claude Code 中输入/mirror确认已加载。

附带文件evals/trigger-eval.json

详细介绍

Goldsky Mirror Pipeline

Mirror 是 Goldsky 的原始流式 Pipeline 产品。它从源(子图实体或直接索引数据集)读取链上数据,可选择应用转换,然后将结果写入接收端(你的数据库或消息队列)。

Mirror 与 Turbo——该使用哪个?
MirrorTurbo
子图源是否
速度与可靠性良好更快、更可靠
接收端选项请参阅下方的常见 Mirror 接收端请参阅 Turbo 接收端目录
配置复杂度中等YAML 更简单
数据集覆盖范围130+ 条链130+ 条链,目录更丰富

除非你需要子图源,否则请使用 Turbo。 Turbo 更快、更可靠,并且正在积极补齐与 Mirror 的功能差距,尤其是接收端支持。如果你不需要子图,请说“帮我构建一个 Turbo Pipeline”,/turbo-builder 技能会引导你更快地完成设置。


Mirror Pipeline 的工作原理

Source (subgraph entity or direct-indexing dataset)
  ↓
Transforms (optional SQL or external handlers)
  ↓
Sink (PostgreSQL, ClickHouse, Kafka, S3, etc.)

Pipeline 定义在 YAML 文件中(apiVersion: 3),并使用 goldsky pipeline apply 部署。


Pipeline YAML 结构

顶层字段:

字段类型必填描述
namestring是只能包含小写字母、数字和连字符。长度少于 50 个字符。
apiVersionnumber是始终为 3
resource_sizestring否s(默认值)、m、l、xl、xxl
descriptionstring否Pipeline 描述
sourcesobject是至少一个源
transformsobject否如果不需要,请使用 {}
sinksobject是至少一个接收端

源

源类型YAML type 值描述
子图实体subgraph_entity从 Goldsky 托管的子图镜像数据
数据集(直接索引)dataset原始链上数据集(区块、日志、交易、调用轨迹、转账)
子图实体源
sources:
  subgraph_account:
    type: subgraph_entity
    name: account                # Entity name in your subgraph
    start_at: latest             # "earliest" or "latest" (default: latest)
    filter: ""                   # Optional SQL WHERE clause for fast scan
    subgraphs:
      - name: my-subgraph        # Deployed subgraph name
        version: 1.0.0
      - name: my-subgraph-arb    # Cross-chain: add more subgraphs
        version: 1.0.0

字段:type(必填:subgraph_entity)、name(必填:实体名称)、subgraphs(必填:{name, version} 列表)、start_at(可选)、filter(可选)、description(可选)。

数据集源
sources:
  base_logs:
    type: dataset
    dataset_name: base.logs      # Use `goldsky dataset list --output json` to discover names
    version: 1.0.0               # Use `goldsky dataset get <name>` for versions
    start_at: latest             # "earliest" or "latest" (default: latest)
    filter: "address = '0x...'"  # Optional — enables Fast Scan for backfills

字段:type(必填:dataset)、dataset_name(必填)、version(必填)、start_at(可选)、filter(可选)、description(可选)。

**快速扫描:**当数据集源定义了 filter,且 start_at: earliest 时,过滤条件会预先应用于源级别,从而大幅加快历史数据回填速度。请使用数据集架构中存在的属性(运行 goldsky dataset get <dataset_name> 查看)。

请参阅 docs.goldsky.com/mirror/sources/supported-sources。


汇

常见的 Mirror 目标位置如下;这并非支持的目标类型的完整列表。请根据用户需要的具体目标位置进行比较,不要根据这些示例推断整个产品支持的目标类型数量。

目标位置YAML type 值备注
PostgreSQLpostgres最常见 — OLTP,自动创建表,通过 INSERT ON CONFLICT 执行 upsert。可通过 NeonDB 使用托管选项。
ClickHouseclickhouseOLAP — 默认使用 ReplacingMergeTree,append_only_mode 可获得最佳性能
MySQLmysqlOLTP 工作负载
Elasticsearchelasticsearch实时搜索和分析
Kafkakafka高吞吐量地将数据流式传输到一个主题,topic_partitions 可配置
对象存储fileS3、GCS 或 R2 — Parquet 格式,只追加,支持 partition_columns
AWS SQSsqs消息队列
Webhookwebhook向外部端点发送 HTTP POST

所有写入用户管理目标位置的目标都需要 Goldsky Secret(secret_name)。使用 goldsky secret create 创建。

目标支持 schema_override,可在目标层级转换列类型(例如,将 string 转换为 jsonb)。

目标示例
# PostgreSQL
sinks:
  my_pg:
    type: postgres
    table: transfers
    schema: public
    secret_name: MY_PG_SECRET
    from: my_transform

# ClickHouse
sinks:
  my_ch:
    type: clickhouse
    table: transfers
    database: my_db
    secret_name: MY_CH_SECRET
    from: my_source

# Kafka
sinks:
  my_kafka:
    type: kafka
    topic: accounts
    topic_partitions: 2
    secret_name: MY_KAFKA_SECRET
    from: my_source

# Object Storage (S3/GCS/R2)
sinks:
  my_s3:
    type: file
    path: s3://bucket/path/
    format: parquet
    secret_name: MY_S3_SECRET
    from: my_source

# SQS
sinks:
  my_sqs:
    type: sqs
    url: https://sqs.us-east-1.amazonaws.com/123456/my-queue
    secret_name: MY_SQS_SECRET
    from: my_source

参见 docs.goldsky.com/mirror/sinks/supported-sinks。


转换

类型YAML type 值描述
SQL(none — default)使用 SQL 筛选、联接或重塑记录
External handlerhandler将记录 POST 到 HTTP 端点以执行自定义逻辑
SQL 转换
transforms:
  filtered_logs:
    sql: SELECT id, block_number, address FROM base_logs WHERE block_number > 1000
    primary_key: id

SQL 转换会将源或转换名称作为表名引用。支持链式调用(一个转换读取另一个转换的数据)。

内置解码函数:

  • _gs_log_decode(abi, topics, data) — 解码原始日志事件
  • _gs_tx_decode(abi, input, output) — 解码原始跟踪/交易数据
  • _gs_fetch_abi(url, type) — 从 URL 获取 ABI(兼容 etherscan 或原始 JSON);在管道启动时获取一次
外部处理器转换
transforms:
  my_handler:
    type: handler
    primary_key: id
    url: http://example.com/transform
    from: my_source
    batch_size: 100              # Records per batch (default: 100)
    batch_flush_interval: 1s     # Flush interval (default: 1s)
    payload_columns: [col1,col2] # Optional: send subset of columns
    headers:                     # Optional custom headers
      X-Api-Key: my-key
  • 至少一次投递,失败时采用指数退避
  • 最长响应时间:5 分钟;最长连接时间:1 分钟
  • 支持使用 schema_override 转换返回类型

参见 docs.goldsky.com/mirror/transforms/sql-transforms。


完整 YAML 示例

将子图实体写入 PostgreSQL
name: my-subgraph-sync
apiVersion: 3
resource_size: s
sources:
  subgraph_transfer:
    type: subgraph_entity
    name: Transfer
    subgraphs:
      - name: uniswap-v3
        version: 1.0.0
transforms: {}
sinks:
  my_postgres:
    type: postgres
    table: transfers
    schema: public
    secret_name: MY_PG_SECRET
    from: subgraph_transfer
使用 SQL 转换将数据集(直接索引)写入 PostgreSQL
name: base-logs-filtered
apiVersion: 3
resource_size: s
sources:
  base_logs:
    type: dataset
    dataset_name: base.logs
    version: 1.0.0
    start_at: earliest
    filter: "address = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'"
transforms:
  select_fields:
    sql: SELECT id, block_number, transaction_hash, data FROM base_logs
    primary_key: id
sinks:
  pg_logs:
    type: postgres
    table: base_logs
    schema: public
    secret_name: MY_PG_SECRET
    from: select_fields

没有子图源? 几乎可以肯定你应该使用 Turbo — 它速度更快、更可靠,数据集目录也更丰富,语法还更简单。使用 /turbo-builder 开始使用。


CLI 参考 — 所有管道命令

每个命令均可使用以下全局选项:--token <string>(CLI 身份验证令牌)、--color(为输出添加颜色,默认值为 true)、-h, --help。

goldsky pipeline apply <config-path>

根据 YAML 配置文件创建或更新管道。具备幂等性。

标志类型描述
--statusACTIVE | INACTIVE | PAUSED期望的管道状态
--from-snapshotstring指定起始快照:last、new、none 或快照 ID。last = 最新可用快照。new = 先创建新的快照。none = 从头开始。默认值:new
--forceboolean跳过确认提示(适用于 CI)
--skip-transform-validationboolean更新时跳过转换验证
--save-progressboolean(deprecated, use --from-snapshot) 应用前尝试创建快照
--use-latest-snapshotboolean(deprecated, use --from-snapshot) 从最新快照开始
--skip-validationboolean(deprecated) 等同于 --skip-transform-validation
goldsky pipeline apply my-pipeline.yaml --status ACTIVE
goldsky pipeline apply my-pipeline.yaml --status ACTIVE --from-snapshot last
goldsky pipeline apply my-pipeline.yaml --force   # CI/CD usage
goldsky pipeline start <nameOrConfigPath>

启动管道(等同于使用 --status ACTIVE 执行 apply)。

标志类型描述
--from-snapshotstringlast、new、none 或快照 ID
--use-latest-snapshotboolean(已弃用,请改用 --from-snapshot)
goldsky pipeline stop <nameOrConfigPath>

停止管道,不创建快照。将状态设为 INACTIVE,运行时设为 TERMINATED。

除全局选项外,没有其他标志。

goldsky pipeline pause <nameOrConfigPath>

暂停管道并创建快照,以便从暂停处恢复。将状态设为 PAUSED,运行时设为 TERMINATED。

除全局选项外,没有其他标志。

goldsky pipeline restart <nameOrConfigPath>

在不更改配置的情况下重启管道。当接收器数据库重启、连接卡住等情况时,此操作很有用。

标志类型描述
--from-snapshotstring必填。 last、new、none 或快照 ID
--disable-monitoringboolean重启后跳过监控(默认值:false)
goldsky pipeline restart my-pipeline --from-snapshot last
goldsky pipeline restart my-pipeline --from-snapshot none  # restart from scratch
goldsky pipeline get <nameOrConfigPath>

获取管道配置和状态。

标志类型描述
--outputFormat, --outputjson | table | yaml输出格式(默认值:yaml)
--definitionboolean仅打印管道定义(数据源、转换、接收器)
-v, --versionstring管道版本(默认值:latest)
goldsky pipeline list

列出项目中的所有管道。

标志类型描述
--output, --outputFormatjson | table | yaml输出格式(默认值:table)
--outputVerbositysummary | usablewithapplycmd | all详细程度(默认值:summary)
--include-runtime-detailsboolean包含运行时状态和错误(默认值:false)
goldsky pipeline list --output json
goldsky pipeline list --include-runtime-details
goldsky pipeline info <nameOrConfigPath>

显示管道信息(状态、配置、运行时详细信息)。

标志类型描述
-v, --versionstring管道版本(默认值:latest)
goldsky pipeline monitor <nameOrConfigPath>

监控管道运行时信息——状态、指标(接收/写入的记录数)和错误。每 10 秒刷新一次。

标志类型描述
--update-requestboolean监控正在进行的更新请求
--max-refreshes, --maxRefreshesnumber最大数据刷新次数
-v, --versionstring管道版本(默认值:latest)
goldsky pipeline delete <nameOrConfigPath>

永久删除管道。

标志类型描述
-f, --forceboolean强制删除,不显示确认提示(默认值:false)
goldsky pipeline resize <nameOrConfigPath> <resourceSize>

更改管道的计算资源。

位置参数描述
resourceSize可选值:s、m、l、xl、xxl(默认值:s)
goldsky pipeline resize my-pipeline l
goldsky pipeline validate [config-path]

验证管道 YAML 配置,但不进行部署。

标志类型描述
--definitionstring(已弃用) 内联 JSON 定义
--definition-pathstring(已弃用) JSON/YAML 定义的路径
goldsky pipeline validate my-pipeline.yaml
goldsky pipeline export [name]

导出管道配置。

标志类型描述
--allboolean导出所有管道的配置
goldsky pipeline cancel-update <nameOrConfigPath>

取消正在进行的更新或快照请求。当长时间运行的快照阻碍了必要的更新时,此操作很有用。

除全局选项外,没有其他标志。

goldsky pipeline create <name> (交互式/引导式)

通过引导式 CLI 交互创建管道。

标志类型描述
--resource-size, --resourceSizes | m | l | xl | xxl资源规格(默认值:s)
--use-dedicated-ipboolean使用专用出口 IP(默认值:false)
--skip-transform-validationboolean跳过转换验证
--statusACTIVE | INACTIVE(已弃用,请使用 pipeline start/stop/pause)
--descriptionstring(已弃用,请使用 pipeline apply)
--definitionstring(已弃用,请使用 pipeline apply)
--definition-pathstring(已弃用,请使用 pipeline apply)
--output, --outputFormatjson | table | yaml输出格式(默认值:yaml)
goldsky pipeline get-definition <name> (已弃用)

获取可分享的管道定义。请改用 goldsky pipeline get <name> --definition。

快照命令
# List snapshots for a pipeline
goldsky pipeline snapshots list <nameOrConfigPath> [-v <version>]

# Create a snapshot manually
goldsky pipeline snapshots create <nameOrConfigPath>

snapshots list 支持使用 -v, --version 按管道版本筛选(默认:所有版本)。


生命周期速查

操作命令
部署/启动goldsky pipeline apply <file.yaml> --status ACTIVE
启动(现有管道)goldsky pipeline start <name>
暂停(创建快照)goldsky pipeline pause <name>
停止(不创建快照)goldsky pipeline stop <name>
重启(不更改配置)goldsky pipeline restart <name> --from-snapshot last
更新配置goldsky pipeline apply <file.yaml>(先编辑 YAML)
调整规格goldsky pipeline resize <name> <size>
验证 YAMLgoldsky pipeline validate <file.yaml>
监控goldsky pipeline monitor <name>
获取配置goldsky pipeline get <name> --definition
导出配置goldsky pipeline export <name>
删除goldsky pipeline delete <name> -f
取消进行中的操作goldsky pipeline cancel-update <name>
列出快照goldsky pipeline snapshots list <name>
创建快照goldsky pipeline snapshots create <name>
列出所有管道goldsky pipeline list

暂停与停止:

  • pause — 创建快照并暂停管道(状态:PAUSED + TERMINATED)。之后可以从暂停处恢复。
  • stop — 停止管道,但不创建快照(状态:INACTIVE + TERMINATED)。恢复时可能会重新处理数据。

期望状态: ACTIVE、INACTIVE、PAUSED 运行时状态: STARTING、RUNNING、FAILING、TERMINATED


快照

快照记录 RUNNING 管道在某一时刻的状态,以便恢复运行。快照包含读取数据源的进度和 SQL 转换状态,不包含接收端状态。

  • 自动快照:健康的 RUNNING 管道每 4 小时创建一次快照。
  • 更新前: 对 RUNNING 管道应用配置更改前,会自动创建快照。
  • 暂停时: 暂停管道时会创建快照。
  • 手动创建: goldsky pipeline snapshots create <name>。
  • 恢复: 只能使用最新快照。如需使用较早的快照,请联系支持团队。

--from-snapshot 标志(用于 apply、start、restart)用于控制快照行为:

  • new — 创建新快照,然后从该快照启动(默认值)
  • last — 使用最新的现有快照(不创建新快照)
  • none — 从头开始,不使用快照
  • <snapshot-id> — 使用指定快照

资源规格

通过 YAML 中的 resource_size 或 goldsky pipeline resize <name> <size> 设置。

规格描述
s默认规格。适用于大多数场景、小型链的回填、每秒最多 300K 条记录,以及最多约 8 个子图数据源
m、l、xl、xxl更大的计算资源,适用于大型链回填或大型 JOIN

建议从较小规格开始,并按需扩容。资源规格会影响定价。


Networking

  • Mirror 流水线会从 AWS us-west-2 写入数据。请确保你的接收端允许来自该区域的入站连接。
  • IP 地址默认是动态的。
  • 可按需提供专用出口 IP——在 pipeline create 中使用 --use-dedicated-ip,或联系 [email protected]。
  • 可按需提供 VPC 对等连接。
  • 对于外部处理器转换,请部署在靠近 us-west-2 的位置以获得最佳性能(目标为 p95 < 100ms)。

数据集发现

# List available datasets (non-interactive)
goldsky dataset list --output json

# Get schema for a specific dataset
goldsky dataset get <dataset_name>

常见问题

Mirror 流水线可以使用子图作为来源吗? 可以——这是 Mirror 相较于 Turbo 的主要优势。在来源中设置 type: subgraph_entity,并引用已部署的子图。

Mirror 可以处理多个来源或跨链数据吗? 可以——在 YAML 中定义多个来源,并使用 SQL 转换进行联接或合并。对于子图,你可以在单个来源的 subgraphs 数组中列出多个子图(来自不同链)。

我的流水线需要更多资源/速度太慢,怎么办? 运行 goldsky pipeline resize <name> l(或 xl、xxl)。先从较小规格开始,再逐步扩容。

我的流水线处于 ACTIVE 状态,但已 TERMINATED——发生了什么? 期望状态为 ACTIVE,但运行时发生故障(例如密钥错误、接收端不可用或资源问题)。运行 goldsky pipeline monitor <name> --include-runtime-details 检查错误,或查看仪表板。修复问题后重启。

如何在不丢失进度的情况下更新流水线? 编辑 YAML 并运行 goldsky pipeline apply <file.yaml>。默认情况下,应用更新前会创建快照。使用 --from-snapshot last 可跳过创建新快照,并使用最新的现有快照。

长时间运行的快照阻碍了更新,该怎么办? 运行 goldsky pipeline cancel-update <name> 取消正在进行的操作,然后使用 --from-snapshot last 或 --from-snapshot none 重新应用。


相关内容

评论

支持 Markdown