번들 및 새로운 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수수료 계산을 위한 토큰 민트

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로 보호됩니다. 서버에서 reCAPTCHA가 활성화된 경우 x-recaptcha-token 헤더를 포함하세요.

트랜잭션 플러그인이 활성화되면(예: 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로 보호됩니다. 서버에서 reCAPTCHA가 활성화된 경우 x-recaptcha-token 헤더를 포함하세요.

트랜잭션 플러그인이 활성화된 경우(예: 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 팁과 함께 번들을 사용할 때는 Kora 서명자가 팁을 지불할 수 있도록 [validation.fee_payer_policy.system]allow_transfer = true가 설정되어 있는지 확인하세요.

Is this page helpful?

관리자

© 2026 솔라나 재단.
모든 권리 보유.
연결하기