Konfigurasi

Menggunakan Kora v2.2.0-beta? Lihat Konfigurasi Beta untuk opsi baru: Bundle Jito, perlindungan Lighthouse, reCAPTCHA, dan batas penggunaan.

Node Kora Anda akan menandatangani transaksi untuk pengguna Anda, jadi sangat penting untuk mengonfigurasinya agar hanya menandatangani transaksi yang memenuhi persyaratan bisnis Anda. Kora memberi Anda banyak fleksibilitas dalam cara mengonfigurasi node Anda, tetapi penting untuk memahami implikasi dari konfigurasi Anda. kora.toml adalah pusat kontrol untuk konfigurasi Kora Anda. Dokumen ini menyediakan referensi komprehensif untuk mengonfigurasi node paymaster Kora Anda melalui file konfigurasi kora.toml.

Ringkasan

File kora.toml mengontrol semua aspek perilaku node Kora Anda termasuk:

  • Pembatasan kecepatan dan autentikasi
  • Ketersediaan metode RPC
  • Aturan validasi transaksi
  • Model penetapan harga biaya
  • Kebijakan keamanan
  • Ketersediaan metode RPC
  • Model penetapan harga biaya
  • Konfigurasi alamat pembayaran
  • Pemantauan performa

File konfigurasi Anda harus ditempatkan di direktori deployment Anda atau ditentukan melalui flag --config saat memulai server.

Bagian Konfigurasi

File kora.toml disusun dalam beberapa bagian, masing-masing dengan rangkaian opsinya sendiri. Panduan ini menjelaskan setiap bagian dan menjelaskan opsi yang tersedia:

Contoh bagian file 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

Kebijakan Inti Kora

Bagian [kora] mengonfigurasi perilaku inti server:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
OpsiDeskripsiWajibTipe
rate_limitBatas laju global (permintaan per detik) di semua kliennumber
payment_addressAlamat pembayaran opsional untuk menerima token pembayaran (default ke alamat penanda tangan jika tidak ditentukan)string terenkode b58

Autentikasi Kora

Bagian [kora.auth] mengonfigurasi autentikasi untuk server Kora:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
OpsiDeskripsiWajibTipe
api_keyKunci API untuk autentikasi sederhanastring
hmac_secretRahasia HMAC untuk autentikasi berbasis tanda tangan (min 32 karakter)string
max_timestamp_ageUsia maksimum timestamp HMAC dalam detik❌ (default: 300)number

Catatan: api_key dan hmac_secret menetapkan kebijakan autentikasi global untuk semua klien. Untuk panduan pengaturan autentikasi terperinci, lihat Panduan Autentikasi.

Caching Kora (opsional)

Bagian [kora.cache] mengonfigurasi caching berbasis Redis untuk panggilan RPC Solana. Hal ini dapat meningkatkan performa secara signifikan dengan mengurangi pengambilan data akun yang redundan:

[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)
OpsiDeskripsiWajibTipe
enabledAktifkan caching Redis untuk panggilan RPC❌ (default: false)boolean
urlURL koneksi Redis (wajib saat diaktifkan)string
default_ttlTTL default untuk entri cache dalam detik❌ (default: 300)number
account_ttlTTL untuk cache data akun dalam detik❌ (default: 60)number

Catatan: Ketika caching diaktifkan, instance Redis harus tersedia di URL yang ditentukan. Cache secara otomatis beralih ke panggilan RPC langsung jika Redis tidak tersedia.

Batas Penggunaan Kora (opsional)

Bagian [kora.usage_limit] mengonfigurasi pembatasan transaksi per-wallet untuk mencegah penyalahgunaan dan memastikan penggunaan yang adil di seluruh pengguna Anda. Ini juga dapat digunakan untuk membuat program rewards untuk mensubsidi biaya transaksi pengguna hingga batas tertentu.

Penting: Saat ini, satu-satunya bentuk pembatasan penggunaan yang didukung oleh Kora adalah batas permanen. Setelah sebuah wallet mencapai batas transaksinya, batas tersebut tidak dapat di-reset dan pengguna tidak akan dapat mengirimkan transaksi lagi menggunakan wallet yang sama. Batas ini tetap ada hingga dihapus secara manual dari Redis atau data Redis di-reset.

Catatan: Fitur ini memerlukan Redis ketika diaktifkan di beberapa instance Kora:

[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
OpsiDeskripsiWajibTipe
enabledAktifkan pembatasan transaksi per-wallet❌ (default: false)boolean
cache_urlURL koneksi Redis untuk pelacakan penggunaan bersamastring
max_transactionsMaksimum transaksi per wallet (0 = tidak terbatas)❌ (default: 100)number
fallback_if_unavailableIzinkan transaksi jika Redis tidak tersedia❌ (default: true)boolean

Catatan: Batas penggunaan dilacak per alamat wallet dengan otomatis kedaluwarsa berbasis TTL. Ketika fallback_if_unavailable bernilai true, sistem mengizinkan transaksi untuk dilanjutkan jika Redis sementara tidak tersedia, mencegah gangguan layanan. Mengatur max_transactions menjadi 0 akan mengizinkan transaksi tidak terbatas.

Metode yang Diaktifkan Kora (opsional)

Bagian [kora.enabled_methods] mengontrol metode RPC mana yang diaktifkan. Bagian ini bersifat opsional dan secara default, semua metode diaktifkan. Setiap metode dapat diaktifkan atau dinonaktifkan dengan menyetel nilainya menjadi true atau 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
OpsiDeskripsi MetodeWajibTipe
livenessEndpoint pemeriksaan kesehatanboolean
estimate_transaction_feeEstimasi biaya untuk transaksiboolean
get_supported_tokensDaftar token yang diterimaboolean
sign_transactionMenandatangani transaksi tanpa mengirimnya ke jaringanboolean
sign_and_send_transactionMenandatangani transaksi dan mengirimnya ke jaringanboolean
transfer_transactionMenangani transfer tokenboolean
get_blockhashMendapatkan blockhash terbaruboolean
get_configMengembalikan konfigurasi server Koraboolean

Catatan: jika bagian ini disertakan dalam file kora.toml Anda, semua metode harus secara eksplisit disetel ke true atau false.

Kebijakan Validasi

Bagian [validation] mendefinisikan aturan keamanan terkait Solana dan batas transaksi:

[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",
]
OpsiDeskripsiWajibTipe
max_allowed_lamportsMenetapkan jumlah maksimum lamport per transaksi membatasi eksposur node Kora terhadap satu transaksi.number
max_signaturesBiaya dasar Solana merupakan fungsi dari jumlah tanda tangan dalam transaksi, jadi menetapkan jumlah maksimum tanda tangan per transaksi adalah cara yang baik untuk mencegah pengguna menghabiskan terlalu banyak SOL pada satu transaksi.number
price_sourceOracle untuk data harga token. Catatan: Saat disetel ke "Jupiter", variabel lingkungan JUPITER_API_KEY wajib diisi. Server akan gagal dimulai tanpa variabel tersebut."Jupiter" atau "Mock"
allow_durable_transactionsIzinkan transaksi nonce yang tahan lama. Lihat Pertimbangan Keamanan di bawah ini.❌ (default: false)boolean
allowed_programsProgram Solana yang dapat berinteraksi dengan transaksiArray of b58-encoded string
allowed_tokensToken mint yang dapat digunakan dalam transaksiArray of b58-encoded string
allowed_spl_paid_tokensToken SPL yang diterima sebagai pembayaran untuk biaya transaksiArray of b58-encoded string
disallowed_accountsAkun yang secara eksplisit diblokir dari transaksiArray of b58-encoded string

Catatan: Array kosong diperbolehkan, tetapi Anda perlu menentukan setidaknya satu allowed_programs, allowed_tokens, allowed_spl_paid_tokens yang masuk daftar putih agar node Kora dapat memproses transaksi. Anda perlu menentukan System Program atau Token Program agar node Kora dapat memproses transfer. Untuk mengaktifkan jenis instruksi umum (misalnya, Compute Budget, Address Lookup Table), Anda perlu menentukan Compute Budget Program atau Address Lookup Table Program, dll.

Keamanan Transaksi Tahan Lama

PERINGATAN KEAMANAN: Transaksi nonce tahan lama memungkinkan transaksi yang ditandatangani disimpan tanpa batas waktu dan dikirimkan nanti. Hal ini dapat digunakan sebagai vektor serangan ekonomi di mana seseorang dapat memperoleh transaksi yang ditandatangani dan menunggu untuk mengirimkannya sampai kondisi pasar menguntungkan bagi mereka (misalnya, ketika nilai SOL turun atau nilai token pembayaran meningkat).

Secara default, allow_durable_transactions diatur ke false untuk memblokir semua transaksi nonce tahan lama. Aktifkan ini hanya jika aplikasi Anda secara khusus memerlukan transaksi tahan lama dan Anda memahami risikonya.

Jika Anda harus mengaktifkan transaksi tahan lama, pertimbangkan:

  • Menggunakan autentikasi untuk membatasi akses API
  • Menerapkan validasi off-chain tambahan
  • Memantau pola transaksi yang tidak biasa
  • Memantau dan membatasi saldo akun penandatangan
  • Merotasi kunci penandatangan secara berkala

Pelajari lebih lanjut tentang transaksi nonce tahan lama di Dokumentasi Solana.

Pemblokiran Ekstensi Token-2022

Bagian [validation.token2022] memungkinkan Anda memblokir ekstensi Token-2022 tertentu untuk keamanan yang lebih baik. Semua ekstensi diaktifkan secara default. Anda dapat memblokir ekstensi tertentu dengan menambahkannya ke array blocked_mint_extensions atau 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
]

