{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"codeGuideFiles":[],"seo":{"title":"Rakurai Post-Pack Confirmations — Guide","description":"Learn how to work with Staking API for managing deposits, withdrawals, and stake pool information."},"dynamicMarkdocComponents":[],"metadata":{"type":"markdown"},"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"rakurai-post-pack-confirmations--guide"},"children":["Rakurai Post-Pack Confirmations — Guide"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How the validator streams transaction updates to post-pack confirmation endpoints and how consumers respond with bundles."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Audience:"]}," Integrators consuming post-pack confirmations and validator operators configuring endpoints."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["See also:"]}," ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/transaction-inclusion"},"children":["Transaction inclusion"]}," · ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq"},"children":["Tips FAQ"]}," · ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/validators/readme"},"children":["Validators hub"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1.-overview"},"children":["1. Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai scheduler provides updates (post-pack confirmations). As soon as a transaction is scheduled for execution, it forwards the update to configured ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["post-pack confirmation endpoints"]}," over gRPC. These updates are generated from the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["point of no-return"]},". Consumers of this service only see updates just before they imminently become part of the block, ensuring no front-running."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Post-pack confirmation uses the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Jito packet gRPC protocol"]}," (",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/packet.74ed8ffb9ebe58eac71a339b2d36433a122f0def26b36be76da692b9be6a7511.301b32ab.proto"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["packet.proto"]}]},", ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/block_engine.c207449ce419b261b27f1499c35b8da9a509675e3f7a6cdfe290eec29623740d.301b32ab.proto"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["block_engine.proto"]}]},") — the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PacketBatch"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["StartExpiringPacketStream"]}," shape used by the Jito relayer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The consumer's job is to receive the post-pack confirmation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]},", then send back a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["bundle"]}," that includes:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The original post-pack confirmation packet(s) (unchanged)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any additional transactions (e.g., backrun / arb)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Duplicate transactions are suppressed. One ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]}," is sent per transaction per endpoint."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What consumers receive:"]}," transactions as Jito Packet format ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/packet.74ed8ffb9ebe58eac71a339b2d36433a122f0def26b36be76da692b9be6a7511.301b32ab.proto"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]}]}," messages (raw Solana wire bytes), streamed over ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["StartExpiringPacketStream"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What you send back:"]}," a bundle that includes the original post-pack confirmation packet ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["unchanged"]},", plus any additional transactions (e.g., arb). The protocol mirrors the Jito relayer packet/bundle flow."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2.-admin-rpc"},"children":["2. Admin RPC"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Admin IPC is request/response: keep the socket open briefly so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["socat"]}," can read the reply before stdin closes."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"2.1.-getpostpackconfirmationconfig"},"children":["2.1. getPostPackConfirmationConfig"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns the live status maintained by the scheduler (admin + on-chain merge, blocklist, and what is actually connected)."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onchain_entries"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Entries loaded from the on-chain PDA"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["blocklisted_uuids"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Endpoint UUIDs blocked via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setPostPackConfirmationUuidBlocklist"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["blocklisted_entries"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Full merged entries whose ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uuid"]}," is blocklisted (url + uuid)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active_entries"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Merged admin + on-chain (admin wins on same URL), excluding blocklisted UUIDs — these are the endpoints receiving scheduler updates"]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getPostPackConfirmationConfig\",\"params\":[]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc | jq\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example response:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"admin_entries\": [\n    {\"url\":\"http://127.0.0.1:20000\",\"uuid\":\"PostPackConfig2\"},\n    {\"url\":\"http://127.0.0.1:10000\",\"uuid\":\"PostPackConfig1\"}\n  ],\n  \"onchain_entries\": [],\n  \"blocklisted_uuids\": [\"PostPackConfig1\"],\n  \"blocklisted_entries\": [\n    {\"url\":\"http://127.0.0.1:10000\",\"uuid\":\"PostPackConfig1\"}\n  ],\n  \"active_entries\": [\n    {\"url\":\"http://127.0.0.1:20000\",\"uuid\":\"PostPackConfig2\"}\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"2.2.-setpostpackconfirmationuuidblocklist"},"children":["2.2. setPostPackConfirmationUuidBlocklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Blocklists post-pack confirmation endpoints by ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["UUID"]},". Each call ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["replaces"]}," the full blocklist. Pass an empty array to clear."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Blocklisted UUIDs are removed from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active_entries"]}," on the next scheduler config sync. If a blocklisted endpoint already has an open gRPC connection, it is torn down immediately on sync; other endpoints stay connected."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example — block one endpoint by UUID:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setPostPackConfirmationUuidBlocklist\",\"params\":[[\"PostPackConfig1\"]]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example — clear blocklist (reconnect blocklisted endpoints on next sync):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setPostPackConfirmationUuidBlocklist\",\"params\":[[]]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["params:[[]]"]}," (one parameter: an empty UUID array). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["params:[]"]}," omits the parameter and will not clear the blocklist."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3.-grpc-protocol"},"children":["3. gRPC protocol"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"3.1.-packet-shape"},"children":["3.1. Packet shape"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/packet.74ed8ffb9ebe58eac71a339b2d36433a122f0def26b36be76da692b9be6a7511.301b32ab.proto"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["packet.proto"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For each transaction the validator sends one ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PacketBatchUpdate"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["msg = batches"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"PacketBatchUpdate\n  └── batches: ExpiringPacketBatch\n        ├── header.ts\n        ├── batch: PacketBatch\n        │     └── packets[]: Packet\n        │           ├── data    ← raw Solana wire transaction bytes\n        │           └── meta    ← Packet meta (size, addr, port, flags, sender_stake)\n        └── expiry_ms = 0\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Decode in Rust:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"rust","header":{"controls":{"copy":{}}},"source":"use solana_transaction::versioned::VersionedTransaction;\n\nlet txn: VersionedTransaction = bincode::deserialize(&packet.data)?;\n","lang":"rust"},"children":[]}]},"headings":[{"value":"Rakurai Post-Pack Confirmations — Guide","id":"rakurai-post-pack-confirmations--guide","depth":1},{"value":"1. Overview","id":"1.-overview","depth":2},{"value":"2. Admin RPC","id":"2.-admin-rpc","depth":2},{"value":"2.1. getPostPackConfirmationConfig","id":"2.1.-getpostpackconfirmationconfig","depth":3},{"value":"2.2. setPostPackConfirmationUuidBlocklist","id":"2.2.-setpostpackconfirmationuuidblocklist","depth":3},{"value":"3. gRPC protocol","id":"3.-grpc-protocol","depth":2},{"value":"3.1. Packet shape","id":"3.1.-packet-shape","depth":3}],"frontmatter":{"seo":{"title":"Rakurai Post-Pack Confirmations — Guide"}},"lastModified":"2026-06-22T14:59:33.000Z"},"slug":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/post-pack-confirmations","userData":{"isAuthenticated":false,"teams":["anonymous"]}}