設定

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.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]セクションでは、Solana RPC呼び出しのためのRedisベースのキャッシングを設定します。これにより、冗長なアカウントデータの取得を削減し、パフォーマンスを大幅に向上させることができます:

[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)
オプション説明必須
enabledRPC呼び出しの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メソッドが有効化されているかを制御します。このセクションはオプションであり、デフォルトではすべてのメソッドが有効化されています。各メソッドは、値をtrueまたはfalseに設定することで有効化または無効化できます:

[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_configKoraサーバー設定を返すboolean

注意:このセクションがkora.tomlファイルに含まれている場合、すべてのメソッドを明示的にtrueまたはfalseに設定する必要があります。

検証ポリシー

[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エンコード文字列の配列

注意: 空の配列も許可されていますが、Koraノードがトランザクションを処理できるようにするには、少なくとも1つのホワイトリストに登録された allowed_programsallowed_tokensallowed_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_transactionsfalse に設定されており、すべての永続的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_transferfalseに設定されている場合、KoraノードはKoraノードの手数料支払者が送金権限者となるSPLトークン送金を含むトランザクションに署名しません。

[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のinstructions

オプション説明デフォルトタイプ
allow_transferTransfer/TransferWithSeed instructionsで手数料支払者を送信者として許可falseboolean
allow_assignAssign/AssignWithSeed instructionsで手数料支払者を権限者として許可falseboolean
allow_create_accountCreateAccount/CreateAccountWithSeed instructionsで手数料支払者を資金提供者として許可falseboolean
allow_allocateAllocate/AllocateWithSeed instructionsで手数料支払者をアカウント所有者として許可falseboolean
nonce.allow_initializeInitializeNonceAccountで手数料支払者をnonce権限者として設定することを許可falseboolean
nonce.allow_advanceAdvanceNonceAccountで手数料支払者を権限者として許可falseboolean
nonce.allow_authorizeAuthorizeNonceAccountで手数料支払者を現在の権限者として許可falseboolean
nonce.allow_withdrawWithdrawNonceAccountで手数料支払者を権限者として許可falseboolean

SPL Token Programのinstructions

オプション説明デフォルトタイプ
allow_transferTransfer/TransferChecked instructionsで手数料支払者を所有者として許可falseboolean
allow_burnBurn/BurnChecked instructionsで手数料支払者を所有者として許可falseboolean
allow_close_accountCloseAccount instructionsで手数料支払者を所有者として許可falseboolean
allow_approveApprove/ApproveChecked instructionsで手数料支払者を所有者として許可falseboolean
allow_revokeRevoke instructionsで手数料支払者を所有者として許可falseboolean
allow_set_authoritySetAuthority instructionsで手数料支払者を現在の権限者として許可falseboolean
allow_mint_toMintTo/MintToChecked instructionsで手数料支払者をミント権限者として許可falseboolean
allow_initialize_mintInitializeMint/InitializeMint2 instructionsで手数料支払者をミント権限者として許可falseboolean
allow_initialize_accountInitializeAccount/InitializeAccount3 instructionsで手数料支払者を所有者として許可falseboolean
allow_initialize_multisigInitializeMultisig/InitializeMultisig2 instructionsで手数料支払者を署名者として許可falseboolean
allow_freeze_accountFreezeAccount instructionsで手数料支払者を凍結権限者として許可falseboolean
allow_thaw_accountThawAccount instructionsで手数料支払者を凍結解除権限者として許可falseboolean

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 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:rentを攻撃者が制御するアカウントに返還

パフォーマンス監視(オプション)

[metrics]セクションは、メトリクスの収集と監視を設定します。このセクションはオプションであり、デフォルトではメトリクスは無効になっています。

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
オプション説明必須
enabledメトリクス収集を有効化boolean
endpointカスタムメトリクスエンドポイントパスstring
portメトリクスエンドポイントのポートnumber
scrape_intervalPrometheusスクレイプの頻度(秒)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監視リファレンスガイド

完全な例

セキュリティのベストプラクティスを適用した本番環境対応の設定例:

# 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 Foundation.
無断転載を禁じます。
つながろう