跳转至内容

配置

Gateway 使用模块化配置系统,允许您自定义操作的各个方面。本指南解释了配置结构以及如何修改它以满足您的需求。

配置概述

Gateway 的配置系统由位于 /conf 目录中的 YAML 文件组成,以及按链和连接器组织的代币和池的 JSON 文件。

初始配置文件在安装期间运行设置脚本时,会自动使用 /src/templates 中的默认模板创建。

配置结构

/conf/ 文件夹包含以下类型的配置文件:

  1. 根配置 (root.yml):定义所有配置文件及其模式的列表
  2. 服务器配置 (server.yml):控制 Gateway 服务器行为
  3. 链配置 (例如 solana.yml):定义区块链网络设置
  4. 连接器配置 (例如 raydium.yml):配置 DEX 特定设置
  5. 代币列表 (/conf/tokens/{chain}/{network}.json):每个网络的代币定义
  6. 池列表 (/conf/pools/{connector}.json):每个 DEX 连接器的流动性池定义

根配置

root.yml 文件作为 Gateway 配置系统的入口点。它定义了要加载哪些配置文件以及相应的模式文件。

version: 3
configurations:
  $namespace server:
    configurationPath: server.yml
    schemaPath: server-schema.json

  $namespace solana:
    configurationPath: solana.yml
    schemaPath: solana-schema.json

  $namespace jupiter:
    configurationPath: jupiter.yml
    schemaPath: jupiter-schema.json

此文件告诉 Gateway:

  • 要加载哪些配置文件
  • 在哪里找到验证每个配置的模式文件,这些文件位于 /src/services/schemas 目录中
  • 如何命名每个配置部分

服务器配置

server.yml 文件控制核心 Gateway 服务器行为,包括端口、日志和安全设置。

# GMT 偏移量(小时)(例如 -8 表示太平洋美国时间,-5 表示美国东部时间)
GMTOffset: -8

# 运行 Gateway 服务器的端口
port: 15888

# 运行 Swagger 文档 UI 的端口。
# 设置为 0 以在 http://0.0.0.0:{port}/docs (与 Gateway 服务器相同端口) 提供文档
# 设置为特定端口(例如 8080)以在 http://0.0.0.0:{docPort} 单独提供文档
docsPort: 0

# Hummingbot 生成自签名证书的文件夹路径
certificatePath: ./certs/

# 日志存储的文件夹路径。
logPath: './logs'

# 允许访问 gateway 的 IP。localhost 默认允许。
ipWhitelist: []

# 如果为 true,日志将存储在 logPath 并打印到 stdout。如果为 false,它们
# 将仅存储在 logPath 而不打印到 stdout。
logToStdOut: true

# 如果为 true,服务器将为每个请求和响应打印详细的 Fastify 日志到 stdout。如果为 false,则只发送标准日志。
fastifyLogs: false

# Nonce 数据库
nonceDbPath: 'nonce.level'

# 交易数据库
transactionDbPath: 'transaction.level'

链配置

链配置文件(例如 /conf/chains/solana.yml)现在仅包含每个区块链的默认网络和钱包设置。

defaultNetwork: mainnet-beta
defaultWallet: '<solana-wallet-address>'

当您使用 gateway connect 连接钱包时,它将自动成为该链的 defaultWalletdefaultNetwork 确定网关默认为该链使用的网络配置。

注意

网络特定配置现在存储在 /conf/chains/{chain}/{network}.yml 下的单独文件中

连接器配置

连接器配置文件(例如 /conf/connectors/jupiter.yml)定义了每个 DEX 连接器的特定设置,包括滑点容忍度、路由偏好和 API 配置。

示例:Jupiter 配置

# 交换的默认滑点百分比(以小数表示,例如 1 = 1%)
slippagePct: 1

# 交换事务处理的优先级
# 选项:medium, high, veryHigh
priorityLevel: 'veryHigh'

# 最大优先费用(以 lamports 为单位,用于动态优先费用)
# 当设置了 priorityLevel 且未提供明确的 priorityFeeLamports 时使用
maxLamports: 1000000

# 限制路由仅通过 1 个市场
# 默认:false(允许多跳路由以获得更好的价格)
onlyDirectRoutes: false

# 仅限制通过高流动性中间代币进行路由
# 默认:true(为获得更好的价格和稳定性)
restrictIntermediateTokens: true

# Jupiter API 密钥(可选)
# 对于免费版,留空(使用 https://lite-api.jup.ag)
# 对于付费计划,在 https://portal.jup.ag 生成密钥(使用 https://api.jup.ag)
apiKey: ''

