{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"codeGuideFiles":[],"seo":{"title":"Rakurai-Solana Node Operator 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-solana-node-operator-guide"},"children":["Rakurai-Solana Node Operator Guide"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Welcome to the official guide for setting up and running a Rakurai-Solana node. This guide is intended for node operators who want to run Rakurai's high-block-reward client and maximize their rewards through efficient transaction scheduling."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Rakurai Validator node is designed to maximize block rewards by leveraging advanced transaction scheduling techniques. This approach not only enhances Transactions Per Second (TPS) but also optimizes Compute Units (CU), leading to superior network performance. By efficiently processing high-reward transactions, node operators can significantly increase their earnings."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#rakurai-solana-node-operator-guide"},"children":["Rakurai-Solana Node Operator Guide"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#1-background"},"children":["1. Background"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#what-is-rakurai-solana"},"children":["What is Rakurai-Solana?"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#high-level-flow-architecture"},"children":["High-Level Flow Architecture"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#validator-incentives-and-rewards-flow"},"children":["Validator Incentives and Rewards Flow"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#how-rakurai-interacts-with-the-solana-ecosystem"},"children":["How Rakurai Interacts with the Solana Ecosystem"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#2-quickstart-guide"},"children":["2. QuickStart Guide"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#3-rakurai-smart-contracts-programs"},"children":["3. Rakurai Smart Contracts (Programs)"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#overview-of-key-programs"},"children":["Overview of Key Programs"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#how-the-programs-coordinate"},"children":["How the Programs Coordinate"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#deployed-program-id"},"children":["Deployed Program ID"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#4-setup-and-build-rakurai-solana"},"children":["4. Setup and Build Rakurai Solana"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#prerequisites"},"children":["Prerequisites"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#download-and-build-rakurai-solana"},"children":["Download and Build Rakurai-Solana"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-1-clone-the-rakurai-solana"},"children":["Step 1: Clone the Rakurai-Solana"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-2-create-rakurai-activation-account-raa"},"children":["Step 2: Create Rakurai Activation Account (RAA)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-3-download-rakurai-scheduler-binary"},"children":["Step 3: Download Rakurai Scheduler Binary"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#1-sign-the-rakurai-activation-account"},"children":["1. Sign the Rakurai Activation Account"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#2-get-available-versions"},"children":["2. Get Available Versions"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#3-download-the-scheduler-binary"},"children":["3. Download the Scheduler Binary"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-4-build-the-client"},"children":["Step 4: Build the Client"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-5-add-additional-cli-args"},"children":["Step 5: Add Additional CLI Args"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#mainnet-arguments"},"children":["Mainnet Arguments"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#testnet-arguments"},"children":["Testnet Arguments"]}]}]}]}]}]}]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#running-geyser-with-rakurai-client"},"children":["How to Run Geyser with Rakurai Client"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#verify-scheduler-binary-attestation"},"children":["Verify Scheduler Binary Attestation"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1.-background"},"children":["1. Background"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"what-is-rakurai-solana"},"children":["What is Rakurai-Solana?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai-Solana is a high-performance Solana validator node designed to achieve ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["superior block rewards"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["higher Transactions Per Second (TPS)"]},". It incorporates heuristics-based ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["transaction scheduling"]}," and other optimization techniques to efficiently process high-value transactions, boosting both performance and profitability for node operators."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"high-level-flow-architecture"},"children":["High-Level Flow Architecture"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Rakurai node is composed of four main components:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Scheduler Library"]}," – A scheduler optimized for selecting high-value transactions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Agave Client"]}," – A fork of the jito-solana client modified to run the Rakurai scheduler library."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Activation Program"]}," – A smart contract that controls node participation and enables validators to run a Rakurai node."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reward Distribution Program"]}," – A mechanism for distributing validator rewards to stakers using a permissionless, Merkle-root-based verification model."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"validator-incentives-and-rewards-flow"},"children":["Validator Incentives and Rewards Flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With Rakurai's advanced transaction scheduler, validators can capture higher block rewards while improving both TPS and CU utilization. At present, Rakurai does not charge any fees for running its client. Validators may keep these rewards entirely or choose to share a portion with their stakers. Distribution is executed via a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["configurable, trustless, merkle-root-based system"]},". In the future, Rakurai plans to charge a small commission on the block rewards earned by the validator."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"how-rakurai-interacts-with-the-solana-ecosystem"},"children":["How Rakurai Interacts with the Solana Ecosystem"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rakurai nodes function like standard Solana validators but include performance enhancements focused on transaction throughput and block reward optimization. They remain fully compatible with the Solana protocol while offering measurable improvements in validator economics. Rakurai actively maintains and updates the scheduler library to ensure compatibility with the latest Solana releases."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2.-quickstart-guide"},"children":["2. QuickStart Guide"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you are already running Rakurai and only want to upgrade your node, Following are quick steps to get up and running with this release."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note: If you are new to running Rakurai please follow the complete guide starting ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#download-and-build-rakurai-solana"},"children":["here"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Download the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-3-download-rakurai-scheduler-binary"},"children":["scheduler binary"]}," authenticating it with your identity-key."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Please make sure to update your submodules in this release using the following command:"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["git submodule update --init"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Make sure to replace your old binary with new one in the correct paths."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-4-build-the-client"},"children":["Build and run"]}," your validator incorporating the scheduler binary you just downloaded."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Please make sure you add --bam-url  in your startup script according to your ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://bam.dev/validators/#:~:text=Step%203%3A%20Choose%20Your%20Region"},"children":["location"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Please share the output of this command after your first leader turn on Rakurai validator."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"date; for p in \"block time\" \"Banking packet delay\" \"rakurai_status\"; do line=$(grep \"$p\" <LOG_FILE> | tail -n1); echo \"$p: ${line:-not found}\"; done\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Replace <LOG_FILE> with your actual log file name."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3.-rakurai-smart-contracts-programs"},"children":["3. Rakurai Smart Contracts (Programs)"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"overview-of-key-programs"},"children":["Overview of Key Programs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["rakurai_activation"]},": A multisig-based smart contract responsible for enabling or disabling the Rakurai scheduler. Each validator must create a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai_activation_account (RAA)"]}," (one-time setup), which is a multisig PDA controlled by both the validator and Rakurai. Both parties (2/2) must approve enabling the Rakurai scheduler—otherwise, the standard scheduler will run. However, either party can disable it unilaterally (1/2). Validators can also configure the percentage of block rewards they want to keep (0–100%). Any remaining rewards will be distributed to the stakers."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["rewards_distribution"]},": Similar in concept to the Jito tip distribution program, this contract handles the distribution of block rewards. For each epoch, an account is created that holds Merkle-root-based proofs of stake rewards. At the epoch’s end, rewards are distributed permissionlessly and verifiably. The validator's share of block rewards is never moved—it remains in the validator’s identity account."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"how-the-programs-coordinate"},"children":["How the Programs Coordinate"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validators must first create a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai_activation"]}," account using the provided CLI. Once the account is active, they can download and run the Rakurai scheduler binary. Every epoch, a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rewards_distribution"]}," account is created automatically to facilitate the staker rewards distribution."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"deployed-program-id"},"children":["Deployed Program ID"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Testnet"]},": Recommended for staging and integration testing.",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["rakurai_activation"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pmQHMpnpA534JmxEdwY3ADfwDBFmy5my3CeutHM2QTt"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["reward_distribution"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["A37zgM34Q43gKAxBWQ9zSbQRRhjPqGK8jM49H7aWqNVB"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Mainnet"]},": Production environment",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["rakurai_activation"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rAKACC6Qw8HYa87ntGPRbfYEMnK2D9JVLsmZaKPpMmi"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["reward_distribution"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RAkd1EJg45QQHeuXy7JEWBhdNvsd64Z5PbZJWQT96iB"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4.-setup-and-build-rakurai-solana"},"children":["4. Setup and Build Rakurai Solana"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prerequisites"},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Ensure you have ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rust"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Cargo"]},", and the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solana CLI"]}," installed before proceeding."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rust and Cargo"]},": ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://doc.rust-lang.org/cargo/getting-started/installation.html#install-rust-and-cargo"},"children":["Installing Rust and Cargo"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solana CLI"]},": ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://solana.com/docs/intro/installation"},"children":["Solana CLI Installation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Anchor"]},": ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://solana.com/docs/intro/installation#install-anchor-cli"},"children":["Installing Anchor"]}," (optional)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Additionally:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep system packages updated (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sudo apt update && sudo apt upgrade"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Refer to the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.anza.xyz/operations/guides/validator-start"},"children":["Solana Validator Setup Guide"]}," for Solana's official documentation."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"download-and-build-rakurai-solana"},"children":["Download and Build Rakurai-Solana"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-1-clone-the-rakurai-solana"},"children":["Step 1: Clone the Rakurai-Solana"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Clone the latest Rakurai-Solana release with submodules:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"git clone https://github.com/rakurai-io/rakurai-validator.git --recurse-submodules -b <version>-rakurai \ncd ./rakurai-validator\ngit checkout release/<version>-rakurai\n\n          OR\n\n# Steps if you have the repo cloned already\ngit fetch\ngit checkout release/<version>-rakurai\n# If you are on a previous branch where rakurai_scheduler was addeded as a submodule then run the following command before updating the submodules\ngit rm --cached core/src/banking_stage/rakurai_scheduler\ngit submodule update --init --recursive\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Export the Rakurai CLI path:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"echo \"export PATH=\\\"$(pwd)/rakurai_programs/release/downloads:\\$PATH\\\"\" >> ~/.bashrc && source ~/.bashrc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-2-create-rakurai-activation-account-raa"},"children":["Step 2: Create Rakurai Activation Account (RAA)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the CLI to initialize your validator's ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#overview-of-key-programs"},"children":["activation account"]},". The following command will return a Pubkey (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RAKURAI_ACTIVATION_ACCOUNT_PUBKEY"]},"), which will be used in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-2-download-scheduler-binary"},"children":["next step"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note"]},":"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you already have created rakurai activation account then run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai-activation -p <PROGRAM_ID> show -i <IDENTITY_PUBKEY> -um"]}," to get your <RAKURAI_ACTIVATION_ACCOUNT_PUBKEY>"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Activation Account (RAA)"]}," is uniquely tied to a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["validator identity"]},". You must create a separate ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["RAA for each validator and each cluster"]}," (e.g., ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["testnet"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["mainnet-beta"]},"). since each cluster uses a different ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Activation Program"]}," ID."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"rakurai-activation -p <PROGRAM_ID> init \\\n --vote_pubkey <VOTE_PUBKEY> \\\n --keypair <IDENTITY_KEYPAIR> \\\n --url <RPC_URL>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Arguments:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--program-id <PROGRAM_ID>"]},": Specify the Rakurai Activation Program ID.",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Mainnet: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rAKACC6Qw8HYa87ntGPRbfYEMnK2D9JVLsmZaKPpMmi"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Testnet: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pmQHMpnpA534JmxEdwY3ADfwDBFmy5my3CeutHM2QTt"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--vote_pubkey <VOTE_PUBKEY>"]},": Validator vote account public key."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--keypair <IDENTITY_KEYPAIR>"]},": Path to validator identity keypair file."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Optional Argument:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--block_reward_commission_bps <VALUE>"]},": Validator commission percentage on block rewards in basis points (i.e 100 bps = 1%). [Default Value: 10000 bps]"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more details, refer to the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/rakurai-io/rakurai_programs/releases/latest"},"children":["latest release"]}," of Rakurai Activation CLI."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-3-download-rakurai-scheduler-binary"},"children":["Step 3: Download Rakurai Scheduler Binary"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before running the scheduler, you must ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["authenticate"]}," and download the correct binary for your OS and release version."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"️-notes"},"children":["⚠️ Notes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Activation Account (RAA)"]}," is ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#step-2-create-rakurai-activation-account-raa"},"children":["uniquely tied"]}," to a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["validator identity"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["scheduler binary itself is NOT tied to a validator"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You can reuse the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["same binary across multiple validators"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always verify the version before downloading."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"1.-sign-the-rakurai-activation-account"},"children":["1. Sign the Rakurai Activation Account"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["validator identity keypair"]}," to sign the activation account’s public key:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"solana sign-offchain-message <RAKURAI_ACTIVATION_ACCOUNT_PUBKEY> \\\n  --keypair /path/to/validator-keypair.json\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This command will output a base58-encoded ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGNATURE"]},". You’ll use this in the next step to verify your request."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"2.-get-available-versions"},"children":["2. Get Available Versions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must fetch the available scheduler versions"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["match your OS exactly"]}," (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ubuntu_24.04"]},"):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X GET https://api.rakurai.io/api/v1/scheduler/versions\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  {\n    \"os\": \"ubuntu_24.04\",\n    \"mainnet_and_testnet\": [\"v2.3.6-rakurai.0\"],\n    \"testnet_only\": []\n  }\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"3.-download-the-scheduler-binary"},"children":["3. Download the Scheduler Binary"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Using the signature from step 1 and the version from step 2, download the binary:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -o rakurai-scheduler.tar.gz https://api.rakurai.io/api/v1/downloads/scheduler \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"activation_account\": \"<RAKURAI_ACTIVATION_ACCOUNT_PUBKEY>\",\n    \"signature\": \"<SIGNATURE>\",\n    \"version\": \"<VERSION>\",\n    \"os\": \"<OS_VERSION>\"\n  }' \\\n  --fail-with-body || cat rakurai-scheduler.tar.gz\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Ensure you:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Match ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["version"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["exactly"]}," from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/scheduler/versions"]}," API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["correct OS key"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ubuntu_24.04"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ubuntu_22.04"]},", etc)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["activation_account"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["signature"]}," with valid values."]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-4-build-the-client"},"children":["Step 4: Build the Client"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the root folder of the repository, run the following commands:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Extract the Rakurai scheduler library\nmkdir -p ./target/release/\ntar -xvzf ./rakurai-scheduler.tar.gz\n# It will extract itself into a folder where binaries for different OS versions are present\n# copy the version according to your OS version\ncp librak*.so ./target/release/\n\n# Build the client\ncargo build --release --features build_validator\n\n# Export the scheduler binary path\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path_to_rakurai-validator>/target/release\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Note"]}]},": If you're using a custom launch script like ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator.sh"]},", make sure to export the scheduler binary path within it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-5-add-additional-cli-args"},"children":["Step 5: Add Additional CLI Args"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Modify your validator startup script by appending the following arguments:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"mainnet-arguments"},"children":["Mainnet Arguments"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":" --rewards-merkle-root-authority H21wFgN53ghjDq5N9QhraAiPn1tRVYkobySj55unXLEj \\\n --rakurai-activation-program-id rAKACC6Qw8HYa87ntGPRbfYEMnK2D9JVLsmZaKPpMmi \\\n --reward-distribution-program-id RAkd1EJg45QQHeuXy7JEWBhdNvsd64Z5PbZJWQT96iB\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"testnet-arguments"},"children":["Testnet Arguments"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":" --rewards-merkle-root-authority H21wFgN53ghjDq5N9QhraAiPn1tRVYkobySj55unXLEj \\\n --rakurai-activation-program-id pmQHMpnpA534JmxEdwY3ADfwDBFmy5my3CeutHM2QTt \\\n --reward-distribution-program-id A37zgM34Q43gKAxBWQ9zSbQRRhjPqGK8jM49H7aWqNVB\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can add the following argument in your startup script to specify the validator client's mode of operation."," ","It will default to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai-jito"]}," if not specified. Other available option is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bam-strict-compliance"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai-bam"]}," is restricted until complete compatability with BAM is ensured."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":" --client-mode <CLIENT_MODE>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can change the client-mode through admin RPC without restarting your validator using the following command"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"setClientMode\",\"params\":[\"<CLIENT_MODE>\"]}' | socat - UNIX-CONNECT:admin.rpc\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["optionally"]}," add the following argument to delay QUIC packets that are not coming from the Jito relayer."," ","This emulates the approach used by Jito in their relayer. It will default to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}," if not specified."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":" --banking-packet-delay-ms <BANKING_PACKET_DELAY_MS>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is another ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["optional"]}," argument available to adjust the block times within the protocol limits. The default value of this argument is set to 10 which translates to 390ms block times. You can set it to a max of 50 which translates to 350ms"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":" --target-slot-adjustment-ms <TARGET_SLOT_ADJUSTMENT_MS>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.anza.xyz/operations/setup-a-validator#create-a-validator-startup-script"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Agave Validator arguments"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://jito-foundation.gitbook.io/mev/jito-solana/command-line-arguments"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Jito-Solana arguments"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Important"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--rewards-merkle-root-authority"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["H21wFgN53ghjDq5N9QhraAiPn1tRVYkobySj55unXLEj"]},", Rakurai will automatically distribute rewards to your stakers using the reward distribution program."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you set it to any other address, you will need to run the claim workflow manually."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"running-geyser-with-rakurai-client"},"children":["Running Geyser with Rakurai Client"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The struct layout and padding of the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rakurai Validator"]}," are slightly different from the standard ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Agave/Solana validator"]},". To run any third-party Geyser with a Rakurai client, you ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must follow the steps"]}," outlined in this ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/running-geyser-with-rakurai-client"},"children":["guide"]}]}," and apply the required patches to ensure compatibility.A sample Geyser plugin binary is provided in this directory: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/spark-geyser/readme"},"children":["spark-geyser"]}]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," Running a standard Geyser without applying Rakurai-compatible patches ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["may crash your node or cause undefined behavior"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"verify-scheduler-binary-attestation"},"children":["Verify Scheduler Binary Attestation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Rakurai scheduler binary comes with ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.github.com/en/actions/concepts/security/artifact-attestations"},"children":["GitHub artifact attestation"]},", providing cryptographic proof of its build provenance and integrity. You can validate the scheduler binary by following the detailed instructions in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/verify-binary-attestation"},"children":["Attestation Guide"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]}]},"headings":[{"value":"Rakurai-Solana Node Operator Guide","id":"rakurai-solana-node-operator-guide","depth":1},{"value":"1. Background","id":"1.-background","depth":2},{"value":"What is Rakurai-Solana?","id":"what-is-rakurai-solana","depth":3},{"value":"High-Level Flow Architecture","id":"high-level-flow-architecture","depth":3},{"value":"Validator Incentives and Rewards Flow","id":"validator-incentives-and-rewards-flow","depth":3},{"value":"How Rakurai Interacts with the Solana Ecosystem","id":"how-rakurai-interacts-with-the-solana-ecosystem","depth":3},{"value":"2. QuickStart Guide","id":"2.-quickstart-guide","depth":2},{"value":"3. Rakurai Smart Contracts (Programs)","id":"3.-rakurai-smart-contracts-programs","depth":2},{"value":"Overview of Key Programs","id":"overview-of-key-programs","depth":3},{"value":"How the Programs Coordinate","id":"how-the-programs-coordinate","depth":3},{"value":"Deployed Program ID","id":"deployed-program-id","depth":3},{"value":"4. Setup and Build Rakurai Solana","id":"4.-setup-and-build-rakurai-solana","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":3},{"value":"Download and Build Rakurai-Solana","id":"download-and-build-rakurai-solana","depth":3},{"value":"Step 1: Clone the Rakurai-Solana","id":"step-1-clone-the-rakurai-solana","depth":4},{"value":"Step 2: Create Rakurai Activation Account (RAA)","id":"step-2-create-rakurai-activation-account-raa","depth":4},{"value":"Step 3: Download Rakurai Scheduler Binary","id":"step-3-download-rakurai-scheduler-binary","depth":4},{"value":"⚠️ Notes:","id":"️-notes","depth":4},{"value":"1. Sign the Rakurai Activation Account","id":"1.-sign-the-rakurai-activation-account","depth":5},{"value":"2. Get Available Versions","id":"2.-get-available-versions","depth":5},{"value":"3. Download the Scheduler Binary","id":"3.-download-the-scheduler-binary","depth":5},{"value":"Step 4: Build the Client","id":"step-4-build-the-client","depth":4},{"value":"Step 5: Add Additional CLI Args","id":"step-5-add-additional-cli-args","depth":4},{"value":"Mainnet Arguments","id":"mainnet-arguments","depth":5},{"value":"Testnet Arguments","id":"testnet-arguments","depth":5},{"value":"Running Geyser with Rakurai Client","id":"running-geyser-with-rakurai-client","depth":1},{"value":"Verify Scheduler Binary Attestation","id":"verify-scheduler-binary-attestation","depth":1}],"frontmatter":{"seo":{"title":"Rakurai-Solana Node Operator Guide"}},"lastModified":"2026-04-17T04:12:50.000Z"},"slug":"/docs/services/rakurai_jito_private/readme","userData":{"isAuthenticated":false,"teams":["anonymous"]}}