{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"codeGuideFiles":[],"seo":{"title":"Rakurai Transaction Inclusion — 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-transaction-inclusion--guide"},"children":["Rakurai Transaction Inclusion — Guide"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bundles, virtual prioritization, and post-pack confirmations for landing transactions on Rakurai validators."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Audience:"]}," Block engines, searchers, and partners integrating transaction landing with Rakurai."]},{"$$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/post-pack-confirmations"},"children":["Post-pack confirmations"]}," · ",{"$$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/rakurai_programs/readme"},"children":["Programs hub"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1.-bundle-support"},"children":["1. Bundle support"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai supports multiple block engines — transaction landing services can send bundles directly to Rakurai nodes. To enable this, share an endpoint with the Rakurai team that returns a list of block engine addresses run by your service. Rakurai validators automatically connect to the lowest-latency endpoint (just like Jito's)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example URL: ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["https://mainnet.block-engine.jito.wtf"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"1.1.-endpoint-getblockengineendpoints"},"children":["1.1. Endpoint: GetBlockEngineEndpoints"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Response:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"global_endpoint {\n  block_engine_url: \"https://gateway.your-provider.com\"\n  shredstream_receiver_address: \"\"\n}\nregioned_endpoints {\n  block_engine_url: \"https://fra.gateway.your-provider.com\"\n  shredstream_receiver_address: \"\"\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See your gRPC proto definition for the full request/response schema."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"1.2.-minimum-requirements"},"children":["1.2. Minimum requirements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you only operate one endpoint, returning just ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global_endpoint"]}," is fine. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global_endpoint.block_engine_url"]}," must be a valid, reachable block engine URL."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai will add this URL to an on-chain PDA so that all Rakurai nodes that have opted in for this feature can connect seamlessly."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once the block engine is connected, you can send bundles directly. Each bundle must include a tip transfer instruction to one of Rakurai's tip accounts."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," For the time being, we can honor our partners' tip accounts. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq#4-can-i-use-my-own-tip-account-instead-of-rakurais-eight-accounts"},"children":["Tips FAQ §4"]}," for custom tip account details."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"1.3.-for-validators"},"children":["1.3. For validators"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validator operators can see which block engines are connected and, if they choose, block any of them through Admin RPC."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following Admin RPC commands are available to manage connections to secondary block engine URLs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"1.3.1.-getblockengineurls"},"children":["1.3.1. getBlockEngineUrls"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns the list of block engine URLs maintained by the scheduler."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getBlockEngineUrls\",\"params\":[]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc | jq\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example response:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"active_secondary_entries\": [],\n    \"admin_secondary_entries\": [],\n    \"blocklisted_uuids\": [],\n    \"onchain_secondary_entries\": [],\n    \"primary_url\": \"https://frankfurt.mainnet.block-engine.jito.wtf\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"1.3.2.-setblockengineurlblocklist"},"children":["1.3.2. setBlockEngineUrlBlocklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sets the blocklist to disconnect block engine URLs by UUID. Each call replaces the entire blocklist. Pass an empty array to clear it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command: Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"<BlockEngine1>\""]}," UUID to blocklist"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setBlockEngineUrlBlocklist\",\"params\":[[\"<BlockEngine1>\"]]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command: Clear blocklist"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setBlockEngineUrlBlocklist\",\"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":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2.-virtual-priority-boost"},"children":["2. Virtual priority boost"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai introduces a mechanism to improve inclusion efficiency through virtual priority. To enable this, add an additional transfer instruction (just like Jito tips are paid) to one of Rakurai's tip accounts in your transaction or bundle. Virtual priority can boost both TPU transactions and bundles."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," A tip is not a replacement for regular priority fees. If a transaction has very low priority fees and a very high tip, the virtual boost will be less significant, thereby discouraging priority-fee cannibalization. For the time being, we can also honor our partners' tip accounts — see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq#4-can-i-use-my-own-tip-account-instead-of-rakurais-eight-accounts"},"children":["Tips FAQ §4"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3.-post-pack-confirmations"},"children":["3. Post-pack confirmations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai introduces post-pack confirmations — on-chain transaction updates over gRPC generated from the point of no return (post-pack) in the Solana pipeline."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the full protocol, Admin RPC reference, and gRPC details, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/post-pack-confirmations"},"children":["Post-pack confirmations"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"3.1.-setup"},"children":["3.1. Setup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To enable post-pack confirmations, share your gRPC endpoint with the Rakurai team where you want to receive updates."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sample gRPC endpoint to share:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"https://sample-server.com:20000\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai will add its partners' gRPC endpoints to an on-chain PDA so that you can receive updates from all Rakurai nodes that have opted in for this feature."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once added, the consumer will start receiving transactions as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PacketBatch"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["solana_perf::packet::PacketBatch"]},"). Rakurai uses the same Jito packet gRPC protocol (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["packet.proto"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["block_engine.proto"]},") — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PacketBatch"]}," — used by the Jito relayer."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"3.2.-bundle-requirements"},"children":["3.2. Bundle requirements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When building a bundle, make sure to include:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The original post-pack confirmation packet(s) unchanged (i.e., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Packet"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any additional transactions, e.g., backrun / arb"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A transaction or instruction with a tip attached to one of Rakurai's tip accounts"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bundles that use post-pack confirmations receive an additional priority boost."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"3.3.-for-validators"},"children":["3.3. For validators"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validator operators can see which endpoints are receiving post-pack confirmations and, if they choose, block any of them through Admin RPC."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following Admin RPC commands are available to manage post-pack confirmation configuration."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"3.3.1.-getpostpackconfirmationconfig"},"children":["3.3.1. getPostPackConfirmationConfig"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns the list of endpoints receiving post-pack confirmations."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command:"]},{"$$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":["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":4,"id":"3.3.2.-setpostpackconfirmationuuidblocklist"},"children":["3.3.2. setPostPackConfirmationUuidBlocklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sets the blocklist to disconnect post-pack confirmation endpoints by UUID. Each call replaces the entire blocklist. Pass an empty array to clear it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command: Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"<PostPackEndpoint1>\""]}," UUID to blocklist"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"(echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setPostPackConfirmationUuidBlocklist\",\"params\":[[\"<PostPackEndpoint1>\"]]}'; sleep 1) \\\n  | socat - UNIX-CONNECT:admin.rpc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Command: Clear blocklist"]},{"$$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":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"appendix"},"children":["Appendix"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"a.1.-adding-custom-tip-accounts"},"children":["A.1. Adding custom tip accounts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To use custom tip accounts, share your tip account list with the Rakurai team along with the percentage of tips you will share with Rakurai. This is used to prioritize bundles and transactions. A sample JSON list is as follows:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"tip_account_1\": 0.20,\n  \"tip_account_2\": 0.25,\n  \"tip_account_3\": 0.30\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See also ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq#4-can-i-use-my-own-tip-account-instead-of-rakurais-eight-accounts"},"children":["Tips FAQ §4"]}," for the full custom tip account workflow."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"a.2.-rakurais-tip-accounts"},"children":["A.2. Rakurai's tip accounts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Mainnet tip accounts are listed in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq#appendix-program--tip-account-addresses"},"children":["Tips FAQ appendix"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"BjqjPHFmwr19YFmkH8CMNJFbj1wzX9k9ngr4am2nQEdq\n9CNKnAqJgLA4pL6KByzhhdY4mKoQP5wcPdhJgnvvi5Ve\n5wy4C2VMFhHE4i8PWKNS1K4SV275zjNwhLwfKBwajrro\nAgMdA97pk2i2Ry4YQ4iVPNrRiFhcH3x3ARUCiQGt3vJG\n4Qf8JFV5vmpADXNouoJriQ9KiniT5DENrz9JM2mKGH9m\nAuFAFzbzE9dzMajy4RNdyJZBTskeiuJQqT2wd9xoGSRD\n8aLaHz8595MAvgxKoBJEyZmDfqQp8CorezFGYnC7CPjy\nH6hyJo6rpBmwHbvVuWCEHExJ2bE4rcn1hTPeiBtypus4\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Testnet tip accounts are also in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/tips-faq#appendix-program--tip-account-addresses"},"children":["Tips FAQ appendix"]},"."]}]},"headings":[{"value":"Rakurai Transaction Inclusion — Guide","id":"rakurai-transaction-inclusion--guide","depth":1},{"value":"1. Bundle support","id":"1.-bundle-support","depth":2},{"value":"1.1. Endpoint: GetBlockEngineEndpoints","id":"1.1.-endpoint-getblockengineendpoints","depth":3},{"value":"1.2. Minimum requirements","id":"1.2.-minimum-requirements","depth":3},{"value":"1.3. For validators","id":"1.3.-for-validators","depth":3},{"value":"1.3.1. getBlockEngineUrls","id":"1.3.1.-getblockengineurls","depth":4},{"value":"1.3.2. setBlockEngineUrlBlocklist","id":"1.3.2.-setblockengineurlblocklist","depth":4},{"value":"2. Virtual priority boost","id":"2.-virtual-priority-boost","depth":2},{"value":"3. Post-pack confirmations","id":"3.-post-pack-confirmations","depth":2},{"value":"3.1. Setup","id":"3.1.-setup","depth":3},{"value":"3.2. Bundle requirements","id":"3.2.-bundle-requirements","depth":3},{"value":"3.3. For validators","id":"3.3.-for-validators","depth":3},{"value":"3.3.1. getPostPackConfirmationConfig","id":"3.3.1.-getpostpackconfirmationconfig","depth":4},{"value":"3.3.2. setPostPackConfirmationUuidBlocklist","id":"3.3.2.-setpostpackconfirmationuuidblocklist","depth":4},{"value":"Appendix","id":"appendix","depth":2},{"value":"A.1. Adding custom tip accounts","id":"a.1.-adding-custom-tip-accounts","depth":3},{"value":"A.2. Rakurai's tip accounts","id":"a.2.-rakurais-tip-accounts","depth":3}],"frontmatter":{"seo":{"title":"Rakurai Transaction Inclusion — Guide"}},"lastModified":"2026-06-22T15:21:04.000Z"},"slug":"/docs/services/rakurai_jito_private/rakurai_docs/integrators/transaction-inclusion","userData":{"isAuthenticated":false,"teams":["anonymous"]}}