Bundle и новые RPC-методы

Эти методы доступны начиная с v2.2.0-beta.1. Включите их в вашем kora.toml в разделе [kora.enabled_methods].

getVersion

Получает информацию о версии сервера Kora.

JSON-RPC запрос

{
"jsonrpc": "2.0",
"id": 1,
"method": "getVersion",
"params": {}
}

JSON-RPC ответ

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"version": "2.2.0-beta.7"
}
}

Пример cURL

curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getVersion","params":{}}'

TypeScript SDK

const result = await client.getVersion();
console.log("Kora version:", result.version);

Конфигурация

[kora.enabled_methods]
get_version = true

estimateBundleFee

Вычисляет суммарную комиссию для нескольких транзакций в bundle. Полезно для определения общей стоимости перед подписанием и отправкой bundle.

Примечание: Плагины транзакций (например, gas_swap) не выполняются во время оценки комиссии. Плагины запускаются только в процессе подписания (signBundle, signAndSendBundle).

JSON-RPC запрос

{
"jsonrpc": "2.0",
"id": 1,
"method": "estimateBundleFee",
"params": {
"transactions": ["base64EncodedTransaction1", "base64EncodedTransaction2"],
"fee_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
}

Параметры

ПараметрТипОбязательныйОписание
transactionsstring[]ДаМассив транзакций в кодировке base64 (макс. 5)
fee_tokenstringДаАдрес токена для расчёта комиссии

JSON-RPC ответ

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"total_fee_in_lamports": "15000",
"total_fee_in_token": "150",
"fee_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"transaction_fees": [
{
"fee_in_lamports": "5000",
"fee_in_token": "50"
},
{
"fee_in_lamports": "10000",
"fee_in_token": "100"
}
]
}
}

Пример cURL

curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "estimateBundleFee",
"params": {
"transactions": ["base64Tx1", "base64Tx2"],
"fee_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
}'

TypeScript SDK

const estimate = await client.estimateBundleFee({
transactions: [base64Tx1, base64Tx2, base64Tx3],
fee_token: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
});
console.log("Total fee:", estimate.total_fee_in_lamports, "lamports");
console.log("Total fee in token:", estimate.total_fee_in_token);

Конфигурация

[kora.enabled_methods]
estimate_bundle_fee = true
[kora.bundle]
enabled = true

signBundle

Подписывает несколько транзакций как бандл без их отправки в сеть. Используйте этот метод, когда хотите самостоятельно управлять отправкой бандла в Jito.

Этот метод защищен reCAPTCHA при соответствующей настройке. Включите заголовок x-recaptcha-token, если на вашем сервере включена reCAPTCHA.

Когда плагины транзакций включены (например, gas_swap), каждая транзакция в бандле проверяется согласно правилам плагина перед подписанием.

Защита плательщика комиссий Lighthouse

Когда защита Lighthouse включена, Kora добавляет инструкцию проверки баланса к последней транзакции в бандле. Это защищает плательщика комиссий от атак на истощение средств, гарантируя, что баланс не опустится ниже ожидаемого уровня после завершения всех транзакций бандла.

Важно: Поскольку Lighthouse изменяет сообщение транзакции, любые существующие клиентские подписи последней транзакции становятся недействительными. Клиенты должны повторно подписать транзакцию после получения модифицированного бандла от Kora.

signBundle → client receives modified txs → client re-signs last tx → client sends bundle

JSON-RPC запрос

{
"jsonrpc": "2.0",
"id": 1,
"method": "signBundle",
"params": {
"transactions": [
"base64EncodedTransaction1",
"base64EncodedTransaction2",
"base64EncodedTransaction3"
],
"signer_key": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}

Параметры

ПараметрТипОбязательныйОписание
transactionsstring[]ДаМассив base64-кодированных транзакций (макс. 5)
signer_keystringНетКонкретный подписант для использования (по умолчанию выбирается из пула)
transactions_to_signnumber[]НетИндексы транзакций для подписания (по умолчанию все)

JSON-RPC ответ

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"signed_transactions": [
"base64EncodedSignedTransaction1",
"base64EncodedSignedTransaction2",
"base64EncodedSignedTransaction3"
],
"signer_pubkey": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}

