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

Розраховує сукупну комісію для кількох транзакцій у бандлі. Корисно для визначення загальної вартості перед підписанням та відправкою бандла.

Примітка: Плагіни транзакцій (наприклад, 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ТакMint токена для розрахунку комісії

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.
Всі права захищені.
Залишайтеся на зв'язку