이 메서드들은 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"}}
매개변수
| 매개변수 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
transactions | string[] | 예 | base64 인코딩된 트랜잭션 배열(최대 5개) |
fee_token | string | 예 | 수수료 계산을 위한 토큰 민트 |
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"}}
매개변수
| 매개변수 | 타입 | 필수 | 설명 |
|---|---|---|---|
transactions | string[] | 예 | base64로 인코딩된 트랜잭션 배열 (최대 5개) |
signer_key | string | 아니오 | 사용할 특정 서명자 (기본값: 풀 선택) |
transactions_to_sign | number[] | 아니오 | 서명할 트랜잭션의 인덱스 (기본값: 전체) |
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 2const 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"}}
매개변수
| 매개변수 | 타입 | 필수 | 설명 |
|---|---|---|---|
transactions | string[] | 예 | base64로 인코딩된 트랜잭션 배열 (최대 5개) |
signer_key | string | 아니오 | 사용할 특정 서명자 (기본값: 풀 선택) |
transactions_to_sign | number[] | 아니오 | 서명할 트랜잭션의 인덱스 (기본값: 모두) |
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?