{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"codeGuideFiles":[],"seo":{"title":"Client Config CLI ( rakurai-client-config )","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":"client-config-cli--rakurai-client-config-"},"children":["Client Config CLI (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai-client-config"]},")"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["This is the switchboard for which services can reach a Rakurai validator."]}," It manages on-chain ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["block-engine"]}," (recv bundles), ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["post-pack / P2C"]}," (send txns for backrun), and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["virtual-priority"]}," (percent of a tip account’s tip) settings."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The operating rule that matters most: every write ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["replaces the whole config"]},", so you always submit ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["current + new"]},". Submitting only your new entry silently removes everything else, including endpoints other partners are live on."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Audience:"]}," Rakurai ops (manager) and validator operators (proposals).",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Program:"]}," ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/rakurai_programs/programs/rakurai_client_config/readme"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rakurai_client_config"]}]},".",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Install:"]}," ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/rakurai_programs/cli/readme#2.-installation"},"children":["CLI overview"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This CLI does ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," manage TCA / PSA / MCA money accounts — only scheduler ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["endpoints and virtual-priority tip maps"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1.-full-payload-current--new"},"children":["1. Full payload: current + new"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global update"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator update"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["proposal submit"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["proposal"]}," update ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["replace the entire on-chain ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Config"]}]},". There is no patch or merge on write. Program-level semantics: ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/rakurai_programs/programs/rakurai_client_config/readme#3.-full-replace--current--new"},"children":["Client Config — full replace"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["To add a block-engine, P2C, or virtual-priority set:"]}]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Dump current config (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global show"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator show"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["union --vote"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Save that output to a file"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Append the new named set, keeping every set you still want"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Submit that file with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--config-file"]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"danger","name":"A partial file silently deletes the rest"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Never submit a JSON that contains only the new set. That file becomes the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["whole"]}," PDA contents and every other set on the account is deleted. Always dump the current config first and keep a copy — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--dry-run"]}," is not available on these writes."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Worked example — add P2C ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c-new-1"]}," on global when global already has ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c-main-1"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c-main-2"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"block_engine\": { \"sets\": [ /* unchanged: copy from global show */ ] },\n  \"p2c\": {\n    \"sets\": [\n      { \"name\": \"p2c-main-1\", \"url\": [{ \"url\": \"https://p2c1.example\" }] },\n      { \"name\": \"p2c-main-2\", \"url\": [{ \"url\": \"https://p2c2.example\" }] },\n      { \"name\": \"p2c-new-1\", \"url\": [{ \"url\": \"https://p2c-new.example\" }] }\n    ]\n  },\n  \"virtual_priority\": { \"sets\": [ /* unchanged: copy from global show */ ] }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Same pattern for a new ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["block engine"]}," or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["virtual-priority"]}," set. To add a URL ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["inside"]}," an existing set, copy that set’s current ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}," list and append the URL."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/validator_config_overlay.6e563e4b9b7e1acb15e387499bc4561141cf8be152f4e87285fcefc3eec08aea.93d10920.json"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["examples/validator_config_overlay.json"]}]}," is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," a write template. It only shows extra validator-named sets. Fold those extras into a full current snapshot before ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator update"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["proposal submit"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2.-layers"},"children":["2. Layers"]},{"$$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":"Account"},"children":["Account"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Who"},"children":["Who"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Global"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manager"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Defaults + size caps for every validator"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Validator"]}," (per ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--vote"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manager"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live overlay + size caps (proposals use these)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Proposal"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Operator → manager approve/reject"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Draft; live unchanged until approve"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Effective config the node uses = ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["validator PDA if present, otherwise global"]},". No merge. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["union --vote"]}," prints that."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Size caps (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ConfigLimits::V1"]},") live on global/validator/proposal PDAs (≤ absolute safety max). Init: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global init"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator init"]},". Proposals snapshot validator limits on submit/update."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3.-json-shape"},"children":["3. JSON shape"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each file has all three sections. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/assets/validator_config.989cb4c0d380996ad2edb25039f547d5899d16d31b6e087eb1ee0959a7bfc66d.93d10920.json"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["examples/validator_config.json"]}]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"block_engine\": {\n    \"sets\": [\n      {\n        \"name\": \"be-main-1\",\n        \"url\": [\n          {\n            \"url\": \"https://be1.example\",\n            \"max_bundles\": 100,\n            \"period_ms\": 100,\n            \"max_bundle_burst\": 0\n          }\n        ]\n      }\n    ]\n  },\n  \"p2c\": {\n    \"sets\": [\n      { \"name\": \"p2c-main-1\", \"url\": [{ \"url\": \"https://p2c1.example\" }] }\n    ]\n  },\n  \"virtual_priority\": {\n    \"sets\": [\n      {\n        \"name\": \"vp-main-1\",\n        \"url\": [{ \"key\": \"<PUBKEY>\", \"value\": 0.1 }]\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$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":"Section"},"children":["Section"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Fields"},"children":["Fields"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Block engine"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["max_bundles"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["period_ms"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["max_bundle_burst"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]}," = unlimited / treat burst as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["max_bundles"]}," when quota is set). Scheduler ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["receives bundles"]}," from these URLs."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["P2C"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}," only. Scheduler ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sends"]}," packed txns here for arbitrage / backrun (point of no return; no front-running). See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/services/rakurai_jito_private/rakurai_docs/transaction_inclusion/post_pack/readme"},"children":["Post-pack confirmations"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Virtual priority"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["key"]}," (tip-account pubkey), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["value"]}," (fraction of that tip in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[0.0, 1.0]"]},"; e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0.1"]}," = 10%)"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," is truncated to 32 bytes. Omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--config-file"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["global init"]}," to create empty sets, then update with a full file."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4.-global-flags"},"children":["4. Global flags"]},{"$$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":"Flag"},"children":["Flag"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Default"},"children":["Default"]},{"$$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":["-k"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--keypair"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["~/.config/solana/id.json"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manager or operator, depending on command"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-u"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--url"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["t"]}," (testnet)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["RPC URL or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["l"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["t"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["d"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["m"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-p"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--program-id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["4uGNMjJFxgE3TfEiPmSpvfwYah12QZbaWWZDJqZvA9F4"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Program ID"]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config --url <RPC_URL> --program-id <PROGRAM_ID> --keypair <KEYPAIR> <COMMAND>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5.-commands"},"children":["5. Commands"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always pass a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["full"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--config-file"]}," on update / submit."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Large configs are uploaded via ephemeral ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["staging"]}," PDAs. If a previous staging upload failed mid-way, the CLI aborts any existing staging account before starting a new upload so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["init"]}," cannot fail on “account already exists”."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"5.1.-global-manager"},"children":["5.1. Global (manager)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config global init --config-file cli/examples/validator_config.json\n# Optional caps on init (defaults shown):\n#   --max-url-len 256 --max-sets-per-section 16 --max-urls-per-set 8 --max-vp-entries-per-set 64\nrakurai-client-config global show\n# Edit the printed JSON (current + new), save, then:\nrakurai-client-config global update --config-file /tmp/global-current-plus-new.json\nrakurai-client-config global set-limits --max-url-len 256 --max-sets-per-section 16\nrakurai-client-config global close\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"5.2.-validator-live-pda-manager"},"children":["5.2. Validator live PDA (manager)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config validator init --vote <VOTE_PUBKEY> --operator <OPERATOR_PUBKEY>\nrakurai-client-config validator set-operator --vote <VOTE_PUBKEY> --operator <OPERATOR_PUBKEY>\nrakurai-client-config validator set-limits --vote <VOTE_PUBKEY> --max-url-len 256\nrakurai-client-config validator show --vote <VOTE_PUBKEY>\nrakurai-client-config validator update --vote <VOTE_PUBKEY> --config-file /tmp/validator-current-plus-new.json\nrakurai-client-config validator close --vote <VOTE_PUBKEY>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator init"]}," copies ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["then-current global"]}," config ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["and limits"]},". Later global edits do not rewrite existing validator PDAs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"5.3.-proposal-operator--manager"},"children":["5.3. Proposal (operator → manager)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"# Operator: current validator/union JSON + new sets\nrakurai-client-config -k operator.json proposal submit --vote <VOTE> \\\n  --config-file /tmp/proposal-current-plus-new.json\nrakurai-client-config proposal show --vote <VOTE>\n\n# Manager\nrakurai-client-config -k manager.json proposal approve --vote <VOTE>\nrakurai-client-config -k manager.json proposal reject --vote <VOTE>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"5.4.-union"},"children":["5.4. Union"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config union\nrakurai-client-config union --vote <VOTE_PUBKEY>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"6.-proposal-flow-step-by-step"},"children":["6. Proposal flow (step by step)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Goal: operator proposes a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["new P2C set"]}," for one vote. The file they submit is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["entire"]}," live validator config after approve — keep every current set and append the new one."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Placeholders: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<VOTE>"]},", manager keypair ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["manager.json"]},", operator keypair ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operator.json"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"6.1.-manager--create-the-live-validator-pda-and-name-the-operator"},"children":["6.1. Manager — create the live validator PDA and name the operator"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config -k manager.json validator init \\\n  --vote <VOTE> \\\n  --operator <OPERATOR_PUBKEY>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This copies ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["then-current global"]}," onto the validator PDA. Only this operator can ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["proposal submit"]}," for that vote."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"6.2.-operator--dump-what-is-live-today"},"children":["6.2. Operator — dump what is live today"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use whichever snapshot you will edit. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["union --vote"]}," is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["effective"]}," config (validator PDA if present, else global). After ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator init"]},", that is the validator PDA."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config union --vote <VOTE>\n# or\nrakurai-client-config validator show --vote <VOTE>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Copy the printed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["block_engine"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["virtual_priority"]}," sets into a file, e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/tmp/proposal-current-plus-new.json"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"6.3.-operator--add-the-new-set-keeping-current"},"children":["6.3. Operator — add the new set, keeping current"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," send a file that only contains the new set. Example — current P2C ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c-main-1"]}," stays, new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p2c-op-1"]}," is appended:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"block_engine\": { \"sets\": [ /* copy from show / union — unchanged */ ] },\n  \"p2c\": {\n    \"sets\": [\n      { \"name\": \"p2c-main-1\", \"url\": [{ \"url\": \"https://p2c1.example\" }] },\n      { \"name\": \"p2c-op-1\", \"url\": [{ \"url\": \"https://p2c-operator.example\" }] }\n    ]\n  },\n  \"virtual_priority\": { \"sets\": [ /* copy from show / union — unchanged */ ] }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Same idea for a new block-engine or virtual-priority set."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"6.4.-operator--submit-the-draft"},"children":["6.4. Operator — submit the draft"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Live validator config is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["unchanged"]}," until the manager acts."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config -k operator.json proposal submit \\\n  --vote <VOTE> \\\n  --config-file /tmp/proposal-current-plus-new.json\n\nrakurai-client-config proposal show --vote <VOTE>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Re-run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["proposal submit"]}," with an updated full file to replace the draft before approve."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"6.5.-manager--approve-or-reject"},"children":["6.5. Manager — approve or reject"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"# Approve: proposal payload becomes the entire live validator config; proposal PDA is closed\nrakurai-client-config -k manager.json proposal approve --vote <VOTE>\n\n# Reject: live validator config stays as-is; proposal PDA is closed\nrakurai-client-config -k manager.json proposal reject --vote <VOTE>\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["approve"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validator show --vote <VOTE>"]}," should match the JSON from step 6.3. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["union --vote <VOTE>"]}," prints that same validator payload."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"7.-help"},"children":["7. Help"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"rakurai-client-config --help\nrakurai-client-config global --help\nrakurai-client-config validator --help\nrakurai-client-config proposal --help\n","lang":"sh"},"children":[]}]},"headings":[{"value":"Client Config CLI ( rakurai-client-config )","id":"client-config-cli--rakurai-client-config-","depth":1},{"value":"1. Full payload: current + new","id":"1.-full-payload-current--new","depth":2},{"value":"2. Layers","id":"2.-layers","depth":2},{"value":"3. JSON shape","id":"3.-json-shape","depth":2},{"value":"4. Global flags","id":"4.-global-flags","depth":2},{"value":"5. Commands","id":"5.-commands","depth":2},{"value":"5.1. Global (manager)","id":"5.1.-global-manager","depth":3},{"value":"5.2. Validator live PDA (manager)","id":"5.2.-validator-live-pda-manager","depth":3},{"value":"5.3. Proposal (operator → manager)","id":"5.3.-proposal-operator--manager","depth":3},{"value":"5.4. Union","id":"5.4.-union","depth":3},{"value":"6. Proposal flow (step by step)","id":"6.-proposal-flow-step-by-step","depth":2},{"value":"6.1. Manager — create the live validator PDA and name the operator","id":"6.1.-manager--create-the-live-validator-pda-and-name-the-operator","depth":3},{"value":"6.2. Operator — dump what is live today","id":"6.2.-operator--dump-what-is-live-today","depth":3},{"value":"6.3. Operator — add the new set, keeping current","id":"6.3.-operator--add-the-new-set-keeping-current","depth":3},{"value":"6.4. Operator — submit the draft","id":"6.4.-operator--submit-the-draft","depth":3},{"value":"6.5. Manager — approve or reject","id":"6.5.-manager--approve-or-reject","depth":3},{"value":"7. Help","id":"7.-help","depth":2}],"frontmatter":{"seo":{"title":"Client Config CLI ( rakurai-client-config )"}},"lastModified":"2026-09-08T06:12:51.000Z"},"slug":"/docs/services/rakurai_jito_private/rakurai_docs/rakurai_programs/cli/client_config","userData":{"isAuthenticated":false,"teams":["anonymous"]}}