配置

正在使用 Kora v2.2.0-beta? 请参阅 Beta 版配置 了解新选项:Jito 捆绑包、Lighthouse 保护、reCAPTCHA 和使用限制。

您的 Kora 节点将为用户签署交易,因此配置节点以仅签署满足您业务要求的交易非常重要。Kora 为您提供了极大的配置灵活性,但了解配置的影响至关重要。kora.toml 是您 Kora 配置的控制中心。本文档提供了通过 kora.toml 配置文件来配置您的 Kora 付款方节点的全面参考。

概述

kora.toml 文件控制您 Kora 节点行为的所有方面,包括:

  • 速率限制和身份验证
  • RPC 方法可用性
  • 交易验证规则
  • 费用定价模型
  • 安全策略
  • RPC 方法可用性
  • 费用定价模型
  • 支付地址配置
  • 性能监控

您的配置文件应放置在部署目录中,或在启动服务器时通过 --config 标志指定。

配置部分

kora.toml 文件按部分组织,每个部分都有自己的选项集。本指南将逐步介绍每个部分并说明可用的选项:

示例 kora.toml 文件部分:

[kora]
# Core server settings
[kora.auth]
# Authentication settings
[kora.cache]
# Redis caching configuration
[kora.usage_limit]
# Per-wallet transaction limiting
[kora.enabled_methods]
# Kora RPC methods to enable
[validation]
# Transaction validation rules
[validation.token2022]
# Token-2022 extension blocking
[validation.fee_payer_policy]
# Restrictions on fee payer wallet
[validation.price]
# Transaction fee pricing models
[metrics]
# Performance monitoring

Kora 核心策略

[kora] 部分配置核心服务器行为:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
选项说明必填类型
rate_limit所有客户端的全局速率限制(每秒请求数)number
payment_address可选的支付地址,用于接收支付代币(如未指定,则默认为签名者地址)b58 编码字符串

Kora 身份验证

[kora.auth] 部分配置 Kora 服务器的身份验证:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
选项说明必填类型
api_key用于简单身份验证的 API 密钥string
hmac_secret用于基于签名的身份验证的 HMAC 密钥(最少 32 个字符)string
max_timestamp_ageHMAC 时间戳的最大有效期(秒)❌(默认:300)number

注意:api_keyhmac_secret 为所有客户端设置全局身份验证策略。有关详细的身份验证设置,请参阅身份验证指南

Kora 缓存(可选)

[kora.cache] 部分配置基于 Redis 的 Solana RPC 调用缓存。这可以通过减少冗余的账户数据获取来显著提高性能:

[kora.cache]
enabled = true # Enable/disable caching
url = "redis://localhost:6379" # Redis connection URL
default_ttl = 300 # Default TTL in seconds (5 minutes)
account_ttl = 60 # Account data TTL in seconds (1 minute)
选项说明必填类型
enabled为 RPC 调用启用 Redis 缓存❌(默认:false)boolean
urlRedis 连接 URL(启用时必填)string
default_ttl缓存条目的默认 TTL(秒)❌(默认:300)number
account_ttl账户数据缓存的 TTL(秒)❌(默认:60)number

注意:启用缓存时,必须在指定的 URL 上有可用的 Redis 实例。如果 Redis 不可用,缓存将优雅地回退到直接 RPC 调用。

Kora 使用限制(可选)

[kora.usage_limit] 部分配置每个钱包的交易限制,以防止滥用并确保所有用户的公平使用。这也可用于创建奖励计划,为用户的交易费用提供一定限额的补贴。

重要提示:目前,Kora 支持的唯一使用限制形式是永久限制。一旦钱包达到其交易限制,就无法重置,用户将无法使用同一钱包提交更多交易。此限制将持续存在,直到从 Redis 中手动清除或重置 Redis 数据。

注意:在多个 Kora 实例中启用此功能时需要 Redis:

[kora.usage_limit]
enabled = true # Enable/disable usage limiting
cache_url = "redis://localhost:6379" # Redis URL for shared state (required when enabled)
max_transactions = 100 # Max transactions per wallet (0 = unlimited)
fallback_if_unavailable = true # Continue if Redis is unavailable
选项描述是否必需类型
enabled启用每个钱包的交易限制❌(默认值:false)boolean
cache_url用于共享使用情况跟踪的 Redis 连接 URLstring
max_transactions每个钱包的最大交易数(0 = 无限制)❌(默认值:100)number
fallback_if_unavailableRedis 不可用时允许交易❌(默认值:true)boolean

