Cấu hình

Đang sử dụng Kora v2.2.0-beta? Xem Cấu hình Beta để biết các tùy chọn mới: Gói Jito, bảo vệ Lighthouse, reCAPTCHA và giới hạn sử dụng.

Node Kora của bạn sẽ ký các giao dịch cho người dùng, vì vậy việc cấu hình nó để chỉ ký những giao dịch đáp ứng yêu cầu kinh doanh của bạn là rất quan trọng. Kora cung cấp nhiều tùy chọn linh hoạt trong cách bạn cấu hình node, nhưng điều quan trọng là phải hiểu rõ ý nghĩa của cấu hình đó. kora.toml là trung tâm điều khiển cho cấu hình Kora của bạn. Tài liệu này cung cấp tài liệu tham khảo toàn diện để cấu hình node paymaster Kora của bạn thông qua tệp cấu hình kora.toml.

Tổng quan

Tệp kora.toml kiểm soát tất cả các khía cạnh hành vi của node Kora bao gồm:

  • Giới hạn tốc độ và xác thực
  • Khả năng sử dụng phương thức RPC
  • Quy tắc xác thực giao dịch
  • Mô hình định giá phí
  • Chính sách bảo mật
  • Khả năng sử dụng phương thức RPC
  • Mô hình định giá phí
  • Cấu hình địa chỉ thanh toán
  • Giám sát hiệu suất

Tệp cấu hình của bạn nên được đặt trong thư mục triển khai hoặc được chỉ định qua cờ --config khi khởi động máy chủ.

Các phần cấu hình

Tệp kora.toml được tổ chức thành các phần, mỗi phần có bộ tùy chọn riêng. Hướng dẫn này sẽ đi qua từng phần và giải thích các tùy chọn khả dụng:

Các phần tệp kora.toml mẫu:

