@gabrielhicks/solv 5.1.36 → 5.2.0

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,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var fi=Object.defineProperty;var r=(t,e)=>fi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Kd}from"commander";var Go="5.1.36";var zo={name:"@gabrielhicks/solv",version:Go,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 ue=zo.version;var jt="https://validators.solutions";var fe="solv4.config.json";var Tt="identity.json",Et="unstaked-identity.json",Wo="relayer-keypair.json",Si="mainnet-validator-keypair.json",yi="mainnet-vote-account-keypair.json",Ti="mainnet-authority-keypair.json",Ei="testnet-validator-keypair.json",gi="testnet-vote-account-keypair.json",Ai="testnet-authority-keypair.json",I="/home/solv",k=`${I}/${Tt}`,Jd=`${I}/${Et}`,b=`${I}/${Si}`,he=`${I}/${yi}`,Gd=`${I}/${Ti}`,P=`${I}/${Ei}`,qo=`${I}/${gi}`,zd=`${I}/${Ai}`,X=`${I}/solana-validator.log`,Z=I+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",tt="/mnt/snapshots",Qo="solana-validator",Xo="agave-validator",Zo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Se=3,tr="https://api.testnet.solana.com",er="https://api.mainnet-beta.solana.com",or="https://verify.validators.solutions/solv-migrate",rr="https://jup.validators.solutions/v1/jup",fo;(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"})(fo||(fo={}));var nr=Object.values(fo),ye="So11111111111111111111111111111111111111112",Te="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var sr="SOLV420",ar={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ni}from"child_process";import{spawnSync as ir}from"node:child_process";var wi=r((t,e=!1)=>{e?ir(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave-public/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):ir(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=wi;var cr="agave-validator",_i=r(()=>{try{return cr}catch(t){return console.error(t),cr}},"getSolanaCLI"),et=_i;var Ee=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),So=r(async(t,e=!1)=>{let o=et(),n=`${o} --ledger ${w} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${w} exit --max-delinquent-stake ${t}`),Ni(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import qr from"chalk";var gt;(function(t){t.EN="en",t.JA="ja"})(gt||(gt={}));var lr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(lr||(lr={}));var mr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(mr||(mr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var pr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(pr||(pr={}));var dr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(dr||(dr={}));var ur;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ur||(ur={}));var fr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(fr||(fr={}));var ge;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(ge||(ge={}));var Ae;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ae||(Ae={}));var yr=!1,Tr=!0,H={ID:"solv",LANG:gt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.2.15",MAINNET_SOLANA_VERSION:"2.2.14",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"},K={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},ot={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",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"},C={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}/${C.MAINNET_VALIDATOR_KEY}`,n=`${e}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${C.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${C.TESTNET_VALIDATOR_KEY}`,i=`${e}/${C.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${C.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),pt=r((t=!0)=>{let e=t?`${K.ROOT}/${C.TESTNET_VALIDATOR_KEY}`:`${K.ROOT}/${C.MAINNET_VALIDATOR_KEY}`,o=t?`${K.ROOT}/${C.TESTNET_VALIDATOR_VOTE_KEY}`:`${K.ROOT}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${K.ROOT}/${ot.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,c=`${K.ROOT}/${ot.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var W="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",yo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Er="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",gr=9,rt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Ar="So11111111111111111111111111111111111111112",wr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",_r="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",hr;(function(t){t[t.ELSOL=rt]="ELSOL",t[t.SOL=Ar]="SOL",t[t.USDC=wr]="USDC",t[t.EPCT=_r]="EPCT"})(hr||(hr={}));var Sr;(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"})(Sr||(Sr={}));var lu={[Ar]:9,[rt]:9,[wr]:6,[_r]:6},we="/home/solv/currentEpoch.json",To=.5,_e="https://api.testnet.solana.com";import{spawnSync as Eo}from"child_process";var Nr=r(()=>{Eo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;Eo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Eo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.21",tag:"v2.1.21",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},go={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"}};import{spawnSync as vr}from"child_process";var Ne=r((t=at.tag,e=!1)=>{e?vr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana-public/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):vr(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as vi,writeFile as Oi}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${ot.JITO_CONFIG}`,s={...JSON.parse(await vi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Oi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Or}from"child_process";import Ri from"inquirer";var kr=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";Or(`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}`;Or(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Rr=r(async()=>await Ri.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ci from"chalk";import Ii from"inquirer";var Cr=r(async()=>{let t=await Ii.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Jt("sudo ufw delete allow 8899/udp"),await Jt("sudo ufw delete allow 8899/tcp"),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Jt("sudo ufw reload"),console.log(Ci.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Pi=r(()=>Go,"getSolvVersion"),It=Pi;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as Di}from"@skeet-framework/utils";var Ao;(function(t){t.EN="en",t.JA="ja"})(Ao||(Ao={}));var bu=Object.values(Ao),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Ir=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Pr=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Ku=Object.values(A).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Lr=Object.values($).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var q="2.2.15",B="2.2.14",At="2.2.15",Gt="2.2.14",xr="2.2.14",wt="2.2.14";var Vr="20.17.0",ve="0.503.20214",Oe="0.503.20214";var xi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:q,MAINNET_SOLANA_VERSION:B,NODE_VERSION:Vr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Zo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:er,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:Rt,SNAPSHOTS_PATH:tt},it=xi;import{homedir as bi}from"os";var Ki=r(async()=>{let e=`${bi()}/${fe}`;return await Di(e)?JSON.parse(await Vi(e,"utf-8")):(console.log("Creating default config file at",e),await $i(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ki;import Ui from"node-fetch";var Q=r(async t=>{try{let e=await x();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var fi=Object.defineProperty;var r=(t,e)=>fi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Kd}from"commander";var Go="5.2.0";var zo={name:"@gabrielhicks/solv",version:Go,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 ue=zo.version;var jt="https://validators.solutions";var fe="solv4.config.json";var Tt="identity.json",Et="unstaked-identity.json",Wo="relayer-keypair.json",Si="mainnet-validator-keypair.json",yi="mainnet-vote-account-keypair.json",Ti="mainnet-authority-keypair.json",Ei="testnet-validator-keypair.json",gi="testnet-vote-account-keypair.json",Ai="testnet-authority-keypair.json",I="/home/solv",k=`${I}/${Tt}`,Jd=`${I}/${Et}`,b=`${I}/${Si}`,he=`${I}/${yi}`,Gd=`${I}/${Ti}`,P=`${I}/${Ei}`,qo=`${I}/${gi}`,zd=`${I}/${Ai}`,X=`${I}/solana-validator.log`,Z=I+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",tt="/mnt/snapshots",Qo="solana-validator",Xo="agave-validator",Zo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Se=3,tr="https://api.testnet.solana.com",er="https://api.mainnet-beta.solana.com",or="https://verify.validators.solutions/solv-migrate",rr="https://jup.validators.solutions/v1/jup",fo;(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"})(fo||(fo={}));var nr=Object.values(fo),ye="So11111111111111111111111111111111111111112",Te="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var sr="SOLV420",ar={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ni}from"child_process";import{spawnSync as ir}from"node:child_process";var wi=r((t,e=!1)=>{e?ir(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave-public/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):ir(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=wi;var cr="agave-validator",_i=r(()=>{try{return cr}catch(t){return console.error(t),cr}},"getSolanaCLI"),et=_i;var Ee=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),So=r(async(t,e=!1)=>{let o=et(),n=`${o} --ledger ${w} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${w} exit --max-delinquent-stake ${t}`),Ni(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import qr from"chalk";var gt;(function(t){t.EN="en",t.JA="ja"})(gt||(gt={}));var lr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(lr||(lr={}));var mr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(mr||(mr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var pr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(pr||(pr={}));var dr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(dr||(dr={}));var ur;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ur||(ur={}));var fr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(fr||(fr={}));var ge;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(ge||(ge={}));var Ae;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ae||(Ae={}));var yr=!1,Tr=!1,H={ID:"solv",LANG:gt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.2.15",MAINNET_SOLANA_VERSION:"2.2.14",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"},K={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},ot={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",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"},C={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}/${C.MAINNET_VALIDATOR_KEY}`,n=`${e}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${C.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${C.TESTNET_VALIDATOR_KEY}`,i=`${e}/${C.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${C.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),pt=r((t=!0)=>{let e=t?`${K.ROOT}/${C.TESTNET_VALIDATOR_KEY}`:`${K.ROOT}/${C.MAINNET_VALIDATOR_KEY}`,o=t?`${K.ROOT}/${C.TESTNET_VALIDATOR_VOTE_KEY}`:`${K.ROOT}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${K.ROOT}/${ot.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,c=`${K.ROOT}/${ot.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var W="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",yo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Er="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",gr=9,rt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Ar="So11111111111111111111111111111111111111112",wr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",_r="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",hr;(function(t){t[t.ELSOL=rt]="ELSOL",t[t.SOL=Ar]="SOL",t[t.USDC=wr]="USDC",t[t.EPCT=_r]="EPCT"})(hr||(hr={}));var Sr;(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"})(Sr||(Sr={}));var lu={[Ar]:9,[rt]:9,[wr]:6,[_r]:6},we="/home/solv/currentEpoch.json",To=.5,_e="https://api.testnet.solana.com";import{spawnSync as Eo}from"child_process";var Nr=r(()=>{Eo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;Eo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Eo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.21",tag:"v2.1.21",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},go={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"}};import{spawnSync as vr}from"child_process";var Ne=r((t=at.tag,e=!1)=>{e?vr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana-public/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):vr(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as vi,writeFile as Oi}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${ot.JITO_CONFIG}`,s={...JSON.parse(await vi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Oi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Or}from"child_process";import Ri from"inquirer";var kr=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";Or(`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}`;Or(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Rr=r(async()=>await Ri.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ci from"chalk";import Ii from"inquirer";var Cr=r(async()=>{let t=await Ii.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Jt("sudo ufw delete allow 8899/udp"),await Jt("sudo ufw delete allow 8899/tcp"),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Jt("sudo ufw reload"),console.log(Ci.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Pi=r(()=>Go,"getSolvVersion"),It=Pi;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as Di}from"@skeet-framework/utils";var Ao;(function(t){t.EN="en",t.JA="ja"})(Ao||(Ao={}));var bu=Object.values(Ao),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Ir=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Pr=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Ku=Object.values(A).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Lr=Object.values($).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var q="2.2.15",B="2.2.15",At="2.2.15",Gt="2.2.15",xr="2.2.15",wt="2.2.15";var Vr="20.17.0",ve="0.504.20215",Oe="0.504.20215";var xi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:q,MAINNET_SOLANA_VERSION:B,NODE_VERSION:Vr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Zo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:er,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:Rt,SNAPSHOTS_PATH:tt},it=xi;import{homedir as bi}from"os";var Ki=r(async()=>{let e=`${bi()}/${fe}`;return await Di(e)?JSON.parse(await Vi(e,"utf-8")):(console.log("Creating default config file at",e),await $i(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ki;import Ui from"node-fetch";var Q=r(async t=>{try{let e=await x();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 Ui(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 Ji}from"child_process";import{Connection as $r}from"@solana/web3.js";var zt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new $r("https://api.testnet.solana.com"):new $r(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e);if(!c)return i.delinquent.find(f=>f.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(p=>p.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let m=c.lastVote,d=await a.getSlot()-m;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 Mi}from"child_process";var v=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Mi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Hi=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),U=Hi;import{sendDiscord as Fi}from"@skeet-framework/utils";var Dr=60,Yi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=v(e?n:o),i=await zt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Dr){console.log("Max retries reached, exiting...");let m=`\u26A0\uFE0F Validator is not active for ${Dr} minutes!
4
4
  Account: ${i.pubkey}
5
5
  Reason: ${i.reason}
@@ -494,7 +494,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateServi
494
494
  `);await Sl(t,n),fl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),zn=yl;import Tl from"inquirer";import{writeFile as El}from"node:fs/promises";var Wn=r(async()=>{let e=(await Tl.prompt([{type:"input",name:"xToken",message:"Enter the xToken",default:"xToken"}])).xToken,o="git clone https://github.com/rpcpool/yellowstone-grpc.git",n="cargo build -r",s="cargo-fmt && cargo run --bin config-check -- --config yellowstone-grpc-geyser/config.json";Io(o,{shell:!0,stdio:"inherit"}),Io(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),Io(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Gn(e),c=JSON.stringify(i,null,2);await El(a,c,{encoding:"utf8"}),await zn()},"yellowstoneGeyser");var qn=r(t=>{h.command("setup").description("Setup Solana Validator").option("--vote","Setup Vote Account",!1).option("--key","Setup Validator Keypairs",!1).option("--relayer","Setup Jito Relayer",!1).option("--jupiter","Setup Jupiter Swap API",!1).option("--geyser","Setup Geyser",!1).option("--firedancer","Setup Firedancer",!1).option("--skip-init-config","Skip Initial Config",!1).option("--skip-mount","Skip Mount",!1).option("--pivot","Pivot install",!1).option("--mod","Modified install",!1).action(async e=>{try{if(e.vote)console.log(ct.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Ve(t),process.exit(0);else if(e.key)console.log(ct.white("\u{1F511} Setting up Validator Keypairs ...")),De(t),process.exit(0);else if(e.relayer){console.log(ct.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await _t()).blockEngineUrl;await Jn(n,!1),console.log(ct.green(`Jito Relayer Setup Completed
495
495
 
496
496
  $ solv relayer --help`)),Wt(),Nt(),process.exit(0)}else if(e.jupiter)console.log(ct.white("\u{1F30F} Setting up Jupiter Swap API ...")),await nn(),Wt(),Nt(),process.exit(0);else if(e.geyser){console.log(ct.white("\u26A1\uFE0F Setting up Geyser ...")),await Wn();return}else if(e.firedancer){console.log(ct.white("\u{1F525} Setting up Firedancer ...")),await Ye(e.mod);return}await Yn(e.skipInitConfig,e.skipMount,e.pivot,e.mod)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(ct.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ct.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as gl}from"child_process";var Po=r(()=>{let o=gl("df -h").toString().split(`
497
- `).slice(1).filter(s=>s.split(/\s+/)[0]!=="").map(s=>{let a=s.split(/\s+/);return{Filesystem:a[0],Size:a[1],Used:a[2],Avail:a[3],Use:a[4],MountedOn:a[5]}}).sort((s,a)=>vt(a.Avail)-vt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&vt(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&vt(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&vt(s.Size)>9e11-1&&console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: red")}),n?console.log("your mount point is correct"):o.filter(a=>a.Filesystem.startsWith("/dev/")&&vt(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Qn from"chalk";import Al from"cli-table3";var Lo=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Qn.blue(n)),o=new Al({head:e,colWidths:[20,10,10,10,10,20]});t.forEach(n=>{o.push([n.Filesystem,n.Size,n.Used,n.Avail,n.Use,n.MountedOn].map(s=>Qn.white(s)))}),console.log(o.toString())},"displayTable");var Xn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Po();Lo(t)})},"dfCommands"),vt=r(t=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},o=t.match(/[A-Za-z]+/)?.[0]||"",n=parseFloat(t);return e[o]?n*e[o]:n},"convertToBytes");var Zn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Me(t),process.exit(0)})},"startCommand");import{spawnSync as wl}from"node:child_process";import _l from"chalk";var ts=r(async t=>{_l.white(console.log("Starting solv stop process..."));let o=[`sudo systemctl stop ${t.VALIDATOR_TYPE===A.FRANKENDANCER?"frankendancer":"solv"}`];wl(o[0],{shell:!0,stdio:"inherit"})},"stopSolana");var es=r(t=>{h.command("stop").description("Stop Solana Validator").action(()=>{ts(t),process.exit(0)})},"stopCommand");import{spawnSync as ee}from"node:child_process";import os from"chalk";var rs=r(t=>{let e=et();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(os.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),ee("solv stop",{stdio:"inherit",shell:!0}),ee("solv rm:snapshot",{stdio:"inherit",shell:!0}),ee("solv get snapshot",{stdio:"inherit",shell:!0}),ee("solv start",{stdio:"inherit",shell:!0}),console.log(os.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${t.LEDGER_PATH} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;ee(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var ns=r(t=>{let o=t.NETWORK===u.TESTNET?q:B;t.NODE_TYPE===E.RPC&&(o=wt),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).option("-m, --mod <version>","Use modified installer",!1).action(async n=>{let s=t.VALIDATOR_TYPE===A.JITO,a=n.mod;if(s){let l=`v${n.version||Gt}`;Ne(l,a);return}t.NODE_TYPE===E.RPC&&(o=wt);let c=n.version||o;await Ee(c,a)})},"installCommands");import{spawnSync as Nl}from"child_process";var ss=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Nl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=Zt();console.log(t)})},"mountCommands");import{spawnSync as kl}from"node:child_process";import as from"chalk";import{spawnSync as vl}from"child_process";var Ol=r(async()=>{try{let t=vl("crontab",["-l"],{encoding:"utf-8"});if(t.status!==0)return console.log("No crontab for this user."),!1;let e=t.stdout;return console.log(e),e.includes("solv epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),Be=Ol;var is=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solv Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","0 14-22 * * *").action(async e=>{await Be()&&(console.log(as.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let n=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solv epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;kl(n,{shell:!0,stdio:"inherit"}),console.log(as.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var oe={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as Cl,mkdirSync as Il}from"fs";import Pl from"inquirer";import{homedir as Ll}from"os";import{spawnSync as Rl}from"node:child_process";function cs(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Rl(s,{shell:!0,stdio:"inherit"}).status===0}r(cs,"executeSCP");var xo=r(async(t="")=>{let e=t;t===""&&(e=(await Pl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(N()),n=Ll(),s=n.includes("/home/solv")?"/home/solv":n+oe.SOLV_KEYPAIR_DOWNLOAD_PATH;Cl(s)||Il(s,{recursive:!0});let a=!0,i=n+"/"+Wo;o.push(i);for(let c of o){let m=c.split("/"),l=m[m.length-1];l=n.includes("/home/solv")?l:l.replace(".json",`-${e}.json`);let d=`${s}/${l}`;cs(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as xl}from"child_process";import{existsSync as Vl}from"fs";import $l from"inquirer";import Dl from"os";var ls=r(async(t="")=>{let e=Dl.userInfo().homedir,o=t;t===""&&(o=(await $l.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${oe.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=oe.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(N(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let m=`${n}/${c}`;if(!Vl(m))continue;let l=`scp -o StrictHostKeyChecking=no ${m} solv@${o}:${a}`;xl(l,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as bl}from"child_process";import Kl from"inquirer";var ms=r(async()=>{let t=await Kl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${K.ROOT}/.ssh && echo "${t.pubkey}" >> ${K.AUTHORIZED_KEYS}`;bl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Je from"chalk";import{readFileSync as Ul}from"fs";import Ml from"os";var ps=r(()=>{try{let e=`${Ml.userInfo().homedir}/.ssh/id_rsa.pub`,o=Ul(e,"utf8");console.log(Je.white(`Your SSH Public Key is:
497
+ `).slice(1).filter(s=>s.split(/\s+/)[0]!=="").map(s=>{let a=s.split(/\s+/);return{Filesystem:a[0],Size:a[1],Used:a[2],Avail:a[3],Use:a[4],MountedOn:a[5]}}).sort((s,a)=>vt(a.Avail)-vt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&vt(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&vt(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&vt(s.Size)>9e11-1&&console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: red")}),n?console.log("your mount point is correct"):o.filter(a=>a.Filesystem.startsWith("/dev/")&&vt(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Qn from"chalk";import Al from"cli-table3";var Lo=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Qn.blue(n)),o=new Al({head:e,colWidths:[20,10,10,10,10,20]});t.forEach(n=>{o.push([n.Filesystem,n.Size,n.Used,n.Avail,n.Use,n.MountedOn].map(s=>Qn.white(s)))}),console.log(o.toString())},"displayTable");var Xn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Po();Lo(t)})},"dfCommands"),vt=r(t=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},o=t.match(/[A-Za-z]+/)?.[0]||"",n=parseFloat(t);return e[o]?n*e[o]:n},"convertToBytes");var Zn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Me(t),process.exit(0)})},"startCommand");import{spawnSync as wl}from"node:child_process";import _l from"chalk";var ts=r(async t=>{_l.white(console.log("Starting solv stop process..."));let o=[`sudo systemctl stop ${t.VALIDATOR_TYPE===A.FRANKENDANCER?"frankendancer":"solv"}`];wl(o[0],{shell:!0,stdio:"inherit"})},"stopSolana");var es=r(t=>{h.command("stop").description("Stop Solana Validator").action(()=>{ts(t),process.exit(0)})},"stopCommand");import{spawnSync as ee}from"node:child_process";import os from"chalk";var rs=r(t=>{let e=et();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(os.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),ee("solv stop",{stdio:"inherit",shell:!0}),ee("solv rm:snapshot",{stdio:"inherit",shell:!0}),ee("solv get snapshot",{stdio:"inherit",shell:!0}),ee("solv start",{stdio:"inherit",shell:!0}),console.log(os.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${t.LEDGER_PATH} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;ee(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var ns=r(t=>{let o=t.NETWORK===u.TESTNET?q:B;t.NODE_TYPE===E.RPC&&(o=wt),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).option("-m, --mod <version>","Use modified installer",!1).action(async n=>{let s=t.VALIDATOR_TYPE===A.JITO,a=n.mod;if(s){let l=`v${n.version||Gt}`;Ne(l,a);return}t.NODE_TYPE===E.RPC&&(o=wt);let c=n.version||o;await Ee(c,a)})},"installCommands");import{spawnSync as Nl}from"child_process";var ss=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Nl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=Zt();console.log(t)})},"mountCommands");import{spawnSync as kl}from"node:child_process";import as from"chalk";import{spawnSync as vl}from"child_process";var Ol=r(async()=>{try{let t=vl("crontab",["-l"],{encoding:"utf-8"});if(t.status!==0)return console.log("No crontab for this user."),!1;let e=t.stdout;return console.log(e),e.includes("solv epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),Be=Ol;var is=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solv Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 14-22 * * *").action(async e=>{await Be()&&(console.log(as.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let n=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solv epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;kl(n,{shell:!0,stdio:"inherit"}),console.log(as.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var oe={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as Cl,mkdirSync as Il}from"fs";import Pl from"inquirer";import{homedir as Ll}from"os";import{spawnSync as Rl}from"node:child_process";function cs(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Rl(s,{shell:!0,stdio:"inherit"}).status===0}r(cs,"executeSCP");var xo=r(async(t="")=>{let e=t;t===""&&(e=(await Pl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(N()),n=Ll(),s=n.includes("/home/solv")?"/home/solv":n+oe.SOLV_KEYPAIR_DOWNLOAD_PATH;Cl(s)||Il(s,{recursive:!0});let a=!0,i=n+"/"+Wo;o.push(i);for(let c of o){let m=c.split("/"),l=m[m.length-1];l=n.includes("/home/solv")?l:l.replace(".json",`-${e}.json`);let d=`${s}/${l}`;cs(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as xl}from"child_process";import{existsSync as Vl}from"fs";import $l from"inquirer";import Dl from"os";var ls=r(async(t="")=>{let e=Dl.userInfo().homedir,o=t;t===""&&(o=(await $l.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${oe.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=oe.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(N(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let m=`${n}/${c}`;if(!Vl(m))continue;let l=`scp -o StrictHostKeyChecking=no ${m} solv@${o}:${a}`;xl(l,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as bl}from"child_process";import Kl from"inquirer";var ms=r(async()=>{let t=await Kl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${K.ROOT}/.ssh && echo "${t.pubkey}" >> ${K.AUTHORIZED_KEYS}`;bl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Je from"chalk";import{readFileSync as Ul}from"fs";import Ml from"os";var ps=r(()=>{try{let e=`${Ml.userInfo().homedir}/.ssh/id_rsa.pub`,o=Ul(e,"utf8");console.log(Je.white(`Your SSH Public Key is:
498
498
  `)),console.log(Je.white(o))}catch(t){console.error(Je.white(`Error reading SSH Public Key
499
499
  `)),console.error(Je.white(t))}},"cat");import{spawnSync as Hl}from"child_process";var ds=r(()=>{Hl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Fl}from"child_process";import{readFileSync as Yl}from"fs";import{Readable as jl}from"stream";var us=r(async t=>new Promise((e,o)=>{try{let n=Fl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
500
500
  `).filter(i=>i)),t.increment()}),n.stderr.on("data",a=>{t.increment()}),n.on("close",a=>{e(s)})}catch(n){o(`search Error: ${n}`)}}),"search"),Bl=r(t=>{try{return JSON.parse(Yl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),fs=r(async(t,e)=>{let o=[],n=jl.from(t);return n.on("data",async s=>{Bl(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import Ge from"chalk";import{Presets as Wl,SingleBar as ql}from"cli-progress";import hs from"chalk";import{spawnSync as Jl}from"node:child_process";import Gl from"node-fetch";var zl=r(async()=>{let t=await Gl(or,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(hs.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.