配置选项说明:

  • slippagePct:交易的最大可接受价格滑点。如果执行价格偏离报价超过此百分比,交易将失败。

  • priorityLevel:控制 Solana 上的交易优先级。更高的优先级级别会带来更快的确认,但费用更高。对于时间敏感的交易,请设置为 veryHigh

  • maxLamports:限制最大优先费用,以防止在网络拥堵期间产生过高费用。1,000,000 lamports = 0.001 SOL。

  • onlyDirectRoutes:当设置为 true 时,限制交换仅通过直接池(无中间代币)。这可以减少价格影响,但可能导致对流动性较低的交易对获得更差的定价或路由失败。

  • restrictIntermediateTokens:当设置为 true 时,仅通过主要代币(SOL、USDC、USDT)作为中间代币进行路由。这增加了可靠性并减少了价格影响风险。

  • apiKey:Jupiter 付费版的可选 API 密钥。免费版(lite-api)适合大多数用户,而付费版提供更高的速率限制和附加功能。

网络配置

网络配置文件(例如 /conf/chains/solana/mainnet-beta.yml)包含每个区块链网络的详细设置,包括 RPC 端点和交易参数。

示例:Solana mainnet-beta 配置

nodeURL: https://api.mainnet-beta.solana.com
nativeCurrencySymbol: SOL

# 交易的默认计算单元
# 此设置用于在用户未指定时设置交易的计算单位限制
defaultComputeUnits: 200000

# 确认轮询间隔(以秒为单位)
# 检查已提交交易是否已确认的频率(内部重试循环)
confirmRetryInterval: 0.5

# 确认轮询尝试次数
# 在认为交易未确认之前进行确认轮询的次数
confirmRetryCount: 10

# 用于估计交易 gasPrice 的近期优先费用样本的下限百分位
# 使用近期优先费用的第 N 百分位数作为基础费用(90 = 第 90 百分位数)
basePriorityFeePct: 90

# 每个计算单位的最低优先费用(以 lamports 为单位)
# 此设置设置了优先费用的下限以确保交易被处理(默认值:0.1 lamports/CU)
minPriorityFeePerCU: 0.1

您可以使用 Gateway 命令查看任何网络的当前配置:

>>> gateway config solana-mainnet-beta
Gateway 配置 - 命名空间: solana-mainnet-beta:nodeURL: https://dry-dawn-hill.solana-mainnet.quiknode.pro/41bbd7ad405c552f91cc928e044e5e04c66341d2nativeCurrencySymbol: SOLdefaultComputeUnits: 200000confirmRetryInterval: 0.5confirmRetryCount: 10basePriorityFeePct: 90minPriorityFeePerCU: 0.1

要更新任何网络设置,请使用 gateway config [namespace] update

>>> gateway config solana-mainnet-beta update
可用配置路径: nodeURL, nativeCurrencySymbol, defaultComputeUnits, confirmRetryInterval, confirmRetryCount, basePriorityFeePct, minPriorityFeePerCU
输入配置路径(或输入 'exit' 取消): nodeURL'nodeURL' 的当前值:https://api.mainnet-beta.solana.com输入新值(或输入 'exit' 取消): https://your-preferred-node-provider.com/your-api-key

常见配置任务

更改节点提供商

要更改区块链网络的 RPC 节点提供商,您可以使用 Gateway 命令或直接编辑配置文件。

使用 Gateway 命令

>>> gateway config solana-mainnet-beta update
solana-mainnet-beta 的当前配置:nodeURL: https://api.mainnet-beta.solana.comnativeCurrencySymbol: SOLdefaultComputeUnits: 200000confirmRetryInterval: 0.5confirmRetryCount: 10basePriorityFeePct: 90minPriorityFeePerCU: 0.1
可用配置路径: nodeURL, nativeCurrencySymbol, defaultComputeUnits, confirmRetryInterval, confirmRetryCount, basePriorityFeePct, minPriorityFeePerCU
输入配置路径(或输入 'exit' 取消): nodeURL'nodeURL' 的当前值:https://api.mainnet-beta.solana.com输入新值(或输入 'exit' 取消): https://your-preferred-node-provider.com/your-api-key
nodeURL 更新成功Gateway 将自动重启以使更改生效

编辑配置文件

  1. 导航到网络配置文件夹(例如,/conf/chains/solana/
  2. 打开特定网络文件(例如,mainnet-beta.yml
  3. 找到 nodeURL 字段并将其替换为您首选节点提供商的 URL
  4. 保存文件并重启 Gateway

Solana 主网示例(/conf/chains/solana/mainnet-beta.yml):

nodeURL: https://your-preferred-node-provider.com/your-api-key
nativeCurrencySymbol: SOL

# 交易的默认计算单元
# 此设置用于在用户未指定时设置交易的计算单位限制
defaultComputeUnits: 200000

# 确认轮询间隔(以秒为单位)
# 检查已提交交易是否已确认的频率(内部重试循环)
confirmRetryInterval: 0.5

# 确认轮询尝试次数
# 在认为交易未确认之前进行确认轮询的次数
confirmRetryCount: 10

# 用于估计交易 gasPrice 的近期优先费用样本的下限百分位
# 使用近期优先费用的第 N 百分位数作为基础费用(90 = 第 90 百分位数)
basePriorityFeePct: 90

# 每个计算单位的最低优先费用(以 lamports 为单位)
# 此设置设置了优先费用的下限以确保交易被处理(默认值:0.1 lamports/CU)
minPriorityFeePerCU: 0.1

Ethereum 主网示例(/conf/chains/ethereum/mainnet.yml):

chainID: 1
nodeURL: https://your-preferred-node-provider.com/your-api-key
nativeCurrencySymbol: ETH
minGasPrice: 0.1

添加代币

提示

新的 Gateway 端点除了符号外还接受 baseTokenquoteToken 的地址,因此您可以在将符号添加到网络代币列表之前直接使用地址。

Gateway 使用按链和网络组织的标准化代币列表。每个网络都有其自己的代币列表文件,其中包含该网络上所有支持的代币的元数据。

使用 Gateway 命令

>> gateway token HERMES update
 输入链(例如,ethereum,solana):solana
 未找到代币'HERMES'。我们将其添加到 solana(mainnet-beta)中。
 输入代币信息:
 Symbol [HERMES]:
 Name: HermesWizard
 Contract address: 24R8j15RDq3VoeRaSDFXMvSw4W7RLLZLdpTwK8ynx777
 Decimals [18]: 9
 要添加/更新的代币: { "symbol": "HERMES", "name": "HermesWizard", "address": "24R8j15RDq3VoeRaSDFXMvSw4W7RLLZLdpTwK8ynx777", "decimals": 9 }
 添加/更新此代币?(是/否) >>> 是
 正在添加/更新代币... ✓ 代币添加/更新成功!
 正在重启网关以使更改生效... ✓ 网关重启成功
 现在您可以使用 'gateway token HERMES' 来查看代币信息。

编辑代币文件

  1. 导航至 /conf/tokens/{chain}/ 文件夹(例如,/conf/tokens/solana/
  2. 打开相应的网络文件(例如,Solana 主网的 mainnet-beta.json
  3. 按照以下现有格式向数组中添加新的代币条目
  4. 确保生成的文件仍然是有效的 JSON!
  5. 保存文件并重启 Gateway
{
  "chainId": 101,
  "name": "ai16z",
  "symbol": "AI16Z",
  "address": "HeLp6NuQkmYB4pYWo2zYs22mESHXPQYzXbB8n4V98jwC",
  "decimals": 9
}

代币列表结构遵循 Token Lists 标准,帮助用户在不同网络中避免诈骗并找到合法代币。

添加池

每个 AMM 和 CLMM DEX 可能对相同交易对拥有不同的池,具有不同的参数,如费用层级和区间步长。网关现在为每个 DEX 连接器在专用 JSON 文件中存储池定义。

使用 Gateway 命令

>>> gateway pool raydium/amm LIGHT-SOL update
 === 为 raydium/amm 上的 LIGHT-SOL 添加池 === 链:solana 网络:mainnet-beta
 未找到 'LIGHT-SOL' 池。让我们将其添加到 solana (mainnet-beta) 中。
 输入池信息:
 池合约地址:7YZEyZ3DuHQTmgmKwzuXMYG6SHD3sCWZ3mLkU7HuLrfC
 要添加的池: { "address": "7YZEyZ3DuHQTmgmKwzuXMYG6SHD3sCWZ3mLkU7HuLrfC", "baseSymbol": "LIGHT", "quoteSymbol": "SOL", "type": "amm" }
 添加此池?(是/否) >>> 是
 正在添加池... ✓ 池添加成功!
 正在重启网关以使更改生效... ✓ 网关重启成功
 池已添加。您可以使用以下命令查看:gateway pool raydium/amm LIGHT-SOL

编辑池文件

  1. 导航至 /conf/pools/ 文件夹
  2. 打开连接器的池文件(例如,raydium.json
  3. 按照现有格式向数组中添加新的池条目
  4. 确保生成的文件仍然是有效的 JSON!
  5. 保存文件并重启 Gateway

示例池条目:

{
  "type": "amm",
  "network": "mainnet-beta",
  "baseSymbol": "WIF",
  "quoteSymbol": "SOL",
  "address": "EP2ib6dYdEeqD8MfE2ezHCxX3kP3K2eLKkirfPm5eyMx"
}

对于 CLMM 池,请改用 "type": "clmm"。池文件结构允许在同一连接器内为不同网络和交易类型(AMM 与 CLMM)指定不同的池。

更新配置

有两种方式可以更新您的网关配置:

  1. 手动更新
  2. 直接编辑配置文件
  3. 重启网关以应用更改

  4. API 更新

  5. 使用 /config/update API 端点来更新配置
  6. 这允许在不重启网关的情况下进行动态更新

提示

在将配置更改应用到生产环境之前,请始终验证您的配置更改。您可以使用 root.yml 中引用的模式文件来确保您的配置有效。