Kora v2.2.0-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]セクションでは、Solana
RPC呼び出しのためのRedisベースのキャッシングを設定します。これにより、冗長なアカウントデータの取得を削減し、パフォーマンスを大幅に向上させることができます:
[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エンコード文字列の配列 |
注意: 空の配列も許可されていますが、Koraノードがトランザクションを処理できるようにするには、少なくとも1つのホワイトリストに登録された
allowed_programs、allowed_tokens、allowed_spl_paid_tokensを指定する必要があります。Koraノードが転送を処理できるようにするには、System ProgramまたはToken Programを指定する必要があります。一般的なinstructionsタイプ(例: Compute Budget、Address Lookup Table)を有効にするには、Compute Budget ProgramまたはAddress Lookup Table Programなどを指定する必要があります。
永続的トランザクションのセキュリティ
セキュリティ警告: 永続的nonceトランザクションは、署名されたトランザクションを無期限に保持し、後で送信することを可能にします。これは、誰かが署名されたトランザクションを取得し、市場状況が自分に有利になるまで(例: SOLの価値が下落した時や、支払いトークンの価値が上昇した時)提出を待つという経済的攻撃ベクトルとして使用される可能性があります。
デフォルトでは、allow_durable_transactions は false
に設定されており、すべての永続的nonceトランザクションをブロックします。アプリケーションが永続的トランザクションを特に必要とし、リスクを理解している場合にのみ、これを有効にしてください。
永続的トランザクションを有効にする必要がある場合は、以下を検討してください:
- 認証を使用してAPIアクセスを制限する
- 追加のオフチェーン検証を実装する
- 異常なトランザクションパターンを監視する
- 署名者アカウントの残高を監視し制限する
- 署名者キーを定期的にローテーションする
永続的nonceトランザクションの詳細については、Solana Docsをご覧ください。
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
セキュリティに関する考慮事項
PermanentDelegate拡張機能 - この拡張機能を持つトークンは、デリゲートが所有者の承認なしにいつでもトークンを転送/バーンできるようにします。これにより、支払い後に支払い資金が差し押さえられる可能性があるため、Koraノードオペレーターにとって重大なリスクが生じます。
- 特定のユースケースで明示的に必要とされない限り、[validation.token2022]の
blocked_mint_extensionsに「permanent_delegate」を追加することを検討してください。 permanent_delegate拡張機能を持つ支払いトークンの使用は避けてください。
手数料支払者ポリシー
[validation.fee_payer_policy]セクションは、Koraノードの手数料支払者ウォレットが実行できるアクションをきめ細かく制御します。ポリシーはプログラムタイプ(System
Program、SPL
Token、Token-2022)別に整理されており、すべての異なるinstructionsタイプをカバーしています。これにより、ユーザーのトランザクションがKoraノードを署名者として利用する際の予期しない動作を防ぎます。
たとえば、spl_token.allow_transferがfalseに設定されている場合、KoraノードはKoraノードの手数料支払者が送金権限者となるSPLトークン送金を含むトランザクションに署名しません。
[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のinstructions
| オプション | 説明 | デフォルト | タイプ |
|---|---|---|---|
allow_transfer | Transfer/TransferWithSeed instructionsで手数料支払者を送信者として許可 | false | boolean |
allow_assign | Assign/AssignWithSeed instructionsで手数料支払者を権限者として許可 | false | boolean |
allow_create_account | CreateAccount/CreateAccountWithSeed instructionsで手数料支払者を資金提供者として許可 | false | boolean |
allow_allocate | Allocate/AllocateWithSeed instructionsで手数料支払者をアカウント所有者として許可 | 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 |
SPL Token Programのinstructions
| オプション | 説明 | デフォルト | タイプ |
|---|---|---|---|
allow_transfer | Transfer/TransferChecked instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_burn | Burn/BurnChecked instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_close_account | CloseAccount instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_approve | Approve/ApproveChecked instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_revoke | Revoke instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_set_authority | SetAuthority instructionsで手数料支払者を現在の権限者として許可 | false | boolean |
allow_mint_to | MintTo/MintToChecked instructionsで手数料支払者をミント権限者として許可 | false | boolean |
allow_initialize_mint | InitializeMint/InitializeMint2 instructionsで手数料支払者をミント権限者として許可 | false | boolean |
allow_initialize_account | InitializeAccount/InitializeAccount3 instructionsで手数料支払者を所有者として許可 | false | boolean |
allow_initialize_multisig | InitializeMultisig/InitializeMultisig2 instructionsで手数料支払者を署名者として許可 | false | boolean |
allow_freeze_account | FreezeAccount instructionsで手数料支払者を凍結権限者として許可 | false | boolean |
allow_thaw_account | ThawAccount instructionsで手数料支払者を凍結解除権限者として許可 | false | boolean |
Token-2022は、SPL
Tokenと同じ命令セットを、同一の設定オプション([validation.fee_payer_policy.token_2022]セクション内)でサポートしています。
セキュリティに関する考慮事項
セキュリティ警告:
セキュリティ上の理由から、これらすべてをfalse(デフォルト)に設定し、必要な場合にのみ有効化することを推奨します。これにより、ユーザーが手数料支払いアカウントを枯渇させたり、手数料支払いアカウントからトークンをバーンしたりするなどの望ましくない動作を防ぐことができます。これにより以下を防止します:
- アカウントの枯渇:ユーザーが手数料支払いアカウントからSOLやトークンを転送すること
- 権限の乗っ取り:ユーザーが手数料支払いアカウントが所有するアカウントの権限を変更すること
- 不正なミント:手数料支払いアカウントがミント権限を持つ場合、ユーザーがトークンをミントすること
- アカウントの不正操作:ユーザーが手数料支払いアカウントが管理するアカウントを凍結、クローズ、または変更すること
ベストプラクティス: すべての権限を無効化した状態から始め、特定のユースケースに必要な最小限の権限のみを有効化してください。
価格設定(オプション)
[validation.price]セクションでは、トランザクション手数料の計算方法を定義します。3つの価格モデルが利用可能です:
- マージン価格(デフォルト) - 実際のネットワーク手数料に加えてパーセンテージマージンを追加(デフォルトマージンは0.0)
- 固定価格 - ネットワーク手数料に関係なく、特定のトークンで固定額を請求
- 無料価格 - すべてのトランザクション手数料をスポンサー(ユーザーへの請求なし)
| オプション | 説明 | 必須 | 型 |
|---|---|---|---|
type | 使用する価格モデル | ✅ | "margin"、"fixed"、または "free" |
margin | ネットワーク手数料に追加するマージン率 | (typeが"margin"の場合) | number |
amount | トークンの基本単位で請求する固定額 | (typeが"fixed"の場合) | number |
token | 請求に使用するトークンミント | (typeが"fixed"の場合) | b58エンコード文字列 |
マージン価格設定
実際のネットワーク手数料に対してパーセンテージマージンを追加:
[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:rentを攻撃者が制御するアカウントに返還
パフォーマンス監視(オプション)
[metrics]セクションは、メトリクスの収集と監視を設定します。このセクションはオプションであり、デフォルトではメトリクスは無効になっています。
[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| オプション | 説明 | 必須 | 型 |
|---|---|---|---|
enabled | メトリクス収集を有効化 | ✅ | boolean |
endpoint | カスタムメトリクスエンドポイントパス | ✅ | string |
port | メトリクスエンドポイントのポート | ✅ | number |
scrape_interval | Prometheusスクレイプの頻度(秒) | ✅ | number |
手数料支払者残高の追跡
[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ノードの実行方法の詳細についてはオペレーターガイドを確認してください
koraタグを付けてSolana Stack Exchangeにアクセスしてください- 問題はGitHubで報告してください
Is this page helpful?