Bundle & Nouvelles Méthodes RPC

Ces méthodes sont disponibles à partir de v2.2.0-beta.1. Activez-les dans votre kora.toml sous [kora.enabled_methods].

getVersion

Récupère les informations de version du serveur Kora.

Requête JSON-RPC

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

Réponse JSON-RPC

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

Exemple cURL

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

SDK TypeScript

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

Configuration

[kora.enabled_methods]
get_version = true

estimateBundleFee

Calcule les frais combinés pour plusieurs transactions dans un bundle. Utile pour déterminer le coût total avant de signer et soumettre un bundle.

Remarque : Les plugins de transaction (par ex., gas_swap) ne sont pas exécutés lors de l'estimation des frais. Les plugins s'exécutent uniquement lors des flux de signature (signBundle, signAndSendBundle).

Requête JSON-RPC

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

Paramètres

ParamètreTypeRequisDescription
transactionsstring[]OuiTableau de transactions encodées en base64 (max 5)
fee_tokenstringOuiMint du token pour le calcul des frais

Réponse 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"
}
]
}
}

Exemple 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"
}
}'

SDK TypeScript

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);

Configuration

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

signBundle

Signe plusieurs transactions sous forme de bundle sans les soumettre au réseau. Utilisez cette méthode lorsque vous souhaitez gérer vous-même la soumission du bundle à Jito.

Cette méthode est protégée par reCAPTCHA lorsqu'elle est configurée. Incluez l'en-tête x-recaptcha-token si votre serveur a activé reCAPTCHA.

Lorsque les plugins de transaction sont activés (par ex., gas_swap), chaque transaction du bundle est validée par rapport aux règles du plugin avant la signature.

Protection du payeur de frais Lighthouse

Lorsque la protection Lighthouse est activée, Kora ajoute une instruction d'assertion de solde à la dernière transaction du bundle. Cela protège le payeur de frais contre les attaques par drainage en garantissant que le solde ne descend pas en dessous des niveaux attendus après l'exécution de toutes les transactions du bundle.

Important : Étant donné que Lighthouse modifie le message de transaction, toutes les signatures client préexistantes sur la dernière transaction deviennent invalides. Les clients doivent re-signer après avoir reçu le bundle modifié de Kora.

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

Requête JSON-RPC

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

Paramètres

ParamètreTypeRequisDescription
transactionsstring[]OuiTableau de transactions encodées en base64 (max 5)
signer_keystringNonSignataire spécifique à utiliser (sélection par défaut)
transactions_to_signnumber[]NonIndices des transactions à signer (toutes par défaut)

Réponse JSON-RPC

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

Exemple 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"
}
}'

SDK TypeScript

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

Signature partielle de bundle

Utilisez transactions_to_sign pour signer uniquement des transactions spécifiques dans le bundle :

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

Configuration

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

signAndSendBundle

Signe et soumet un bundle contenant jusqu'à 5 transactions au moteur de blocs de Jito. Toutes les transactions du bundle s'exécutent de manière atomique et séquentielle — soit toutes réussissent, soit aucune ne réussit.

Cette méthode est protégée par reCAPTCHA lorsqu'elle est configurée. Incluez l'en-tête x-recaptcha-token si votre serveur a reCAPTCHA activé.

Lorsque les plugins de transaction sont activés (par exemple, gas_swap), chaque transaction du bundle est validée selon les règles du plugin avant la signature.

Remarque : La protection du payeur de frais Lighthouse ne s'applique pas à cette méthode. Puisque les bundles sont envoyés immédiatement, l'ajout d'une assertion Lighthouse invaliderait les signatures client existantes. Si vous avez besoin de la protection Lighthouse, utilisez signBundle et gérez vous-même la soumission Jito après re-signature.

Requête JSON-RPC

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

Paramètres

ParamètreTypeRequisDescription
transactionsstring[]OuiTableau de transactions encodées en base64 (max 5)
signer_keystringNonSignataire spécifique à utiliser (sélection groupée par défaut)
transactions_to_signnumber[]NonIndices des transactions à signer (toutes par défaut)

Réponse JSON-RPC

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

Exemple 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"
}
}'

SDK TypeScript

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

Configuration

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

Remarque : Lors de l'utilisation de bundles avec des pourboires Jito, assurez-vous que allow_transfer = true est défini dans [validation.fee_payer_policy.system] afin que le signataire Kora puisse payer le pourboire.

Is this page helpful?

Géré par

© 2026 Fondation Solana.
Tous droits réservés.
Restez connecté