Ekstensi Mint yang Tersedia

Nama EkstensiDeskripsi
confidential_transfer_mintKonfigurasi transfer rahasia untuk mint
confidential_mint_burnKonfigurasi mint dan burn rahasia
transfer_fee_configKonfigurasi biaya transfer
mint_close_authorityOtoritas yang diizinkan menutup mint
interest_bearing_configKonfigurasi token dengan suku bunga
non_transferableMembuat token tidak dapat ditransfer
permanent_delegateDelegasi permanen untuk mint
transfer_hookProgram kustom untuk hook transfer
pausableKonfigurasi token yang dapat dijeda

Ekstensi Akun yang Tersedia

Nama EkstensiDeskripsi
confidential_transfer_accountStatus transfer rahasia untuk akun
non_transferable_accountAkun token tidak dapat ditransfer
transfer_hook_accountStatus hook transfer untuk akun
pausable_accountStatus akun token yang dapat dijeda
memo_transferMemerlukan memo untuk transfer
cpi_guardMencegah panggilan CPI tertentu
immutable_ownerPemilik akun tidak dapat diubah
default_account_stateStatus default untuk akun baru

transfer_hook

Pertimbangan Keamanan

Ekstensi PermanentDelegate - Token dengan ekstensi ini memungkinkan delegasi untuk mentransfer/membakar token kapan saja tanpa persetujuan pemilik. Hal ini menciptakan risiko signifikan bagi operator node Kora karena dana pembayaran dapat disita setelah pembayaran dilakukan.

  • Pertimbangkan untuk menambahkan "permanent_delegate" ke blocked_mint_extensions di [validation.token2022] kecuali diperlukan secara eksplisit untuk kasus penggunaan Anda.
  • Hindari menggunakan token pembayaran dengan ekstensi permanent_delegate.

Kebijakan Pembayar Biaya

Bagian [validation.fee_payer_policy] menyediakan kontrol terperinci atas tindakan apa saja yang dapat dilakukan oleh dompet pembayar biaya node Kora Anda. Kebijakan ini diatur berdasarkan jenis program (System, SPL Token, Token-2022) dan mencakup semua jenis instruksi yang berbeda. Hal ini mencegah perilaku tak terduga dari transaksi pengguna yang memanfaatkan node Kora Anda sebagai penandatangan.

Sebagai contoh, jika spl_token.allow_transfer diatur ke false, node Kora tidak akan menandatangani transaksi yang mencakup transfer token SPL di mana pembayar biaya node Kora adalah otoritas transfer.

