@gabrielhicks/solv 5.1.3 → 5.1.4

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 Dd}from"commander";var Bo="5.1.3";var Jo={name:"@gabrielhicks/solv",version:Bo,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 de=Jo.version;var jt="https://validators.solutions";var ue="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Go="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",P="/home/solv",k=`${P}/${St}`,Yd=`${P}/${yt}`,b=`${P}/${Si}`,fe=`${P}/${yi}`,jd=`${P}/${Ti}`,I=`${P}/${Ei}`,zo=`${P}/${gi}`,Bd=`${P}/${Ai}`,W=`${P}/solana-validator.log`,q=P+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",Q="/mnt/snapshots",Wo="solana-validator",qo="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Xo="https://api.testnet.solana.com",Zo="https://api.mainnet-beta.solana.com",tr="https://verify.validators.solutions/solv-migrate",er="https://jup.validators.solutions/v1/jup",uo;(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"})(uo||(uo={}));var or=Object.values(uo),Se="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",fo="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var rr="SOLV420",nr={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 sr}from"node:child_process";var wi=r((t,e=!1)=>{e?sr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):sr(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=wi;var ar="agave-validator",_i=r(()=>{try{return ar}catch(t){return console.error(t),ar}},"getSolanaCLI"),X=_i;var Te=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),ho=r(async(t,e=!1)=>{let o=X(),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 zr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var ir;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(ir||(ir={}));var cr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(cr||(cr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var lr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(lr||(lr={}));var mr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(mr||(mr={}));var pr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(pr||(pr={}));var dr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(dr||(dr={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var ge;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ge||(ge={}));var hr=!1,Sr=!0,H={ID:"solv",LANG:Tt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",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"},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},Z={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"},R={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=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.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?`${U.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${Z.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${U.ROOT}/${Z.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",So="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",yr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Tr=9,tt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Er="So11111111111111111111111111111111111111112",gr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Ar="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ur;(function(t){t[t.ELSOL=tt]="ELSOL",t[t.SOL=Er]="SOL",t[t.USDC=gr]="USDC",t[t.EPCT=Ar]="EPCT"})(ur||(ur={}));var fr;(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"})(fr||(fr={}));var au={[Er]:9,[tt]:9,[gr]:6,[Ar]:6},Ae="/home/solv/currentEpoch.json",yo=.5,we="https://api.testnet.solana.com";import{spawnSync as To}from"child_process";var wr=r(()=>{To("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;To(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),To("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.14",tag:"v2.1.14",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},Eo={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"},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 _r}from"child_process";var _e=r((t=at.tag,e=!1)=>{e?_r(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):_r(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Oi,writeFile as vi}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${Z.JITO_CONFIG}`,s={...JSON.parse(await Oi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await vi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Nr}from"child_process";import Ri from"inquirer";var Or=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";Nr(`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}`;Nr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),vr=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 Pi from"inquirer";var kr=r(async()=>{let t=await Pi.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 Ii=r(()=>Bo,"getSolvVersion"),Pt=Ii;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as Di}from"@skeet-framework/utils";var go;(function(t){t.EN="en",t.JA="ja"})(go||(go={}));var Vu=Object.values(go),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Rr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Cr=Object.values(E),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var $u=Object.values(g).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Pr=Object.values(D).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var et="2.2.2",ot="2.1.14",Et="2.2.2",Gt="2.1.14",Ir="2.1.14",gt="2.1.14";var Lr="20.17.0",xr="0.407.20113",zt="0.407.20113";var xi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:et,MAINNET_SOLANA_VERSION:ot,NODE_VERSION:Lr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Qo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:Rt,SNAPSHOTS_PATH:Q},it=xi;import{homedir as Ki}from"os";var bi=r(async()=>{let e=`${Ki()}/${ue}`;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=bi;import Ui from"node-fetch";var V=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 Dd}from"commander";var Bo="5.1.4";var Jo={name:"@gabrielhicks/solv",version:Bo,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 de=Jo.version;var jt="https://validators.solutions";var ue="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Go="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",P="/home/solv",k=`${P}/${St}`,Yd=`${P}/${yt}`,b=`${P}/${Si}`,fe=`${P}/${yi}`,jd=`${P}/${Ti}`,I=`${P}/${Ei}`,zo=`${P}/${gi}`,Bd=`${P}/${Ai}`,W=`${P}/solana-validator.log`,q=P+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",Q="/mnt/snapshots",Wo="solana-validator",qo="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Xo="https://api.testnet.solana.com",Zo="https://api.mainnet-beta.solana.com",tr="https://verify.validators.solutions/solv-migrate",er="https://jup.validators.solutions/v1/jup",uo;(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"})(uo||(uo={}));var or=Object.values(uo),Se="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",fo="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var rr="SOLV420",nr={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 sr}from"node:child_process";var wi=r((t,e=!1)=>{e?sr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):sr(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=wi;var ar="agave-validator",_i=r(()=>{try{return ar}catch(t){return console.error(t),ar}},"getSolanaCLI"),X=_i;var Te=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),ho=r(async(t,e=!1)=>{let o=X(),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 zr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var ir;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(ir||(ir={}));var cr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(cr||(cr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var lr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(lr||(lr={}));var mr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(mr||(mr={}));var pr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(pr||(pr={}));var dr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(dr||(dr={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var ge;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ge||(ge={}));var hr=!1,Sr=!0,H={ID:"solv",LANG:Tt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",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"},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},Z={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"},R={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=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.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?`${U.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${Z.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${U.ROOT}/${Z.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",So="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",yr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Tr=9,tt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Er="So11111111111111111111111111111111111111112",gr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Ar="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ur;(function(t){t[t.ELSOL=tt]="ELSOL",t[t.SOL=Er]="SOL",t[t.USDC=gr]="USDC",t[t.EPCT=Ar]="EPCT"})(ur||(ur={}));var fr;(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"})(fr||(fr={}));var au={[Er]:9,[tt]:9,[gr]:6,[Ar]:6},Ae="/home/solv/currentEpoch.json",yo=.5,we="https://api.testnet.solana.com";import{spawnSync as To}from"child_process";var wr=r(()=>{To("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;To(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),To("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.16",tag:"v2.1.16",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},Eo={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"},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 _r}from"child_process";var _e=r((t=at.tag,e=!1)=>{e?_r(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):_r(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Oi,writeFile as vi}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${Z.JITO_CONFIG}`,s={...JSON.parse(await Oi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await vi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Nr}from"child_process";import Ri from"inquirer";var Or=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";Nr(`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}`;Nr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),vr=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 Pi from"inquirer";var kr=r(async()=>{let t=await Pi.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 Ii=r(()=>Bo,"getSolvVersion"),Pt=Ii;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as Di}from"@skeet-framework/utils";var go;(function(t){t.EN="en",t.JA="ja"})(go||(go={}));var Vu=Object.values(go),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Rr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Cr=Object.values(E),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var $u=Object.values(g).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Pr=Object.values(D).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var et="2.2.2",ot="2.1.16",Et="2.2.2",Gt="2.1.16",Ir="2.1.16",gt="2.1.16";var Lr="20.17.0",xr="0.407.20113",zt="0.407.20113";var xi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:et,MAINNET_SOLANA_VERSION:ot,NODE_VERSION:Lr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Qo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:Rt,SNAPSHOTS_PATH:Q},it=xi;import{homedir as Ki}from"os";var bi=r(async()=>{let e=`${Ki()}/${ue}`;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=bi;import Ui from"node-fetch";var V=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 Vr}from"@solana/web3.js";var Wt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Vr("https://api.testnet.solana.com"):new Vr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(d=>d.votePubkey===e);if(!c)return i.delinquent.find(h=>h.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(d=>d.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let m=c.lastVote,p=await a.getSlot()-m;return p>n?(s.isActive=!1,s.reason=`Validator has not voted for ${p} 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 _=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"),rt=Hi;import{sendDiscord as Fi}from"@skeet-framework/utils";var $r=60,Yi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=_(e?n:o),i=await Wt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=$r){console.log("Max retries reached, exiting...");let m=`\u26A0\uFE0F Validator is not active for ${$r} minutes!
4
4
  Account: ${i.pubkey}
5
5
  Reason: ${i.reason}