[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

Chính Sách Cốt Lõi Kora

Phần [kora] cấu hình hành vi cốt lõi của máy chủ:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
Tùy chọnMô tảBắt buộcKiểu
rate_limitGiới hạn tốc độ toàn cục (yêu cầu mỗi giây) trên tất cả các clientnumber
payment_addressĐịa chỉ thanh toán tùy chọn để nhận token thanh toán (mặc định là địa chỉ người ký nếu không được chỉ định)chuỗi mã hóa b58

Xác Thực Kora

Phần [kora.auth] cấu hình xác thực cho máy chủ Kora:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
Tùy chọnMô tảBắt buộcKiểu
api_keyKhóa API cho xác thực đơn giảnstring
hmac_secretMật khẩu HMAC cho xác thực dựa trên chữ ký (tối thiểu 32 ký tự)string
max_timestamp_ageTuổi tối đa của dấu thời gian HMAC tính bằng giây❌ (mặc định: 300)number

Lưu ý: api_keyhmac_secret thiết lập chính sách xác thực toàn cục cho tất cả các client. Để biết chi tiết về thiết lập xác thực, xem Hướng Dẫn Xác Thực.

Bộ Nhớ Đệm Kora (tùy chọn)

Phần [kora.cache] cấu hình bộ nhớ đệm dựa trên Redis cho các lệnh gọi RPC của Solana. Điều này có thể cải thiện đáng kể hiệu suất bằng cách giảm các truy vấn dữ liệu tài khoản dư thừa:

[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)
Tùy chọnMô tảBắt buộcKiểu
enabledBật bộ nhớ đệm Redis cho các lệnh gọi RPC❌ (mặc định: false)boolean
urlURL kết nối Redis (bắt buộc khi được bật)string
default_ttlTTL mặc định cho các mục được lưu trong bộ nhớ đệm tính bằng giây❌ (mặc định: 300)number
account_ttlTTL cho bộ nhớ đệm dữ liệu tài khoản tính bằng giây❌ (mặc định: 60)number

Lưu ý: Khi bật bộ nhớ đệm, một instance Redis phải khả dụng tại URL được chỉ định. Bộ nhớ đệm sẽ tự động chuyển sang các lệnh gọi RPC trực tiếp nếu Redis không khả dụng.

Giới Hạn Sử Dụng Kora (tùy chọn)

Phần [kora.usage_limit] cấu hình giới hạn giao dịch theo từng ví để ngăn chặn lạm dụng và đảm bảo sử dụng công bằng cho tất cả người dùng. Tính năng này cũng có thể được sử dụng để tạo các chương trình thưởng nhằm trợ cấp phí giao dịch của người dùng đến một mức giới hạn nhất định.

Quan trọng: Hiện tại, hình thức giới hạn sử dụng duy nhất được Kora hỗ trợ là giới hạn vĩnh viễn. Khi một ví đạt đến giới hạn giao dịch, nó không thể được đặt lại và người dùng sẽ không thể gửi thêm bất kỳ giao dịch nào bằng cùng ví đó. Giới hạn này tồn tại cho đến khi được xóa thủ công khỏi Redis hoặc dữ liệu Redis được đặt lại.

Lưu ý: Tính năng này yêu cầu Redis khi được bật trên nhiều 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
Tùy chọnMô tảBắt buộcKiểu
enabledBật giới hạn giao dịch theo từng ví❌ (mặc định: false)boolean
cache_urlURL kết nối Redis để theo dõi sử dụng chungstring
max_transactionsSố giao dịch tối đa mỗi ví (0 = không giới hạn)❌ (mặc định: 100)number
fallback_if_unavailableCho phép giao dịch nếu Redis không khả dụng❌ (mặc định: true)boolean

Lưu ý: Giới hạn sử dụng được theo dõi theo địa chỉ ví với tính năng hết hạn tự động dựa trên TTL. Khi fallback_if_unavailable được đặt là true, hệ thống cho phép các giao dịch tiếp tục nếu Redis tạm thời không khả dụng, ngăn chặn gián đoạn dịch vụ. Đặt max_transactions thành 0 sẽ cho phép giao dịch không giới hạn.

Các Phương Thức Kora Được Bật (tùy chọn)

Phần [kora.enabled_methods] kiểm soát các phương thức RPC nào được bật. Phần này là tùy chọn và theo mặc định, tất cả các phương thức đều được bật. Mỗi phương thức có thể được bật hoặc tắt bằng cách đặt giá trị thành true hoặc 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
Tùy chọnMô tả Phương thứcBắt buộcKiểu
livenessĐiểm kiểm tra tình trạng hoạt độngboolean
estimate_transaction_feeƯớc tính phí cho một giao dịchboolean
get_supported_tokensLiệt kê các token được chấp nhậnboolean
sign_transactionKý một giao dịch mà không gửi nó đến mạngboolean
sign_and_send_transactionKý một giao dịch và gửi nó đến mạngboolean
transfer_transactionXử lý chuyển tokenboolean
get_blockhashLấy blockhash gần đâyboolean
get_configTrả về cấu hình máy chủ Koraboolean

Lưu ý: nếu phần này được bao gồm trong tệp kora.toml của bạn, tất cả các phương thức phải được đặt rõ ràng thành true hoặc false.

Chính Sách Xác Thực

Phần [validation] định nghĩa các quy tắc bảo mật liên quan đến Solana và giới hạn giao dịch:

[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",
]
Tùy chọnMô tảBắt buộcKiểu
max_allowed_lamportsĐặt số lamport tối đa cho mỗi giao dịch giúp giới hạn mức độ rủi ro của node Kora đối với một giao dịch duy nhất.number
max_signaturesPhí cơ bản của Solana phụ thuộc vào số lượng chữ ký trong giao dịch, do đó việc đặt số lượng chữ ký tối đa cho mỗi giao dịch là cách tốt để ngăn người dùng chi tiêu quá nhiều SOL cho một giao dịch duy nhất.number
price_sourceOracle cho dữ liệu giá token. Lưu ý: Khi được đặt thành "Jupiter", biến môi trường JUPITER_API_KEYbắt buộc. Máy chủ sẽ không khởi động được nếu thiếu biến này."Jupiter" hoặc "Mock"
allow_durable_transactionsCho phép giao dịch nonce bền vững. Xem Các Cân nhắc về Bảo mật bên dưới.❌ (mặc định: false)boolean
allowed_programsCác chương trình Solana mà giao dịch có thể tương tác vớiMảng chuỗi mã hóa b58
allowed_tokensCác token mint có thể được sử dụng trong giao dịchMảng chuỗi mã hóa b58
allowed_spl_paid_tokensCác token SPL được chấp nhận làm thanh toán phí giao dịchMảng chuỗi mã hóa b58
disallowed_accountsCác tài khoản bị chặn rõ ràng khỏi giao dịchMảng chuỗi mã hóa b58

Lưu ý: Các mảng rỗng được phép, nhưng bạn cần chỉ định ít nhất một allowed_programs, allowed_tokens, allowed_spl_paid_tokens được đưa vào danh sách cho phép để nút Kora có thể xử lý giao dịch. Bạn cần chỉ định System Program hoặc Token Program để nút Kora có thể xử lý các giao dịch chuyển tiền. Để kích hoạt các loại lệnh phổ biến (ví dụ: Compute Budget, Address Lookup Table), bạn cần chỉ định Compute Budget Program hoặc Address Lookup Table Program, v.v.

Bảo Mật Giao Dịch Bền Vững

CẢNH BÁO BẢO MẬT: Giao dịch nonce bền vững cho phép các giao dịch đã ký được giữ lại vô thời hạn và gửi sau đó. Điều này có thể được sử dụng như một vectơ tấn công kinh tế, trong đó ai đó có thể lấy được một giao dịch đã ký và chờ đợi để gửi nó cho đến khi điều kiện thị trường có lợi cho họ (ví dụ: khi giá trị của SOL giảm hoặc giá trị của token thanh toán tăng).

Theo mặc định, allow_durable_transactions được đặt thành false để chặn tất cả các giao dịch nonce bền vững. Chỉ kích hoạt tùy chọn này nếu ứng dụng của bạn đặc biệt yêu cầu giao dịch bền vững và bạn hiểu rõ các rủi ro.

Nếu bạn phải kích hoạt giao dịch bền vững, hãy cân nhắc:

  • Sử dụng xác thực để hạn chế quyền truy cập API
  • Triển khai xác thực ngoài chuỗi bổ sung
  • Giám sát các mẫu giao dịch bất thường
  • Giám sát và giới hạn số dư tài khoản người ký
  • Luân chuyển khóa người ký thường xuyên

Tìm hiểu thêm về giao dịch nonce bền vững trong Tài liệu Solana.

Chặn Tiện Ích Mở Rộng Token-2022

Phần [validation.token2022] cho phép bạn chặn các tiện ích mở rộng Token-2022 cụ thể để tăng cường bảo mật. Tất cả các tiện ích mở rộng đều được kích hoạt theo mặc định. Bạn có thể chặn các tiện ích mở rộng cụ thể bằng cách thêm chúng vào mảng blocked_mint_extensions hoặc 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
]

Tiện ích mở rộng Mint khả dụng

Tên tiện ích mở rộngMô tả
confidential_transfer_mintCấu hình chuyển giao bí mật cho mint
confidential_mint_burnCấu hình mint và burn bí mật
transfer_fee_configCấu hình phí chuyển giao
mint_close_authorityQuyền được phép đóng mint
interest_bearing_configCấu hình token tính lãi suất
non_transferableKhiến token không thể chuyển giao
permanent_delegateĐại biểu vĩnh viễn cho mint
transfer_hookChương trình hook chuyển giao tùy chỉnh
pausableCấu hình token có thể tạm dừng

Tiện ích mở rộng tài khoản khả dụng

Tên tiện ích mở rộngMô tả
confidential_transfer_accountTrạng thái chuyển giao bí mật cho tài khoản
non_transferable_accountTài khoản token không thể chuyển giao
transfer_hook_accountTrạng thái hook chuyển giao cho tài khoản
pausable_accountTrạng thái tài khoản token có thể tạm dừng
memo_transferYêu cầu ghi chú cho giao dịch chuyển giao
cpi_guardNgăn chặn một số lệnh gọi CPI
immutable_ownerChủ sở hữu tài khoản không thể thay đổi
default_account_stateTrạng thái mặc định cho tài khoản mới