注意:使用限制按钱包地址跟踪,并具有基于 TTL 的自动过期机制。当 fallback_if_unavailable 为 true 时,如果 Redis 临时不可用,系统将允许交易继续进行,从而防止服务中断。将 max_transactions 设置为 0 将允许无限制交易。

Kora 启用的方法(可选)

[kora.enabled_methods] 部分控制启用哪些 RPC 方法。此部分为可选项,默认情况下,所有方法都处于启用状态。每个方法可以通过将值设置为 truefalse 来启用或禁用:

[kora.enabled_methods]
liveness = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_payer_signer = true
选项方法描述必需类型
liveness健康检查端点boolean
estimate_transaction_fee估算交易费用boolean
get_supported_tokens列出接受的代币boolean
sign_transaction签署交易但不发送到网络boolean
sign_and_send_transaction签署交易并发送到网络boolean
transfer_transaction处理代币转账boolean
get_blockhash获取最近的区块哈希boolean
get_config返回 Kora 服务器配置boolean

注意:如果您的 kora.toml 文件中包含此部分,则所有方法都必须显式设置为 truefalse

验证策略

[validation] 部分定义了与 Solana 相关的安全规则和交易限制:

[validation]
max_allowed_lamports = 1000000 # 0.001 SOL
max_signatures = 10
price_source = "Jupiter"
allow_durable_transactions = false # Block durable nonce transactions
allowed_programs = [
"11111111111111111111111111111111", # System Program (required for SOL transfers)
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token Program
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", # Token-2022 Program
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token Program
"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table Program
"ComputeBudget11111111111111111111111111111111", # Compute Budget Program
]
allowed_tokens = [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)
# additional tokens here
]
allowed_spl_paid_tokens = [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)
# additional tokens here
]
disallowed_accounts = [
# "BadActorPubkey11111111111111111111111111111",
]
选项描述必需类型
max_allowed_lamports设置每笔交易的最大 lamport 数量可限制 Kora 节点对单笔交易的风险敞口。number
max_signaturesSolana 基础费用取决于交易中的签名数量,因此设置每笔交易的最大签名数是防止用户在单笔交易上花费过多 SOL 的有效方法。number
price_source代币价格数据预言机。**注意:**当设置为 "Jupiter" 时,必须提供 JUPITER_API_KEY 环境变量。否则服务器将无法启动。"Jupiter" 或 "Mock"
allow_durable_transactions允许持久性随机数交易。请参阅下方的安全注意事项❌(默认:false)boolean
allowed_programs交易可以交互的 Solana 程序b58 编码字符串数组
allowed_tokens可在交易中使用的代币铸造地址b58 编码字符串数组
allowed_spl_paid_tokens接受用于支付交易费用的 SPL 代币b58 编码字符串数组
disallowed_accounts明确禁止参与交易的账户b58 编码字符串数组

注意:允许使用空数组,但您需要至少指定一个白名单 allowed_programsallowed_tokensallowed_spl_paid_tokens 以便 Kora 节点能够处理交易。您需要指定 System Program 或 Token Program,Kora 节点才能处理转账。要启用常见的指令类型(例如,计算预算、地址查找表),您需要指定 Compute Budget Program 或 Address Lookup Table Program 等。

持久交易安全

安全警告: 持久 nonce 交易允许已签名的交易被无限期保留并在稍后提交。这可能被用作经济攻击手段,某人可以获取已签名的交易并等待在对其有利的市场条件下提交(例如,当 SOL 的价值下跌或支付代币的价值上涨时)。

默认情况下,allow_durable_transactions 设置为 false 以阻止所有持久 nonce 交易。仅当您的应用程序特别需要持久交易且您了解其风险时才启用此功能。

如果您必须启用持久交易,请考虑:

  • 使用身份验证来限制 API 访问
  • 实施额外的链下验证
  • 监控异常交易模式
  • 监控并限制签名者账户余额
  • 定期轮换签名者密钥

Solana 文档中了解更多关于持久 nonce 交易的信息。

Token-2022 扩展阻止

[validation.token2022] 部分允许您阻止特定的 Token-2022 扩展以增强安全性。默认情况下启用所有扩展。您可以通过将特定扩展添加到 blocked_mint_extensionsblocked_account_extensions 数组来阻止它们:

[validation.token2022]
blocked_mint_extensions = [
"transfer_hook", # Block tokens with transfer hooks
"pausable", # Block pausable tokens
"permanent_delegate", # Block tokens with permanent delegates
]
blocked_account_extensions = [
"cpi_guard", # Block accounts with CPI guard
"memo_transfer", # Block accounts requiring memos
]

可用的铸造扩展

