Bundle i nowe metody RPC

Te metody są dostępne począwszy od v2.2.0-beta.1. Włącz je w swoim kora.toml w sekcji [kora.enabled_methods].

getVersion

Pobiera informacje o wersji serwera Kora.

Żądanie JSON-RPC

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

Odpowiedź JSON-RPC

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

Przykład 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);

Konfiguracja

[kora.enabled_methods]
get_version = true

estimateBundleFee

Oblicza łączną opłatę za wiele transakcji w pakiecie. Przydatne do określenia całkowitego kosztu przed podpisaniem i przesłaniem pakietu.

Uwaga: Wtyczki transakcji (np. gas_swap) nie są wykonywane podczas szacowania opłat. Wtyczki uruchamiają się tylko podczas procesów podpisywania (signBundle, signAndSendBundle).

Żądanie JSON-RPC

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

Parametry

ParametrTypWymaganyOpis
transactionsstring[]TakTablica transakcji zakodowanych w base64 (maks. 5)
fee_tokenstringTakMint tokena do obliczenia opłaty

Odpowiedź 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"
}
]
}
}

Przykład 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);

Konfiguracja

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

signBundle

Podpisuje wiele transakcji jako pakiet bez wysyłania ich do sieci. Użyj tej metody, gdy chcesz samodzielnie obsłużyć przesyłanie pakietu do Jito.

Ta metoda jest chroniona przez reCAPTCHA, gdy jest skonfigurowana. Dołącz nagłówek x-recaptcha-token, jeśli Twój serwer ma włączone reCAPTCHA.

Gdy wtyczki transakcji są włączone (np. gas_swap), każda transakcja w pakiecie jest walidowana względem zasad wtyczki przed podpisaniem.

Ochrona Płatnika Opłat Lighthouse

Gdy ochrona Lighthouse jest włączona, Kora dodaje instrukcję asercji salda do ostatniej transakcji w pakiecie. Chroni to płatnika opłat przed atakami drenującymi, zapewniając, że saldo nie spadnie poniżej oczekiwanych poziomów po zakończeniu wszystkich transakcji pakietu.

Ważne: Ponieważ Lighthouse modyfikuje wiadomość transakcji, wszelkie istniejące wcześniej podpisy klienta na ostatniej transakcji stają się nieważne. Klienci muszą ponownie podpisać po otrzymaniu zmodyfikowanego pakietu z powrotem od Kora.

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

Żądanie JSON-RPC

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

Parametry

ParametrTypWymaganyOpis
transactionsstring[]TakTablica transakcji zakodowanych w base64 (maks. 5)
signer_keystringNieKonkretny sygnatariusz do użycia (domyślnie wybór z puli)
transactions_to_signnumber[]NieIndeksy transakcji do podpisania (domyślnie wszystkie)

Odpowiedź JSON-RPC

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

Przykład 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);

Częściowe podpisywanie pakietu

Użyj transactions_to_sign, aby podpisać tylko określone transakcje w pakiecie:

// 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

Konfiguracja

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

signAndSendBundle

Podpisuje i przesyła pakiet zawierający maksymalnie 5 transakcji do silnika bloków Jito. Wszystkie transakcje w pakiecie wykonują się atomowo i sekwencyjnie — albo wszystkie zakończą się sukcesem, albo żadna.

Ta metoda jest chroniona przez reCAPTCHA, gdy jest skonfigurowana. Dołącz nagłówek x-recaptcha-token, jeśli Twój serwer ma włączoną reCAPTCHA.

Gdy wtyczki transakcyjne są włączone (np. gas_swap), każda transakcja w pakiecie jest walidowana względem reguł wtyczki przed podpisaniem.

Uwaga: Ochrona płatnika opłat Lighthouse nie ma zastosowania do tej metody. Ponieważ pakiety są wysyłane natychmiast, dodanie asercji Lighthouse unieważniłoby istniejące podpisy klienta. Jeśli potrzebujesz ochrony Lighthouse, użyj signBundle i samodzielnie obsłuż przesłanie do Jito po ponownym podpisaniu.

Żądanie JSON-RPC

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

Parametry

ParametrTypWymaganyOpis
transactionsstring[]TakTablica transakcji zakodowanych w base64 (maks. 5)
signer_keystringNieKonkretny sygnatariusz do użycia (domyślnie wybór z puli)
transactions_to_signnumber[]NieIndeksy transakcji do podpisania (domyślnie wszystkie)

Odpowiedź JSON-RPC

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

Przykład 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);

Konfiguracja

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

Uwaga: Podczas używania pakietów z napiwkami Jito upewnij się, że allow_transfer = true jest ustawione w [validation.fee_payer_policy.system], aby sygnatariusz Kora mógł opłacić napiwek.

Is this page helpful?

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco