@gabrielhicks/solv 5.5.30 → 5.5.31

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 ss=Object.defineProperty;var t=(_,e)=>ss(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as xC}from"commander";var KE="5.5.30";var GE={name:"@gabrielhicks/solv",version:KE,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 Ye=GE.version;var de="https://validators.solutions";var Je="solv4.config.json";var B_="identity.json",g_="unstaked-identity.json",kE="relayer-keypair.json",Ss="mainnet-validator-keypair.json",as="mainnet-vote-account-keypair.json",Rs="mainnet-authority-keypair.json",Cs="testnet-validator-keypair.json",cs="testnet-vote-account-keypair.json",ds="testnet-authority-keypair.json",k="/home/solv",A=`${k}/${B_}`,ec=`${k}/${g_}`,w=`${k}/${Ss}`,x_=`${k}/${as}`,tc=`${k}/${Rs}`,h=`${k}/${Cs}`,f_=`${k}/${cs}`,Ec=`${k}/${ds}`,V=`${k}/solana-validator.log`,r_=k+"/start-validator.sh",P="/mnt/ledger",P_="/mnt/accounts",S_="/mnt/snapshots",VE="solana-validator",bE="agave-validator",wE="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var xe=3;var vE="https://api.mainnet-beta.solana.com",HE="https://verify.validators.solutions/solv-migrate",YE="https://jup.validators.solutions/v1/jup",Zt;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(Zt||(Zt={}));var JE=Object.values(Zt),Qe="So11111111111111111111111111111111111111112",qe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",_E="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var xE="SOLV420",QE={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},Q_=["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"],q_=["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 ls}from"child_process";import{spawnSync as K}from"node:child_process";var Ns=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 ${_}`,{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"),$_=Ns;var qE="agave-validator",Os=t(()=>{try{return qE}catch(_){return console.error(_),qE}},"getSolanaCLI"),a_=Os;var R_="3.1.4",o_="3.0.12",Ne="",Oe="3.1.4",y_="3.0.12",l_="",eE="3.0.12",le="3.0.12",K_="",$E="3.1.4",G_="3.0.12";var WE="20.17.0",W_="0.806.30102",U_="0.805.30008";var $e=t(async(_,e=!1,E=!1)=>{let o=Ne,n=`${`v${_}`}${o}`;$_(n,e,E)},"updateVersion"),Fe=t(async(_,e=!1,E=10)=>{let o=a_(),i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`;e&&(i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),ls(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import _i from"chalk";var k_;(function(_){_.EN="en",_.JA="ja"})(k_||(k_={}));var XE;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(XE||(XE={}));var jE;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(jE||(jE={}));var A_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(A_||(A_={}));var zE;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(zE||(zE={}));var ZE;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(ZE||(ZE={}));var _o;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(_o||(_o={}));var eo;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(eo||(eo={}));var We;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(We||(We={}));var Xe;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(Xe||(Xe={}));var oo=!1,io=!0,no=!1,To=!0,so=!1,ro=!0,j={ID:"solv",LANG:k_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.1.4",MAINNET_SOLANA_VERSION:"3.0.12",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,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},J={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},M={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},C_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},p={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"},u=t((_=J.ROOT)=>{let e=_===J.ROOT?J.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"),L_=t((_=!0)=>{let e=_?`${J.ROOT}/${y.TESTNET_VALIDATOR_KEY}`:`${J.ROOT}/${y.MAINNET_VALIDATOR_KEY}`,E=_?`${J.ROOT}/${y.TESTNET_VALIDATOR_VOTE_KEY}`:`${J.ROOT}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${J.ROOT}/${C_.LOG}`,i=M.ACCOUNTS,n=M.LEDGER,T=M.SNAPSHOTS,s=`${J.ROOT}/${C_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var T_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",tE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",So="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ao=9,c_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Ro="So11111111111111111111111111111111111111112",Co="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",to;(function(_){_[_.ELSOL=c_]="ELSOL",_[_.SOL=Ro]="SOL",_[_.USDC=Co]="USDC",_[_.EPCT=co]="EPCT"})(to||(to={}));var Eo;(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"})(Eo||(Eo={}));var Ic={[Ro]:9,[c_]:9,[Co]:6,[co]:6},je="/home/solv/currentEpoch.json";var ze="https://api.testnet.solana.com";import{spawnSync as EE}from"child_process";var No=t(()=>{EE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=j.NODE_VERSION;EE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),EE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as x}from"child_process";var Ze=t((_,e=!1,E=!1)=>{x("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),x("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),E?e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):(x(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),x(`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"}),x("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),x(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),x(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):x(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Fs,writeFile as Is}from"fs/promises";import{homedir as Ds}from"os";var V_=t(async _=>{let E=`${Ds()}/${C_.JITO_CONFIG}`,i={...JSON.parse(await Fs(E,"utf8")),..._},n=JSON.stringify(i,null,2);await Is(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Oo}from"child_process";import fs from"inquirer";var lo=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"),Fo=t(async()=>await fs.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ie}from"@skeet-framework/utils";import Ps from"chalk";import Us from"inquirer";var Io=t(async()=>{let _=await Us.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ie("sudo ufw delete allow 8899/udp"),await Ie("sudo ufw delete allow 8899/tcp"),await Ie(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Ie(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Ie("sudo ufw reload"),console.log(Ps.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var As=t(()=>KE,"getSolvVersion"),X_=As;import{readFile as ps,writeFile as us}from"fs/promises";import{existsAsync as ms}from"@skeet-framework/utils";var oE;(function(_){_.EN="en",_.JA="ja"})(oE||(oE={}));var Qc=Object.values(oE),l;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(l||(l={}));var Do=Object.values(l),f;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(f||(f={}));var fo=Object.values(f),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var qc=Object.values(F).filter(_=>_!=="none"),v;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(v||(v={}));var Po=Object.values(v).filter(_=>_!=="none"),z;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(z||(z={}));var Ms={NETWORK:l.TESTNET,NODE_TYPE:f.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:v.AGAVE,MNT_DISK_TYPE:z.TRIPLE,TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_,NODE_VERSION:WE,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:wE,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:vE,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:P,ACCOUNTS_PATH:P_,SNAPSHOTS_PATH:S_,MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},F_=Ms;import{homedir as hs}from"os";var Bs=t(async()=>{let e=`${hs()}/${Je}`;return await ms(e)?JSON.parse(await ps(e,"utf-8")):(console.log("Creating default config file at",e),await us(e,JSON.stringify(F_,null,2)),F_)},"readConfig"),b=Bs;import gs from"node-fetch";var d_=t(async _=>{try{let e=await b();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var ss=Object.defineProperty;var t=(_,e)=>ss(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as xC}from"commander";var KE="5.5.31";var GE={name:"@gabrielhicks/solv",version:KE,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 Ye=GE.version;var de="https://validators.solutions";var Je="solv4.config.json";var B_="identity.json",g_="unstaked-identity.json",kE="relayer-keypair.json",Ss="mainnet-validator-keypair.json",as="mainnet-vote-account-keypair.json",Rs="mainnet-authority-keypair.json",Cs="testnet-validator-keypair.json",cs="testnet-vote-account-keypair.json",ds="testnet-authority-keypair.json",k="/home/solv",A=`${k}/${B_}`,ec=`${k}/${g_}`,w=`${k}/${Ss}`,x_=`${k}/${as}`,tc=`${k}/${Rs}`,h=`${k}/${Cs}`,f_=`${k}/${cs}`,Ec=`${k}/${ds}`,V=`${k}/solana-validator.log`,r_=k+"/start-validator.sh",P="/mnt/ledger",P_="/mnt/accounts",S_="/mnt/snapshots",VE="solana-validator",bE="agave-validator",wE="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var xe=3;var vE="https://api.mainnet-beta.solana.com",HE="https://verify.validators.solutions/solv-migrate",YE="https://jup.validators.solutions/v1/jup",Zt;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(Zt||(Zt={}));var JE=Object.values(Zt),Qe="So11111111111111111111111111111111111111112",qe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",_E="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var xE="SOLV420",QE={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},Q_=["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"],q_=["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 ls}from"child_process";import{spawnSync as K}from"node:child_process";var Ns=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 ${_}`,{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"),$_=Ns;var qE="agave-validator",Os=t(()=>{try{return qE}catch(_){return console.error(_),qE}},"getSolanaCLI"),a_=Os;var R_="3.1.4",o_="3.0.12",Ne="",Oe="3.1.4",y_="3.0.12",l_="",eE="3.0.12",le="3.0.12",K_="",$E="3.1.4",G_="3.0.12";var WE="20.17.0",W_="0.806.30102",U_="0.805.30008";var $e=t(async(_,e=!1,E=!1)=>{let o=Ne,n=`${`v${_}`}${o}`;$_(n,e,E)},"updateVersion"),Fe=t(async(_,e=!1,E=10)=>{let o=a_(),i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`;e&&(i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),ls(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import _i from"chalk";var k_;(function(_){_.EN="en",_.JA="ja"})(k_||(k_={}));var XE;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(XE||(XE={}));var jE;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(jE||(jE={}));var A_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(A_||(A_={}));var zE;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(zE||(zE={}));var ZE;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(ZE||(ZE={}));var _o;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(_o||(_o={}));var eo;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(eo||(eo={}));var We;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(We||(We={}));var Xe;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(Xe||(Xe={}));var oo=!1,io=!1,no=!1,To=!1,so=!1,ro=!1,j={ID:"solv",LANG:k_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.1.4",MAINNET_SOLANA_VERSION:"3.0.12",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,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},J={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},M={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},C_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},p={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"},u=t((_=J.ROOT)=>{let e=_===J.ROOT?J.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"),L_=t((_=!0)=>{let e=_?`${J.ROOT}/${y.TESTNET_VALIDATOR_KEY}`:`${J.ROOT}/${y.MAINNET_VALIDATOR_KEY}`,E=_?`${J.ROOT}/${y.TESTNET_VALIDATOR_VOTE_KEY}`:`${J.ROOT}/${y.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${J.ROOT}/${C_.LOG}`,i=M.ACCOUNTS,n=M.LEDGER,T=M.SNAPSHOTS,s=`${J.ROOT}/${C_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var T_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",tE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",So="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ao=9,c_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",Ro="So11111111111111111111111111111111111111112",Co="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",to;(function(_){_[_.ELSOL=c_]="ELSOL",_[_.SOL=Ro]="SOL",_[_.USDC=Co]="USDC",_[_.EPCT=co]="EPCT"})(to||(to={}));var Eo;(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"})(Eo||(Eo={}));var Ic={[Ro]:9,[c_]:9,[Co]:6,[co]:6},je="/home/solv/currentEpoch.json";var ze="https://api.testnet.solana.com";import{spawnSync as EE}from"child_process";var No=t(()=>{EE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=j.NODE_VERSION;EE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),EE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as x}from"child_process";var Ze=t((_,e=!1,E=!1)=>{x("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),x("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),E?e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):(x(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),x(`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"}),x("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),x(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),x(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):x(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Fs,writeFile as Is}from"fs/promises";import{homedir as Ds}from"os";var V_=t(async _=>{let E=`${Ds()}/${C_.JITO_CONFIG}`,i={...JSON.parse(await Fs(E,"utf8")),..._},n=JSON.stringify(i,null,2);await Is(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Oo}from"child_process";import fs from"inquirer";var lo=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"),Fo=t(async()=>await fs.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ie}from"@skeet-framework/utils";import Ps from"chalk";import Us from"inquirer";var Io=t(async()=>{let _=await Us.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ie("sudo ufw delete allow 8899/udp"),await Ie("sudo ufw delete allow 8899/tcp"),await Ie(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Ie(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Ie("sudo ufw reload"),console.log(Ps.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var As=t(()=>KE,"getSolvVersion"),X_=As;import{readFile as ps,writeFile as us}from"fs/promises";import{existsAsync as ms}from"@skeet-framework/utils";var oE;(function(_){_.EN="en",_.JA="ja"})(oE||(oE={}));var Qc=Object.values(oE),l;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(l||(l={}));var Do=Object.values(l),f;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(f||(f={}));var fo=Object.values(f),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var qc=Object.values(F).filter(_=>_!=="none"),v;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(v||(v={}));var Po=Object.values(v).filter(_=>_!=="none"),z;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(z||(z={}));var Ms={NETWORK:l.TESTNET,NODE_TYPE:f.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:v.AGAVE,MNT_DISK_TYPE:z.TRIPLE,TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_,NODE_VERSION:WE,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:wE,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:vE,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:P,ACCOUNTS_PATH:P_,SNAPSHOTS_PATH:S_,MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},F_=Ms;import{homedir as hs}from"os";var Bs=t(async()=>{let e=`${hs()}/${Je}`;return await ms(e)?JSON.parse(await ps(e,"utf-8")):(console.log("Creating default config file at",e),await us(e,JSON.stringify(F_,null,2)),F_)},"readConfig"),b=Bs;import gs from"node-fetch";var d_=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 gs(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 Vs}from"child_process";import{Connection as Uo}from"@solana/web3.js";var De=t(async(_,e,E=!1,o=200)=>{let i={pubkey:e,isActive:!1,reason:""};try{let n=E?new Uo("https://api.testnet.solana.com"):new Uo(_,"confirmed"),T=await n.getVoteAccounts(),s=T.current.find(C=>C.votePubkey===e);if(!s)return T.delinquent.find(N=>N.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(C=>C.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 ys}from"child_process";var B=t(_=>{let e=`solana address --keypair ${_}`,{stdout:E}=ys(e,{shell:!0,stdio:"pipe"});return E.toString().trim()},"getSolanaAddress");var Ks=t(_=>new Promise(e=>setTimeout(e,_)),"sleep"),Q=Ks;import{sendDiscord as Gs}from"@skeet-framework/utils";var Ao=30,ks=t(async _=>{try{let e=_.NETWORK===l.TESTNET,{mainnetValidatorVoteKey:E,testnetValidatorVoteKey:o}=u(),n=B(e?o:E),T=await De(_.RPC_URL,n,e),s=0;for(;!T.isActive;){if(s>=Ao){console.log("Max retries reached, exiting...");let r=`\u26A0\uFE0F Validator is not active for ${Ao} minutes!
4
4
  Account: ${T.pubkey}
5
5
  Reason: ${T.reason}
@@ -6130,7 +6130,7 @@ Persistent=true
6130
6130
 
6131
6131
  [Install]
6132
6132
  WantedBy=timers.target
6133
- `}),"jagsnapTimer"),jo=yr;var Kr=t(_=>{let{filePath:e,body:E}=Xo(_),{filePath:o,body:i}=jo(_);zo(`echo "${E}" | sudo tee ${e} > /dev/null`),zo(`echo "${i}" | sudo tee ${o} > /dev/null`),H("git clone https://github.com/jaguar-labs/jag-snap.git /home/solv/jag-snap",{shell:!0,stdio:"inherit"}),H("cd /home/solv/jag-snap",{shell:!0,stdio:"inherit"}),H("sudo cp /home/solv/jag-snap/jag-snap-fw.sh /usr/local/bin/",{shell:!0,stdio:"inherit"}),H("sudo chown solv:solv /usr/local/bin/jag-snap-fw.sh",{shell:!0,stdio:"inherit"}),H("sudo chmod 755 /usr/local/bin/jag-snap-fw.sh",{shell:!0,stdio:"inherit"}),H("sudo useradd -m -s /bin/false jag-snap-fw",{shell:!0,stdio:"inherit"}),H("sudo touch /etc/sudoers.d/jag-snap-fw",{shell:!0,stdio:"inherit"}),H('echo "jag-snap-fw ALL=(root) NOPASSWD: /sbin/iptables, /sbin/ipset" | sudo tee /etc/sudoers.d/jag-snap-fw > /dev/null',{shell:!0,stdio:"inherit"}),H("sudo chmod 440 /etc/sudoers.d/jag-snap-fw",{shell:!0,stdio:"inherit"}),H("sudo chmod 644 /etc/systemd/system/jag-snap-fw.service",{shell:!0,stdio:"inherit"}),H("sudo chmod 644 /etc/systemd/system/jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"}),H("sudo systemctl enable jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("sudo systemctl start jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("cd /home/solv/jag-snap && docker build -t jag-snap . && docker run -d --name jag-snap --network host jag-snap",{shell:!0,stdio:"inherit"})},"installJagSnap"),Zo=Kr;var ei=t(_=>{let e=_.NETWORK===l.TESTNET,E=_.NODE_TYPE===f.RPC,o=_.VALIDATOR_TYPE===F.JITO,i=_.VALIDATOR_TYPE===F.BAM,n=_.VALIDATOR_TYPE===F.FRANKENDANCER,T=_.AUTO_RESTART,s=_.MOD,r=10;T&&!e&&(r=30);let S=e?R_:o_;o&&(S=y_,e&&(S=Oe)),i&&(S=le,e&&(S=eE)),n&&(S=U_,e&&(S=W_)),E&&(S=G_,o&&(S=$E)),I.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${S}`,S).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solv Config",!1).option("--config","Update Solv Config Default Solana Version",!1).option("--auto","Auto Update",!1).option("--mod","Modified Versions",!1).option("--startup","Start up Script",!1).option("--service","SystemD Service",!1).option("--jagsnap","JagSnaps Service",!1).action(async a=>{let C=X_(),N=e?_.TESTNET_DELINQUENT_STAKE:_.MAINNET_DELINQUENT_STAKE;if(console.log(_i.white(`Current solv version: ${C}`)),a.auto){await Mo(_);return}if(a.service&&(await sE(),Ae(n),Le(e)),a.migrateConfig){let R=ko().config,O=z.TRIPLE;R.DISK_TYPES===0?O=z.DOUBLE:R.DISK_TYPES===1?O=z.SINGLE:O=z.TRIPLE;let c=R.SOLANA_NETWORK===A_.TESTNET,d=R.SOLV_TYPE===We.RPC_NODE,L=R.MAINNET_TYPE===Xe.JITO_MEV,D={NETWORK:c?l.TESTNET:l.MAINNET,NODE_TYPE:d?f.RPC:f.VALIDATOR,MNT_DISK_TYPE:O,RPC_TYPE:d?v.JITO:v.NONE,VALIDATOR_TYPE:L?F.JITO:c?F.AGAVE:F.SOLANA,TESTNET_SOLANA_VERSION:R.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:R.MAINNET_SOLANA_VERSION,NODE_VERSION:R.NODE_VERSION,TESTNET_DELINQUENT_STAKE:R.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:R.MAINNET_DELINQUENT_STAKE,COMMISSION:R.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:R.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:R.STAKE_ACCOUNT,HARVEST_ACCOUNT:R.HARVEST_ACCOUNT,IS_MEV_MODE:R.IS_MEV_MODE,RPC_URL:R.RPC_URL,KEYPAIR_PATH:R.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:R.DISCORD_WEBHOOK_URL,AUTO_UPDATE:R.AUTO_UPDATE,AUTO_RESTART:R.AUTO_RESTART,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:R.LEDGER_PATH,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""};await g(D)}if(a.config){if(await g({TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_}),o){let R=e?Oe:y_;await V_({version:R,tag:`v${R}`})}if(i){let R=e?eE:le;await V_({version:R,tag:`v${R}`})}console.log(_i.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(a.firewall){await Io();return}if(a.startup){let R=_.VALIDATOR_TYPE,O="";switch(R){case F.SOLANA:O=e?bo():fe(_);break;case F.AGAVE:O=e?Pe(_):fe(_);break;case F.JITO:let c=await $();O=e?rt(c.commissionBps,c.relayerUrl,c.blockEngineUrl,c.shredReceiverAddr,_):at(c.commissionBps,c.relayerUrl,c.blockEngineUrl,c.shredReceiverAddr,_);break;case F.BAM:let d=await $();O=e?St(d.commissionBps,d.relayerUrl,d.blockEngineUrl,d.shredReceiverAddr,d.bamUrl,_):Rt(d.commissionBps,d.relayerUrl,d.blockEngineUrl,d.shredReceiverAddr,d.bamUrl,_);break;default:console.log("Unknown Validator Type for Update Script");break}await Gr(r_,O,"utf-8"),w_();return}if(a.jagsnap){let R=_.JAG_REGION;Zo(R)}if(a.background){let R=a.version,O=!!R.startsWith("3");if(await g({TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_}),e&&await sE(),Ae(n),Le(e),o){let d=l_,L=`v${R}-jito`,D=`v${R}-mod`,U=a.mod||s?`${D}${d}`:`${L}${d}`;Ze(U,a.mod||s,O),await V_({version:R,tag:`v${R}`}),await Fe(N,!0,r),_e(),Nt(),Z_(),dt();return}if(i){let d=K_,L=`v${R}-bam`,D=`v${R}-mod`,U=a.mod||s?`${D}${d}`:`${L}${d}`;st(U,a.mod||s,O),await V_({version:R,tag:`v${R}`}),await Fe(N,!0,r),_e(),Nt(),Z_(),dt();return}if(n){await Tt(_,R,a.mod||s),await Fe(N,!0,r),Ot(),Wo(),Qo();return}await $e(R,a.mod||s,O),await Fe(e?10:5,!0,r),_e(),Nt(),Z_(),dt();return}else if(a.commission){let R=await Fo();lo(R.commission,e)}else No()})},"updateCommands");import{spawnSync as kr}from"node:child_process";var ti=t(_=>{try{let{log:e}=L_(),E=`tail -f ${e}`;_.error?E+=" | grep '\\(WARN\\|ERR\\)'":_.info?E+=" | grep INFO":_.warning&&(E+=" | grep WARN"),console.log(E);let o=kr(E,{shell:!0,stdio:"inherit"});if(o.error)throw o.error;o.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):o.status!==0&&(console.error(`Child process exited with code ${o.status}`),process.exit(o.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Ei=t(()=>{I.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(_=>{ti(_)})},"logCommands");import I_ from"chalk";import{spawnSync as Vr}from"child_process";import{homedir as br}from"os";var lt=t(_=>{let e=br(),E=u(e),o=E.testnetValidatorVoteKey,i=E.testnetValidatorKey,n=E.testnetValidatorAuthorityKey,T=A_.TESTNET,s=_.COMMISSION;_.NETWORK===l.MAINNET&&(o=E.mainnetValidatorVoteKey,i=E.mainnetValidatorKey,n=E.mainnetValidatorAuthorityKey,T=A_.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${s} - ${T}`);let r=_.RPC_URL||T;_.NETWORK===l.TESTNET&&(r=A_.TESTNET);let S=`solana create-vote-account ${o} ${i} ${n} --commission ${s} --url ${r} --keypair ${i}`;Vr(S,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ft}from"child_process";import{existsSync as oi,readdirSync as wr,rmSync as vr}from"fs";import{homedir as Hr}from"os";import ii from"path";var It=t(_=>{let e=[],E=0;_.NODE_TYPE===f.RPC&&(e=[y.MAINNET_VALIDATOR_KEY],E=1),_.NETWORK===l.TESTNET?(e=[y.TESTNET_VALIDATOR_KEY,y.TESTNET_VALITATOR_AUTHORITY_KEY,y.TESTNET_VALIDATOR_VOTE_KEY,y.MAINNET_VALIDATOR_KEY,y.MAINNET_VALITATOR_AUTHORITY_KEY,y.MAINNET_VALIDATOR_VOTE_KEY],E=6):(e=[y.MAINNET_VALIDATOR_KEY,y.MAINNET_VALITATOR_AUTHORITY_KEY,y.MAINNET_VALIDATOR_VOTE_KEY],E=3);let o=`solana-keygen grind --starts-and-ends-with E:SV:${E}`;Ft(o,{shell:!0,stdio:"ignore"});let i=wr("./").filter(r=>r.endsWith("SV.json")),n=Hr(),T=ii.join(n,"unstaked-identity.json");oi(T)&&Ft(`mv ${T} ${n}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let s=0;for(let r of i){let S=ii.join(n,e[s]);if(s++,oi(S)){console.log(`${S} is already exist!`),vr(r,{recursive:!0});continue}let a=`mv ${r} ${S}`;Ft(a,{shell:!0,stdio:"inherit"})}Ft("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${n}`)},"createSolvKeyPairs");import{spawnSync as Ti}from"child_process";var Yr=t((_,e,E,o=2001)=>{let i="/etc/systemd/system/jupiter-api.service",n=`[Unit]
6133
+ `}),"jagsnapTimer"),jo=yr;var Kr=t(_=>{let{filePath:e,body:E}=Xo(_),{filePath:o,body:i}=jo(_);zo(`echo "${E}" | sudo tee ${e} > /dev/null`),zo(`echo "${i}" | sudo tee ${o} > /dev/null`),H("git clone https://github.com/gabrielhicks/jag-snap.git /home/solv/jag-snap",{shell:!0,stdio:"inherit"}),H("cd /home/solv/jag-snap",{shell:!0,stdio:"inherit"}),H("sudo cp /home/solv/jag-snap/jag-snap-fw.sh /usr/local/bin/",{shell:!0,stdio:"inherit"}),H("sudo chown solv:solv /usr/local/bin/jag-snap-fw.sh",{shell:!0,stdio:"inherit"}),H("sudo chmod 755 /usr/local/bin/jag-snap-fw.sh",{shell:!0,stdio:"inherit"}),H("sudo useradd -m -s /bin/false jag-snap-fw",{shell:!0,stdio:"inherit"}),H("sudo touch /etc/sudoers.d/jag-snap-fw",{shell:!0,stdio:"inherit"}),H('echo "jag-snap-fw ALL=(root) NOPASSWD: /sbin/iptables, /sbin/ipset" | sudo tee /etc/sudoers.d/jag-snap-fw > /dev/null',{shell:!0,stdio:"inherit"}),H("sudo chmod 440 /etc/sudoers.d/jag-snap-fw",{shell:!0,stdio:"inherit"}),H("sudo chmod 644 /etc/systemd/system/jag-snap-fw.service",{shell:!0,stdio:"inherit"}),H("sudo chmod 644 /etc/systemd/system/jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"}),H("sudo systemctl enable jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("sudo systemctl start jag-snap-fw.timer",{shell:!0,stdio:"inherit"}),H("cd /home/solv/jag-snap && docker build -t jag-snap . && docker run -d --name jag-snap --network host jag-snap",{shell:!0,stdio:"inherit"})},"installJagSnap"),Zo=Kr;var ei=t(_=>{let e=_.NETWORK===l.TESTNET,E=_.NODE_TYPE===f.RPC,o=_.VALIDATOR_TYPE===F.JITO,i=_.VALIDATOR_TYPE===F.BAM,n=_.VALIDATOR_TYPE===F.FRANKENDANCER,T=_.AUTO_RESTART,s=_.MOD,r=10;T&&!e&&(r=30);let S=e?R_:o_;o&&(S=y_,e&&(S=Oe)),i&&(S=le,e&&(S=eE)),n&&(S=U_,e&&(S=W_)),E&&(S=G_,o&&(S=$E)),I.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${S}`,S).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solv Config",!1).option("--config","Update Solv Config Default Solana Version",!1).option("--auto","Auto Update",!1).option("--mod","Modified Versions",!1).option("--startup","Start up Script",!1).option("--service","SystemD Service",!1).option("--jagsnap","JagSnaps Service",!1).action(async a=>{let C=X_(),N=e?_.TESTNET_DELINQUENT_STAKE:_.MAINNET_DELINQUENT_STAKE;if(console.log(_i.white(`Current solv version: ${C}`)),a.auto){await Mo(_);return}if(a.service&&(await sE(),Ae(n),Le(e)),a.migrateConfig){let R=ko().config,O=z.TRIPLE;R.DISK_TYPES===0?O=z.DOUBLE:R.DISK_TYPES===1?O=z.SINGLE:O=z.TRIPLE;let c=R.SOLANA_NETWORK===A_.TESTNET,d=R.SOLV_TYPE===We.RPC_NODE,L=R.MAINNET_TYPE===Xe.JITO_MEV,D={NETWORK:c?l.TESTNET:l.MAINNET,NODE_TYPE:d?f.RPC:f.VALIDATOR,MNT_DISK_TYPE:O,RPC_TYPE:d?v.JITO:v.NONE,VALIDATOR_TYPE:L?F.JITO:c?F.AGAVE:F.SOLANA,TESTNET_SOLANA_VERSION:R.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:R.MAINNET_SOLANA_VERSION,NODE_VERSION:R.NODE_VERSION,TESTNET_DELINQUENT_STAKE:R.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:R.MAINNET_DELINQUENT_STAKE,COMMISSION:R.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:R.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:R.STAKE_ACCOUNT,HARVEST_ACCOUNT:R.HARVEST_ACCOUNT,IS_MEV_MODE:R.IS_MEV_MODE,RPC_URL:R.RPC_URL,KEYPAIR_PATH:R.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:R.DISCORD_WEBHOOK_URL,AUTO_UPDATE:R.AUTO_UPDATE,AUTO_RESTART:R.AUTO_RESTART,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:R.LEDGER_PATH,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""};await g(D)}if(a.config){if(await g({TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_}),o){let R=e?Oe:y_;await V_({version:R,tag:`v${R}`})}if(i){let R=e?eE:le;await V_({version:R,tag:`v${R}`})}console.log(_i.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(a.firewall){await Io();return}if(a.startup){let R=_.VALIDATOR_TYPE,O="";switch(R){case F.SOLANA:O=e?bo():fe(_);break;case F.AGAVE:O=e?Pe(_):fe(_);break;case F.JITO:let c=await $();O=e?rt(c.commissionBps,c.relayerUrl,c.blockEngineUrl,c.shredReceiverAddr,_):at(c.commissionBps,c.relayerUrl,c.blockEngineUrl,c.shredReceiverAddr,_);break;case F.BAM:let d=await $();O=e?St(d.commissionBps,d.relayerUrl,d.blockEngineUrl,d.shredReceiverAddr,d.bamUrl,_):Rt(d.commissionBps,d.relayerUrl,d.blockEngineUrl,d.shredReceiverAddr,d.bamUrl,_);break;default:console.log("Unknown Validator Type for Update Script");break}await Gr(r_,O,"utf-8"),w_();return}if(a.jagsnap){let R=_.JAG_REGION;Zo(R)}if(a.background){let R=a.version,O=!!R.startsWith("3");if(await g({TESTNET_SOLANA_VERSION:R_,MAINNET_SOLANA_VERSION:o_}),e&&await sE(),Ae(n),Le(e),o){let d=l_,L=`v${R}-jito`,D=`v${R}-mod`,U=a.mod||s?`${D}${d}`:`${L}${d}`;Ze(U,a.mod||s,O),await V_({version:R,tag:`v${R}`}),await Fe(N,!0,r),_e(),Nt(),Z_(),dt();return}if(i){let d=K_,L=`v${R}-bam`,D=`v${R}-mod`,U=a.mod||s?`${D}${d}`:`${L}${d}`;st(U,a.mod||s,O),await V_({version:R,tag:`v${R}`}),await Fe(N,!0,r),_e(),Nt(),Z_(),dt();return}if(n){await Tt(_,R,a.mod||s),await Fe(N,!0,r),Ot(),Wo(),Qo();return}await $e(R,a.mod||s,O),await Fe(e?10:5,!0,r),_e(),Nt(),Z_(),dt();return}else if(a.commission){let R=await Fo();lo(R.commission,e)}else No()})},"updateCommands");import{spawnSync as kr}from"node:child_process";var ti=t(_=>{try{let{log:e}=L_(),E=`tail -f ${e}`;_.error?E+=" | grep '\\(WARN\\|ERR\\)'":_.info?E+=" | grep INFO":_.warning&&(E+=" | grep WARN"),console.log(E);let o=kr(E,{shell:!0,stdio:"inherit"});if(o.error)throw o.error;o.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):o.status!==0&&(console.error(`Child process exited with code ${o.status}`),process.exit(o.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Ei=t(()=>{I.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(_=>{ti(_)})},"logCommands");import I_ from"chalk";import{spawnSync as Vr}from"child_process";import{homedir as br}from"os";var lt=t(_=>{let e=br(),E=u(e),o=E.testnetValidatorVoteKey,i=E.testnetValidatorKey,n=E.testnetValidatorAuthorityKey,T=A_.TESTNET,s=_.COMMISSION;_.NETWORK===l.MAINNET&&(o=E.mainnetValidatorVoteKey,i=E.mainnetValidatorKey,n=E.mainnetValidatorAuthorityKey,T=A_.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${s} - ${T}`);let r=_.RPC_URL||T;_.NETWORK===l.TESTNET&&(r=A_.TESTNET);let S=`solana create-vote-account ${o} ${i} ${n} --commission ${s} --url ${r} --keypair ${i}`;Vr(S,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ft}from"child_process";import{existsSync as oi,readdirSync as wr,rmSync as vr}from"fs";import{homedir as Hr}from"os";import ii from"path";var It=t(_=>{let e=[],E=0;_.NODE_TYPE===f.RPC&&(e=[y.MAINNET_VALIDATOR_KEY],E=1),_.NETWORK===l.TESTNET?(e=[y.TESTNET_VALIDATOR_KEY,y.TESTNET_VALITATOR_AUTHORITY_KEY,y.TESTNET_VALIDATOR_VOTE_KEY,y.MAINNET_VALIDATOR_KEY,y.MAINNET_VALITATOR_AUTHORITY_KEY,y.MAINNET_VALIDATOR_VOTE_KEY],E=6):(e=[y.MAINNET_VALIDATOR_KEY,y.MAINNET_VALITATOR_AUTHORITY_KEY,y.MAINNET_VALIDATOR_VOTE_KEY],E=3);let o=`solana-keygen grind --starts-and-ends-with E:SV:${E}`;Ft(o,{shell:!0,stdio:"ignore"});let i=wr("./").filter(r=>r.endsWith("SV.json")),n=Hr(),T=ii.join(n,"unstaked-identity.json");oi(T)&&Ft(`mv ${T} ${n}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let s=0;for(let r of i){let S=ii.join(n,e[s]);if(s++,oi(S)){console.log(`${S} is already exist!`),vr(r,{recursive:!0});continue}let a=`mv ${r} ${S}`;Ft(a,{shell:!0,stdio:"inherit"})}Ft("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${n}`)},"createSolvKeyPairs");import{spawnSync as Ti}from"child_process";var Yr=t((_,e,E,o=2001)=>{let i="/etc/systemd/system/jupiter-api.service",n=`[Unit]
6134
6134
  Description=Jupiter API Service Instance
6135
6135
  After=network.target
6136
6136