@gabrielhicks/solv 5.5.7 → 5.5.9

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 QT=Object.defineProperty;var t=(_,e)=>QT(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as NC}from"commander";var ft="5.5.7";var Ut={name:"@gabrielhicks/solv",version:ft,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"},overrides:{chalk:"5.3.0","strip-ansi":"7.1.0","color-convert":"2.0.1","color-name":"1.1.4","is-core-module":"2.13.1","error-ex":"1.3.2","has-ansi":"5.0.1"}};var Ge=Ut.version;var ae="https://validators.solutions";var ke="solv4.config.json";var m_="identity.json",h_="unstaked-identity.json",At="relayer-keypair.json",$T="mainnet-validator-keypair.json",WT="mainnet-vote-account-keypair.json",XT="mainnet-authority-keypair.json",jT="testnet-validator-keypair.json",zT="testnet-vote-account-keypair.json",ZT="testnet-authority-keypair.json",G="/home/solv",U=`${G}/${m_}`,LC=`${G}/${h_}`,w=`${G}/${$T}`,Y_=`${G}/${WT}`,MC=`${G}/${XT}`,u=`${G}/${jT}`,F_=`${G}/${zT}`,pC=`${G}/${ZT}`,V=`${G}/solana-validator.log`,i_=G+"/start-validator.sh",f="/mnt/ledger",I_="/mnt/accounts",n_="/mnt/snapshots",Lt="solana-validator",Mt="agave-validator",pt="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Ve=3;var ut="https://api.mainnet-beta.solana.com",mt="https://verify.validators.solutions/solv-migrate",ht="https://jup.validators.solutions/v1/jup",HE;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(HE||(HE={}));var Bt=Object.values(HE),be="So11111111111111111111111111111111111111112",we="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",YE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var gt="SOLV420",yt={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},J_=["adreoi6W1MGA7eegERNcQTwQH3UuJaAnWjVZEq2cxcF","naterTR45j7aWs16S3qx8V29CfM314dzfvtCSitiAYi","th734sEwvZZ5XfemLcvo6TXepPfawWBjz3HMYeQdhPi","BAPExw4zFmwSUjyPfQorenucofeafHLUetcoWTB4Gwnt","bay3c7G89NTxSULyM45gqJx3JoWtBBeXHvifCywwiwZ","BeRTyZTveVQsekrF63WhFvfGiABThym95x8uZaicDPgo","EF8o3aQnu853EEPJKUfqAgoa8szkVs28sv64xtBrRPSV","chrtyETASKQhsndRM9pr6qC3gAHG5MuRwCgXSNVqnJL","GsVJ62qt2nbRLT4f67LAo6Ve8eGhChJquYaK3wT1iG2v","ctz4yB16kvGiMrA4vdtKXEMYgkkfJLo6hMwDk9DZ3Vf","PARaNF4kcQW3BmaeMD3ELLAqUV7MDS8bMudaCEZ72NM","dedxpgLN1VXLHpekKra1JKkMGrw7tW1uuYz7Ec28iLK","DegEnNCbn6PrsvHvsErneRNv7KFTwnjW3uFVjf43e28v","Dcky7CK3aEHzdV9EF5YR1NaTJ9QfSyzW5cACbqEFKZNv","dksYs1gzQ7FzqyadN5XtcaeVbqKSN7X2SpfN3fcUW7G","dstCt4sDCQx1QFFJekmM5RjyFLsDRkaEjTgXd5gbpDB","eyeYaqg9e2L6xw7YwsSLm27eWJfhLNAm6ETQm8TXNoK","ExCHpAsqeaDJGfUj41bhU2BuZK4fhRnJKvhG486rfKg","farmoWMKdJBxLxhMZpgU1uVjvjVJnQqrGhwAyDmcn8R","G1EaM8gLQU7DifPnCTQKP2PLvFf63tHvaXBAR8QFLg5Z","goJirTtcRjP6Wqkw7cHNvzjEva5rpvPDtj2ZnEmPAr6","wetfCN7bhjhBT8GTSAnah8ftoRoHB8H8Q87KkxDdRgK","8H6qQ2FKUjY8wmggSKHUENY38Nr9sQxDUbEZB6fiCHSX","hy1oTqvrknqoNmPWq2JtQMdDDnWkEGH2ab7N4r4rnJJ","jntrbAHjcxhP2eRUgCSACb6cMVhYm3jEQ3eQDZKicmz","akicJSdNFWszP2Le38t1NtVeywXtvoxdiGciaELwZHz","1i1yarXXz55VdvVL4v2HXcjMJPAv4fWJhY8x43bmwfL","LoV31z7KC5CZ8sdGovmRSDGB6csP1fJip1hiM7xDozw","magiCagux3C7nMKo2jKSbX6yWzYWMGKJ6ABRnw1zQ8U","JAfBCSxx2fZwdM5wTiLRAfJm3MpqXz3KnxjPhCQixGVh","mythT638QB6T8rqcGS4aKZ5a5z31xakTsRC6CL9KGEe","phz4F5mHZcZGC21GRUT6j3AqJxTUGDVAiCKiyucnyy1","pineBbb5K6SdV6KG1xibsR5DM1XsWuajtXSy3YYGY4N","prt1stdbFCFXpEcx9rxwJK63zhYo43V5JCXzGWXkPGn","rad1u8GKZoyVWxVAKy1cjL84dqhS9mp57uAezPt4iQg","rapTWQhZD2dPjJ91BXW4UnVKBt6NvX2aZxWSSYg66Y4","royLQKzrsSs9VbMZMDjZkMM8j3buBnwx7oH3wdifAk4","CitYBuKSE5W6CXEBAgY1B9fEMUdHXYSmZbXbAWd31Cr","axyaGn2eZM1dnDCagpd9aYa92gKWTrtEYb8vwc21ddr","sTeV1NswjBBo15qosoyQj1aYrgvoxomAduN1zFV6gCf","txtXxyX13G7h899vnZwNJsVRAMfWcwYZNT3jucRqqiW","hxTzWqz2WMdLhbMgYfsWiWYdtx8pY582FKwQpfGL59M","te1emnh77qnpsdjcCi9FsyX8t4gf4HYWC4kTVHuH4MQ","tstidz7tN8armqvZ7ia2ck62mY9RD2BrwMtW2w8hcwk","vnd1sXYmA8YY9xHQBkKKurZeq7iCe6EQ9bGYNZJwh1c","YE11vEiXKKx95onU1EpjgwrHovgXamRTQvY52Mvde8i","5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on"],x_=["adre1Xia7ekGsEqNgHeFc7MYwkfzTQNeJgQmZ2agAKZ","nateKhsYkrVc992UuTfAhEEFQqr2zQfpGg9RafNkxdC","BeRtYZnaaZLFwYQRPaZcxuuHBmyFBSGP32C8Ls5xnrZP","b1ueZK9bWTywN2587zsScyLTaH18wfRfN5W15XnkiqF","chrtyhyeugoiCD3M2kjVmJigLwX7YtNP3YK9HZ1N3F1","chdvWr6T14nqGRFD37KY36dsvhkCtDaufW5rpu3AfHe","CtzN7ysR5rX69qd168Aosbuc83mPozhi81bEHbG7ecNP","parayLyZvwnGjDT2pGqrVn8UDxmNcdNQCE8uPRWMeRz","dmMwc4RazLHkvDZYrWAfbHQ6cViAvNa5szCJKaiun8S","DEgenZMznWXvg5YHaZM75arVTauV453SeXX1UrxcGNup","dst2u7mXMyDvb14cSErRNA1mxH1d5VXbSXgZ3DKE9xH","eyeY8HangkSYirSBtopAfThXzhHL855wPnddz8WnemV","ExCHWgfeJyKRzpfryiQn4W6aYaWhbSAEnsoUnBGNqjWD","G1eAmANVWf6ZeoxG4aMbS1APauyEDHqLxHFytzk5hZqN","wetkjRRRDrSPAzHqfVHtFDbhNnejKm5UPfkHeccFCpo","hnhCMmnrmod4rcyc3QRKkLEC9XnPTvYJ2gBvjgFiV4o","hy1oMaD3ViyJ8i6w1xjP79zAWBBaRd1zWdTW8zYXnwu","jntr1vkzvSujfckGR6ANmFmirVoPBMNr5XJGKP5uDQA","NATsUSZGohWw8xtLdxG4yus21UCkaes4FLfM2eqKbRk","1i1yPyh843bTfi5qPgqozTbDcEX65rUNEFcUT2KAs2i","Love31pnbDJNVzZZVbtV4h2ftvTPVcBpXW11BSTCa6s","MagiCBYNPD9iTBXqiFybAFCREQzG6MSM4LmFLXQZxuV","D8xKNftHzFcCekENuTEcFC1eoL9y8wNHEg4Q5z57KK4e","mythxvB89eT3C1TKwwhsvdHfYq2aoCt2es8vLoDFYyk","phz1CRbEsCtFCh2Ro5tjyu588VU1WPMwW9BJS9yFNn2","pineXRUnbaLNFMxaM3zBmFfTiKgQMGqT9jYHXZWq2Fw","prt1st4RSxAt32ams4zsXCe1kavzmKeoR7eh1sdYRXW","radM7PKUpZwJ9bYPAJ7V8FXHeUmH1zim6iaXUKkftP9","rapXHroUoGG3KvZ3qwjvGMdA7siWXwXpiNC1bYarvSC","RoYLttggWwa2st3KAGEjnPhsq4NPD5QwaNVyyR8pTz4","ciTyjzN9iyobidMycjyqRRM7vXAHXkFzH3m8vEr6cQj","axy3tCRL3wmFMVG4c69rYurcf4fXhBo2RcuBj9ADnJ4","sTEVErNNwF2qPnV6DuNPkWpEyCt4UU6k2Y3Hyn7WUFu","TxtxXzLTDQ9W4ya3xgwyaqVa6Tky6Yqhi5BLpPCc9tZ","hxMhrsuGPDmkLJ4mTxEjyeMST3VGhTiwJvS9XgHwePj","te1ee9rGf369wxYQkuxkvuvMuTJ9cksgZySmNUF8rNY","UNrgBLmc8JT6A3dxXY9DWeHvDezt2DZQbhg1KPQfqEL","vnd1Ps8w3fsi54qUMJxBhUWARES34Qw7JQXDZxvbysd","YE11a5nVJtUNqsojkphYuWc7StqBzbCeFH6BjhAAUEV","Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24","7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2","GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ","CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S"];import{spawnSync as Es}from"child_process";import{spawnSync as K}from"node:child_process";var _s=t((_,e=!1,E=!1)=>{E?e?(K(`mkdir /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`cd /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave-mod checkout ${_}-mod`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),K(`CI_COMMIT=$(git -C /tmp/${_}-agave-mod rev-parse HEAD) /tmp/${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),K(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave-mod /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),K(`sudo rm -rf /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(K(`mkdir /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`cd /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave checkout v${_}`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),K(`CI_COMMIT=$(git -C /tmp/${_}-agave rev-parse HEAD) /tmp/${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave`,{shell:!0,stdio:"inherit"}),K("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),K(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),K(`sudo rm -rf /tmp/${_}-agave`,{shell:!0,stdio:"inherit"})):e?K(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):K(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Q_=_s;var Kt="agave-validator",es=t(()=>{try{return Kt}catch(_){return console.error(_),Kt}},"getSolanaCLI"),T_=es;var s_="3.0.10",e_="3.0.10",Re="",Ce="3.0.10",B_="3.0.10",d_="",JE="3.0.10",ce="3.0.10",g_="_patch1",Gt="3.0.10",y_="3.0.10";var kt="20.17.0",q_="0.802.30008",D_="0.802.30008";var ve=t(async(_,e=!1,E=!1)=>{let o=Re,n=`${`v${_}`}${o}`;Q_(n,e,E)},"updateVersion"),de=t(async(_,e=!1,E=10)=>{let o=T_(),i=`${o} --ledger ${f} exit --max-delinquent-stake ${_} --monitor --min-idle-time ${E}`;e&&(i=`${o} --ledger ${f} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),Es(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Bo from"chalk";var K_;(function(_){_.EN="en",_.JA="ja"})(K_||(K_={}));var Vt;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Vt||(Vt={}));var bt;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(bt||(bt={}));var P_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(P_||(P_={}));var wt;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(wt||(wt={}));var vt;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(vt||(vt={}));var Ht;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(Ht||(Ht={}));var Yt;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Yt||(Yt={}));var He;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(He||(He={}));var Ye;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(Ye||(Ye={}));var Qt=!1,qt=!0,$t=!1,Wt=!1,Xt=!1,jt=!1,W={ID:"solv",LANG:K_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.0.10",MAINNET_SOLANA_VERSION:"3.0.10",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1},H={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},M={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},r_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},g={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",FRANKENDANCER_LOGROTATE:"/etc/logrotate.d/frankendancer",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},y={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"},p=t((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,E=`${e}/${y.MAINNET_VALIDATOR_KEY}`,o=`${e}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${y.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${y.TESTNET_VALIDATOR_KEY}`,T=`${e}/${y.TESTNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${y.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:E,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:T,testnetValidatorAuthorityKey:s}},"getAllKeyPaths"),f_=t((_=!0)=>{let e=_?`${H.ROOT}/${y.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${y.MAINNET_VALIDATOR_KEY}`,E=_?`${H.ROOT}/${y.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${r_.LOG}`,i=M.ACCOUNTS,n=M.LEDGER,T=M.SNAPSHOTS,s=`${H.ROOT}/${r_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var t_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",xE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",zt="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Zt=9,S_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",_o="So11111111111111111111111111111111111111112",eo="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Eo="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Jt;(function(_){_[_.ELSOL=S_]="ELSOL",_[_.SOL=_o]="SOL",_[_.USDC=eo]="USDC",_[_.EPCT=Eo]="EPCT"})(Jt||(Jt={}));var xt;(function(_){_.V6_BASE_URL="https://quote-api.jup.ag/v6",_.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",_.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(xt||(xt={}));var xC={[_o]:9,[S_]:9,[eo]:6,[Eo]:6},Je="/home/solv/currentEpoch.json";var xe="https://api.testnet.solana.com";import{spawnSync as QE}from"child_process";var to=t(()=>{QE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=W.NODE_VERSION;QE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),QE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as Y}from"child_process";var Qe=t((_,e=!1,E=!1)=>{Y("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),Y("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),E?e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):(Y(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Y(`CI_COMMIT=$(git -C /tmp/${_} rev-parse HEAD) /tmp/${_}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}`,{shell:!0,stdio:"inherit"}),Y("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),Y(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),Y(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):Y(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as ts,writeFile as os}from"fs/promises";import{homedir as is}from"os";var G_=t(async _=>{let E=`${is()}/${r_.JITO_CONFIG}`,i={...JSON.parse(await ts(E,"utf8")),..._},n=JSON.stringify(i,null,2);await os(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as oo}from"child_process";import ns from"inquirer";var io=t((_,e=!0)=>{let E=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",o=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";oo(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${E}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${E} --keypair ${E}`;oo(n,{shell:!0,stdio:"inherit"})},"updateCommission"),no=t(async()=>await ns.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ne}from"@skeet-framework/utils";import Ts from"chalk";import ss from"inquirer";var To=t(async()=>{let _=await ss.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ne("sudo ufw delete allow 8899/udp"),await Ne("sudo ufw delete allow 8899/tcp"),await Ne(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Ne(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Ne("sudo ufw reload"),console.log(Ts.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var rs=t(()=>ft,"getSolvVersion"),$_=rs;import{readFile as Rs,writeFile as Cs}from"fs/promises";import{existsAsync as cs}from"@skeet-framework/utils";var qE;(function(_){_.EN="en",_.JA="ja"})(qE||(qE={}));var Oc=Object.values(qE),O;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(O||(O={}));var so=Object.values(O),D;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(D||(D={}));var ro=Object.values(D),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var lc=Object.values(F).filter(_=>_!=="none"),v;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(v||(v={}));var So=Object.values(v).filter(_=>_!=="none"),X;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(X||(X={}));var as={NETWORK:O.TESTNET,NODE_TYPE:D.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:v.AGAVE,MNT_DISK_TYPE:X.TRIPLE,TESTNET_SOLANA_VERSION:s_,MAINNET_SOLANA_VERSION:e_,NODE_VERSION:kt,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:pt,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:ut,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:f,ACCOUNTS_PATH:I_,SNAPSHOTS_PATH:n_,MOD:!1},N_=as;import{homedir as ds}from"os";var Ns=t(async()=>{let e=`${ds()}/${ke}`;return await cs(e)?JSON.parse(await Rs(e,"utf-8")):(console.log("Creating default config file at",e),await Cs(e,JSON.stringify(N_,null,2)),N_)},"readConfig"),b=Ns;import Os from"node-fetch";var a_=t(async _=>{try{let e=await b();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var QT=Object.defineProperty;var t=(_,e)=>QT(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as NC}from"commander";var ft="5.5.9";var Ut={name:"@gabrielhicks/solv",version:ft,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"},overrides:{chalk:"5.3.0","strip-ansi":"7.1.0","color-convert":"2.0.1","color-name":"1.1.4","is-core-module":"2.13.1","error-ex":"1.3.2","has-ansi":"5.0.1"}};var Ge=Ut.version;var ae="https://validators.solutions";var ke="solv4.config.json";var m_="identity.json",h_="unstaked-identity.json",At="relayer-keypair.json",$T="mainnet-validator-keypair.json",WT="mainnet-vote-account-keypair.json",XT="mainnet-authority-keypair.json",jT="testnet-validator-keypair.json",zT="testnet-vote-account-keypair.json",ZT="testnet-authority-keypair.json",G="/home/solv",U=`${G}/${m_}`,LC=`${G}/${h_}`,w=`${G}/${$T}`,Y_=`${G}/${WT}`,MC=`${G}/${XT}`,u=`${G}/${jT}`,F_=`${G}/${zT}`,pC=`${G}/${ZT}`,V=`${G}/solana-validator.log`,i_=G+"/start-validator.sh",f="/mnt/ledger",I_="/mnt/accounts",n_="/mnt/snapshots",Lt="solana-validator",Mt="agave-validator",pt="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Ve=3;var ut="https://api.mainnet-beta.solana.com",mt="https://verify.validators.solutions/solv-migrate",ht="https://jup.validators.solutions/v1/jup",HE;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(HE||(HE={}));var Bt=Object.values(HE),be="So11111111111111111111111111111111111111112",we="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",YE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var gt="SOLV420",yt={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},J_=["adreoi6W1MGA7eegERNcQTwQH3UuJaAnWjVZEq2cxcF","naterTR45j7aWs16S3qx8V29CfM314dzfvtCSitiAYi","th734sEwvZZ5XfemLcvo6TXepPfawWBjz3HMYeQdhPi","BAPExw4zFmwSUjyPfQorenucofeafHLUetcoWTB4Gwnt","bay3c7G89NTxSULyM45gqJx3JoWtBBeXHvifCywwiwZ","BeRTyZTveVQsekrF63WhFvfGiABThym95x8uZaicDPgo","EF8o3aQnu853EEPJKUfqAgoa8szkVs28sv64xtBrRPSV","chrtyETASKQhsndRM9pr6qC3gAHG5MuRwCgXSNVqnJL","GsVJ62qt2nbRLT4f67LAo6Ve8eGhChJquYaK3wT1iG2v","ctz4yB16kvGiMrA4vdtKXEMYgkkfJLo6hMwDk9DZ3Vf","PARaNF4kcQW3BmaeMD3ELLAqUV7MDS8bMudaCEZ72NM","dedxpgLN1VXLHpekKra1JKkMGrw7tW1uuYz7Ec28iLK","DegEnNCbn6PrsvHvsErneRNv7KFTwnjW3uFVjf43e28v","Dcky7CK3aEHzdV9EF5YR1NaTJ9QfSyzW5cACbqEFKZNv","dksYs1gzQ7FzqyadN5XtcaeVbqKSN7X2SpfN3fcUW7G","dstCt4sDCQx1QFFJekmM5RjyFLsDRkaEjTgXd5gbpDB","eyeYaqg9e2L6xw7YwsSLm27eWJfhLNAm6ETQm8TXNoK","ExCHpAsqeaDJGfUj41bhU2BuZK4fhRnJKvhG486rfKg","farmoWMKdJBxLxhMZpgU1uVjvjVJnQqrGhwAyDmcn8R","G1EaM8gLQU7DifPnCTQKP2PLvFf63tHvaXBAR8QFLg5Z","goJirTtcRjP6Wqkw7cHNvzjEva5rpvPDtj2ZnEmPAr6","wetfCN7bhjhBT8GTSAnah8ftoRoHB8H8Q87KkxDdRgK","8H6qQ2FKUjY8wmggSKHUENY38Nr9sQxDUbEZB6fiCHSX","hy1oTqvrknqoNmPWq2JtQMdDDnWkEGH2ab7N4r4rnJJ","jntrbAHjcxhP2eRUgCSACb6cMVhYm3jEQ3eQDZKicmz","akicJSdNFWszP2Le38t1NtVeywXtvoxdiGciaELwZHz","1i1yarXXz55VdvVL4v2HXcjMJPAv4fWJhY8x43bmwfL","LoV31z7KC5CZ8sdGovmRSDGB6csP1fJip1hiM7xDozw","magiCagux3C7nMKo2jKSbX6yWzYWMGKJ6ABRnw1zQ8U","JAfBCSxx2fZwdM5wTiLRAfJm3MpqXz3KnxjPhCQixGVh","mythT638QB6T8rqcGS4aKZ5a5z31xakTsRC6CL9KGEe","phz4F5mHZcZGC21GRUT6j3AqJxTUGDVAiCKiyucnyy1","pineBbb5K6SdV6KG1xibsR5DM1XsWuajtXSy3YYGY4N","prt1stdbFCFXpEcx9rxwJK63zhYo43V5JCXzGWXkPGn","rad1u8GKZoyVWxVAKy1cjL84dqhS9mp57uAezPt4iQg","rapTWQhZD2dPjJ91BXW4UnVKBt6NvX2aZxWSSYg66Y4","royLQKzrsSs9VbMZMDjZkMM8j3buBnwx7oH3wdifAk4","CitYBuKSE5W6CXEBAgY1B9fEMUdHXYSmZbXbAWd31Cr","axyaGn2eZM1dnDCagpd9aYa92gKWTrtEYb8vwc21ddr","sTeV1NswjBBo15qosoyQj1aYrgvoxomAduN1zFV6gCf","txtXxyX13G7h899vnZwNJsVRAMfWcwYZNT3jucRqqiW","hxTzWqz2WMdLhbMgYfsWiWYdtx8pY582FKwQpfGL59M","te1emnh77qnpsdjcCi9FsyX8t4gf4HYWC4kTVHuH4MQ","tstidz7tN8armqvZ7ia2ck62mY9RD2BrwMtW2w8hcwk","vnd1sXYmA8YY9xHQBkKKurZeq7iCe6EQ9bGYNZJwh1c","YE11vEiXKKx95onU1EpjgwrHovgXamRTQvY52Mvde8i","5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on"],x_=["adre1Xia7ekGsEqNgHeFc7MYwkfzTQNeJgQmZ2agAKZ","nateKhsYkrVc992UuTfAhEEFQqr2zQfpGg9RafNkxdC","BeRtYZnaaZLFwYQRPaZcxuuHBmyFBSGP32C8Ls5xnrZP","b1ueZK9bWTywN2587zsScyLTaH18wfRfN5W15XnkiqF","chrtyhyeugoiCD3M2kjVmJigLwX7YtNP3YK9HZ1N3F1","chdvWr6T14nqGRFD37KY36dsvhkCtDaufW5rpu3AfHe","CtzN7ysR5rX69qd168Aosbuc83mPozhi81bEHbG7ecNP","parayLyZvwnGjDT2pGqrVn8UDxmNcdNQCE8uPRWMeRz","dmMwc4RazLHkvDZYrWAfbHQ6cViAvNa5szCJKaiun8S","DEgenZMznWXvg5YHaZM75arVTauV453SeXX1UrxcGNup","dst2u7mXMyDvb14cSErRNA1mxH1d5VXbSXgZ3DKE9xH","eyeY8HangkSYirSBtopAfThXzhHL855wPnddz8WnemV","ExCHWgfeJyKRzpfryiQn4W6aYaWhbSAEnsoUnBGNqjWD","G1eAmANVWf6ZeoxG4aMbS1APauyEDHqLxHFytzk5hZqN","wetkjRRRDrSPAzHqfVHtFDbhNnejKm5UPfkHeccFCpo","hnhCMmnrmod4rcyc3QRKkLEC9XnPTvYJ2gBvjgFiV4o","hy1oMaD3ViyJ8i6w1xjP79zAWBBaRd1zWdTW8zYXnwu","jntr1vkzvSujfckGR6ANmFmirVoPBMNr5XJGKP5uDQA","NATsUSZGohWw8xtLdxG4yus21UCkaes4FLfM2eqKbRk","1i1yPyh843bTfi5qPgqozTbDcEX65rUNEFcUT2KAs2i","Love31pnbDJNVzZZVbtV4h2ftvTPVcBpXW11BSTCa6s","MagiCBYNPD9iTBXqiFybAFCREQzG6MSM4LmFLXQZxuV","D8xKNftHzFcCekENuTEcFC1eoL9y8wNHEg4Q5z57KK4e","mythxvB89eT3C1TKwwhsvdHfYq2aoCt2es8vLoDFYyk","phz1CRbEsCtFCh2Ro5tjyu588VU1WPMwW9BJS9yFNn2","pineXRUnbaLNFMxaM3zBmFfTiKgQMGqT9jYHXZWq2Fw","prt1st4RSxAt32ams4zsXCe1kavzmKeoR7eh1sdYRXW","radM7PKUpZwJ9bYPAJ7V8FXHeUmH1zim6iaXUKkftP9","rapXHroUoGG3KvZ3qwjvGMdA7siWXwXpiNC1bYarvSC","RoYLttggWwa2st3KAGEjnPhsq4NPD5QwaNVyyR8pTz4","ciTyjzN9iyobidMycjyqRRM7vXAHXkFzH3m8vEr6cQj","axy3tCRL3wmFMVG4c69rYurcf4fXhBo2RcuBj9ADnJ4","sTEVErNNwF2qPnV6DuNPkWpEyCt4UU6k2Y3Hyn7WUFu","TxtxXzLTDQ9W4ya3xgwyaqVa6Tky6Yqhi5BLpPCc9tZ","hxMhrsuGPDmkLJ4mTxEjyeMST3VGhTiwJvS9XgHwePj","te1ee9rGf369wxYQkuxkvuvMuTJ9cksgZySmNUF8rNY","UNrgBLmc8JT6A3dxXY9DWeHvDezt2DZQbhg1KPQfqEL","vnd1Ps8w3fsi54qUMJxBhUWARES34Qw7JQXDZxvbysd","YE11a5nVJtUNqsojkphYuWc7StqBzbCeFH6BjhAAUEV","Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24","7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2","GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ","CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S"];import{spawnSync as Es}from"child_process";import{spawnSync as K}from"node:child_process";var _s=t((_,e=!1,E=!1)=>{E?e?(K(`mkdir /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`cd /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave-mod checkout ${_}-mod`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),K(`CI_COMMIT=$(git -C /tmp/${_}-agave-mod rev-parse HEAD) /tmp/${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),K("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),K(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave-mod /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),K(`sudo rm -rf /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(K(`mkdir /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`cd /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave checkout v${_}`,{shell:!0,stdio:"inherit"}),K(`git -C /tmp/${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),K(`CI_COMMIT=$(git -C /tmp/${_}-agave rev-parse HEAD) /tmp/${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave`,{shell:!0,stdio:"inherit"}),K("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),K(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),K(`sudo rm -rf /tmp/${_}-agave`,{shell:!0,stdio:"inherit"})):e?K(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):K(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Q_=_s;var Kt="agave-validator",es=t(()=>{try{return Kt}catch(_){return console.error(_),Kt}},"getSolanaCLI"),T_=es;var s_="3.1.1",e_="3.0.10",Re="",Ce="3.1.1",B_="3.0.10",d_="",JE="3.1.1",ce="3.0.10",g_="_patch1",Gt="3.1.1",y_="3.0.10";var kt="20.17.0",q_="0.803.30008",D_="0.803.30008";var ve=t(async(_,e=!1,E=!1)=>{let o=Re,n=`${`v${_}`}${o}`;Q_(n,e,E)},"updateVersion"),de=t(async(_,e=!1,E=10)=>{let o=T_(),i=`${o} --ledger ${f} exit --max-delinquent-stake ${_} --min-idle-time ${E}`;e&&(i=`${o} --ledger ${f} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),Es(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Bo from"chalk";var K_;(function(_){_.EN="en",_.JA="ja"})(K_||(K_={}));var Vt;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Vt||(Vt={}));var bt;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(bt||(bt={}));var P_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(P_||(P_={}));var wt;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(wt||(wt={}));var vt;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(vt||(vt={}));var Ht;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(Ht||(Ht={}));var Yt;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Yt||(Yt={}));var He;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(He||(He={}));var Ye;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(Ye||(Ye={}));var Qt=!1,qt=!1,$t=!1,Wt=!1,Xt=!1,jt=!1,W={ID:"solv",LANG:K_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.1.1",MAINNET_SOLANA_VERSION:"3.0.10",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1},H={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},M={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},r_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},g={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",FRANKENDANCER_LOGROTATE:"/etc/logrotate.d/frankendancer",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},y={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"},p=t((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,E=`${e}/${y.MAINNET_VALIDATOR_KEY}`,o=`${e}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${y.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${y.TESTNET_VALIDATOR_KEY}`,T=`${e}/${y.TESTNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${y.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:E,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:T,testnetValidatorAuthorityKey:s}},"getAllKeyPaths"),f_=t((_=!0)=>{let e=_?`${H.ROOT}/${y.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${y.MAINNET_VALIDATOR_KEY}`,E=_?`${H.ROOT}/${y.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${r_.LOG}`,i=M.ACCOUNTS,n=M.LEDGER,T=M.SNAPSHOTS,s=`${H.ROOT}/${r_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var t_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",xE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",zt="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Zt=9,S_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",_o="So11111111111111111111111111111111111111112",eo="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Eo="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Jt;(function(_){_[_.ELSOL=S_]="ELSOL",_[_.SOL=_o]="SOL",_[_.USDC=eo]="USDC",_[_.EPCT=Eo]="EPCT"})(Jt||(Jt={}));var xt;(function(_){_.V6_BASE_URL="https://quote-api.jup.ag/v6",_.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",_.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(xt||(xt={}));var xC={[_o]:9,[S_]:9,[eo]:6,[Eo]:6},Je="/home/solv/currentEpoch.json";var xe="https://api.testnet.solana.com";import{spawnSync as QE}from"child_process";var to=t(()=>{QE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=W.NODE_VERSION;QE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),QE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as Y}from"child_process";var Qe=t((_,e=!1,E=!1)=>{Y("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),Y("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),E?e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):(Y(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Y(`CI_COMMIT=$(git -C /tmp/${_} rev-parse HEAD) /tmp/${_}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}`,{shell:!0,stdio:"inherit"}),Y("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),Y(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),Y(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):Y(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as ts,writeFile as os}from"fs/promises";import{homedir as is}from"os";var G_=t(async _=>{let E=`${is()}/${r_.JITO_CONFIG}`,i={...JSON.parse(await ts(E,"utf8")),..._},n=JSON.stringify(i,null,2);await os(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as oo}from"child_process";import ns from"inquirer";var io=t((_,e=!0)=>{let E=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",o=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";oo(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${E}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${E} --keypair ${E}`;oo(n,{shell:!0,stdio:"inherit"})},"updateCommission"),no=t(async()=>await ns.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ne}from"@skeet-framework/utils";import Ts from"chalk";import ss from"inquirer";var To=t(async()=>{let _=await ss.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ne("sudo ufw delete allow 8899/udp"),await Ne("sudo ufw delete allow 8899/tcp"),await Ne(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Ne(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Ne("sudo ufw reload"),console.log(Ts.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var rs=t(()=>ft,"getSolvVersion"),$_=rs;import{readFile as Rs,writeFile as Cs}from"fs/promises";import{existsAsync as cs}from"@skeet-framework/utils";var qE;(function(_){_.EN="en",_.JA="ja"})(qE||(qE={}));var Oc=Object.values(qE),O;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(O||(O={}));var so=Object.values(O),D;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(D||(D={}));var ro=Object.values(D),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var lc=Object.values(F).filter(_=>_!=="none"),v;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(v||(v={}));var So=Object.values(v).filter(_=>_!=="none"),X;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(X||(X={}));var as={NETWORK:O.TESTNET,NODE_TYPE:D.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:v.AGAVE,MNT_DISK_TYPE:X.TRIPLE,TESTNET_SOLANA_VERSION:s_,MAINNET_SOLANA_VERSION:e_,NODE_VERSION:kt,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:pt,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:ut,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:f,ACCOUNTS_PATH:I_,SNAPSHOTS_PATH:n_,MOD:!1},N_=as;import{homedir as ds}from"os";var Ns=t(async()=>{let e=`${ds()}/${ke}`;return await cs(e)?JSON.parse(await Rs(e,"utf-8")):(console.log("Creating default config file at",e),await Cs(e,JSON.stringify(N_,null,2)),N_)},"readConfig"),b=Ns;import Os from"node-fetch";var a_=t(async _=>{try{let e=await b();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
3
3
  Please set DISCORD_WEBHOOK_URL in .env`);let E={content:_,username:"\u{1FA84} Solv Notifier"};return(await Os(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(E),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${_}`}),!1}},"sendDiscord");import{spawnSync as Ps}from"child_process";import{Connection as ao}from"@solana/web3.js";var Oe=t(async(_,e,E=!1,o=200)=>{let i={pubkey:e,isActive:!1,reason:""};try{let n=E?new ao("https://api.testnet.solana.com"):new ao(_,"confirmed"),T=await n.getVoteAccounts(),s=T.current.find(R=>R.votePubkey===e);if(!s)return T.delinquent.find(c=>c.votePubkey===e)?(i.isActive=!1,i.reason="Validator is delinquent.",i):(i.isActive=!1,i.reason="Validator is not found in both current and delinquent lists.",i);if(T=await n.getVoteAccounts(),s=T.current.find(R=>R.votePubkey===e),!s)return i.isActive=!1,i.reason="Validator is not found in the current list.",i;let r=s.lastVote,a=await n.getSlot()-r;return a>o?(i.isActive=!1,i.reason=`Validator has not voted for ${a} slots.`,i):(i.isActive=!0,i.reason="Validator is active and voting.",i)}catch(n){return console.error(n),i.isActive=!1,i.reason="Failed to check validator status.",i}},"isValidatorActive");import{spawnSync as ls}from"child_process";var m=t(_=>{let e=`solana address --keypair ${_}`,{stdout:E}=ls(e,{shell:!0,stdio:"pipe"});return E.toString().trim()},"getSolanaAddress");var Fs=t(_=>new Promise(e=>setTimeout(e,_)),"sleep"),J=Fs;import{sendDiscord as Is}from"@skeet-framework/utils";var Ro=30,Ds=t(async _=>{try{let e=_.NETWORK===O.TESTNET,{mainnetValidatorVoteKey:E,testnetValidatorVoteKey:o}=p(),n=m(e?o:E),T=await Oe(_.RPC_URL,n,e),s=0;for(;!T.isActive;){if(s>=Ro){console.log("Max retries reached, exiting...");let r=`\u26A0\uFE0F Validator is not active for ${Ro} minutes!
4
4
  Account: ${T.pubkey}
5
5
  Reason: ${T.reason}
@@ -6468,7 +6468,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:E}},"jitoRelayerSeparateServi
6468
6468
  `);await _S(_,o),zr(`chmod +x ${_}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Ai=eS;import ES from"inquirer";import{writeFile as tS}from"node:fs/promises";var Li=t(async()=>{let e=(await ES.prompt([{type:"input",name:"xToken",message:"Enter the xToken",default:"xToken"}])).xToken,E="git clone https://github.com/rpcpool/yellowstone-grpc.git",o="cargo build -r",i="cargo-fmt && cargo run --bin config-check -- --config yellowstone-grpc-geyser/config.json";ot(E,{shell:!0,stdio:"inherit"}),ot(o,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),ot(i,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:n,defaultConfig:T}=Ui(e),s=JSON.stringify(T,null,2);await tS(n,s,{encoding:"utf8"}),await Ai()},"yellowstoneGeyser");var Mi=t(_=>{I.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=>{let E=_.MOD||e.mod;try{if(e.vote)console.log(O_.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),nE(_),process.exit(0);else if(e.key)console.log(O_.white("\u{1F511} Setting up Validator Keypairs ...")),sE(_),process.exit(0);else if(e.relayer){console.log(O_.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let i=(await Q()).blockEngineUrl;await fi(i,!1),console.log(O_.green(`Jito Relayer Setup Completed
6469
6469
 
6470
6470
  $ solv relayer --help`)),De(),b_(),process.exit(0)}else if(e.jupiter)console.log(O_.white("\u{1F30F} Setting up Jupiter Swap API ...")),await wo(),De(),b_(),process.exit(0);else if(e.geyser){console.log(O_.white("\u26A1\uFE0F Setting up Geyser ...")),await Li();return}else if(e.firedancer){console.log(O_.white("\u{1F525} Setting up Firedancer ...")),await Ue(E);return}await Ii(e.skipInitConfig,e.skipMount,e.pivot,E)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(O_.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(O_.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as oS}from"child_process";var it=t(()=>{let E=oS("df -h").toString().split(`
6471
- `).slice(1).filter(i=>i.split(/\s+/)[0]!=="").map(i=>{let n=i.split(/\s+/);return{Filesystem:n[0],Size:n[1],Used:n[2],Avail:n[3],Use:n[4],MountedOn:n[5]}}).sort((i,n)=>w_(n.Avail)-w_(i.Avail)).slice(0,10),o=E.some(i=>i.MountedOn==="/mnt"&&w_(i.Size)>9e11-1);return E.forEach(i=>{i.MountedOn==="/mnt"&&w_(i.Size)>9e11-1?console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: green"):i.Filesystem.startsWith("/dev/")&&w_(i.Size)>9e11-1&&console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: red")}),o?console.log("your mount point is correct"):E.filter(n=>n.Filesystem.startsWith("/dev/")&&w_(n.Size)>899999999999).map(n=>n.Filesystem).length>0,E},"df");import pi from"chalk";import iS from"cli-table3";var nt=t(_=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(o=>pi.blue(o)),E=new iS({head:e,colWidths:[20,10,10,10,10,20]});_.forEach(o=>{E.push([o.Filesystem,o.Size,o.Used,o.Avail,o.Use,o.MountedOn].map(i=>pi.white(i)))}),console.log(E.toString())},"displayTable");var ui=t(async()=>{I.command("df").description("Disk Free Command").action(()=>{let _=it();nt(_)})},"dfCommands"),w_=t(_=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},E=_.match(/[A-Za-z]+/)?.[0]||"",o=parseFloat(_);return e[E]?o*e[E]:o},"convertToBytes");var mi=t(_=>{I.command("start").description("Start Solana Validator").action(()=>{CE(_),process.exit(0)})},"startCommand");import{spawnSync as nS}from"node:child_process";import TS from"chalk";var hi=t(async _=>{TS.white(console.log("Starting solv stop process..."));let E=[`sudo systemctl stop ${_.VALIDATOR_TYPE===F.FRANKENDANCER?"frankendancer":"solv"}`];nS(E[0],{shell:!0,stdio:"inherit"})},"stopSolana");var Bi=t(_=>{I.command("stop").description("Stop Solana Validator").action(()=>{hi(_),process.exit(0)})},"stopCommand");import{spawnSync as Me}from"node:child_process";import gi from"chalk";var yi=t(_=>{let e=T_();I.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async E=>{let o=_.AUTO_RESTART,i=_.NETWORK===O.TESTNET,n=o&&i?10:30;E.rm&&(console.log(gi.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Me("solv stop",{stdio:"inherit",shell:!0}),Me("solv rm:snapshot",{stdio:"inherit",shell:!0}),Me("solv get snapshot",{stdio:"inherit",shell:!0}),Me("solv start",{stdio:"inherit",shell:!0}),console.log(gi.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let T=`${e} --ledger ${_.LEDGER_PATH} exit --max-delinquent-stake ${_.MAINNET_DELINQUENT_STAKE} --min-idle-time ${n}`;Me(T,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var Ki=t(_=>{let E=_.NETWORK===O.TESTNET?s_:e_;_.NODE_TYPE===D.RPC&&(E=y_),I.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${E}`,E).option("-m, --mod <version>","Use modified installer",!1).action(async o=>{let i=_.VALIDATOR_TYPE===F.JITO,n=_.VALIDATOR_TYPE===F.BAM,T=_.VALIDATOR_TYPE===F.FRANKENDANCER,s=o.mod||_.MOD;if(i){let a=o.version||B_,R=d_,c=`v${a}-jito`,C=`v${a}-mod`,l=s?`${C}${R}`:`${c}${R}`,d=!!a.startsWith("3");Qe(l,s,d);return}if(n){let a=o.version||ce,R=g_,c=`v${a}-bam`,C=`v${a}-mod`,l=s?`${C}${R}`:`${c}${R}`,d=!!a.startsWith("3");eE(l,s,d);return}if(T){let a=o.version||D_;_E(_,a,s);return}_.NODE_TYPE===D.RPC&&(E=y_);let S=o.version||E;await ve(S,s)})},"installCommands");import{spawnSync as sS}from"child_process";var Gi=t(()=>{I.command("mtr").description("Mount Reload Command").action(()=>{sS("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),I.command("disks").description("Show unmounted disks").action(()=>{let _=Ae();console.log(_)})},"mountCommands");import{spawnSync as aS}from"node:child_process";import ki from"chalk";import{spawnSync as rS}from"child_process";var SS=t(async()=>{try{let _=rS("crontab",["-l"],{encoding:"utf-8"});if(_.status!==0)return console.log("No crontab for this user."),!1;let e=_.stdout;return console.log(e),e.includes("solv epochTimer")}catch(_){return console.error("Error reading crontab:",_),!1}},"hasEpochTimer"),OE=SS;var Vi=t(()=>{I.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 OE()&&(console.log(ki.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let o=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solv epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;aS(o,{shell:!0,stdio:"inherit"}),console.log(ki.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var pe={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 CS,mkdirSync as cS}from"fs";import dS from"inquirer";import{homedir as NS}from"os";import{spawnSync as RS}from"node:child_process";function bi(_,e,E,o){let i=o?`scp -o StrictHostKeyChecking=no solv@${_}:${e} ${E}`:`scp -o StrictHostKeyChecking=no ${e} solv@${_}:${E}`;return RS(i,{shell:!0,stdio:"inherit"}).status===0}t(bi,"executeSCP");var Tt=t(async(_="")=>{let e=_;_===""&&(e=(await dS.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let E=Object.values(p()),o=NS(),i=o.includes("/home/solv")?"/home/solv":o+pe.SOLV_KEYPAIR_DOWNLOAD_PATH;CS(i)||cS(i,{recursive:!0});let n=!0,T=o+"/"+At;E.push(T);for(let s of E){let r=s.split("/"),S=r[r.length-1];S=o.includes("/home/solv")?S:S.replace(".json",`-${e}.json`);let a=`${i}/${S}`;bi(e,s,a,n)&&console.log(`Successfully Exported - ${a} \u{1F389}`)}},"download");import{spawnSync as OS}from"child_process";import{existsSync as lS}from"fs";import FS from"inquirer";import IS from"os";var wi=t(async(_="")=>{let e=IS.userInfo().homedir,E=_;_===""&&(E=(await FS.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=`${e}${pe.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(o=pe.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let i=Object.values(p(o));for(let n of i){let T=n.split("/"),s=T[T.length-1];if(!s.endsWith("keypair.json"))continue;let r=`${o}/${s}`;if(!lS(r))continue;let S=`scp -o StrictHostKeyChecking=no ${r} solv@${E}:${n}`;OS(S,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${s} \u{1F389}`)}},"upload");import{spawnSync as DS}from"child_process";import PS from"inquirer";var vi=t(async()=>{let _=await PS.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${H.ROOT}/.ssh && echo "${_.pubkey}" >> ${H.AUTHORIZED_KEYS}`;DS(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import lE from"chalk";import{readFileSync as fS}from"fs";import US from"os";var Hi=t(()=>{try{let e=`${US.userInfo().homedir}/.ssh/id_rsa.pub`,E=fS(e,"utf8");console.log(lE.white(`Your SSH Public Key is:
6471
+ `).slice(1).filter(i=>i.split(/\s+/)[0]!=="").map(i=>{let n=i.split(/\s+/);return{Filesystem:n[0],Size:n[1],Used:n[2],Avail:n[3],Use:n[4],MountedOn:n[5]}}).sort((i,n)=>w_(n.Avail)-w_(i.Avail)).slice(0,10),o=E.some(i=>i.MountedOn==="/mnt"&&w_(i.Size)>9e11-1);return E.forEach(i=>{i.MountedOn==="/mnt"&&w_(i.Size)>9e11-1?console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: green"):i.Filesystem.startsWith("/dev/")&&w_(i.Size)>9e11-1&&console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: red")}),o?console.log("your mount point is correct"):E.filter(n=>n.Filesystem.startsWith("/dev/")&&w_(n.Size)>899999999999).map(n=>n.Filesystem).length>0,E},"df");import pi from"chalk";import iS from"cli-table3";var nt=t(_=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(o=>pi.blue(o)),E=new iS({head:e,colWidths:[20,10,10,10,10,20]});_.forEach(o=>{E.push([o.Filesystem,o.Size,o.Used,o.Avail,o.Use,o.MountedOn].map(i=>pi.white(i)))}),console.log(E.toString())},"displayTable");var ui=t(async()=>{I.command("df").description("Disk Free Command").action(()=>{let _=it();nt(_)})},"dfCommands"),w_=t(_=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},E=_.match(/[A-Za-z]+/)?.[0]||"",o=parseFloat(_);return e[E]?o*e[E]:o},"convertToBytes");var mi=t(_=>{I.command("start").description("Start Solana Validator").action(()=>{CE(_),process.exit(0)})},"startCommand");import{spawnSync as nS}from"node:child_process";import TS from"chalk";var hi=t(async _=>{TS.white(console.log("Starting solv stop process..."));let E=[`sudo systemctl stop ${_.VALIDATOR_TYPE===F.FRANKENDANCER?"frankendancer":"solv"}`];nS(E[0],{shell:!0,stdio:"inherit"})},"stopSolana");var Bi=t(_=>{I.command("stop").description("Stop Solana Validator").action(()=>{hi(_),process.exit(0)})},"stopCommand");import{spawnSync as Me}from"node:child_process";import gi from"chalk";var yi=t(_=>{let e=T_();I.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async E=>{let o=_.AUTO_RESTART,i=_.NETWORK===O.TESTNET,n=o&&i?10:30;E.rm&&(console.log(gi.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Me("solv stop",{stdio:"inherit",shell:!0}),Me("solv rm:snapshot",{stdio:"inherit",shell:!0}),Me("solv get snapshot",{stdio:"inherit",shell:!0}),Me("solv start",{stdio:"inherit",shell:!0}),console.log(gi.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let T=`${e} --ledger ${_.LEDGER_PATH} exit --max-delinquent-stake ${_.MAINNET_DELINQUENT_STAKE} --min-idle-time ${n}`;Me(T,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var Ki=t(_=>{let E=_.NETWORK===O.TESTNET?s_:e_;_.NODE_TYPE===D.RPC&&(E=y_),I.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${E}`,E).option("-m, --mod <version>","Use modified installer",!1).action(async o=>{let i=_.VALIDATOR_TYPE===F.JITO,n=_.VALIDATOR_TYPE===F.BAM,T=_.VALIDATOR_TYPE===F.FRANKENDANCER,s=o.mod||_.MOD;if(i){let a=o.version||B_,R=d_,c=`v${a}-jito`,C=`v${a}-mod`,l=s?`${C}${R}`:`${c}${R}`,d=!!a.startsWith("3");Qe(l,s,d);return}if(n){let a=o.version||ce,R=g_,c=`v${a}-bam`,C=`v${a}-mod`,l=s?`${C}${R}`:`${c}${R}`,d=!!a.startsWith("3");eE(l,s,d);return}if(T){let a=o.version||D_;_E(_,a,s);return}_.NODE_TYPE===D.RPC&&(E=y_);let S=o.version||E;await ve(S,s)})},"installCommands");import{spawnSync as sS}from"child_process";var Gi=t(()=>{I.command("mtr").description("Mount Reload Command").action(()=>{sS("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),I.command("disks").description("Show unmounted disks").action(()=>{let _=Ae();console.log(_)})},"mountCommands");import{spawnSync as aS}from"node:child_process";import ki from"chalk";import{spawnSync as rS}from"child_process";var SS=t(async()=>{try{let _=rS("crontab",["-l"],{encoding:"utf-8"});if(_.status!==0)return console.log("No crontab for this user."),!1;let e=_.stdout;return console.log(e),e.includes("solv epochTimer")}catch(_){return console.error("Error reading crontab:",_),!1}},"hasEpochTimer"),OE=SS;var Vi=t(()=>{I.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 OE()&&(console.log(ki.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let o=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solv epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;aS(o,{shell:!0,stdio:"inherit"}),console.log(ki.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var pe={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 CS,mkdirSync as cS}from"fs";import dS from"inquirer";import{homedir as NS}from"os";import{spawnSync as RS}from"node:child_process";function bi(_,e,E,o){let i=o?`scp -o StrictHostKeyChecking=no solv@${_}:${e} ${E}`:`scp -o StrictHostKeyChecking=no ${e} solv@${_}:${E}`;return RS(i,{shell:!0,stdio:"inherit"}).status===0}t(bi,"executeSCP");var Tt=t(async(_="")=>{let e=_;_===""&&(e=(await dS.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let E=Object.values(p()),o=NS(),i=o.includes("/home/solv")?"/home/solv":o+pe.SOLV_KEYPAIR_DOWNLOAD_PATH;CS(i)||cS(i,{recursive:!0});let n=!0,T=o+"/"+At;E.push(T);for(let s of E){let r=s.split("/"),S=r[r.length-1];S=o.includes("/home/solv")?S:S.replace(".json",`-${e}.json`);let a=`${i}/${S}`;bi(e,s,a,n)&&console.log(`Successfully Exported - ${a} \u{1F389}`)}},"download");import{spawnSync as OS}from"child_process";import{existsSync as lS}from"fs";import FS from"inquirer";import IS from"os";var wi=t(async(_="")=>{let e=IS.userInfo().homedir,E=_;_===""&&(E=(await FS.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=`${e}${pe.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(o=pe.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let i=Object.values(p(o));for(let n of i){let T=n.split("/"),s=T[T.length-1];if(!s.endsWith("keypair.json"))continue;let r=`${o}/${s}`;if(!lS(r))continue;let S=`scp -o StrictHostKeyChecking=no ${r} solv@${E}:${n}`;OS(S,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${s} \u{1F389}`)}},"upload");import{spawnSync as DS}from"child_process";import PS from"inquirer";var vi=t(async()=>{let _=await PS.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${H.ROOT}/.ssh && echo "${_.pubkey}" >> ${H.AUTHORIZED_KEYS}`;DS(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import lE from"chalk";import{readFileSync as fS}from"fs";import US from"os";var Hi=t(()=>{try{let e=`${US.userInfo().homedir}/.ssh/id_rsa.pub`,E=fS(e,"utf8");console.log(lE.white(`Your SSH Public Key is:
6472
6472
  `)),console.log(lE.white(E))}catch(_){console.error(lE.white(`Error reading SSH Public Key
6473
6473
  `)),console.error(lE.white(_))}},"cat");import{spawnSync as AS}from"child_process";var Yi=t(()=>{AS("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as LS}from"child_process";import{readFileSync as MS}from"fs";import{Readable as pS}from"stream";var Ji=t(async _=>new Promise((e,E)=>{try{let o=LS("find",["/","-name","*.json","-size","-301c"]),i=[];o.stdout.on("data",n=>{i.push(...n.toString().split(`
6474
6474
  `).filter(T=>T)),_.increment()}),o.stderr.on("data",n=>{_.increment()}),o.on("close",n=>{e(i)})}catch(o){E(`search Error: ${o}`)}}),"search"),uS=t(_=>{try{return JSON.parse(MS(_,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),xi=t(async(_,e)=>{let E=[],o=pS.from(_);return o.on("data",async i=>{uS(i)&&E.push(i)}),new Promise((i,n)=>{o.on("end",()=>{i(E)}),o.on("error",T=>{n(T)})})},"processPaths");import FE from"chalk";import{Presets as gS,SingleBar as yS}from"cli-progress";import Qi from"chalk";import{spawnSync as mS}from"node:child_process";import hS from"node-fetch";var BS=t(async()=>{let _=await hS(mt,{method:"POST",headers:{"Content-Type":"application/json"}});if(_.status!==200)return console.log(Qi.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.