transfer_hook

Cân nhắc về bảo mật

Tiện ích mở rộng PermanentDelegate - Token có tiện ích mở rộng này cho phép đại biểu chuyển giao/burn token bất cứ lúc nào mà không cần sự chấp thuận của chủ sở hữu. Điều này tạo ra rủi ro đáng kể cho người vận hành nút Kora vì tiền thanh toán có thể bị tịch thu sau khi thanh toán.

  • Cân nhắc thêm "permanent_delegate" vào blocked_mint_extensions trong [validation.token2022] trừ khi thực sự cần thiết cho trường hợp sử dụng của bạn.
  • Tránh sử dụng token thanh toán có tiện ích mở rộng permanent_delegate.

Chính sách Người thanh toán phí

Phần [validation.fee_payer_policy] cung cấp khả năng kiểm soát chi tiết về những hành động mà ví người thanh toán phí của node Kora có thể thực hiện. Chính sách được tổ chức theo loại chương trình (System Program, Token Program, Token-2022) và bao gồm tất cả các loại lệnh khác nhau. Điều này ngăn chặn hành vi không mong muốn từ các giao dịch của người dùng sử dụng node Kora của bạn làm người ký.

Ví dụ, nếu spl_token.allow_transfer được đặt thành false, node Kora sẽ không ký các giao dịch bao gồm chuyển token SPL mà người thanh toán phí của node Kora là quyền chuyển khoản.

