@gabrielhicks/solv 5.0.4 → 5.1.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 +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ui=Object.defineProperty;var r=(t,e)=>ui(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as $d}from"commander";var Bo="5.0.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 pe=Jo.version;var jt="https://validators.solutions";var de="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Go="relayer-keypair.json",hi="mainnet-validator-keypair.json",Si="mainnet-vote-account-keypair.json",yi="mainnet-authority-keypair.json",Ti="testnet-validator-keypair.json",Ei="testnet-vote-account-keypair.json",gi="testnet-authority-keypair.json",C="/home/solv",k=`${C}/${St}`,Hd=`${C}/${yt}`,K=`${C}/${hi}`,ue=`${C}/${Si}`,Fd=`${C}/${yi}`,I=`${C}/${Ti}`,zo=`${C}/${Ei}`,Yd=`${C}/${gi}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",Q="/mnt/snapshots",Wo="solana-validator",qo="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var fe=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",po;(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"})(po||(po={}));var or=Object.values(po),he="So11111111111111111111111111111111111111112",Se="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",uo="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 _i}from"child_process";import{spawnSync as sr}from"node:child_process";var Ai=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=Ai;var ar="agave-validator",wi=r(()=>{try{return ar}catch(t){return console.error(t),ar}},"getSolanaCLI"),X=wi;var ye=r(async t=>{Ct(t)},"updateVersion"),fo=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}`),_i(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Gr 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"})(ir||(ir={}));var cr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(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 Te;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Te||(Te={}));var Ee;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ee||(Ee={}));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"},b={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=b.ROOT)=>{let e=t===b.ROOT?b.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?`${b.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Z.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${b.ROOT}/${Z.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var J="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",ho="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 nu={[Er]:9,[tt]:9,[gr]:6,[Ar]:6},ge="/home/solv/currentEpoch.json",So=.5,Ae="https://api.testnet.solana.com";import{spawnSync as yo}from"child_process";var wr=r(()=>{yo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;yo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),yo("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"},To={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 we=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}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ni,writeFile as Oi}from"fs/promises";import{homedir as vi}from"os";var Bt=r(async t=>{let o=`${vi()}/${Z.JITO_CONFIG}`,s={...JSON.parse(await Ni(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Oi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Nr}from"child_process";import ki 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 ki.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ri from"chalk";import Ci from"inquirer";var kr=r(async()=>{let t=await Ci.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(Ri.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Pi=r(()=>Bo,"getSolvVersion"),Pt=Pi;import{readFile as xi,writeFile as Vi}from"fs/promises";import{existsAsync as $i}from"@skeet-framework/utils";var Eo;(function(t){t.EN="en",t.JA="ja"})(Eo||(Eo={}));var Lu=Object.values(Eo),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 xu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Pr=Object.values($).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));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";var go="0.407.20113";var Li={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:G.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=Li;import{homedir as Di}from"os";var Ki=r(async()=>{let e=`${Di()}/${de}`;return await $i(e)?JSON.parse(await xi(e,"utf-8")):(console.log("Creating default config file at",e),await Vi(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ki;import bi 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 ui=Object.defineProperty;var r=(t,e)=>ui(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as $d}from"commander";var Bo="5.1.0";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 pe=Jo.version;var jt="https://validators.solutions";var de="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Go="relayer-keypair.json",hi="mainnet-validator-keypair.json",Si="mainnet-vote-account-keypair.json",yi="mainnet-authority-keypair.json",Ti="testnet-validator-keypair.json",Ei="testnet-vote-account-keypair.json",gi="testnet-authority-keypair.json",C="/home/solv",k=`${C}/${St}`,Hd=`${C}/${yt}`,K=`${C}/${hi}`,ue=`${C}/${Si}`,Fd=`${C}/${yi}`,I=`${C}/${Ti}`,zo=`${C}/${Ei}`,Yd=`${C}/${gi}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",w="/mnt/ledger",Rt="/mnt/accounts",Q="/mnt/snapshots",Wo="solana-validator",qo="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var fe=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",po;(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"})(po||(po={}));var or=Object.values(po),he="So11111111111111111111111111111111111111112",Se="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",uo="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 _i}from"child_process";import{spawnSync as sr}from"node:child_process";var Ai=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=Ai;var ar="agave-validator",wi=r(()=>{try{return ar}catch(t){return console.error(t),ar}},"getSolanaCLI"),X=wi;var ye=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),fo=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}`),_i(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Gr 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"})(ir||(ir={}));var cr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(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 Te;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Te||(Te={}));var Ee;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ee||(Ee={}));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"},b={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=b.ROOT)=>{let e=t===b.ROOT?b.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?`${b.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Z.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${b.ROOT}/${Z.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var J="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",ho="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 nu={[Er]:9,[tt]:9,[gr]:6,[Ar]:6},ge="/home/solv/currentEpoch.json",So=.5,Ae="https://api.testnet.solana.com";import{spawnSync as yo}from"child_process";var wr=r(()=>{yo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;yo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),yo("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"},To={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 we=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}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ni,writeFile as Oi}from"fs/promises";import{homedir as vi}from"os";var Bt=r(async t=>{let o=`${vi()}/${Z.JITO_CONFIG}`,s={...JSON.parse(await Ni(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Oi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Nr}from"child_process";import ki 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 ki.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ri from"chalk";import Ci from"inquirer";var kr=r(async()=>{let t=await Ci.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(Ri.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Pi=r(()=>Bo,"getSolvVersion"),Pt=Pi;import{readFile as xi,writeFile as Vi}from"fs/promises";import{existsAsync as $i}from"@skeet-framework/utils";var Eo;(function(t){t.EN="en",t.JA="ja"})(Eo||(Eo={}));var Lu=Object.values(Eo),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 xu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Pr=Object.values($).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));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";var go="0.407.20113";var Li={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:G.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=Li;import{homedir as Di}from"os";var Ki=r(async()=>{let e=`${Di()}/${de}`;return await $i(e)?JSON.parse(await xi(e,"utf-8")):(console.log("Creating default config file at",e),await Vi(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ki;import bi 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 bi(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 Bi}from"child_process";import{Connection as xr}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 xr("https://api.testnet.solana.com"):new xr(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 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 Ui}from"child_process";var _=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Ui(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Mi=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),rt=Mi;import{sendDiscord as Hi}from"@skeet-framework/utils";var Vr=60,Fi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=_(e?n:o),i=await zt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Vr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Vr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -431,7 +431,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateServi
|
|
|
431
431
|
`);await fl(t,n),dl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Gn=hl;import Sl from"inquirer";import{writeFile as yl}from"node:fs/promises";var zn=r(async()=>{let e=(await Sl.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";Co(o,{shell:!0,stdio:"inherit"}),Co(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),Co(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Jn(e),c=JSON.stringify(i,null,2);await yl(a,c,{encoding:"utf8"}),await Gn()},"yellowstoneGeyser");var Wn=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 ...")),Pe(t),process.exit(0);else if(e.key)console.log(ct.white("\u{1F511} Setting up Validator Keypairs ...")),Le(t),process.exit(0);else if(e.relayer){console.log(ct.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await At()).blockEngineUrl;await Bn(n,!1),console.log(ct.green(`Jito Relayer Setup Completed
|
|
432
432
|
|
|
433
433
|
$ solv relayer --help`)),Wt(),wt(),process.exit(0)}else if(e.jupiter)console.log(ct.white("\u{1F30F} Setting up Jupiter Swap API ...")),await en(),Wt(),wt(),process.exit(0);else if(e.geyser){console.log(ct.white("\u26A1\uFE0F Setting up Geyser ...")),await zn();return}else if(e.firedancer){console.log(ct.white("\u{1F525} Setting up Firedancer ...")),await Ue(e.mod);return}await Fn(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 Tl}from"child_process";var Po=r(()=>{let o=Tl("df -h").toString().split(`
|
|
434
|
-
`).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)=>_t(a.Avail)-_t(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&_t(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/")&&_t(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import qn from"chalk";import El from"cli-table3";var Io=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>qn.blue(n)),o=new El({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 Qn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Po();Io(t)})},"dfCommands"),_t=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 Xn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{De(t),process.exit(0)})},"startCommand");import{spawnSync as gl}from"node:child_process";var Zn=r(t=>{let o=[`sudo systemctl stop ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`];gl(o[0],{shell:!0,stdio:"inherit"})},"stopSolana");var ts=r(t=>{h.command("stop").description("Stop Solana Validator").action(()=>{Zn(t),process.exit(0)})},"stopCommand");import{spawnSync as ee}from"node:child_process";import es from"chalk";var os=r(t=>{let e=X();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(es.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(es.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 rs=r(t=>{let o=t.NETWORK===u.TESTNET?et:ot;t.NODE_TYPE===E.RPC&&(o=gt),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).action(async n=>{
|
|
434
|
+
`).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)=>_t(a.Avail)-_t(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&_t(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/")&&_t(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import qn from"chalk";import El from"cli-table3";var Io=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>qn.blue(n)),o=new El({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 Qn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Po();Io(t)})},"dfCommands"),_t=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 Xn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{De(t),process.exit(0)})},"startCommand");import{spawnSync as gl}from"node:child_process";var Zn=r(t=>{let o=[`sudo systemctl stop ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`];gl(o[0],{shell:!0,stdio:"inherit"})},"stopSolana");var ts=r(t=>{h.command("stop").description("Stop Solana Validator").action(()=>{Zn(t),process.exit(0)})},"stopCommand");import{spawnSync as ee}from"node:child_process";import es from"chalk";var os=r(t=>{let e=X();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(es.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(es.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 rs=r(t=>{let o=t.NETWORK===u.TESTNET?et:ot;t.NODE_TYPE===E.RPC&&(o=gt),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===g.JITO,a=n.mod;if(s){let m=`v${n.version||Gt}`;we(m,a);return}t.NODE_TYPE===E.RPC&&(o=gt);let c=n.version||o;await ye(c,a)})},"installCommands");import{spawnSync as Al}from"child_process";var ns=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Al("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 Nl}from"node:child_process";import ss from"chalk";import{spawnSync as wl}from"child_process";var _l=r(async()=>{try{let t=wl("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"),He=_l;var as=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solv Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await He()&&(console.log(ss.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 -`;Nl(n,{shell:!0,stdio:"inherit"}),console.log(ss.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 vl,mkdirSync as kl}from"fs";import Rl from"inquirer";import{homedir as Cl}from"os";import{spawnSync as Ol}from"node:child_process";function is(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Ol(s,{shell:!0,stdio:"inherit"}).status===0}r(is,"executeSCP");var Lo=r(async(t="")=>{let e=t;t===""&&(e=(await Rl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(N()),n=Cl(),s=n.includes("/home/solv")?"/home/solv":n+oe.SOLV_KEYPAIR_DOWNLOAD_PATH;vl(s)||kl(s,{recursive:!0});let a=!0,i=n+"/"+Go;o.push(i);for(let c of o){let l=c.split("/"),m=l[l.length-1];m=n.includes("/home/solv")?m:m.replace(".json",`-${e}.json`);let d=`${s}/${m}`;is(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as Pl}from"child_process";import{existsSync as Il}from"fs";import Ll from"inquirer";import xl from"os";var cs=r(async(t="")=>{let e=xl.userInfo().homedir,o=t;t===""&&(o=(await Ll.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 l=`${n}/${c}`;if(!Il(l))continue;let m=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;Pl(m,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Vl}from"child_process";import $l from"inquirer";var ls=r(async()=>{let t=await $l.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${b.ROOT}/.ssh && echo "${t.pubkey}" >> ${b.AUTHORIZED_KEYS}`;Vl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Fe from"chalk";import{readFileSync as Dl}from"fs";import Kl from"os";var ms=r(()=>{try{let e=`${Kl.userInfo().homedir}/.ssh/id_rsa.pub`,o=Dl(e,"utf8");console.log(Fe.white(`Your SSH Public Key is:
|
|
435
435
|
`)),console.log(Fe.white(o))}catch(t){console.error(Fe.white(`Error reading SSH Public Key
|
|
436
436
|
`)),console.error(Fe.white(t))}},"cat");import{spawnSync as bl}from"child_process";var ps=r(()=>{bl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Ul}from"child_process";import{readFileSync as Ml}from"fs";import{Readable as Hl}from"stream";var ds=r(async t=>new Promise((e,o)=>{try{let n=Ul("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
|
|
437
437
|
`).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"),Fl=r(t=>{try{return JSON.parse(Ml(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),us=r(async(t,e)=>{let o=[],n=Hl.from(t);return n.on("data",async s=>{Fl(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import Ye from"chalk";import{Presets as Jl,SingleBar as Gl}from"cli-progress";import fs from"chalk";import{spawnSync as Yl}from"node:child_process";import jl from"node-fetch";var Bl=r(async()=>{let t=await jl(tr,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(fs.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
|