@gabrielhicks/solv 5.3.5 → 5.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- var Oi=Object.defineProperty;var r=(t,e)=>Oi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as zd}from"commander";var or="5.3.5";var rr={name:"@gabrielhicks/solv",version:or,description:"Solana Validator CLI SOLV",main:"dist/index.js",type:"module",repository:"https://github.com/gabrielhicks/solv",keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",bin:{solv:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var Te=rr.version;var Qt="https://validators.solutions";var Ee="solv4.config.json";var At="identity.json",wt="unstaked-identity.json",nr="relayer-keypair.json",Ci="mainnet-validator-keypair.json",Ii="mainnet-vote-account-keypair.json",Pi="mainnet-authority-keypair.json",Li="testnet-validator-keypair.json",xi="testnet-vote-account-keypair.json",Vi="testnet-authority-keypair.json",L="/home/solv",R=`${L}/${At}`,nu=`${L}/${wt}`,b=`${L}/${Ci}`,ge=`${L}/${Ii}`,su=`${L}/${Pi}`,x=`${L}/${Li}`,Ae=`${L}/${xi}`,au=`${L}/${Vi}`,z=`${L}/solana-validator.log`,et=L+"/start-validator.sh",w="/mnt/ledger",It="/mnt/accounts",ot="/mnt/snapshots",sr="solana-validator",ar="agave-validator",ir="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var we=3,cr="https://api.testnet.solana.com",lr="https://api.mainnet-beta.solana.com",mr="https://verify.validators.solutions/solv-migrate",pr="https://jup.validators.solutions/v1/jup",_o;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(_o||(_o={}));var dr=Object.values(_o),_e="So11111111111111111111111111111111111111112",Ne="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",No="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var ur="SOLV420",fr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as bi}from"child_process";import{spawnSync as hr}from"node:child_process";var $i=r((t,e=!1)=>{e?hr(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):hr(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Pt=$i;var yr="agave-validator",Di=r(()=>{try{return yr}catch(t){return console.error(t),yr}},"getSolanaCLI"),rt=Di;var ve=r(async(t,e=!1)=>{Pt(t,e)},"updateVersion"),Re=r(async(t,e=!1,o=10)=>{let n=rt(),s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --monitor --min-idle-time ${o}`;e&&(s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --min-idle-time ${o}`),bi(s,{shell:!0,stdio:"inherit"})},"monitorUpdate");import cn from"chalk";var _t;(function(t){t.EN="en",t.JA="ja"})(_t||(_t={}));var Sr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(Sr||(Sr={}));var Tr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(Tr||(Tr={}));var ft;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(ft||(ft={}));var Er;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(Er||(Er={}));var gr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(gr||(gr={}));var Ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(Ar||(Ar={}));var wr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(wr||(wr={}));var Oe;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Oe||(Oe={}));var ke;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ke||(ke={}));var vr=!1,Rr=!0,Or=!1,kr=!0,j={ID:"solv",LANG:_t.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.3.7",MAINNET_SOLANA_VERSION:"2.3.7",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1},K={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},nt={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},C={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",FRANKENDANCER_LOGROTATE:"/etc/logrotate.d/frankendancer",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},I={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},N=r((t=K.ROOT)=>{let e=t===K.ROOT?K.ROOT:t,o=`${e}/${I.MAINNET_VALIDATOR_KEY}`,n=`${e}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${I.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${I.TESTNET_VALIDATOR_KEY}`,i=`${e}/${I.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${I.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),ht=r((t=!0)=>{let e=t?`${K.ROOT}/${I.TESTNET_VALIDATOR_KEY}`:`${K.ROOT}/${I.MAINNET_VALIDATOR_KEY}`,o=t?`${K.ROOT}/${I.TESTNET_VALIDATOR_VOTE_KEY}`:`${K.ROOT}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${K.ROOT}/${nt.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,c=`${K.ROOT}/${nt.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var Z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",vo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Cr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Ir=9,st="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Pr="So11111111111111111111111111111111111111112",Lr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",xr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",_r;(function(t){t[t.ELSOL=st]="ELSOL",t[t.SOL=Pr]="SOL",t[t.USDC=Lr]="USDC",t[t.EPCT=xr]="EPCT"})(_r||(_r={}));var Nr;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(Nr||(Nr={}));var Au={[Pr]:9,[st]:9,[Lr]:6,[xr]:6},Ce="/home/solv/currentEpoch.json",Ro=.5,Ie="https://api.testnet.solana.com";import{spawnSync as Oo}from"child_process";var Vr=r(()=>{Oo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=j.NODE_VERSION;Oo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Oo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var lt={version:"2.3.6",tag:"v2.3.6",commissionBps:1e3,relayerUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",shredReceiverAddr:"64.130.50.14:1002"},Zt={TESTNET:{Dallas:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.testnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.35.224:1002"}},MAINNET:{Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002"},Singapore:{BLOCK_ENGINE_URL:"https://singapore.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://singapore.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.11.224:1002"}}};import{spawnSync as $r}from"child_process";var Pe=r((t=lt.tag,e=!1)=>{e?$r(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):$r(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ki,writeFile as Ui}from"fs/promises";import{homedir as Mi}from"os";var Xt=r(async t=>{let o=`${Mi()}/${nt.JITO_CONFIG}`,s={...JSON.parse(await Ki(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ui(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Dr}from"child_process";import Hi from"inquirer";var br=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";Dr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;Dr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Kr=r(async()=>await Hi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as te}from"@skeet-framework/utils";import Fi from"chalk";import Yi from"inquirer";var Ur=r(async()=>{let t=await Yi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await te("sudo ufw delete allow 8899/udp"),await te("sudo ufw delete allow 8899/tcp"),await te(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await te(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await te("sudo ufw reload"),console.log(Fi.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ji=r(()=>or,"getSolvVersion"),Lt=ji;import{readFile as Ji,writeFile as zi}from"fs/promises";import{existsAsync as Wi}from"@skeet-framework/utils";var ko;(function(t){t.EN="en",t.JA="ja"})(ko||(ko={}));var Wu=Object.values(ko),f;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(f||(f={}));var Mr=Object.values(f),A;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(A||(A={}));var Hr=Object.values(A),T;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(T||(T={}));var qu=Object.values(T).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Fr=Object.values(D).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));var B="2.3.7",U="2.3.7",Nt="2.3.7",ee="2.3.7",Yr="2.3.7",vt="2.3.7";var jr="20.17.0",xt="0.707.20306",Vt="0.707.20306";var Bi={NETWORK:f.TESTNET,NODE_TYPE:A.RPC,VALIDATOR_TYPE:T.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:G.TRIPLE,TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U,NODE_VERSION:jr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:ir,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:It,SNAPSHOTS_PATH:ot,MOD:!1},mt=Bi;import{homedir as qi}from"os";var Qi=r(async()=>{let e=`${qi()}/${Ee}`;return await Wi(e)?JSON.parse(await Ji(e,"utf-8")):(console.log("Creating default config file at",e),await zi(e,JSON.stringify(mt,null,2)),mt)},"readConfig"),V=Qi;import Zi from"node-fetch";var W=r(async t=>{try{let e=await V();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var Oi=Object.defineProperty;var r=(t,e)=>Oi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as zd}from"commander";var or="5.3.7";var rr={name:"@gabrielhicks/solv",version:or,description:"Solana Validator CLI SOLV",main:"dist/index.js",type:"module",repository:"https://github.com/gabrielhicks/solv",keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",bin:{solv:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var Te=rr.version;var Qt="https://validators.solutions";var Ee="solv4.config.json";var At="identity.json",wt="unstaked-identity.json",nr="relayer-keypair.json",Ci="mainnet-validator-keypair.json",Ii="mainnet-vote-account-keypair.json",Pi="mainnet-authority-keypair.json",Li="testnet-validator-keypair.json",xi="testnet-vote-account-keypair.json",Vi="testnet-authority-keypair.json",L="/home/solv",R=`${L}/${At}`,nu=`${L}/${wt}`,b=`${L}/${Ci}`,ge=`${L}/${Ii}`,su=`${L}/${Pi}`,x=`${L}/${Li}`,Ae=`${L}/${xi}`,au=`${L}/${Vi}`,z=`${L}/solana-validator.log`,et=L+"/start-validator.sh",w="/mnt/ledger",It="/mnt/accounts",ot="/mnt/snapshots",sr="solana-validator",ar="agave-validator",ir="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var we=3,cr="https://api.testnet.solana.com",lr="https://api.mainnet-beta.solana.com",mr="https://verify.validators.solutions/solv-migrate",pr="https://jup.validators.solutions/v1/jup",_o;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(_o||(_o={}));var dr=Object.values(_o),_e="So11111111111111111111111111111111111111112",Ne="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",No="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var ur="SOLV420",fr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as bi}from"child_process";import{spawnSync as hr}from"node:child_process";var $i=r((t,e=!1)=>{e?hr(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):hr(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Pt=$i;var yr="agave-validator",Di=r(()=>{try{return yr}catch(t){return console.error(t),yr}},"getSolanaCLI"),rt=Di;var ve=r(async(t,e=!1)=>{Pt(t,e)},"updateVersion"),Re=r(async(t,e=!1,o=10)=>{let n=rt(),s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --monitor --min-idle-time ${o}`;e&&(s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --min-idle-time ${o}`),bi(s,{shell:!0,stdio:"inherit"})},"monitorUpdate");import cn from"chalk";var _t;(function(t){t.EN="en",t.JA="ja"})(_t||(_t={}));var Sr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(Sr||(Sr={}));var Tr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(Tr||(Tr={}));var ft;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(ft||(ft={}));var Er;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(Er||(Er={}));var gr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(gr||(gr={}));var Ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(Ar||(Ar={}));var wr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(wr||(wr={}));var Oe;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Oe||(Oe={}));var ke;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ke||(ke={}));var vr=!1,Rr=!0,Or=!1,kr=!1,j={ID:"solv",LANG:_t.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.3.7",MAINNET_SOLANA_VERSION:"2.3.7",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1},K={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},nt={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},C={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",FRANKENDANCER_LOGROTATE:"/etc/logrotate.d/frankendancer",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},I={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},N=r((t=K.ROOT)=>{let e=t===K.ROOT?K.ROOT:t,o=`${e}/${I.MAINNET_VALIDATOR_KEY}`,n=`${e}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${I.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${I.TESTNET_VALIDATOR_KEY}`,i=`${e}/${I.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${I.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),ht=r((t=!0)=>{let e=t?`${K.ROOT}/${I.TESTNET_VALIDATOR_KEY}`:`${K.ROOT}/${I.MAINNET_VALIDATOR_KEY}`,o=t?`${K.ROOT}/${I.TESTNET_VALIDATOR_VOTE_KEY}`:`${K.ROOT}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${K.ROOT}/${nt.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,c=`${K.ROOT}/${nt.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var Z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",vo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Cr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Ir=9,st="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Pr="So11111111111111111111111111111111111111112",Lr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",xr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",_r;(function(t){t[t.ELSOL=st]="ELSOL",t[t.SOL=Pr]="SOL",t[t.USDC=Lr]="USDC",t[t.EPCT=xr]="EPCT"})(_r||(_r={}));var Nr;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(Nr||(Nr={}));var Au={[Pr]:9,[st]:9,[Lr]:6,[xr]:6},Ce="/home/solv/currentEpoch.json",Ro=.5,Ie="https://api.testnet.solana.com";import{spawnSync as Oo}from"child_process";var Vr=r(()=>{Oo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=j.NODE_VERSION;Oo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Oo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var lt={version:"2.3.6",tag:"v2.3.6",commissionBps:1e3,relayerUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",shredReceiverAddr:"64.130.50.14:1002"},Zt={TESTNET:{Dallas:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.testnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.35.224:1002"}},MAINNET:{Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002"},Singapore:{BLOCK_ENGINE_URL:"https://singapore.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://singapore.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.11.224:1002"}}};import{spawnSync as $r}from"child_process";var Pe=r((t=lt.tag,e=!1)=>{e?$r(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):$r(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ki,writeFile as Ui}from"fs/promises";import{homedir as Mi}from"os";var Xt=r(async t=>{let o=`${Mi()}/${nt.JITO_CONFIG}`,s={...JSON.parse(await Ki(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ui(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Dr}from"child_process";import Hi from"inquirer";var br=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";Dr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;Dr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Kr=r(async()=>await Hi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as te}from"@skeet-framework/utils";import Fi from"chalk";import Yi from"inquirer";var Ur=r(async()=>{let t=await Yi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await te("sudo ufw delete allow 8899/udp"),await te("sudo ufw delete allow 8899/tcp"),await te(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await te(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await te("sudo ufw reload"),console.log(Fi.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ji=r(()=>or,"getSolvVersion"),Lt=ji;import{readFile as Ji,writeFile as zi}from"fs/promises";import{existsAsync as Wi}from"@skeet-framework/utils";var ko;(function(t){t.EN="en",t.JA="ja"})(ko||(ko={}));var Wu=Object.values(ko),f;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(f||(f={}));var Mr=Object.values(f),A;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(A||(A={}));var Hr=Object.values(A),T;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(T||(T={}));var qu=Object.values(T).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Fr=Object.values(D).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));var B="2.3.7",U="2.3.7",Nt="2.3.7",ee="2.3.7",Yr="2.3.7",vt="2.3.7";var jr="20.17.0",xt="0.707.20306",Vt="0.707.20306";var Bi={NETWORK:f.TESTNET,NODE_TYPE:A.RPC,VALIDATOR_TYPE:T.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:G.TRIPLE,TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U,NODE_VERSION:jr,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:ir,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:It,SNAPSHOTS_PATH:ot,MOD:!1},mt=Bi;import{homedir as qi}from"os";var Qi=r(async()=>{let e=`${qi()}/${Ee}`;return await Wi(e)?JSON.parse(await Ji(e,"utf-8")):(console.log("Creating default config file at",e),await zi(e,JSON.stringify(mt,null,2)),mt)},"readConfig"),V=Qi;import Zi from"node-fetch";var W=r(async t=>{try{let e=await V();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
3
3
  Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solv Notifier"};return(await Zi(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${t}`}),!1}},"sendDiscord");import{spawnSync as sc}from"child_process";import{Connection as Gr}from"@solana/web3.js";var oe=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Gr("https://api.testnet.solana.com"):new Gr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(u=>u.votePubkey===e);if(!c)return i.delinquent.find(p=>p.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),c=i.current.find(u=>u.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as Xi}from"child_process";var v=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Xi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var tc=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),M=tc;import{sendDiscord as ec}from"@skeet-framework/utils";var Br=60,oc=r(async t=>{try{let e=t.NETWORK===f.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=v(e?n:o),i=await oe(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Br){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Br} minutes!
4
4
  Account: ${i.pubkey}
5
5
  Reason: ${i.reason}
6
6
  Message: Max retries reached, exiting catchup check...
7
- Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await ec(l),!1}console.log("Waiting for validator to catch up..."),await M(60*1e3),i=await oe(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),Jr=oc;import{spawnSync as rc}from"node:child_process";var nc=r(()=>{let{stdout:t}=rc("solana --version",{shell:!0});return(t?String(t):"Unknown").trim()},"getSolanaVersion"),Le=nc;var ac=r(async t=>{let e=t.NETWORK===f.MAINNET,o=t.VALIDATOR_TYPE===T.FRANKENDANCER,{mainnetValidatorKey:n,testnetValidatorKey:s}=N(),a=e?n:s,i=Le(),c=!1;o?c=e?Or:kr:c=e?vr:Rr,c=c&&t.AUTO_RESTART;let l=v(a),m=`**${l}** updated solv to **${Lt()}** with Solana version **${i}**`;if(await W(m),c){let d=`Restarting **${l}**`;await W(d);try{sc("solv update -b",{stdio:"inherit",shell:!0})}catch(y){let g=`Error restarting **${l}**: ${y?.message||"Unknown error"}`;return await W(g),!1}let u=`**${l}** has restarted, catching up...`;await W(u),await M(180*1e3);let p=await Jr(t);if(p){let y=`**${l}** has caught up!`;await W(y)}else{let y=`**${l}** failed to catch up after update`;await W(y)}return p}return!0},"autoUpdate"),zr=ac;import{homedir as ic}from"os";import{readFile as cc,writeFile as Wr}from"fs/promises";import{existsAsync as lc}from"@skeet-framework/utils";var O=r(async t=>{let o=`${ic()}/${Ee}`;await lc(o)||(console.log("Creating default config file at",o),await Wr(o,JSON.stringify(mt,null,2)));let s={...JSON.parse(await cc(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Wr(o,a)},"updateDefaultConfig");var mc={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solv commands",subcmdHelp:"Display help for subcommands",server:"Open solv Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solv AA",installer:"Please select an option:",unstake:"UnStake"},xe=mc;var pc={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solv \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solv \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solv\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},qr=pc;var dc={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solv installer \u{1F525}",description:"solv is born and ready for running Solana Validator Nodes \u{1F680}"}},Ve=dc;var uc={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solv \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Qr=uc;var $e=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],De=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var Zr=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],Xr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var fc={server:{description:"Open solv Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solv AA"}},be=fc;var hc={server:{description:"Open solv Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solv AA"}},tn=hc;var Ke=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var en=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var yc=r(t=>{let e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke};switch(t){case _t.EN:e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke};break;case _t.JA:e={cmds:qr,subCmds:tn,logs:Qr,installer:Zr,installerSub:Xr,clientCmds:en};break;default:e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke}}return e},"readLocale"),on=yc;import{existsSync as gc,readFileSync as Ac,writeFileSync as rn}from"fs";import{readFileSync as Sc,writeFileSync as Tc}from"fs";import{homedir as Ec}from"os";var $t=r(t=>{let o=`${Ec()}/${nt.CONFIG}`,s={...JSON.parse(Sc(o,"utf8")),...t},a=JSON.stringify(s,null,2);Tc(o,a)},"updateSolvConfig");import{homedir as wc}from"os";var nn=r(()=>{let e=`${wc()}/${nt.CONFIG}`;gc(e)||(rn(e,JSON.stringify(j,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(Ac(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),rn(e,JSON.stringify(j,null,2)),o=j}let n=on(o.LANG);return o.RPC_URL||(o.RPC_URL=j.RPC_URL,$t({RPC_URL:j.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,$t({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",$t({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");import{spawnSync as sn}from"node:child_process";var Dt=r((t=!1,e="45",o=ot,n=U,s=t?"https://api.testnet.solana.com":"https://api.mainnet-beta.solana.com",a=!1)=>{try{let i=`docker run -it --rm -v ${o}:${o} --user $(id -u):$(id -g) c29r3/solana-snapshot-finder:latest --snapshot_path ${o} --min_download_speed ${e} --version ${n} --rpc ${s}`;if(t&&a){sn(`wget --trust-server-names https://snapshots.avorio.network/testnet/snapshot.tar.bz2 https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2 && for file in snapshot-* incremental-snapshot-*; do mv "$file" "$(echo "$file" | sed 's/\\?.*$//')"; done`,{shell:!0,stdio:"inherit",cwd:o});return}sn(i,{shell:!0,stdio:"inherit"})}catch(i){throw new Error(`getSnapshot Error: ${i}`)}},"getSnapshot");import{spawnSync as X}from"child_process";var an=r(async(t,e,o=!1)=>{let n=t.NETWORK===f.TESTNET,s=e||(n?xt:Vt);o||t.MOD?(X("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),X(`git -C /home/solv/firedancer checkout v${s}-mod`,{shell:!0,stdio:"inherit"}),X("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})):(X("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),X(`git -C /home/solv/firedancer checkout v${s}`,{shell:!0,stdio:"inherit"}),X("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})),X("export FD_AUTO_INSTALL_PACKAGES=1 && ./deps.sh fetch check install",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),X("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),X("sudo systemctl restart frankendancer",{shell:!0,stdio:"inherit"}),X("sudo rm -rf /mnt/accounts/snapshot",{shell:!0,stdio:"inherit"}),X("sudo systemctl restart port-relay",{shell:!0,stdio:"inherit"})},"frankendancerUpdate");var ln=r(t=>{let e=t.NETWORK===f.TESTNET,o=t.NODE_TYPE===A.RPC,n=t.VALIDATOR_TYPE===T.JITO,s=t.VALIDATOR_TYPE===T.FRANKENDANCER,a=t.AUTO_RESTART,i=t.MOD,c=10;a&&!e&&(c=30);let l=e?B:U;n&&(l=ee,e&&(l=Nt)),s&&(l=Vt,e&&(l=xt)),o&&(l=vt,n&&(l=Yr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${l}`,l).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solv Config",!1).option("--config","Update Solv Config Default Solana Version",!1).option("--auto","Auto Update",!1).option("--mod","Modified Versions",!1).action(async m=>{let d=Lt(),u=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(cn.white(`Current solv version: ${d}`)),m.auto){await zr(t);return}if(m.migrateConfig){let p=nn().config,y=G.TRIPLE;p.DISK_TYPES===0?y=G.DOUBLE:p.DISK_TYPES===1?y=G.SINGLE:y=G.TRIPLE;let g=p.SOLANA_NETWORK===ft.TESTNET,S=p.SOLV_TYPE===Oe.RPC_NODE,E=p.MAINNET_TYPE===ke.JITO_MEV,$={NETWORK:g?f.TESTNET:f.MAINNET,NODE_TYPE:S?A.RPC:A.VALIDATOR,MNT_DISK_TYPE:y,RPC_TYPE:S?D.JITO:D.NONE,VALIDATOR_TYPE:E?T.JITO:g?T.AGAVE:T.SOLANA,TESTNET_SOLANA_VERSION:p.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:p.MAINNET_SOLANA_VERSION,NODE_VERSION:p.NODE_VERSION,TESTNET_DELINQUENT_STAKE:p.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:p.MAINNET_DELINQUENT_STAKE,COMMISSION:p.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:p.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:p.STAKE_ACCOUNT,HARVEST_ACCOUNT:p.HARVEST_ACCOUNT,IS_MEV_MODE:p.IS_MEV_MODE,RPC_URL:p.RPC_URL,KEYPAIR_PATH:p.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:p.DISCORD_WEBHOOK_URL,AUTO_UPDATE:p.AUTO_UPDATE,AUTO_RESTART:p.AUTO_RESTART,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:p.LEDGER_PATH,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1};await O($)}if(m.config){if(await O({TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U}),n){let p=e?Nt:ee;await Xt({version:p,tag:`v${p}`})}console.log(cn.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(m.firewall){await Ur();return}if(m.background){let p=m.version;if(await O({TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U}),n){Pe(`v${p}`,m.mod||i),await Xt({version:p,tag:`v${p}`}),await Re(u,!0,c);return}if(e&&Dt(e,"10",t.SNAPSHOTS_PATH,B),s){await an(t,p,m.mod||i),await Re(u,!0,c);return}await ve(p,m.mod||i),await Re(e?5:5,!0,c);return}else if(m.commission){let p=await Kr();br(p.commission,e)}else Vr()})},"updateCommands");import{spawnSync as _c}from"node:child_process";var mn=r(t=>{try{let{log:e}=ht(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=_c(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var pn=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{mn(t)})},"logCommands");import dt from"chalk";import{spawnSync as Nc}from"child_process";import{homedir as vc}from"os";var Ue=r(t=>{let e=vc(),o=N(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=ft.TESTNET,c=t.COMMISSION;t.NETWORK===f.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=ft.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===f.TESTNET&&(l=ft.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;Nc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Me}from"child_process";import{existsSync as dn,readdirSync as Rc,rmSync as Oc}from"fs";import{homedir as kc}from"os";import un from"path";var He=r(t=>{let e=[],o=0;t.NODE_TYPE===A.RPC&&(e=[I.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===f.TESTNET?(e=[I.TESTNET_VALIDATOR_KEY,I.TESTNET_VALITATOR_AUTHORITY_KEY,I.TESTNET_VALIDATOR_VOTE_KEY,I.MAINNET_VALIDATOR_KEY,I.MAINNET_VALITATOR_AUTHORITY_KEY,I.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[I.MAINNET_VALIDATOR_KEY,I.MAINNET_VALITATOR_AUTHORITY_KEY,I.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Me(n,{shell:!0,stdio:"ignore"});let s=Rc("./").filter(l=>l.endsWith("SV.json")),a=kc(),i=un.join(a,"unstaked-identity.json");dn(i)&&Me(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=un.join(a,e[c]);if(c++,dn(m)){console.log(`${m} is already exist!`),Oc(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;Me(d,{shell:!0,stdio:"inherit"})}Me("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as hn}from"child_process";var Cc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
7
+ Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await ec(l),!1}console.log("Waiting for validator to catch up..."),await M(60*1e3),i=await oe(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),Jr=oc;import{spawnSync as rc}from"node:child_process";var nc=r(()=>{let{stdout:t}=rc("solana --version",{shell:!0});return(t?String(t):"Unknown").trim()},"getSolanaVersion"),Le=nc;var ac=r(async t=>{let e=t.NETWORK===f.MAINNET,o=t.VALIDATOR_TYPE===T.FRANKENDANCER,{mainnetValidatorKey:n,testnetValidatorKey:s}=N(),a=e?n:s,i=Le(),c=!1;o?c=e?Or:kr:c=e?vr:Rr,c=c&&t.AUTO_RESTART;let l=v(a),m=`**${l}** updated solv to **${Lt()}** with Solana version **${i}**`;if(await W(m),c){let d=`Restarting **${l}**`;await W(d);try{sc("solv update -b",{stdio:"inherit",shell:!0})}catch(y){let g=`Error restarting **${l}**: ${y?.message||"Unknown error"}`;return await W(g),!1}let u=`**${l}** has restarted, catching up...`;await W(u),await M(180*1e3);let p=await Jr(t);if(p){let y=`**${l}** has caught up!`;await W(y)}else{let y=`**${l}** failed to catch up after update`;await W(y)}return p}return!0},"autoUpdate"),zr=ac;import{homedir as ic}from"os";import{readFile as cc,writeFile as Wr}from"fs/promises";import{existsAsync as lc}from"@skeet-framework/utils";var O=r(async t=>{let o=`${ic()}/${Ee}`;await lc(o)||(console.log("Creating default config file at",o),await Wr(o,JSON.stringify(mt,null,2)));let s={...JSON.parse(await cc(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Wr(o,a)},"updateDefaultConfig");var mc={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solv commands",subcmdHelp:"Display help for subcommands",server:"Open solv Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solv AA",installer:"Please select an option:",unstake:"UnStake"},xe=mc;var pc={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solv \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solv \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solv\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},qr=pc;var dc={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solv installer \u{1F525}",description:"solv is born and ready for running Solana Validator Nodes \u{1F680}"}},Ve=dc;var uc={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solv \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Qr=uc;var $e=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],De=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var Zr=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],Xr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var fc={server:{description:"Open solv Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solv AA"}},be=fc;var hc={server:{description:"Open solv Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solv AA"}},tn=hc;var Ke=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var en=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var yc=r(t=>{let e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke};switch(t){case _t.EN:e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke};break;case _t.JA:e={cmds:qr,subCmds:tn,logs:Qr,installer:Zr,installerSub:Xr,clientCmds:en};break;default:e={cmds:xe,subCmds:be,logs:Ve,installer:$e,installerSub:De,clientCmds:Ke}}return e},"readLocale"),on=yc;import{existsSync as gc,readFileSync as Ac,writeFileSync as rn}from"fs";import{readFileSync as Sc,writeFileSync as Tc}from"fs";import{homedir as Ec}from"os";var $t=r(t=>{let o=`${Ec()}/${nt.CONFIG}`,s={...JSON.parse(Sc(o,"utf8")),...t},a=JSON.stringify(s,null,2);Tc(o,a)},"updateSolvConfig");import{homedir as wc}from"os";var nn=r(()=>{let e=`${wc()}/${nt.CONFIG}`;gc(e)||(rn(e,JSON.stringify(j,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(Ac(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),rn(e,JSON.stringify(j,null,2)),o=j}let n=on(o.LANG);return o.RPC_URL||(o.RPC_URL=j.RPC_URL,$t({RPC_URL:j.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,$t({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",$t({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");import{spawnSync as sn}from"node:child_process";var Dt=r((t=!1,e="45",o=ot,n=U,s=t?"https://api.testnet.solana.com":"https://api.mainnet-beta.solana.com",a=!1)=>{try{let i=`docker run -it --rm -v ${o}:${o} --user $(id -u):$(id -g) c29r3/solana-snapshot-finder:latest --snapshot_path ${o} --min_download_speed ${e} --version ${n} --rpc ${s}`;if(t&&a){sn(`wget --trust-server-names https://snapshots.avorio.network/testnet/snapshot.tar.bz2 https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2 && for file in snapshot-* incremental-snapshot-*; do mv "$file" "$(echo "$file" | sed 's/\\?.*$//')"; done`,{shell:!0,stdio:"inherit",cwd:o});return}sn(i,{shell:!0,stdio:"inherit"})}catch(i){throw new Error(`getSnapshot Error: ${i}`)}},"getSnapshot");import{spawnSync as X}from"child_process";var an=r(async(t,e,o=!1)=>{let n=t.NETWORK===f.TESTNET,s=e||(n?xt:Vt);o||t.MOD?(X("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),X(`git -C /home/solv/firedancer checkout v${s}-mod`,{shell:!0,stdio:"inherit"}),X("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})):(X("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),X(`git -C /home/solv/firedancer checkout v${s}`,{shell:!0,stdio:"inherit"}),X("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})),X("export FD_AUTO_INSTALL_PACKAGES=1 && ./deps.sh fetch check install",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),X("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),X("sudo systemctl restart frankendancer",{shell:!0,stdio:"inherit"}),X("sudo rm -rf /mnt/accounts/snapshot",{shell:!0,stdio:"inherit"}),X("sudo systemctl restart port-relay",{shell:!0,stdio:"inherit"})},"frankendancerUpdate");var ln=r(t=>{let e=t.NETWORK===f.TESTNET,o=t.NODE_TYPE===A.RPC,n=t.VALIDATOR_TYPE===T.JITO,s=t.VALIDATOR_TYPE===T.FRANKENDANCER,a=t.AUTO_RESTART,i=t.MOD,c=10;a&&!e&&(c=30);let l=e?B:U;n&&(l=ee,e&&(l=Nt)),s&&(l=Vt,e&&(l=xt)),o&&(l=vt,n&&(l=Yr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${l}`,l).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solv Config",!1).option("--config","Update Solv Config Default Solana Version",!1).option("--auto","Auto Update",!1).option("--mod","Modified Versions",!1).action(async m=>{let d=Lt(),u=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(cn.white(`Current solv version: ${d}`)),m.auto){await zr(t);return}if(m.migrateConfig){let p=nn().config,y=G.TRIPLE;p.DISK_TYPES===0?y=G.DOUBLE:p.DISK_TYPES===1?y=G.SINGLE:y=G.TRIPLE;let g=p.SOLANA_NETWORK===ft.TESTNET,S=p.SOLV_TYPE===Oe.RPC_NODE,E=p.MAINNET_TYPE===ke.JITO_MEV,$={NETWORK:g?f.TESTNET:f.MAINNET,NODE_TYPE:S?A.RPC:A.VALIDATOR,MNT_DISK_TYPE:y,RPC_TYPE:S?D.JITO:D.NONE,VALIDATOR_TYPE:E?T.JITO:g?T.AGAVE:T.SOLANA,TESTNET_SOLANA_VERSION:p.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:p.MAINNET_SOLANA_VERSION,NODE_VERSION:p.NODE_VERSION,TESTNET_DELINQUENT_STAKE:p.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:p.MAINNET_DELINQUENT_STAKE,COMMISSION:p.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:p.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:p.STAKE_ACCOUNT,HARVEST_ACCOUNT:p.HARVEST_ACCOUNT,IS_MEV_MODE:p.IS_MEV_MODE,RPC_URL:p.RPC_URL,KEYPAIR_PATH:p.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:p.DISCORD_WEBHOOK_URL,AUTO_UPDATE:p.AUTO_UPDATE,AUTO_RESTART:p.AUTO_RESTART,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:p.LEDGER_PATH,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1};await O($)}if(m.config){if(await O({TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U}),n){let p=e?Nt:ee;await Xt({version:p,tag:`v${p}`})}console.log(cn.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(m.firewall){await Ur();return}if(m.background){let p=m.version;if(await O({TESTNET_SOLANA_VERSION:B,MAINNET_SOLANA_VERSION:U}),n){Pe(`v${p}`,m.mod||i),await Xt({version:p,tag:`v${p}`}),await Re(u,!0,c);return}if(e&&Dt(e,"10",t.SNAPSHOTS_PATH,B),s){await an(t,p,m.mod||i),await Re(u,!0,c);return}await ve(p,m.mod||i),await Re(e?10:5,!0,c);return}else if(m.commission){let p=await Kr();br(p.commission,e)}else Vr()})},"updateCommands");import{spawnSync as _c}from"node:child_process";var mn=r(t=>{try{let{log:e}=ht(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=_c(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var pn=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{mn(t)})},"logCommands");import dt from"chalk";import{spawnSync as Nc}from"child_process";import{homedir as vc}from"os";var Ue=r(t=>{let e=vc(),o=N(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=ft.TESTNET,c=t.COMMISSION;t.NETWORK===f.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=ft.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===f.TESTNET&&(l=ft.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;Nc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Me}from"child_process";import{existsSync as dn,readdirSync as Rc,rmSync as Oc}from"fs";import{homedir as kc}from"os";import un from"path";var He=r(t=>{let e=[],o=0;t.NODE_TYPE===A.RPC&&(e=[I.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===f.TESTNET?(e=[I.TESTNET_VALIDATOR_KEY,I.TESTNET_VALITATOR_AUTHORITY_KEY,I.TESTNET_VALIDATOR_VOTE_KEY,I.MAINNET_VALIDATOR_KEY,I.MAINNET_VALITATOR_AUTHORITY_KEY,I.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[I.MAINNET_VALIDATOR_KEY,I.MAINNET_VALITATOR_AUTHORITY_KEY,I.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Me(n,{shell:!0,stdio:"ignore"});let s=Rc("./").filter(l=>l.endsWith("SV.json")),a=kc(),i=un.join(a,"unstaked-identity.json");dn(i)&&Me(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=un.join(a,e[c]);if(c++,dn(m)){console.log(`${m} is already exist!`),Oc(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;Me(d,{shell:!0,stdio:"inherit"})}Me("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as hn}from"child_process";var Cc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
8
8
  Description=Jupiter API Service Instance
9
9
  After=network.target
10
10