
switchboardlabs/gatewaySwitchboard On Demand Oracle - Gateway Docker镜像是Switchboard去中心化预言机网络的核心组件,用于实现链下数据源与链上智能合约的双向通信。该镜像封装了按需数据请求处理、数据源集成、数据验证及***交互逻辑,提供标准化接口供智能合约调用,支持外部数据的按需获取、验证与上链,是连接Web2数据源与Web3智能合约的关键中间件。
bash# 拉取最新稳定版镜像 docker pull switchboardlabs/on-demand-oracle-gateway:latest # 拉取指定版本(推荐生产环境使用固定版本) docker pull switchboardlabs/on-demand-oracle-gateway:v1.2.0
bashdocker run -d \ --name oracle-gateway \ -p 8080:8080 \ -e ORACLE_PRIVATE_KEY="0x***abcdef..." \ # 预言机节点私钥(用于数据签名) -e ***_NETWORK="***-mainnet" \ # 目标***网络 -e DATA_SOURCE_WHITELIST="[***]" \ # 数据源白名单 -e LOG_LEVEL="INFO" \ # 日志级别 -v /host/path/config:/app/config \ # 挂载自定义配置文件(可选) switchboardlabs/on-demand-oracle-gateway:latest
yamlversion: '3.8' services: oracle-gateway: image: switchboardlabs/on-demand-oracle-gateway:v1.2.0 container_name: oracle-gateway restart: always ports: - "8080:8080" # 数据请求接口端口 - "9090:9090" # Prometheus监控端口 environment: - ORACLE_PRIVATE_KEY=${ORACLE_PRIVATE_KEY} # 从宿主机环境变量注入,避免硬编码 - ***_NETWORK="***-mainnet" - DATA_SOURCE_CONFIG_PATH="/app/config/datasources.yaml" - REQUEST_QUEUE_SIZE=1000 - LOG_LEVEL="INFO" - CACHE_TTL=30 # 重复请求缓存时间(秒) volumes: - ./config:/app/config # 挂载本地配置目录(包含数据源定义、验证规则) - ./logs:/app/logs # 挂载日志目录(持久化存储) networks: - oracle-network networks: oracle-network: driver: bridge
| 环境变量名 | 必选 | 默认值 | 说明 |
|---|---|---|---|
ORACLE_PRIVATE_KEY | 是 | - | 预言机节点私钥(用于数据签名,需对应***网络地址格式) |
***_NETWORK | 是 | - | 目标***网络,支持值:***-mainnet/***-devnet/***-fuji |
DATA_SOURCE_CONFIG_PATH | 否 | /app/default-config.yaml | 数据源配置文件路径(若挂载自定义配置需指定) |
PORT | 否 | 8080 | 数据请求接口端口 |
METRICS_PORT | 否 | 9090 | Prometheus监控指标暴露端口 |
LOG_LEVEL | 否 | INFO | 日志级别,支持:DEBUG/INFO/WARN/ERROR |
REQUEST_QUEUE_SIZE | 否 | 500 | 请求队列最大容量,超过则拒绝新请求 |
CACHE_TTL | 否 | 0 | 重复请求缓存时间(秒),0表示不缓存 |
MAX_CONCURRENT_REQUESTS | 否 | 100 | 最大并发请求数,防止数据源过载 |
数据源及验证规则需通过YAML配置文件定义(默认路径/app/default-config.yaml,可通过DATA_SOURCE_CONFIG_PATH自定义)。示例配置如下:
yaml# datasources.yaml示例 datasources: - name: "coingecko-price" # 数据源名称(唯一标识) type: "http" # 类型:http/websocket/postgres url: "[***]" method: "GET" timeout: 3000 # 超时时间(毫秒) headers: # 自定义请求头 - key: "Accept" value: "application/json" params: # 默认请求参数 ids: "***,***" vs_currencies: "usd" validation: # 数据验证规则 type: "json_schema" # 支持json_schema/script(自定义脚本) schema: # JSON Schema验证规则 type: "object" properties: ***: type: "object" properties: usd: {type: "number", minimum: 0} required: ["***"] ***: rpc_url: "[***]" # ***节点RPC地址(优先于默认网络) confirmations: 2 # 数据上链所需确认数
| 端口 | 用途 | 说明 |
|---|---|---|
| 8080 | 数据请求接口 | 接收智能合约/客户端的数据请求 |
| 9090 | Prometheus监控指标 | 暴露监控指标(如请求成功率、响应时间) |
| 8443 | HTTPS接口(可选) | 启用TLS时的加密通信端口(需挂载证书) |
网络要求:容器需访问以下外部服务:
bash# 实时查看日志 docker logs -f oracle-gateway # 查看ERROR级别日志 docker logs oracle-gateway | grep "ERROR"
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 数据签名失败 | 私钥格式错误或与网络不匹配 | 检查ORACLE_PRIVATE_KEY是否对应目标链格式 |
| 数据源请求超时 | 数据源不可用或网络隔离 | 验证数据源URL可访问性,检查容器网络连接 |
| 智能合约未收到数据 | ***节点RPC连接失败 | 检查***.rpc_url配置,测试RPC连通性 |
| 高并发下请求被拒绝 | 队列容量不足 | 调大REQUEST_QUEUE_SIZE环境变量 |
v1.2.0),避免直接使用latest





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务