Kora 是 Solana 基金会的支付主节点(paymaster)工具,运营者可通过运行 Kora 节点来验证、签名并代付用户交易的 Solana 手续费。官方文档位于 https://launch.solana.com/docs/kora/operators ,源码位于 https://github.com/solana-foundation/kora 。
安装与快速开始
通过 cargo 安装:
cargo install kora-cli
Docker 镜像:
docker pull ghcr.io/solana-foundation/kora:latest
最少需要 kora.toml 与 signers.toml 两个配置文件。验证配置:
kora --config kora.toml config validate
启动服务器:
kora --config kora.toml rpc start --signers-config signers.toml
初始化支付 ATA(用于接收代币付款):
kora --config kora.toml rpc initialize-atas --signers-config signers.toml
主要能力
- 配置校验:kora config validate 校验 kora.toml,config validate-with-rpc 通过实时 RPC 调用校验。
- RPC 服务:kora rpc start 启动服务,支持 --no-load-signer、--port(默认 8080)、--logging-format json(默认 standard)等选项。
- ATA 初始化:initialize-atas 支持 --fee-payer-key、--compute-unit-price、--compute-unit-limit、--chunk-size 等参数。
- 定价模型:margin(默认,按成本加价,含 fee payer 支出)、fixed(每笔交易固定费用)、free(全部代付)。fixed 与 free 必须在策略中关闭 fee payer 转账。
- 认证:API Key(x-api-key 头)、HMAC(带时间戳的加密签名)、reCAPTCHA v3(用于签名方法的机器人防护),三种可选方式可同时使用,可配置 recaptcha_score_threshold(默认 0.5)与 protected_methods。
- Fee Payer 策略:控制 fee payer 在交易中可执行的操作,默认全部为 false(限制性),仅按需显式设为 true。对 fixed/free 定价,须确保系统与代币程序的 allow_transfer 保持默认 false,以防资金被耗尽。
- Jito 捆绑:通过 [kora.bundle] 启用原子化多交易执行,配置 block_engine_url。当 Jito 小费由 Kora 支付时,需在 [validation.fee_payer_policy.system] 中设 allow_transfer = true。
- Lighthouse 费用支付方保护:添加余额断言指令防护资金耗尽攻击,需在 allowed_programs 中加入 Lighthouse 程序 L2TExMFKdjpN9kozasaurPirfHy9P8sbXoAN1qA3S95,仅对 signTransaction/signBundle 有效(不适用于广播方法)。
- 用量限制:基于规则的每用户限制,使用 Redis 后端,支持 transaction 与 instruction 类型的规则与窗口。启用且免费定价时,签名请求需带 user_id 参数。
- 缓存:可选的 Redis 缓存用于代币账户查询,可配置 default_ttl、account_ttl。
- 监控:可选的 Prometheus 指标,位于 /metrics,可配置 endpoint 与 port,关键指标包括 kora_http_requests_total、kora_http_request_duration_seconds、signer_balance_lamports。
使用方式与配置
kora.toml 负责服务器配置(验证、认证、定价、缓存、方法、捆绑、Lighthouse、指标),signers.toml 负责签名者池(密钥、类型、选择策略)。 最小 kora.toml 示例:
[kora]
rate_limit = 100
[validation]
max_allowed_lamports = 1000000
max_signatures = 10
price_source = "Mock" # 或 "Jupiter"(需 JUPITER_API_KEY 环境变量)
allowed_programs = [
"11111111111111111111111111111111",
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"ComputeBudget111111111111111111111111111111",
]
allowed_tokens = ["<your-token-mint>"]
allowed_spl_paid_tokens = ["<your-token-mint>"]
[validation.price]
type = "margin"
margin = 0.1 # 10% markup
最小 signers.toml 示例:
[signer_pool]
strategy = "round_robin" # 或 "random", "weighted"
[[signers]]
name = "signer_1"
type = "memory"
private_key_env = "KORA_PRIVATE_KEY"
weight = 1
更详细的 kora.toml 参考见 references/configuration.md,签名者类型与设置见 references/signers.md(memory、Turnkey、Privy、Vault),费用计算与定价见 references/fees.md。 全局参数:kora --config <path> 指定 kora.toml 位置(默认 ./kora.toml);kora --rpc-url <url> 覆盖 Solana RPC URL(环境变量 RPC_URL)。
部署
Docker 部署:
docker run -v ./kora.toml:/kora.toml -v ./signers.toml:/signers.toml \
-e RPC_URL=https://api.mainnet-beta.solana.com \
-e KORA_PRIVATE_KEY=<key> \
-p 8080:8080 \
ghcr.io/solana-foundation/kora:latest
从源码构建的 Dockerfile 示例:
FROM rust:1.86-bookworm AS builder
RUN cargo install kora-cli
FROM debian:bookworm-slim
COPY --from=builder /usr/local/cargo/bin/kora /usr/local/bin/kora
COPY kora.toml signers.toml ./
ENV RPC_URL=https://api.mainnet-beta.solana.com
CMD ["kora", "rpc", "start", "--signers-config", "signers.toml"]
Railway 部署:创建含 kora.toml、signers.toml、Dockerfile 的项目,执行 railway login && railway init && railway up,在仪表板设置 RPC_URL、KORA_PRIVATE_KEY、RUST_LOG 等环境变量,并从设置生成公共域名。文档:https://launch.solana.com/docs/kora/operators/deployment/railway
核心开发
针对 Kora 代码库贡献者:just build(构建所有 crate)、just build-lib(仅 kora-lib)、just build-cli(仅 kora-cli)、just check(检查格式)、just fmt(格式化并自动修复 lint)、just unit-test(单元测试)、just integration-test(完整集成测试套件)。
适用场景与限制
适用于需要为 Solana 用户代付手续费的运营方,典型场景包括 dApp 赞助交易、免手续费用户体验与批量交易处理。限制与注意事项:定价为 fixed/free 时必须关闭 fee payer 转账以防止资金被耗尽;Lighthouse 保护仅适用于 signTransaction/signBundle,不适用于广播方法;用量限制启用且免费定价时签名请求需带 user_id 参数;Jito 小费由 Kora 支付时需额外开启系统程序的 allow_transfer。资料未提供各配置项的完整字段说明与默认值细节,以及除上述外的更多定价或认证细节。