扩展名称描述
confidential_transfer_mint铸造的机密转账配置
confidential_mint_burn机密铸造和销毁配置
transfer_fee_config转账费用配置
mint_close_authority允许关闭铸造的授权方
interest_bearing_config计息代币配置
non_transferable使代币不可转让
permanent_delegate铸造的永久委托人
transfer_hook自定义转账钩子程序
pausable可暂停代币配置

可用的账户扩展

扩展名称描述
confidential_transfer_account账户的机密转账状态
non_transferable_account不可转让的代币账户
transfer_hook_account账户的转账钩子状态
pausable_account可暂停代币账户状态
memo_transfer转账需要备注
cpi_guard防止某些 CPI 调用
immutable_owner账户所有者不可更改
default_account_state新账户的默认状态

transfer_hook

安全注意事项

永久委托人扩展 - 具有此扩展的代币允许委托人随时在未经所有者批准的情况下转移/销毁代币。这对 Kora 节点运营商造成重大风险,因为付款资金可能在付款后被没收。

  • 除非您的使用场景明确需要,否则请考虑将 "permanent_delegate" 添加到 [validation.token2022] 中的 blocked_mint_extensions
  • 避免使用带有 permanent_delegate 扩展的付款代币。

费用支付者策略

[validation.fee_payer_policy] 部分提供了对您的 Kora 节点费用支付者钱包可执行操作的精细控制。该策略按程序类型(System Program、Token Program、Associated Token Program)组织,涵盖所有不同的指令类型。这可以防止用户的交易在使用您的 Kora 节点作为签名者时出现意外行为。

例如,如果 spl_token.allow_transfer 设置为 false,Kora 节点将不会签署包含 SPL 代币转账的交易,其中 Kora 节点的费用支付者是转账授权者。

[validation.fee_payer_policy.system]
allow_transfer = false # System Transfer/TransferWithSeed
allow_assign = false # System Assign/AssignWithSeed
allow_create_account = false # System CreateAccount/CreateAccountWithSeed
allow_allocate = false # System Allocate/AllocateWithSeed
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # InitializeNonceAccount
allow_advance = false # AdvanceNonceAccount
allow_authorize = false # AuthorizeNonceAccount
allow_withdraw = false # WithdrawNonceAccount
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount

System Program 指令

选项描述默认值类型
allow_transfer允许费用支付者在 Transfer/TransferWithSeed 指令中作为发送者falseboolean
allow_assign允许费用支付者在 Assign/AssignWithSeed 指令中作为授权者falseboolean
allow_create_account允许费用支付者在 CreateAccount/CreateAccountWithSeed 指令中作为资金支付者falseboolean
allow_allocate允许费用支付者在 Allocate/AllocateWithSeed 指令中作为账户所有者falseboolean
nonce.allow_initialize允许费用支付者在 InitializeNonceAccount 中被设置为 nonce 授权者falseboolean
nonce.allow_advance允许费用支付者在 AdvanceNonceAccount 中作为授权者falseboolean
nonce.allow_authorize允许费用支付者在 AuthorizeNonceAccount 中作为当前授权者falseboolean
nonce.allow_withdraw允许费用支付者在 WithdrawNonceAccount 中作为授权者falseboolean

Token Program 指令

选项描述默认值类型
allow_transfer允许费用支付者在 Transfer/TransferChecked 指令中作为所有者falseboolean
allow_burn允许费用支付者在 Burn/BurnChecked 指令中作为所有者falseboolean
allow_close_account允许费用支付者在 CloseAccount 指令中作为所有者falseboolean
allow_approve允许费用支付者在 Approve/ApproveChecked 指令中作为所有者falseboolean
allow_revoke允许费用支付者在 Revoke 指令中作为所有者falseboolean
allow_set_authority允许费用支付者在 SetAuthority 指令中作为当前授权者falseboolean
allow_mint_to允许费用支付者在 MintTo/MintToChecked 指令中作为铸造授权者falseboolean
allow_initialize_mint允许费用支付者在 InitializeMint/InitializeMint2 指令中作为铸造授权者falseboolean
allow_initialize_account允许费用支付者在 InitializeAccount/InitializeAccount3 指令中作为所有者falseboolean
allow_initialize_multisig允许费用支付者在 InitializeMultisig/InitializeMultisig2 指令中作为签名者falseboolean
allow_freeze_account允许费用支付者在 FreezeAccount 指令中作为冻结授权者falseboolean
allow_thaw_account允许费用支付者在 ThawAccount 指令中作为冻结授权者falseboolean