Пример cURL

curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "signBundle",
"params": {
"transactions": ["base64Tx1", "base64Tx2"],
"signer_key": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}'

TypeScript SDK

const result = await client.signBundle({
transactions: [base64Tx1, base64Tx2, base64Tx3],
signer_key: koraSignerAddress
});
console.log("Signed transactions:", result.signed_transactions);

Подпись частичного пакета

Используйте transactions_to_sign для подписи только определённых транзакций в пакете:

// Only sign transactions at index 0 and 2
const result = await client.signBundle({
transactions: [tx1, tx2, tx3, tx4],
transactions_to_sign: [0, 2]
});
// tx1 and tx3 are signed by Kora, tx2 and tx4 remain unchanged

Конфигурация

[kora.enabled_methods]
sign_bundle = true
[kora.bundle]
enabled = true

signAndSendBundle

Подписывает и отправляет пакет из максимум 5 транзакций в блок-движок Jito. Все транзакции в пакете выполняются атомарно и последовательно — либо все успешны, либо ни одна.

Этот метод защищён reCAPTCHA при соответствующей настройке. Включите заголовок x-recaptcha-token, если на вашем сервере включена reCAPTCHA.

Когда включены плагины транзакций (например, gas_swap), каждая транзакция в пакете проверяется на соответствие правилам плагина перед подписью.

Примечание: Защита плательщика комиссий Lighthouse не применяется к этому методу. Поскольку пакеты отправляются немедленно, добавление утверждения Lighthouse сделает существующие подписи клиентов недействительными. Если вам нужна защита Lighthouse, используйте signBundle и самостоятельно обрабатывайте отправку в Jito после повторной подписи.

JSON-RPC запрос

{
"jsonrpc": "2.0",
"id": 1,
"method": "signAndSendBundle",
"params": {
"transactions": [
"base64EncodedTransaction1",
"base64EncodedTransaction2",
"base64EncodedTransaction3"
],
"signer_key": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}

Параметры

ПараметрТипОбязателенОписание
transactionsstring[]ДаМассив транзакций в кодировке base64 (максимум 5)
signer_keystringНетКонкретный подписант для использования (по умолчанию выбор из пула)
transactions_to_signnumber[]НетИндексы транзакций для подписи (по умолчанию все)

JSON-RPC ответ

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"bundle_uuid": "8f4a3b2c-1d5e-6f7a-8b9c-0d1e2f3a4b5c",
"signed_transactions": [
"base64EncodedSignedTransaction1",
"base64EncodedSignedTransaction2",
"base64EncodedSignedTransaction3"
],
"signer_pubkey": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}

Пример cURL

curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "signAndSendBundle",
"params": {
"transactions": ["base64Tx1", "base64Tx2"],
"signer_key": "3Z1Ef7YaxK8oUMoi6exf7wYZjZKWJJsrzJXSt1c3qrDE"
}
}'

TypeScript SDK

const { bundle_uuid } = await client.signAndSendBundle({
transactions: [base64Tx1, base64Tx2, base64Tx3],
signer_key: koraSignerAddress
});
console.log("Bundle submitted:", bundle_uuid);

Конфигурация

[kora.enabled_methods]
sign_and_send_bundle = true
[kora.bundle]
enabled = true
[kora.bundle.jito]
block_engine_url = "https://mainnet.block-engine.jito.wtf"

Примечание: При использовании пакетов с чаевыми Jito убедитесь, что allow_transfer = true установлен в [validation.fee_payer_policy.system], чтобы подписант Kora мог оплатить чаевые.

Is this page helpful?

Управляется

© 2026 Solana Foundation.
Все права защищены.
Связаться с нами