[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

Instruksi System Program

OpsiDeskripsiDefaultTipe
allow_transferIzinkan pembayar biaya sebagai pengirim dalam instruksi Transfer/TransferWithSeedfalseboolean
allow_assignIzinkan pembayar biaya sebagai otoritas dalam instruksi Assign/AssignWithSeedfalseboolean
allow_create_accountIzinkan pembayar biaya sebagai pembayar pendanaan dalam instruksi CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateIzinkan pembayar biaya sebagai pemilik akun dalam instruksi Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeIzinkan pembayar biaya ditetapkan sebagai otoritas nonce dalam InitializeNonceAccountfalseboolean
nonce.allow_advanceIzinkan pembayar biaya sebagai otoritas dalam AdvanceNonceAccountfalseboolean
nonce.allow_authorizeIzinkan pembayar biaya sebagai otoritas saat ini dalam AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawIzinkan pembayar biaya sebagai otoritas dalam WithdrawNonceAccountfalseboolean

Instruksi SPL Token Program

OpsiDeskripsiDefaultTipe
allow_transferIzinkan pembayar biaya sebagai pemilik dalam instruksi Transfer/TransferCheckedfalseboolean
allow_burnIzinkan pembayar biaya sebagai pemilik dalam instruksi Burn/BurnCheckedfalseboolean
allow_close_accountIzinkan pembayar biaya sebagai pemilik dalam instruksi CloseAccountfalseboolean
allow_approveIzinkan pembayar biaya sebagai pemilik dalam instruksi Approve/ApproveCheckedfalseboolean
allow_revokeIzinkan pembayar biaya sebagai pemilik dalam instruksi Revokefalseboolean
allow_set_authorityIzinkan pembayar biaya sebagai otoritas saat ini dalam instruksi SetAuthorityfalseboolean
allow_mint_toIzinkan pembayar biaya sebagai otoritas mint dalam instruksi MintTo/MintToCheckedfalseboolean
allow_initialize_mintIzinkan pembayar biaya sebagai otoritas mint dalam instruksi InitializeMint/InitializeMint2falseboolean
allow_initialize_accountIzinkan pembayar biaya sebagai pemilik dalam instruksi InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigIzinkan pembayar biaya sebagai penandatangan dalam instruksi InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountIzinkan pembayar biaya sebagai otoritas pembekuan dalam instruksi FreezeAccountfalseboolean
allow_thaw_accountIzinkan pembayar biaya sebagai otoritas pembekuan dalam instruksi ThawAccountfalseboolean

Token-2022 mendukung set instruksi yang sama dengan SPL Token dengan opsi konfigurasi identik (di bawah bagian [validation.fee_payer_policy.token_2022]).

Pertimbangan Keamanan

PERINGATAN KEAMANAN: Untuk alasan keamanan, disarankan untuk mengatur semua ini ke false (default) dan hanya aktifkan sesuai kebutuhan. Ini akan mencegah perilaku yang tidak diinginkan seperti pengguna menguras akun pembayar biaya Anda atau membakar token dari akun pembayar biaya Anda. Ini mencegah:

  • Pengurasan Akun: Pengguna mentransfer SOL atau token dari akun pembayar biaya Anda
  • Pengambilalihan Otoritas: Pengguna mengubah otoritas pada akun yang dimiliki oleh pembayar biaya Anda
  • Pencetakan Tidak Sah: Pengguna mencetak token jika pembayar biaya Anda memiliki otoritas mint
  • Manipulasi Akun: Pengguna membekukan, menutup, atau memodifikasi akun yang dikontrol oleh pembayar biaya Anda

Praktik Terbaik: Mulai dengan semua izin dinonaktifkan dan aktifkan hanya set minimum yang diperlukan untuk kasus penggunaan spesifik Anda.

Konfigurasi Harga (opsional)

Bagian [validation.price] mendefinisikan bagaimana biaya transaksi dihitung. Tiga model penetapan harga tersedia:

  • Penetapan Harga Margin (default) - Tambahkan persentase margin di atas biaya jaringan aktual (margin default adalah 0.0)
  • Penetapan Harga Tetap - Kenakan jumlah tetap dalam token tertentu terlepas dari biaya jaringan
  • Penetapan Harga Gratis - Sponsori semua biaya transaksi (tanpa biaya kepada pengguna)
OpsiDeskripsiDiperlukanTipe
typeModel penetapan harga yang digunakan"margin", "fixed" atau "free"
marginPersentase margin untuk ditambahkan ke biaya jaringan(ketika type adalah "margin")number
amountJumlah tetap yang dikenakan dalam unit dasar token(ketika type adalah "fixed")number
tokenMint token untuk dikenakan biaya(ketika type adalah "fixed")string ter-enkode b58

Penetapan Harga Margin

Tambahkan persentase margin di atas biaya jaringan aktual:

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

Penetapan Harga Tetap

PERINGATAN KEAMANAN: Penetapan harga tetap TIDAK menyertakan arus keluar pembayar biaya dalam jumlah yang dibebankan. Hal ini dapat memungkinkan pengguna menguras akun pembayar biaya Anda jika tidak dikonfigurasi dengan benar.

Bebankan jumlah tetap dalam token tertentu terlepas dari biaya jaringan:

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

Transaksi Gratis

Sponsori semua biaya transaksi (tanpa biaya untuk pengguna):

[validation.price]
type = "free"

Langkah Keamanan Saat Menggunakan Penetapan Harga Tetap/Gratis

  1. Nonaktifkan Semua Operasi Transfer dan Moneter - Cegah pembayar biaya digunakan sebagai sumber dalam transfer:

    [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. Aktifkan Autentikasi - Gunakan autentikasi untuk mencegah penyalahgunaan:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Tetapkan Batas Konservatif - Minimalkan eksposur:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

PERINGATAN: Operasi yang sangat berbahaya saat menggunakan penetapan harga tetap/gratis:

  • allow_mint_to: Dapat memungkinkan pembuatan token tanpa batas jika pembayar biaya memiliki otoritas mint
  • allow_set_authority: Dapat mentransfer kendali akun penting ke penyerang
  • allow_transfer: Memungkinkan pengurasan langsung saldo token pembayar biaya
  • allow_close_account: Mengembalikan rent ke akun yang dikendalikan penyerang

Pemantauan Performa (opsional)

Bagian [metrics] mengonfigurasi pengumpulan dan pemantauan metrik. Bagian ini bersifat opsional dan secara default, metrik dinonaktifkan.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
OpsiDeskripsiWajibTipe
enabledAktifkan pengumpulan metrikboolean
endpointPath endpoint metrik kustomstring
portPort endpoint metriknumber
scrape_intervalFrekuensi scrape Prometheus (detik)number

Pelacakan Saldo Fee Payer

Bagian [metrics.fee_payer_balance] mengonfigurasi pemantauan otomatis saldo SOL fee payer Anda:

OpsiDeskripsiWajibTipe
enabledAktifkan pelacakan saldo fee payer❌ (default: false)boolean
expiry_secondsInterval pelacakan latar belakang dalam detik❌ (default: 30)number

Ketika diaktifkan, Kora secara otomatis melacak saldo SOL fee payer Anda dan mengeksposnya melalui gauge Prometheus fee_payer_balance_lamports. Ini membantu perencanaan kapasitas dan peringatan saldo rendah.

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

→ Panduan Referensi Pemantauan Kora

Contoh Lengkap

Berikut adalah konfigurasi siap produksi dengan praktik keamanan terbaik:

# 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

Validasi Konfigurasi

Kora memvalidasi konfigurasi Anda saat startup. Jika Anda ingin memvalidasi konfigurasi tanpa memulai server, Anda dapat menggunakan perintah validasi konfigurasi:

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

Anda juga dapat menjalankan perintah validate-with-rpc untuk memvalidasi konfigurasi Anda dengan server RPC (pemeriksaan validasi ini sedikit lebih lambat namun melakukan pemeriksaan akun yang lebih menyeluruh)

Memulai Server

Setelah Anda mengonfigurasi file kora.toml, Anda dapat memulai server Kora:

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

Flag --no-load-signer akan menginisialisasi server tanpa memuat signer apa pun. Ini berguna untuk menguji konfigurasi Anda. Untuk memuat signer, Anda perlu mengonfigurasi file signers.toml. Konfigurasi minimum dengan satu signer akan terlihat seperti ini:

[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"

Ini akan memuat satu signer dari variabel lingkungan MY_SIGNER_PRIVATE_KEY. Kemudian Anda dapat memulai server dengan:

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

Untuk informasi lebih lanjut dan konfigurasi penanda tangan tingkat lanjut, lihat Panduan Penanda Tangan.

Praktik Terbaik

  1. Mulai dengan Pembatasan Ketat: Mulailah dengan batasan yang ketat dan perluas secara bertahap
  2. Pantau Penggunaan: Lacak program dan token mana yang benar-benar digunakan
  3. Pembaruan Berkala: Tinjau dan perbarui daftar blokir serta batasan
  4. Uji Perubahan: Validasi perubahan konfigurasi di staging terlebih dahulu
  5. Pengelolaan Versi: Simpan log perubahan dari konfigurasi Anda

Butuh Bantuan?

Is this page helpful?

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung