Đ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:
- Chính sách cốt lõi Kora - Cài đặt máy chủ cốt lõi
- Xác thực Kora - Cài đặt xác thực
- Bộ nhớ đệm Kora - Bộ nhớ đệm Redis cho các lệnh gọi RPC
- Giới hạn sử dụng Kora - Giới hạn giao dịch theo ví
- Phương thức được bật Kora - Các phương thức RPC Kora cần bật
- Chính sách xác thực - Xác thực giao dịch và bảo mật
- Chặn tiện ích mở rộng Token-2022 - Chặn các tiện ích mở rộng Token-2022 có rủi ro
- Chính sách người trả phí - Hạn chế đối với ví người trả phí
- Cấu hình giá - Mô hình định giá phí giao dịch
- Giám sát hiệu suất - Thu thập số liệu và giám sát
- Ví dụ hoàn chỉnh - Cấu hình sẵn sàng cho sản xuất đầy đủ
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 = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Tùy chọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
rate_limit | Giới hạn tốc độ toàn cục (yêu cầu mỗi giây) trên tất cả các client | ✅ | number |
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ọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
api_key | Khóa API cho xác thực đơn giản | ❌ | string |
hmac_secret | Mậ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_age | Tuổ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_keyvàhmac_secretthiế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 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)
| Tùy chọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
enabled | Bật bộ nhớ đệm Redis cho các lệnh gọi RPC | ❌ (mặc định: false) | boolean |
url | URL kết nối Redis (bắt buộc khi được bật) | ✅ | string |
default_ttl | TTL 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_ttl | TTL 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 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
| Tùy chọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
enabled | Bật giới hạn giao dịch theo từng ví | ❌ (mặc định: false) | boolean |
cache_url | URL kết nối Redis để theo dõi sử dụng chung | ❌ | string |
max_transactions | Số giao dịch tối đa mỗi ví (0 = không giới hạn) | ❌ (mặc định: 100) | number |
fallback_if_unavailable | Cho 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ụ. Đặtmax_transactionsthà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 = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| Tùy chọn | Mô tả Phương thức | Bắt buộc | Kiểu |
|---|---|---|---|
liveness | Điểm kiểm tra tình trạng hoạt động | ✅ | boolean |
estimate_transaction_fee | Ước tính phí cho một giao dịch | ✅ | boolean |
get_supported_tokens | Liệt kê các token được chấp nhận | ✅ | boolean |
sign_transaction | Ký một giao dịch mà không gửi nó đến mạng | ✅ | boolean |
sign_and_send_transaction | Ký một giao dịch và gửi nó đến mạng | ✅ | boolean |
transfer_transaction | Xử lý chuyển token | ✅ | boolean |
get_blockhash | Lấy blockhash gần đây | ✅ | boolean |
get_config | Trả về cấu hình máy chủ Kora | ✅ | boolean |
Lưu ý: nếu phần này được bao gồm trong tệp
kora.tomlcủa bạn, tất cả các phương thức phải được đặt rõ ràng thànhtruehoặcfalse.
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 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",]
| Tùy chọn | Mô tả | Bắt buộc | Kiể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_signatures | Phí 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_source | Oracle cho dữ liệu giá token. Lưu ý: Khi được đặt thành "Jupiter", biến môi trường JUPITER_API_KEY là bắ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_transactions | Cho 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_programs | Các chương trình Solana mà giao dịch có thể tương tác với | ✅ | Mảng chuỗi mã hóa b58 |
allowed_tokens | Các token mint có thể được sử dụng trong giao dịch | ✅ | Mảng chuỗi mã hóa b58 |
allowed_spl_paid_tokens | Các token SPL được chấp nhận làm thanh toán phí giao dịch | ✅ | Mảng chuỗi mã hóa b58 |
disallowed_accounts | Các tài khoản bị chặn rõ ràng khỏi giao dịch | ✅ | Mả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ộng | Mô tả |
|---|---|
confidential_transfer_mint | Cấu hình chuyển giao bí mật cho mint |
confidential_mint_burn | Cấu hình mint và burn bí mật |
transfer_fee_config | Cấu hình phí chuyển giao |
mint_close_authority | Quyền được phép đóng mint |
interest_bearing_config | Cấu hình token tính lãi suất |
non_transferable | Khiến token không thể chuyển giao |
permanent_delegate | Đại biểu vĩnh viễn cho mint |
transfer_hook | Chương trình hook chuyển giao tùy chỉnh |
pausable | Cấ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ộng | Mô tả |
|---|---|
confidential_transfer_account | Trạng thái chuyển giao bí mật cho tài khoản |
non_transferable_account | Tài khoản token không thể chuyển giao |
transfer_hook_account | Trạng thái hook chuyển giao cho tài khoản |
pausable_account | Trạng thái tài khoản token có thể tạm dừng |
memo_transfer | Yêu cầu ghi chú cho giao dịch chuyển giao |
cpi_guard | Ngăn chặn một số lệnh gọi CPI |
immutable_owner | Chủ sở hữu tài khoản không thể thay đổi |
default_account_state | Trạ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_extensionstrong [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/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
Lệnh System Program
| Tùy chọn | Mô tả | Mặc định | Loại |
|---|---|---|---|
allow_transfer | Cho phép người thanh toán phí làm người gửi trong lệnh Transfer/TransferWithSeed | false | boolean |
allow_assign | Cho phép người thanh toán phí làm quyền hạn trong lệnh Assign/AssignWithSeed | false | boolean |
allow_create_account | Cho phép người thanh toán phí làm nguồn tài trợ trong lệnh CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | Cho phép người thanh toán phí làm chủ tài khoản trong lệnh Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | Cho phép người thanh toán phí được đặt làm quyền hạn nonce trong InitializeNonceAccount | false | boolean |
nonce.allow_advance | Cho phép người thanh toán phí làm quyền hạn trong AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Cho phép người thanh toán phí làm quyền hạn hiện tại trong AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Cho phép người thanh toán phí làm quyền hạn trong WithdrawNonceAccount | false | boolean |
Lệnh Token Program
| Tùy chọn | Mô tả | Mặc định | Loại |
|---|---|---|---|
allow_transfer | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh Transfer/TransferChecked | false | boolean |
allow_burn | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh Burn/BurnChecked | false | boolean |
allow_close_account | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh CloseAccount | false | boolean |
allow_approve | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh Approve/ApproveChecked | false | boolean |
allow_revoke | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh Revoke | false | boolean |
allow_set_authority | Cho phép người thanh toán phí làm quyền hạn hiện tại trong lệnh SetAuthority | false | boolean |
allow_mint_to | Cho phép người thanh toán phí làm quyền hạn mint trong lệnh MintTo/MintToChecked | false | boolean |
allow_initialize_mint | Cho phép người thanh toán phí làm quyền hạn mint trong lệnh InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | Cho phép người thanh toán phí làm chủ sở hữu trong lệnh InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | Cho phép người thanh toán phí làm người ký trong lệnh InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | Cho phép người thanh toán phí làm quyền hạn đóng băng trong lệnh FreezeAccount | false | boolean |
allow_thaw_account | Cho phép người thanh toán phí làm quyền hạn đóng băng trong lệnh ThawAccount | false | boolean |
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ọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
type | Mô hình định giá sử dụng | ✅ | "margin", "fixed" hoặc "free" |
margin | Tỷ lệ phần trăm lãi suất thêm vào phí mạng | (khi type là "margin") | number |
amount | Số tiền cố định tính theo đơn vị cơ bản của token | (khi type là "fixed") | number |
token | Token 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 unitstoken = "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í
-
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 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 -
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"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
Đặ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 mintallow_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ôngallow_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 = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Tùy chọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
enabled | Bật thu thập số liệu | ✅ | boolean |
endpoint | Đường dẫn điểm cuối số liệu tùy chỉnh | ✅ | string |
port | Cổng điểm cuối số liệu | ✅ | number |
scrape_interval | Tầ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ọn | Mô tả | Bắt buộc | Kiểu |
|---|---|---|---|
enabled | Bật theo dõi số dư tài khoản trả phí | ❌ (mặc định: false) | boolean |
expiry_seconds | Khoả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 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
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, weightedstrategy = "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
- 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
- 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
- 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
- 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
- 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?
- Xem Hướng dẫn Xác thực để thiết lập xác thực
- Xem Hướng dẫn Người ký để cấu hình người ký
- Xem Hướng dẫn Vận hành để biết thêm thông tin về cách chạy node Kora
- Truy cập Solana Stack Exchange với thẻ
kora - Báo cáo vấn đề trên GitHub
Is this page helpful?