跳至内容

配置

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 文件是网关配置系统的入口点。它定义了要加载哪些配置文件以及对应的模式文件。

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

该文件告诉网关:

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

服务器配置

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

# GMT Offset in hours (e.g. -8 for Pacific US Time, -5 for Eastern US Time)
GMTOffset: -8

# Port on which to run the Gateway server
port: 15888

# Port on which to run the Swagger documentation UI. 
# Set to 0 to serve docs at http://0.0.0.0:{port}/docs (same port as Gateway server)
# Set to a specific port (e.g. 8080) to serve docs separately at http://0.0.0.0:{docPort}
docsPort: 0

# Path to folder where Hummingbot generates self-signed certificates
certificatePath: ./certs/

# Path to folder where logs will be stored.
logPath: './logs'

# IPs allowed to access gateway. localhost is allowed by default.
ipWhitelist: []

# If true, logs will be stored in logPath and printed to stdout. If false, they
# will only be stored in logPath and not printed to stdout.
logToStdOut: true

# If true, the server will print detailed Fastify logs for each request and response to stdout. If false, only standard logs will be emitted.
fastifyLogs: false

# Nonce database
nonceDbPath: 'nonce.level'

# Transaction database
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 配置

# Default slippage percentage for swaps (as a decimal, e.g., 1 = 1%)
slippagePct: 1

# Priority level for swap transaction processing
# Options: medium, high, veryHigh
priorityLevel: 'veryHigh'

# Maximum priority fee in lamports (for dynamic priority fees)
# Used when priorityLevel is set and no explicit priorityFeeLamports is provided
maxLamports: 1000000

# Restrict routing to only go through 1 market
# Default: false (allows multi-hop routes for better prices)
onlyDirectRoutes: false

# Restrict routing through highly liquid intermediate tokens only
# Default: true (for better price and stability)
restrictIntermediateTokens: true

# Jupiter API key (optional)
# For free tier, leave empty (uses https://lite-api.jup.ag)
# For paid plans, generate key at https://portal.jup.ag (uses 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

# Default compute units for a transaction
# This sets the compute unit limit for transactions when not specified by the user
defaultComputeUnits: 200000

# Confirmation polling interval in seconds
# How often to check if a submitted transaction has been confirmed (inner retry loop)
confirmRetryInterval: 0.5

# Number of confirmation polling attempts
# How many times to poll for confirmation before considering the transaction unconfirmed
confirmRetryCount: 10

# Floor percentile of recent priority fee samples used to estimate gasPrice for a transaction
# Use the Nth percentile of recent priority fees as the base fee (90 = 90th percentile)
basePriorityFeePct: 90

# Minimum priority fee per compute unit in lamports
# This sets the floor for priority fees to ensure transactions are processed (default: 0.1 lamports/CU)
minPriorityFeePerCU: 0.1

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

>>> gateway config solana-mainnet-beta

Gateway Configuration - namespace: solana-mainnet-beta:
nodeURL: https://dry-dawn-hill.solana-mainnet.quiknode.pro/41bbd7ad405c552f91cc928e044e5e04c66341d2
nativeCurrencySymbol: SOL
defaultComputeUnits: 200000
confirmRetryInterval: 0.5
confirmRetryCount: 10
basePriorityFeePct: 90
minPriorityFeePerCU: 0.1

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

>>> gateway config solana-mainnet-beta update

Available configuration paths: nodeURL, nativeCurrencySymbol, defaultComputeUnits, confirmRetryInterval, confirmRetryCount, basePriorityFeePct, minPriorityFeePerCU

Enter configuration path (or 'exit' to cancel): nodeURL
Current value for 'nodeURL': https://api.mainnet-beta.solana.com
Enter new value (or 'exit' to cancel): https://your-preferred-node-provider.com/your-api-key

通用配置任务

更换节点提供商

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

使用 Gateway 命令

>>> gateway config solana-mainnet-beta update

Current configuration for solana-mainnet-beta:
nodeURL: https://api.mainnet-beta.solana.com
nativeCurrencySymbol: SOL
defaultComputeUnits: 200000
confirmRetryInterval: 0.5
confirmRetryCount: 10
basePriorityFeePct: 90
minPriorityFeePerCU: 0.1

Available configuration paths: nodeURL, nativeCurrencySymbol, defaultComputeUnits, confirmRetryInterval, confirmRetryCount, basePriorityFeePct, minPriorityFeePerCU

Enter configuration path (or 'exit' to cancel): nodeURL
Current value for 'nodeURL': https://api.mainnet-beta.solana.com
Enter new value (or 'exit' to cancel): https://your-preferred-node-provider.com/your-api-key

Successfully updated nodeURL
Gateway will restart automatically for changes to take effect

编辑配置文件

  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

# Default compute units for a transaction
# This sets the compute unit limit for transactions when not specified by the user
defaultComputeUnits: 200000

# Confirmation polling interval in seconds
# How often to check if a submitted transaction has been confirmed (inner retry loop)
confirmRetryInterval: 0.5

# Number of confirmation polling attempts
# How many times to poll for confirmation before considering the transaction unconfirmed
confirmRetryCount: 10

# Floor percentile of recent priority fee samples used to estimate gasPrice for a transaction
# Use the Nth percentile of recent priority fees as the base fee (90 = 90th percentile)
basePriorityFeePct: 90

# Minimum priority fee per compute unit in lamports
# This sets the floor for priority fees to ensure transactions are processed (default: 0.1 lamports/CU)
minPriorityFeePerCU: 0.1

以太坊主网示例(/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                                                                                                                                                   

  Enter chain (e.g., ethereum, solana): solana                                                                                                                                       

  Token 'HERMES' not found. Let's add it to solana (mainnet-beta).                                                                                                                   

  Enter token information:                                                                                                                                                           

  Symbol [HERMES]:                                                                                                                                                                   

  Name: HermesWizard                                                                                                                                                                 

  Contract address: 24R8j15RDq3VoeRaSDFXMvSw4W7RLLZLdpTwK8ynx777                                                                                                                     

  Decimals [18]: 9                                                                                                                                                                   

  Token to add/update:                                                                                                                                                               
  {                                                                                                                                                                                  
    "symbol": "HERMES",                                                                                                                                                              
    "name": "HermesWizard",                                                                                                                                                          
    "address": "24R8j15RDq3VoeRaSDFXMvSw4W7RLLZLdpTwK8ynx777",                                                                                                                       
    "decimals": 9                                                                                                                                                                    
  }                                                                                                                                                                                  

  Add/update this token? (Yes/No) >>> Yes                                                                                                                                            

  Adding/updating token...                                                                                                                                                           
  ✓ Token successfully added/updated!                                                                                                                                                

  Restarting Gateway for changes to take effect...                                                                                                                                   
  ✓ Gateway restarted successfully                                                                                                                                                   

  You can now use 'gateway token HERMES' to view the token information.

编辑代币文件

  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
}

代币列表结构遵循代币列表标准,有助于用户避免诈骗并在不同网络间查找合法代币。

添加交易池

每个 AMM 和 CLMM 去中心化交易所(DEX)可能对同一交易对提供具有不同参数(如手续费等级和区间步长)的多个交易池。Gateway 现在将每个 DEX 连接器的交易池定义存储在独立的 JSON 文件中。

使用 Gateway 命令

>>>  gateway pool raydium/amm LIGHT-SOL update                                                                                                                                     

  === Add Pool for LIGHT-SOL on raydium/amm ===                                                                                                                                      
  Chain: solana                                                                                                                                                                      
  Network: mainnet-beta                                                                                                                                                              

  Pool 'LIGHT-SOL' not found. Let's add it to solana (mainnet-beta).                                                                                                                 

  Enter pool information:                                                                                                                                                            

  Pool contract address: 7YZEyZ3DuHQTmgmKwzuXMYG6SHD3sCWZ3mLkU7HuLrfC                                                                                                                

  Pool to add:                                                                                                                                                                       
  {                                                                                                                                                                                  
    "address": "7YZEyZ3DuHQTmgmKwzuXMYG6SHD3sCWZ3mLkU7HuLrfC",                                                                                                                       
    "baseSymbol": "LIGHT",                                                                                                                                                           
    "quoteSymbol": "SOL",                                                                                                                                                            
    "type": "amm"                                                                                                                                                                    
  }                                                                                                                                                                                  

  Add this pool? (Yes/No) >>> Yes                                                                                                                                                    

  Adding pool...                                                                                                                                                                     
  ✓ Pool successfully added!                                                                                                                                                         

  Restarting Gateway for changes to take effect...                                                                                                                                   
  ✓ Gateway restarted successfully                                                                                                                                                   

  Pool has been added. You can view it with: 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)指定不同的交易池。

更新配置

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

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

  4. API 更新:

  5. 使用 /config/update API 端点来更新配置
  6. 这允许动态更新,而无需重启网关

提示

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