[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

Lệnh System Program

Tùy chọnMô tảMặc địnhLoại
allow_transferCho phép người thanh toán phí làm người gửi trong lệnh Transfer/TransferWithSeedfalseboolean
allow_assignCho phép người thanh toán phí làm quyền hạn trong lệnh Assign/AssignWithSeedfalseboolean
allow_create_accountCho phép người thanh toán phí làm nguồn tài trợ trong lệnh CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateCho phép người thanh toán phí làm chủ tài khoản trong lệnh Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeCho phép người thanh toán phí được đặt làm quyền hạn nonce trong InitializeNonceAccountfalseboolean
nonce.allow_advanceCho phép người thanh toán phí làm quyền hạn trong AdvanceNonceAccountfalseboolean
nonce.allow_authorizeCho phép người thanh toán phí làm quyền hạn hiện tại trong AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawCho phép người thanh toán phí làm quyền hạn trong WithdrawNonceAccountfalseboolean

Lệnh Token Program

Tùy chọnMô tảMặc địnhLoại
allow_transferCho phép người thanh toán phí làm chủ sở hữu trong lệnh Transfer/TransferCheckedfalseboolean
allow_burnCho phép người thanh toán phí làm chủ sở hữu trong lệnh Burn/BurnCheckedfalseboolean
allow_close_accountCho phép người thanh toán phí làm chủ sở hữu trong lệnh CloseAccountfalseboolean
allow_approveCho phép người thanh toán phí làm chủ sở hữu trong lệnh Approve/ApproveCheckedfalseboolean
allow_revokeCho phép người thanh toán phí làm chủ sở hữu trong lệnh Revokefalseboolean
allow_set_authorityCho phép người thanh toán phí làm quyền hạn hiện tại trong lệnh SetAuthorityfalseboolean
allow_mint_toCho phép người thanh toán phí làm quyền hạn mint trong lệnh MintTo/MintToCheckedfalseboolean
allow_initialize_mintCho phép người thanh toán phí làm quyền hạn mint trong lệnh InitializeMint/InitializeMint2falseboolean
allow_initialize_accountCho phép người thanh toán phí làm chủ sở hữu trong lệnh InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigCho phép người thanh toán phí làm người ký trong lệnh InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountCho phép người thanh toán phí làm quyền hạn đóng băng trong lệnh FreezeAccountfalseboolean
allow_thaw_accountCho phép người thanh toán phí làm quyền hạn đóng băng trong lệnh ThawAccountfalseboolean

Token-2022 hỗ trợ cùng tập hợp lệnh với SPL Token với các tùy chọn cấu hình giống hệt nhau (trong phần [validation.fee_payer_policy.token_2022]).

Cân nhắc về Bảo mật

CẢNH BÁO BẢO MẬT: Vì lý do bảo mật, khuyến nghị đặt tất cả các tùy chọn này thành false (mặc định) và chỉ bật khi cần thiết. Điều này sẽ ngăn chặn các hành vi không mong muốn như người dùng rút cạn tài khoản người trả phí của bạn hoặc đốt token từ tài khoản người trả phí. Biện pháp này ngăn chặn:

  • Rút cạn Tài khoản: Người dùng chuyển SOL hoặc token từ tài khoản người trả phí của bạn
  • Chiếm quyền Quản trị: Người dùng thay đổi quyền quản trị trên các tài khoản thuộc sở hữu của người trả phí
  • Đúc token Trái phép: Người dùng đúc token nếu người trả phí của bạn có quyền đúc
  • Can thiệp Tài khoản: Người dùng đóng băng, đóng hoặc sửa đổi các tài khoản do người trả phí của bạn kiểm soát

Thực hành Tốt nhất: Bắt đầu với tất cả quyền bị vô hiệu hóa và chỉ bật tập quyền tối thiểu cần thiết cho trường hợp sử dụng cụ thể của bạn.

Cấu hình Giá (tùy chọn)

Phần [validation.price] xác định cách tính phí giao dịch. Có ba mô hình định giá:

  • Định giá Lãi suất (mặc định) - Thêm tỷ lệ phần trăm lãi suất vào phí mạng thực tế (lãi suất mặc định là 0.0)
  • Định giá Cố định - Tính phí cố định bằng một token cụ thể bất kể phí mạng
  • Định giá Miễn phí - Tài trợ toàn bộ phí giao dịch (không tính phí người dùng)
Tùy chọnMô tảBắt buộcKiểu
typeMô hình định giá sử dụng"margin", "fixed" hoặc "free"
marginTỷ lệ phần trăm lãi suất thêm vào phí mạng(khi type là "margin")number
amountSố tiền cố định tính theo đơn vị cơ bản của token(khi type là "fixed")number
tokenToken mint để tính phí(khi type là "fixed")chuỗi mã hóa b58

Định giá theo biên lợi nhuận

Thêm tỷ lệ phần trăm biên lợi nhuận lên trên phí mạng thực tế:

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

Định giá cố định

CẢNH BÁO BẢO MẬT: Định giá cố định KHÔNG bao gồm chi phí đầu ra của người trả phí trong số tiền tính phí. Điều này có thể cho phép người dùng rút cạn tài khoản người trả phí của bạn nếu không được cấu hình đúng cách.

Tính phí một số tiền cố định bằng một token cụ thể bất kể phí mạng:

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

Giao dịch miễn phí

Tài trợ toàn bộ phí giao dịch (không tính phí người dùng):

[validation.price]
type = "free"

Các biện pháp bảo mật khi sử dụng định giá cố định/miễn phí

  1. Vô hiệu hóa tất cả các hoạt động chuyển khoản và tiền tệ - Ngăn người trả phí bị sử dụng làm nguồn trong các giao dịch chuyển khoản:

    [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. Bật xác thực - Sử dụng xác thực để ngăn chặn lạm dụng:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Đặt giới hạn thận trọng - Giảm thiểu rủi ro:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

CẢNH BÁO: Các hoạt động đặc biệt nguy hiểm khi sử dụng định giá cố định/miễn phí:

  • allow_mint_to: Có thể cho phép tạo token không giới hạn nếu người trả phí có quyền mint
  • allow_set_authority: Có thể chuyển quyền kiểm soát các tài khoản quan trọng cho kẻ tấn công
  • allow_transfer: Cho phép rút cạn trực tiếp số dư token của người trả phí
  • allow_close_account: Hoàn trả rent cho các tài khoản do kẻ tấn công kiểm soát

Giám sát hiệu suất (tùy chọn)

Phần [metrics] cấu hình thu thập số liệu và giám sát. Phần này là tùy chọn và theo mặc định, số liệu bị vô hiệu hóa.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
Tùy chọnMô tảBắt buộcKiểu
enabledBật thu thập số liệuboolean
endpointĐường dẫn điểm cuối số liệu tùy chỉnhstring
portCổng điểm cuối số liệunumber
scrape_intervalTần suất thu thập Prometheus (giây)number

Theo Dõi Số Dư Tài Khoản Trả Phí

Phần [metrics.fee_payer_balance] cấu hình giám sát tự động số dư SOL của tài khoản trả phí:

Tùy chọnMô tảBắt buộcKiểu
enabledBật theo dõi số dư tài khoản trả phí❌ (mặc định: false)boolean
expiry_secondsKhoảng thời gian theo dõi nền tính bằng giây❌ (mặc định: 30)number

Khi được bật, Kora tự động theo dõi số dư SOL của tài khoản trả phí và hiển thị thông qua chỉ số Prometheus fee_payer_balance_lamports. Điều này hỗ trợ lập kế hoạch năng lực và cảnh báo khi số dư thấp.

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

→ Hướng Dẫn Tham Khảo Giám Sát Kora

Ví Dụ Đầy Đủ

Đây là cấu hình sẵn sàng cho môi trường production với các phương pháp bảo mật tốt nhất:

# 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

Xác Thực Cấu Hình

Kora xác thực cấu hình của bạn khi khởi động. Nếu bạn muốn xác thực cấu hình mà không khởi động máy chủ, bạn có thể sử dụng lệnh xác thực cấu hình:

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

Bạn cũng có thể chạy lệnh validate-with-rpc để xác thực cấu hình với máy chủ RPC (quá trình xác thực này chậm hơn một chút nhưng thực hiện kiểm tra tài khoản kỹ lưỡng hơn)

Khởi Động Máy Chủ

Sau khi đã cấu hình tệp kora.toml, bạn có thể khởi động máy chủ Kora:

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

Cờ --no-load-signer sẽ khởi tạo máy chủ mà không tải bất kỳ trình ký nào. Điều này hữu ích để kiểm tra cấu hình của bạn. Để tải trình ký, bạn cần cấu hình tệp signers.toml. Cấu hình tối thiểu với một trình ký sẽ trông như sau:

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

Điều này sẽ tải một trình ký từ biến môi trường MY_SIGNER_PRIVATE_KEY. Sau đó, bạn có thể khởi động máy chủ bằng:

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

Để biết thêm thông tin và cấu hình người ký nâng cao, xem Hướng dẫn Người ký.

Thực hành Tốt nhất

  1. Bắt đầu Hạn chế: Bắt đầu với giới hạn chặt chẽ và dần dần mở rộng
  2. Giám sát Sử dụng: Theo dõi các chương trình và token thực sự được sử dụng
  3. Cập nhật Định kỳ: Xem xét và cập nhật danh sách chặn cũng như giới hạn
  4. Kiểm tra Thay đổi: Xác thực các thay đổi cấu hình trong môi trường staging trước
  5. Quản lý Phiên bản: Giữ nhật ký thay đổi cho các thay đổi cấu hình của bạn

Cần Trợ giúp?

Is this page helpful?

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối