正在使用 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 核心策略 - 核心服务器设置
- Kora 身份验证 - 身份验证设置
- Kora 缓存 - RPC 调用的 Redis 缓存
- Kora 使用限制 - 每个钱包的交易限制
- Kora 启用的方法 - 要启用的 Kora RPC 方法
- 验证策略 - 交易验证和安全性
- Token-2022 扩展拦截 - 拦截有风险的 Token-2022 扩展
- 费用支付方策略 - 对费用支付方钱包的限制
- 价格配置 - 交易费用定价模型
- 性能监控 - 指标收集和监控
- 完整示例 - 完整的生产就绪配置
示例 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 = 100payment_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_age | HMAC 时间戳的最大有效期(秒) | ❌(默认:300) | number |
注意:
api_key和hmac_secret为所有客户端设置全局身份验证策略。有关详细的身份验证设置,请参阅身份验证指南。
Kora 缓存(可选)
[kora.cache] 部分配置基于 Redis 的 Solana
RPC 调用缓存。这可以通过减少冗余的账户数据获取来显著提高性能:
[kora.cache]enabled = true # Enable/disable cachingurl = "redis://localhost:6379" # Redis connection URLdefault_ttl = 300 # Default TTL in seconds (5 minutes)account_ttl = 60 # Account data TTL in seconds (1 minute)
| 选项 | 说明 | 必填 | 类型 |
|---|---|---|---|
enabled | 为 RPC 调用启用 Redis 缓存 | ❌(默认:false) | boolean |
url | Redis 连接 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 limitingcache_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 连接 URL | ❌ | string |
max_transactions | 每个钱包的最大交易数(0 = 无限制) | ❌(默认值:100) | number |
fallback_if_unavailable | Redis 不可用时允许交易 | ❌(默认值:true) | boolean |
注意:使用限制按钱包地址跟踪,并具有基于 TTL 的自动过期机制。当
fallback_if_unavailable为 true 时,如果 Redis 临时不可用,系统将允许交易继续进行,从而防止服务中断。将max_transactions设置为 0 将允许无限制交易。
Kora 启用的方法(可选)
[kora.enabled_methods]
部分控制启用哪些 RPC 方法。此部分为可选项,默认情况下,所有方法都处于启用状态。每个方法可以通过将值设置为
true 或 false 来启用或禁用:
[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_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文件中包含此部分,则所有方法都必须显式设置为true或false。
验证策略
[validation] 部分定义了与 Solana 相关的安全规则和交易限制:
[validation]max_allowed_lamports = 1000000 # 0.001 SOLmax_signatures = 10price_source = "Jupiter"allow_durable_transactions = false # Block durable nonce transactionsallowed_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_signatures | Solana 基础费用取决于交易中的签名数量,因此设置每笔交易的最大签名数是防止用户在单笔交易上花费过多 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_programs、allowed_tokens、allowed_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_extensions 或 blocked_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/TransferWithSeedallow_assign = false # System Assign/AssignWithSeedallow_create_account = false # System CreateAccount/CreateAccountWithSeedallow_allocate = false # System Allocate/AllocateWithSeed[validation.fee_payer_policy.system.nonce]allow_initialize = false # InitializeNonceAccountallow_advance = false # AdvanceNonceAccountallow_authorize = false # AuthorizeNonceAccountallow_withdraw = false # WithdrawNonceAccount[validation.fee_payer_policy.spl_token]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount[validation.fee_payer_policy.token_2022]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount
System Program 指令
| 选项 | 描述 | 默认值 | 类型 |
|---|---|---|---|
allow_transfer | 允许费用支付者在 Transfer/TransferWithSeed 指令中作为发送者 | false | boolean |
allow_assign | 允许费用支付者在 Assign/AssignWithSeed 指令中作为授权者 | false | boolean |
allow_create_account | 允许费用支付者在 CreateAccount/CreateAccountWithSeed 指令中作为资金支付者 | false | boolean |
allow_allocate | 允许费用支付者在 Allocate/AllocateWithSeed 指令中作为账户所有者 | false | boolean |
nonce.allow_initialize | 允许费用支付者在 InitializeNonceAccount 中被设置为 nonce 授权者 | false | boolean |
nonce.allow_advance | 允许费用支付者在 AdvanceNonceAccount 中作为授权者 | false | boolean |
nonce.allow_authorize | 允许费用支付者在 AuthorizeNonceAccount 中作为当前授权者 | false | boolean |
nonce.allow_withdraw | 允许费用支付者在 WithdrawNonceAccount 中作为授权者 | false | boolean |
Token Program 指令
| 选项 | 描述 | 默认值 | 类型 |
|---|---|---|---|
allow_transfer | 允许费用支付者在 Transfer/TransferChecked 指令中作为所有者 | false | boolean |
allow_burn | 允许费用支付者在 Burn/BurnChecked 指令中作为所有者 | false | boolean |
allow_close_account | 允许费用支付者在 CloseAccount 指令中作为所有者 | false | boolean |
allow_approve | 允许费用支付者在 Approve/ApproveChecked 指令中作为所有者 | false | boolean |
allow_revoke | 允许费用支付者在 Revoke 指令中作为所有者 | false | boolean |
allow_set_authority | 允许费用支付者在 SetAuthority 指令中作为当前授权者 | false | boolean |
allow_mint_to | 允许费用支付者在 MintTo/MintToChecked 指令中作为铸造授权者 | false | boolean |
allow_initialize_mint | 允许费用支付者在 InitializeMint/InitializeMint2 指令中作为铸造授权者 | false | boolean |
allow_initialize_account | 允许费用支付者在 InitializeAccount/InitializeAccount3 指令中作为所有者 | false | boolean |
allow_initialize_multisig | 允许费用支付者在 InitializeMultisig/InitializeMultisig2 指令中作为签名者 | false | boolean |
allow_freeze_account | 允许费用支付者在 FreezeAccount 指令中作为冻结授权者 | false | boolean |
allow_thaw_account | 允许费用支付者在 ThawAccount 指令中作为冻结授权者 | false | boolean |
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 unitstoken = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint
免费交易
赞助所有交易费用(用户无需支付):
[validation.price]type = "free"
使用固定/免费定价时的安全措施
-
禁用所有转账和货币操作 - 防止手续费支付方被用作转账来源:
[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfersallow_create_account = false # Block account creation with lamportsallow_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 transfersallow_burn = false # Block SPL token burningallow_close_account = false # Block SPL token account closures (returns rent)allow_mint_to = false # Block unauthorized SPL token mintingallow_initialize_account = false # Block account initialization -
启用身份验证 - 使用身份验证防止滥用:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
设置保守限制 - 最小化风险暴露:
[validation]max_allowed_lamports = 1000000 # 0.001 SOL maximum
警告: 使用固定/免费定价时特别危险的操作:
allow_mint_to:如果手续费支付方拥有铸造权限,可能允许无限制地创建代币allow_set_authority:可能将关键账户的控制权转移给攻击者allow_transfer:可直接耗尽手续费支付方的代币余额allow_close_account:将租金返还给攻击者控制的账户
性能监控(可选)
[metrics] 部分配置指标收集和监控。此部分为可选项,默认情况下禁用指标。
[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| 选项 | 描述 | 必需 | 类型 |
|---|---|---|---|
enabled | 启用指标收集 | ✅ | 布尔值 |
endpoint | 自定义指标端点路径 | ✅ | 字符串 |
port | 指标端点端口 | ✅ | 数字 |
scrape_interval | Prometheus 抓取频率(秒) | ✅ | 数字 |
费用支付者余额跟踪
[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 Paymaster Configuration# Last Updated: 2025-08-22[kora]# Rate limiting: 100 requests per second globallyrate_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 = trueurl = "redis://localhost:6379"default_ttl = 300 # 5 minutesaccount_ttl = 60 # 1 minute# Usage limiting (optional, prevents abuse)[kora.usage_limit]enabled = truecache_url = "redis://localhost:6379" # Can share same Redis instance as cachemax_transactions = 100 # Per-wallet limitfallback_if_unavailable = true # Don't block if Redis is down# Disable unnecessary RPC methods for security[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true[validation]# Use production oracleprice_source = "Jupiter"# Conservative transaction limitsmax_allowed_lamports = 1000000 # 0.001 SOL maxmax_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 allowlistallowed_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 addressesdisallowed_accounts = ["BadActor1111111111111111111111111111111111111111",]# Restrictive fee payer policy (recommended for production)[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfers from fee payerallow_assign = false # Block account ownership changesallow_create_account = false # Block creating accounts with fee payer fundsallow_allocate = false # Block allocating space for fee payer accounts[validation.fee_payer_policy.system.nonce]allow_initialize = false # Block nonce account initializationallow_advance = false # Block nonce advancementallow_authorize = false # Block nonce authority changesallow_withdraw = false # Block nonce withdrawals[validation.fee_payer_policy.spl_token]allow_transfer = false # Critical: Block SPL transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing[validation.fee_payer_policy.token_2022]allow_transfer = false # Critical: Block Token2022 transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing# Token-2022 extension blocking[validation.token2022]# Block potentially risky mint extensionsblocked_mint_extensions = ["transfer_hook", # Custom transfer logic"pausable", # Can freeze transfers"permanent_delegate", # Permanent control]# Block complex account extensionsblocked_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 = trueendpoint = "/metrics"port = 8080scrape_interval = 60# Fee payer balance monitoring[metrics.fee_payer_balance]enabled = trueexpiry_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, weightedstrategy = "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
有关更多信息和高级签名器配置,请参阅 签名器指南。
最佳实践
- 从严格开始:从严格的限制开始,然后逐步放宽
- 监控使用情况:跟踪实际使用的程序和代币
- 定期更新:定期审查和更新黑名单及限制
- 测试变更:在暂存环境中先验证配置变更
- 版本管理:保留配置变更的更新日志
需要帮助?
- 查看身份验证指南了解身份验证设置
- 查看签名器指南了解签名器配置
- 查看运营者指南了解如何运行 Kora 节点的更多信息
- 访问 Solana Stack Exchange 并使用
kora标签 - 在 GitHub 上报告问题
Is this page helpful?