Token-2022 支持与 SPL Token 相同的指令集,配置选项也完全相同(位于 [validation.fee_payer_policy.token_2022] 部分)。

安全注意事项

安全警告: 出于安全考虑,建议将所有这些选项设置为 false(默认值),仅在需要时启用。这将防止不必要的行为,例如用户耗尽您的费用支付账户或从您的费用支付账户中销毁代币。这可以防止:

  • 账户耗尽:用户从您的费用支付账户转移 SOL 或代币
  • 权限接管:用户更改您的费用支付账户所拥有的账户权限
  • 未授权铸造:如果您的费用支付账户具有铸造权限,用户可能铸造代币
  • 账户操纵:用户冻结、关闭或修改由您的费用支付账户控制的账户

最佳实践: 从禁用所有权限开始,仅启用您特定用例所需的最小权限集。

价格配置(可选)

[validation.price] 部分定义了如何计算交易费用。提供三种定价模型:

  • 利润定价(默认)- 在实际网络费用基础上添加百分比利润(默认利润为 0.0)
  • 固定定价 - 以特定代币收取固定金额,与网络费用无关
  • 免费定价 - 赞助所有交易费用(不向用户收费)
选项描述是否必需类型
type要使用的定价模型"margin"、"fixed" 或 "free"
margin添加到网络费用的利润百分比(当 type 为 "margin" 时)数字
amount以代币基本单位收取的固定金额(当 type 为 "fixed" 时)数字
token收费使用的代币铸造地址(当 type 为 "fixed" 时)base58 编码字符串

保证金定价

在实际网络费用之上添加百分比保证金:

[validation.price]
type = "margin"
margin = 0.1 # 10% margin (0.1 = 10%, 1.0 = 100%)

固定定价

安全警告: 固定定价不包括收费金额中的手续费支付方支出。如果配置不当,这可能会导致用户耗尽您的手续费支付方账户。

无论网络费用如何,都以特定代币收取固定金额:

[validation.price]
type = "fixed"
amount = 1000000 # Amount in token's base units
token = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint

免费交易

赞助所有交易费用(用户无需支付):

[validation.price]
type = "free"

使用固定/免费定价时的安全措施

  1. 禁用所有转账和货币操作 - 防止手续费支付方被用作转账来源:

    [validation.fee_payer_policy.system]
    allow_transfer = false # Block SOL transfers
    allow_create_account = false # Block account creation with lamports
    allow_allocate = false # Block space allocation
    [validation.fee_payer_policy.system.nonce]
    allow_withdraw = false # Block nonce account withdrawals
    [validation.fee_payer_policy.spl_token] # and for [validation.fee_payer_policy.token_2022]
    allow_transfer = false # Block SPL transfers
    allow_burn = false # Block SPL token burning
    allow_close_account = false # Block SPL token account closures (returns rent)
    allow_mint_to = false # Block unauthorized SPL token minting
    allow_initialize_account = false # Block account initialization
  2. 启用身份验证 - 使用身份验证防止滥用:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. 设置保守限制 - 最小化风险暴露:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

警告: 使用固定/免费定价时特别危险的操作:

  • allow_mint_to:如果手续费支付方拥有铸造权限,可能允许无限制地创建代币
  • allow_set_authority:可能将关键账户的控制权转移给攻击者
  • allow_transfer:可直接耗尽手续费支付方的代币余额
  • allow_close_account:将租金返还给攻击者控制的账户

性能监控(可选)

[metrics] 部分配置指标收集和监控。此部分为可选项,默认情况下禁用指标。

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
选项描述必需类型
enabled启用指标收集布尔值
endpoint自定义指标端点路径字符串
port指标端点端口数字
scrape_intervalPrometheus 抓取频率(秒)数字

费用支付者余额跟踪

[metrics.fee_payer_balance] 部分配置了对费用支付者 SOL 余额的自动监控:

选项描述是否必需类型
enabled启用费用支付者余额跟踪❌(默认值:false)boolean
expiry_seconds后台跟踪间隔(秒)❌(默认值:30)number

启用后,Kora 会自动跟踪费用支付者的 SOL 余额,并通过 fee_payer_balance_lamports Prometheus 指标公开。这有助于容量规划和低余额告警。

http://localhost:{port}/{metrics-endpoint}

→ Kora 监控参考指南

完整示例

以下是一个包含安全最佳实践的生产就绪配置:

# Kora Paymaster Configuration
# Last Updated: 2025-08-22
[kora]
# Rate limiting: 100 requests per second globally
rate_limit = 100
# Optional payment address (defaults to signer address(es) if not specified)
# payment_address = "YourPaymentAddressPubkey11111111111111111111"
[kora.auth]
# Authentication (choose based on security needs)
# api_key = "kora_live_sk_generate_secure_key_here"
hmac_secret = "kora_hmac_minimum_32_character_secret_here"
max_timestamp_age = 300
# Caching configuration (optional but recommended for production)
[kora.cache]
enabled = true
url = "redis://localhost:6379"
default_ttl = 300 # 5 minutes
account_ttl = 60 # 1 minute
# Usage limiting (optional, prevents abuse)
[kora.usage_limit]
enabled = true
cache_url = "redis://localhost:6379" # Can share same Redis instance as cache
max_transactions = 100 # Per-wallet limit
fallback_if_unavailable = true # Don't block if Redis is down
# Disable unnecessary RPC methods for security
[kora.enabled_methods]
liveness = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_payer_signer = true
[validation]
# Use production oracle
price_source = "Jupiter"
# Conservative transaction limits
max_allowed_lamports = 1000000 # 0.001 SOL max
max_signatures = 10
# Block durable nonce transactions (security default)
allow_durable_transactions = false
# Minimal program allowlist (expand as needed)
allowed_programs = [
"11111111111111111111111111111111", # System Program
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token
"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table
"ComputeBudget11111111111111111111111111111111", # Compute Budget
"MyProgram111111111111111111111111111111111",
# Add your specific program IDs here
]
# Production token allowlist
allowed_tokens = [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC
"So11111111111111111111111111111111111111112", # Wrapped SOL
"MyToken1111111111111111111111111111111111111111",
# Add tokens your application uses
]
# Payment tokens (only liquid, trusted tokens)
allowed_spl_paid_tokens = [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC only
]
# Known bad actors or compromised addresses
disallowed_accounts = [
"BadActor1111111111111111111111111111111111111111",
]
# Restrictive fee payer policy (recommended for production)
[validation.fee_payer_policy.system]
allow_transfer = false # Block SOL transfers from fee payer
allow_assign = false # Block account ownership changes
allow_create_account = false # Block creating accounts with fee payer funds
allow_allocate = false # Block allocating space for fee payer accounts
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # Block nonce account initialization
allow_advance = false # Block nonce advancement
allow_authorize = false # Block nonce authority changes
allow_withdraw = false # Block nonce withdrawals
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Critical: Block SPL transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Critical: Block Token2022 transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
# Token-2022 extension blocking
[validation.token2022]
# Block potentially risky mint extensions
blocked_mint_extensions = [
"transfer_hook", # Custom transfer logic
"pausable", # Can freeze transfers
"permanent_delegate", # Permanent control
]
# Block complex account extensions
blocked_account_extensions = [
"cpi_guard", # Restricts composability
"memo_transfer", # Requires additional data
]
# Sustainable pricing with 15% margin
[validation.price]
type = "margin"
margin = 0.15 # 15% margin on network fees
# Metrics collection
[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
# Fee payer balance monitoring
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30

配置验证

Kora 在启动时会验证您的配置。如果您想在不启动服务器的情况下验证配置,可以使用配置验证命令:

kora --config kora.toml config validate # or validate-with-rpc

您还可以运行 validate-with-rpc 命令来通过 RPC 服务器验证配置(此验证检查速度稍慢,但会进行更全面的账户检查)

启动服务器

配置好 kora.toml 文件后,您可以启动 Kora 服务器:

kora --config path/to/kora.toml rpc start --no-load-signer # --other-rpc-flags-here

--no-load-signer 标志将在不加载任何签名者的情况下初始化服务器。这对于测试配置很有用。要加载签名者,您需要配置 signers.toml 文件。一个包含单个签名者的最小配置如下所示:

[signer_pool]
# Selection strategy: round_robin, random, weighted
strategy = "round_robin"
# Primary memory signer
[[signers]]
name = "my-signer"
type = "memory"
private_key_env = "MY_SIGNER_PRIVATE_KEY"

这将从 MY_SIGNER_PRIVATE_KEY 环境变量加载单个签名者。然后您可以使用以下命令启动服务器:

kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml

有关更多信息和高级签名器配置,请参阅 签名器指南

最佳实践

  1. 从严格开始:从严格的限制开始,然后逐步放宽
  2. 监控使用情况:跟踪实际使用的程序和代币
  3. 定期更新:定期审查和更新黑名单及限制
  4. 测试变更:在暂存环境中先验证配置变更
  5. 版本管理:保留配置变更的更新日志

需要帮助?

Is this page helpful?

管理者

©️ 2026 Solana 基金会版权所有
取得联系