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:
- Kebijakan Inti Kora - Pengaturan server inti
- Autentikasi Kora - Pengaturan autentikasi
- Caching Kora - Redis caching untuk panggilan RPC
- Batas Penggunaan Kora - Pembatasan transaksi per-wallet
- Metode yang Diaktifkan Kora - Metode RPC Kora yang diaktifkan
- Kebijakan Validasi - Validasi transaksi dan keamanan
- Pemblokiran Ekstensi Token-2022 - Blokir ekstensi Token-2022 berisiko
- Kebijakan Pembayar Biaya - Pembatasan pada wallet pembayar biaya
- Konfigurasi Harga - Model penetapan harga biaya transaksi
- Pemantauan Performa - Pengumpulan metrik dan pemantauan
- Contoh Lengkap - Konfigurasi lengkap siap produksi
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 = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
rate_limit | Batas laju global (permintaan per detik) di semua klien | ✅ | number |
payment_address | Alamat 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
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
api_key | Kunci API untuk autentikasi sederhana | ❌ | string |
hmac_secret | Rahasia HMAC untuk autentikasi berbasis tanda tangan (min 32 karakter) | ❌ | string |
max_timestamp_age | Usia maksimum timestamp HMAC dalam detik | ❌ (default: 300) | number |
Catatan:
api_keydanhmac_secretmenetapkan 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 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)
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
enabled | Aktifkan caching Redis untuk panggilan RPC | ❌ (default: false) | boolean |
url | URL koneksi Redis (wajib saat diaktifkan) | ✅ | string |
default_ttl | TTL default untuk entri cache dalam detik | ❌ (default: 300) | number |
account_ttl | TTL 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 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
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
enabled | Aktifkan pembatasan transaksi per-wallet | ❌ (default: false) | boolean |
cache_url | URL koneksi Redis untuk pelacakan penggunaan bersama | ❌ | string |
max_transactions | Maksimum transaksi per wallet (0 = tidak terbatas) | ❌ (default: 100) | number |
fallback_if_unavailable | Izinkan transaksi jika Redis tidak tersedia | ❌ (default: true) | boolean |
Catatan: Batas penggunaan dilacak per alamat wallet dengan otomatis kedaluwarsa berbasis TTL. Ketika
fallback_if_unavailablebernilai true, sistem mengizinkan transaksi untuk dilanjutkan jika Redis sementara tidak tersedia, mencegah gangguan layanan. Mengaturmax_transactionsmenjadi 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 = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| Opsi | Deskripsi Metode | Wajib | Tipe |
|---|---|---|---|
liveness | Endpoint pemeriksaan kesehatan | ✅ | boolean |
estimate_transaction_fee | Estimasi biaya untuk transaksi | ✅ | boolean |
get_supported_tokens | Daftar token yang diterima | ✅ | boolean |
sign_transaction | Menandatangani transaksi tanpa mengirimnya ke jaringan | ✅ | boolean |
sign_and_send_transaction | Menandatangani transaksi dan mengirimnya ke jaringan | ✅ | boolean |
transfer_transaction | Menangani transfer token | ✅ | boolean |
get_blockhash | Mendapatkan blockhash terbaru | ✅ | boolean |
get_config | Mengembalikan konfigurasi server Kora | ✅ | boolean |
Catatan: jika bagian ini disertakan dalam file
kora.tomlAnda, semua metode harus secara eksplisit disetel ketrueataufalse.
Kebijakan Validasi
Bagian [validation] mendefinisikan aturan keamanan terkait Solana dan batas
transaksi:
[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",]
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
max_allowed_lamports | Menetapkan jumlah maksimum lamport per transaksi membatasi eksposur node Kora terhadap satu transaksi. | ✅ | number |
max_signatures | Biaya 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_source | Oracle 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_transactions | Izinkan transaksi nonce yang tahan lama. Lihat Pertimbangan Keamanan di bawah ini. | ❌ (default: false) | boolean |
allowed_programs | Program Solana yang dapat berinteraksi dengan transaksi | ✅ | Array of b58-encoded string |
allowed_tokens | Token mint yang dapat digunakan dalam transaksi | ✅ | Array of b58-encoded string |
allowed_spl_paid_tokens | Token SPL yang diterima sebagai pembayaran untuk biaya transaksi | ✅ | Array of b58-encoded string |
disallowed_accounts | Akun yang secara eksplisit diblokir dari transaksi | ✅ | Array of b58-encoded string |
Catatan: Array kosong diperbolehkan, tetapi Anda perlu menentukan setidaknya satu
allowed_programs,allowed_tokens,allowed_spl_paid_tokensyang 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 Ekstensi | Deskripsi |
|---|---|
confidential_transfer_mint | Konfigurasi transfer rahasia untuk mint |
confidential_mint_burn | Konfigurasi mint dan burn rahasia |
transfer_fee_config | Konfigurasi biaya transfer |
mint_close_authority | Otoritas yang diizinkan menutup mint |
interest_bearing_config | Konfigurasi token dengan suku bunga |
non_transferable | Membuat token tidak dapat ditransfer |
permanent_delegate | Delegasi permanen untuk mint |
transfer_hook | Program kustom untuk hook transfer |
pausable | Konfigurasi token yang dapat dijeda |
Ekstensi Akun yang Tersedia
| Nama Ekstensi | Deskripsi |
|---|---|
confidential_transfer_account | Status transfer rahasia untuk akun |
non_transferable_account | Akun token tidak dapat ditransfer |
transfer_hook_account | Status hook transfer untuk akun |
pausable_account | Status akun token yang dapat dijeda |
memo_transfer | Memerlukan memo untuk transfer |
cpi_guard | Mencegah panggilan CPI tertentu |
immutable_owner | Pemilik akun tidak dapat diubah |
default_account_state | Status 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_extensionsdi [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/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
Instruksi System Program
| Opsi | Deskripsi | Default | Tipe |
|---|---|---|---|
allow_transfer | Izinkan pembayar biaya sebagai pengirim dalam instruksi Transfer/TransferWithSeed | false | boolean |
allow_assign | Izinkan pembayar biaya sebagai otoritas dalam instruksi Assign/AssignWithSeed | false | boolean |
allow_create_account | Izinkan pembayar biaya sebagai pembayar pendanaan dalam instruksi CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | Izinkan pembayar biaya sebagai pemilik akun dalam instruksi Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | Izinkan pembayar biaya ditetapkan sebagai otoritas nonce dalam InitializeNonceAccount | false | boolean |
nonce.allow_advance | Izinkan pembayar biaya sebagai otoritas dalam AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Izinkan pembayar biaya sebagai otoritas saat ini dalam AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Izinkan pembayar biaya sebagai otoritas dalam WithdrawNonceAccount | false | boolean |
Instruksi SPL Token Program
| Opsi | Deskripsi | Default | Tipe |
|---|---|---|---|
allow_transfer | Izinkan pembayar biaya sebagai pemilik dalam instruksi Transfer/TransferChecked | false | boolean |
allow_burn | Izinkan pembayar biaya sebagai pemilik dalam instruksi Burn/BurnChecked | false | boolean |
allow_close_account | Izinkan pembayar biaya sebagai pemilik dalam instruksi CloseAccount | false | boolean |
allow_approve | Izinkan pembayar biaya sebagai pemilik dalam instruksi Approve/ApproveChecked | false | boolean |
allow_revoke | Izinkan pembayar biaya sebagai pemilik dalam instruksi Revoke | false | boolean |
allow_set_authority | Izinkan pembayar biaya sebagai otoritas saat ini dalam instruksi SetAuthority | false | boolean |
allow_mint_to | Izinkan pembayar biaya sebagai otoritas mint dalam instruksi MintTo/MintToChecked | false | boolean |
allow_initialize_mint | Izinkan pembayar biaya sebagai otoritas mint dalam instruksi InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | Izinkan pembayar biaya sebagai pemilik dalam instruksi InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | Izinkan pembayar biaya sebagai penandatangan dalam instruksi InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | Izinkan pembayar biaya sebagai otoritas pembekuan dalam instruksi FreezeAccount | false | boolean |
allow_thaw_account | Izinkan pembayar biaya sebagai otoritas pembekuan dalam instruksi ThawAccount | false | boolean |
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)
| Opsi | Deskripsi | Diperlukan | Tipe |
|---|---|---|---|
type | Model penetapan harga yang digunakan | ✅ | "margin", "fixed" atau "free" |
margin | Persentase margin untuk ditambahkan ke biaya jaringan | (ketika type adalah "margin") | number |
amount | Jumlah tetap yang dikenakan dalam unit dasar token | (ketika type adalah "fixed") | number |
token | Mint 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 unitstoken = "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
-
Nonaktifkan Semua Operasi Transfer dan Moneter - Cegah pembayar biaya digunakan sebagai sumber dalam transfer:
[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 -
Aktifkan Autentikasi - Gunakan autentikasi untuk mencegah penyalahgunaan:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
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 mintallow_set_authority: Dapat mentransfer kendali akun penting ke penyerangallow_transfer: Memungkinkan pengurasan langsung saldo token pembayar biayaallow_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 = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
enabled | Aktifkan pengumpulan metrik | ✅ | boolean |
endpoint | Path endpoint metrik kustom | ✅ | string |
port | Port endpoint metrik | ✅ | number |
scrape_interval | Frekuensi scrape Prometheus (detik) | ✅ | number |
Pelacakan Saldo Fee Payer
Bagian [metrics.fee_payer_balance] mengonfigurasi pemantauan otomatis saldo
SOL fee payer Anda:
| Opsi | Deskripsi | Wajib | Tipe |
|---|---|---|---|
enabled | Aktifkan pelacakan saldo fee payer | ❌ (default: false) | boolean |
expiry_seconds | Interval 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 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
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, weightedstrategy = "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
- Mulai dengan Pembatasan Ketat: Mulailah dengan batasan yang ketat dan perluas secara bertahap
- Pantau Penggunaan: Lacak program dan token mana yang benar-benar digunakan
- Pembaruan Berkala: Tinjau dan perbarui daftar blokir serta batasan
- Uji Perubahan: Validasi perubahan konfigurasi di staging terlebih dahulu
- Pengelolaan Versi: Simpan log perubahan dari konfigurasi Anda
Butuh Bantuan?
- Lihat Panduan Autentikasi untuk pengaturan autentikasi
- Lihat Panduan Penanda Tangan untuk konfigurasi penanda tangan
- Lihat Panduan Operator untuk informasi lebih lanjut tentang cara menjalankan node Kora
- Kunjungi Solana Stack Exchange dengan tag
kora - Laporkan masalah di GitHub
Is this page helpful?