@gabrielhicks/solv 5.5.1 → 5.5.3

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 VT=Object.defineProperty;var t=(_,e)=>VT(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as TC}from"commander";var at="5.5.1";var Ct={name:"@gabrielhicks/solv",version:at,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 pe=Ct.version;var Te="https://validators.solutions";var me="solv4.config.json";var p_="identity.json",m_="unstaked-identity.json",ct="relayer-keypair.json",wT="mainnet-validator-keypair.json",vT="mainnet-vote-account-keypair.json",HT="mainnet-authority-keypair.json",YT="testnet-validator-keypair.json",JT="testnet-vote-account-keypair.json",xT="testnet-authority-keypair.json",y="/home/solv",f=`${y}/${p_}`,OC=`${y}/${m_}`,V=`${y}/${wT}`,k_=`${y}/${vT}`,lC=`${y}/${HT}`,h=`${y}/${YT}`,V_=`${y}/${JT}`,FC=`${y}/${xT}`,b=`${y}/solana-validator.log`,F_=y+"/start-validator.sh",P="/mnt/ledger",b_="/mnt/accounts",n_="/mnt/snapshots",dt="solana-validator",Nt="agave-validator",Ot="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3;var lt="https://api.mainnet-beta.solana.com",Ft="https://verify.validators.solutions/solv-migrate",It="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 Dt=Object.values(hE),Be="So11111111111111111111111111111111111111112",ge="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",BE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Pt="SOLV420",ft={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},w_=["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"],v_=["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 $T}from"child_process";var T_="3.0.10",v="3.0.10",se="3.0.10",s_="3.0.10",Ut="3.0.10",h_="3.0.10";var At="20.17.0",H_="0.800.30008",I_="0.800.30008";import{spawnSync as g}from"node:child_process";var QT=t((_=v,e=!1,E=!1)=>{E?e?(g(`mkdir /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`cd /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave-mod checkout v${_}-mod`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),g(`CI_COMMIT=$(git -C /tmp/v${_}-agave-mod rev-parse HEAD) /tmp/v${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),g(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/v${_}-agave-mod/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),g(`sudo rm -rf /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(g(`mkdir /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`cd /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave checkout v${_}`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),g(`CI_COMMIT=$(git -C /tmp/v${_}-agave rev-parse HEAD) /tmp/v${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${_}-agave`,{shell:!0,stdio:"inherit"}),g("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),g(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/v${_}-agave/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),g(`sudo rm -rf /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"})):e?g(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):g(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Y_=QT;var Lt="agave-validator",qT=t(()=>{try{return Lt}catch(_){return console.error(_),Lt}},"getSolanaCLI"),S_=qT;var ye=t(async(_,e=!1,E=!1)=>{Y_(_,e,E)},"updateVersion"),Ke=t(async(_,e=!1,E=10)=>{let o=S_(),i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --monitor --min-idle-time ${E}`;e&&(i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),$T(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Co from"chalk";var B_;(function(_){_.EN="en",_.JA="ja"})(B_||(B_={}));var Mt;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Mt||(Mt={}));var ut;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(ut||(ut={}));var D_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(D_||(D_={}));var pt;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(pt||(pt={}));var mt;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(mt||(mt={}));var ht;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(ht||(ht={}));var Bt;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Bt||(Bt={}));var Ge;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(Ge||(Ge={}));var ke;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(ke||(ke={}));var Kt=!1,Gt=!1,kt=!1,Vt=!1,W={ID:"solv",LANG:B_.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"},U={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"},m={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"},B={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"},L=t((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,E=`${e}/${B.MAINNET_VALIDATOR_KEY}`,o=`${e}/${B.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${B.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${B.TESTNET_VALIDATOR_KEY}`,T=`${e}/${B.TESTNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${B.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:E,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:T,testnetValidatorAuthorityKey:s}},"getAllKeyPaths"),P_=t((_=!0)=>{let e=_?`${H.ROOT}/${B.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${B.MAINNET_VALIDATOR_KEY}`,E=_?`${H.ROOT}/${B.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${B.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${r_.LOG}`,i=U.ACCOUNTS,n=U.LEDGER,T=U.SNAPSHOTS,s=`${H.ROOT}/${r_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var E_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",gE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",bt="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",wt=9,R_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",vt="So11111111111111111111111111111111111111112",Ht="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Yt="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",gt;(function(_){_[_.ELSOL=R_]="ELSOL",_[_.SOL=vt]="SOL",_[_.USDC=Ht]="USDC",_[_.EPCT=Yt]="EPCT"})(gt||(gt={}));var yt;(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"})(yt||(yt={}));var GC={[vt]:9,[R_]:9,[Ht]:6,[Yt]:6},Ve="/home/solv/currentEpoch.json";var be="https://api.testnet.solana.com";import{spawnSync as yE}from"child_process";var Jt=t(()=>{yE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=W.NODE_VERSION;yE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),yE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var t_={version:"2.3.10",tag:"v2.3.10",commissionBps:0,relayerUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",shredReceiverAddr:"64.130.50.14:1002",bamUrl:"http://frankfurt.mainnet.bam.jito.wtf"},Se={TESTNET:{Dallas:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002",BAM_URL:"http://dallas.testnet.bam.jito.wtf"},NewYork:{BLOCK_ENGINE_URL:"https://ny.testnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.35.224:1002",BAM_URL:"http://ny.testnet.bam.jito.wtf"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002",BAM_URL:"http://ny.testnet.bam.jito.wtf"}},MAINNET:{Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002",BAM_URL:"http://amsterdam.mainnet.bam.jito.wtf"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002",BAM_URL:"http://london.mainnet.bam.jito.wtf"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14:1002",BAM_URL:"http://frankfurt.mainnet.bam.jito.wtf"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002",BAM_URL:"http://ny.mainnet.bam.jito.wtf"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002",BAM_URL:"http://tokyo.mainnet.bam.jito.wtf"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002",BAM_URL:"http://slc.mainnet.bam.jito.wtf"},Singapore:{BLOCK_ENGINE_URL:"https://singapore.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://singapore.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.11.224:1002",BAM_URL:"http://singapore.mainnet.bam.jito.wtf"},Dublin:{BLOCK_ENGINE_URL:"https://dublin.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://dublin.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.61.8:1002",BAM_URL:""}}};import{spawnSync as Y}from"child_process";var we=t((_=t_.tag,e=!1,E=!1)=>{Y("sudo apt install --only-upgrade doublezero -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/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(Y(`mkdir /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`cd /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_}-jito checkout ${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_}-jito submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Y(`CI_COMMIT=$(git -C /tmp/${_}-jito rev-parse HEAD) /tmp/${_}-jito/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-jito`,{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/${_}-jito/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),Y(`sudo rm -rf /tmp/${_}-jito`,{shell:!0,stdio:"inherit"})):e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Y(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as WT,writeFile as XT}from"fs/promises";import{homedir as jT}from"os";var re=t(async _=>{let E=`${jT()}/${r_.JITO_CONFIG}`,i={...JSON.parse(await WT(E,"utf8")),..._},n=JSON.stringify(i,null,2);await XT(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as xt}from"child_process";import zT from"inquirer";var Qt=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";xt(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${E}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${E} --keypair ${E}`;xt(n,{shell:!0,stdio:"inherit"})},"updateCommission"),qt=t(async()=>await zT.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Re}from"@skeet-framework/utils";import ZT from"chalk";import _s from"inquirer";var $t=t(async()=>{let _=await _s.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Re("sudo ufw delete allow 8899/udp"),await Re("sudo ufw delete allow 8899/tcp"),await Re(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Re(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Re("sudo ufw reload"),console.log(ZT.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var es=t(()=>at,"getSolvVersion"),J_=es;import{readFile as os,writeFile as is}from"fs/promises";import{existsAsync as ns}from"@skeet-framework/utils";var KE;(function(_){_.EN="en",_.JA="ja"})(KE||(KE={}));var rc=Object.values(KE),c;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(c||(c={}));var Wt=Object.values(c),D;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(D||(D={}));var Xt=Object.values(D),d;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(d||(d={}));var Rc=Object.values(d).filter(_=>_!=="none"),w;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(w||(w={}));var jt=Object.values(w).filter(_=>_!=="none"),X;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(X||(X={}));var ts={NETWORK:c.TESTNET,NODE_TYPE:D.RPC,VALIDATOR_TYPE:d.NONE,RPC_TYPE:w.AGAVE,MNT_DISK_TYPE:X.TRIPLE,TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v,NODE_VERSION:At,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Ot,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lt,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:P,ACCOUNTS_PATH:b_,SNAPSHOTS_PATH:n_,MOD:!1},N_=ts;import{homedir as Ts}from"os";var ss=t(async()=>{let e=`${Ts()}/${me}`;return await ns(e)?JSON.parse(await os(e,"utf-8")):(console.log("Creating default config file at",e),await is(e,JSON.stringify(N_,null,2)),N_)},"readConfig"),k=ss;import Ss from"node-fetch";var a_=t(async _=>{try{let e=await k();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var VT=Object.defineProperty;var t=(_,e)=>VT(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as TC}from"commander";var at="5.5.3";var Ct={name:"@gabrielhicks/solv",version:at,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 pe=Ct.version;var Te="https://validators.solutions";var me="solv4.config.json";var p_="identity.json",m_="unstaked-identity.json",ct="relayer-keypair.json",wT="mainnet-validator-keypair.json",vT="mainnet-vote-account-keypair.json",HT="mainnet-authority-keypair.json",YT="testnet-validator-keypair.json",JT="testnet-vote-account-keypair.json",xT="testnet-authority-keypair.json",y="/home/solv",f=`${y}/${p_}`,OC=`${y}/${m_}`,V=`${y}/${wT}`,k_=`${y}/${vT}`,lC=`${y}/${HT}`,h=`${y}/${YT}`,V_=`${y}/${JT}`,FC=`${y}/${xT}`,b=`${y}/solana-validator.log`,F_=y+"/start-validator.sh",P="/mnt/ledger",b_="/mnt/accounts",n_="/mnt/snapshots",dt="solana-validator",Nt="agave-validator",Ot="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3;var lt="https://api.mainnet-beta.solana.com",Ft="https://verify.validators.solutions/solv-migrate",It="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 Dt=Object.values(hE),Be="So11111111111111111111111111111111111111112",ge="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",BE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Pt="SOLV420",ft={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},w_=["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"],v_=["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 $T}from"child_process";var T_="3.0.10",v="3.0.10",se="3.0.10",s_="3.0.10",Ut="3.0.10",h_="3.0.10";var At="20.17.0",H_="0.802.30008",I_="0.802.30008";import{spawnSync as g}from"node:child_process";var QT=t((_=v,e=!1,E=!1)=>{E?e?(g(`mkdir /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`cd /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave-mod checkout v${_}-mod`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),g(`CI_COMMIT=$(git -C /tmp/v${_}-agave-mod rev-parse HEAD) /tmp/v${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${_}-agave-mod`,{shell:!0,stdio:"inherit"}),g("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),g(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/v${_}-agave-mod /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),g(`sudo rm -rf /tmp/v${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(g(`mkdir /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`cd /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave checkout v${_}`,{shell:!0,stdio:"inherit"}),g(`git -C /tmp/v${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),g(`CI_COMMIT=$(git -C /tmp/v${_}-agave rev-parse HEAD) /tmp/v${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${_}-agave`,{shell:!0,stdio:"inherit"}),g("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),g(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/v${_}-agave /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),g(`sudo rm -rf /tmp/v${_}-agave`,{shell:!0,stdio:"inherit"})):e?g(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):g(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Y_=QT;var Lt="agave-validator",qT=t(()=>{try{return Lt}catch(_){return console.error(_),Lt}},"getSolanaCLI"),S_=qT;var ye=t(async(_,e=!1,E=!1)=>{Y_(_,e,E)},"updateVersion"),Ke=t(async(_,e=!1,E=10)=>{let o=S_(),i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --monitor --min-idle-time ${E}`;e&&(i=`${o} --ledger ${P} exit --max-delinquent-stake ${_} --min-idle-time ${E}`),$T(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Co from"chalk";var B_;(function(_){_.EN="en",_.JA="ja"})(B_||(B_={}));var Mt;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Mt||(Mt={}));var ut;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(ut||(ut={}));var D_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(D_||(D_={}));var pt;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(pt||(pt={}));var mt;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(mt||(mt={}));var ht;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(ht||(ht={}));var Bt;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Bt||(Bt={}));var Ge;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(Ge||(Ge={}));var ke;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(ke||(ke={}));var Kt=!1,Gt=!1,kt=!1,Vt=!0,W={ID:"solv",LANG:B_.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"},U={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"},m={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"},B={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"},L=t((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,E=`${e}/${B.MAINNET_VALIDATOR_KEY}`,o=`${e}/${B.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${B.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${B.TESTNET_VALIDATOR_KEY}`,T=`${e}/${B.TESTNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${B.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:E,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:T,testnetValidatorAuthorityKey:s}},"getAllKeyPaths"),P_=t((_=!0)=>{let e=_?`${H.ROOT}/${B.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${B.MAINNET_VALIDATOR_KEY}`,E=_?`${H.ROOT}/${B.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${B.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${r_.LOG}`,i=U.ACCOUNTS,n=U.LEDGER,T=U.SNAPSHOTS,s=`${H.ROOT}/${r_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:E,log:o,accounts:i,ledger:n,scriptPath:s,snapshots:T}},"startupScriptPaths");var E_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",gE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",bt="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",wt=9,R_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",vt="So11111111111111111111111111111111111111112",Ht="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Yt="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",gt;(function(_){_[_.ELSOL=R_]="ELSOL",_[_.SOL=vt]="SOL",_[_.USDC=Ht]="USDC",_[_.EPCT=Yt]="EPCT"})(gt||(gt={}));var yt;(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"})(yt||(yt={}));var GC={[vt]:9,[R_]:9,[Ht]:6,[Yt]:6},Ve="/home/solv/currentEpoch.json";var be="https://api.testnet.solana.com";import{spawnSync as yE}from"child_process";var Jt=t(()=>{yE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=W.NODE_VERSION;yE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),yE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var t_={version:"2.3.10",tag:"v2.3.10",commissionBps:0,relayerUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",shredReceiverAddr:"64.130.50.14:1002",bamUrl:"http://frankfurt.mainnet.bam.jito.wtf"},Se={TESTNET:{Dallas:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002",BAM_URL:"http://dallas.testnet.bam.jito.wtf"},NewYork:{BLOCK_ENGINE_URL:"https://ny.testnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.35.224:1002",BAM_URL:"http://ny.testnet.bam.jito.wtf"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://dallas.testnet.block-engine.jito.wtf",RELAYER_URL:"http://dallas.testnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.218.12:1002",BAM_URL:"http://ny.testnet.bam.jito.wtf"}},MAINNET:{Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002",BAM_URL:"http://amsterdam.mainnet.bam.jito.wtf"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002",BAM_URL:"http://london.mainnet.bam.jito.wtf"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14:1002",BAM_URL:"http://frankfurt.mainnet.bam.jito.wtf"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002",BAM_URL:"http://ny.mainnet.bam.jito.wtf"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002",BAM_URL:"http://tokyo.mainnet.bam.jito.wtf"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002",BAM_URL:"http://slc.mainnet.bam.jito.wtf"},Singapore:{BLOCK_ENGINE_URL:"https://singapore.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://singapore.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.11.224:1002",BAM_URL:"http://singapore.mainnet.bam.jito.wtf"},Dublin:{BLOCK_ENGINE_URL:"https://dublin.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://dublin.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.61.8:1002",BAM_URL:""}}};import{spawnSync as Y}from"child_process";var we=t((_=t_.tag,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/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(Y(`mkdir /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`cd /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_}-jito checkout ${_}-jito`,{shell:!0,stdio:"inherit"}),Y(`git -C /tmp/${_}-jito submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Y(`CI_COMMIT=$(git -C /tmp/${_}-jito rev-parse HEAD) /tmp/${_}-jito/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-jito`,{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/${_}-jito /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),Y(`sudo rm -rf /tmp/${_}-jito`,{shell:!0,stdio:"inherit"})):e?Y(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Y(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as WT,writeFile as XT}from"fs/promises";import{homedir as jT}from"os";var re=t(async _=>{let E=`${jT()}/${r_.JITO_CONFIG}`,i={...JSON.parse(await WT(E,"utf8")),..._},n=JSON.stringify(i,null,2);await XT(E,n),console.log(`Updated ${E} with new values.`)},"updateJitoSolvConfig");import{spawnSync as xt}from"child_process";import zT from"inquirer";var Qt=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";xt(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${E}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${E} --keypair ${E}`;xt(n,{shell:!0,stdio:"inherit"})},"updateCommission"),qt=t(async()=>await zT.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Re}from"@skeet-framework/utils";import ZT from"chalk";import _s from"inquirer";var $t=t(async()=>{let _=await _s.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Re("sudo ufw delete allow 8899/udp"),await Re("sudo ufw delete allow 8899/tcp"),await Re(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Re(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Re("sudo ufw reload"),console.log(ZT.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var es=t(()=>at,"getSolvVersion"),J_=es;import{readFile as os,writeFile as is}from"fs/promises";import{existsAsync as ns}from"@skeet-framework/utils";var KE;(function(_){_.EN="en",_.JA="ja"})(KE||(KE={}));var rc=Object.values(KE),c;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(c||(c={}));var Wt=Object.values(c),D;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(D||(D={}));var Xt=Object.values(D),d;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(d||(d={}));var Rc=Object.values(d).filter(_=>_!=="none"),w;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(w||(w={}));var jt=Object.values(w).filter(_=>_!=="none"),X;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(X||(X={}));var ts={NETWORK:c.TESTNET,NODE_TYPE:D.RPC,VALIDATOR_TYPE:d.NONE,RPC_TYPE:w.AGAVE,MNT_DISK_TYPE:X.TRIPLE,TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v,NODE_VERSION:At,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Ot,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lt,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:P,ACCOUNTS_PATH:b_,SNAPSHOTS_PATH:n_,MOD:!1},N_=ts;import{homedir as Ts}from"os";var ss=t(async()=>{let e=`${Ts()}/${me}`;return await ns(e)?JSON.parse(await os(e,"utf-8")):(console.log("Creating default config file at",e),await is(e,JSON.stringify(N_,null,2)),N_)},"readConfig"),k=ss;import Ss from"node-fetch";var a_=t(async _=>{try{let e=await k();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 Ss(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 cs}from"child_process";import{Connection as zt}from"@solana/web3.js";var ae=t(async(_,e,E=!1,o=200)=>{let i={pubkey:e,isActive:!1,reason:""};try{let n=E?new zt("https://api.testnet.solana.com"):new zt(_,"confirmed"),T=await n.getVoteAccounts(),s=T.current.find(a=>a.votePubkey===e);if(!s)return T.delinquent.find(R=>R.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(a=>a.votePubkey===e),!s)return i.isActive=!1,i.reason="Validator is not found in the current list.",i;let S=s.lastVote,C=await n.getSlot()-S;return C>o?(i.isActive=!1,i.reason=`Validator has not voted for ${C} 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 rs}from"child_process";var M=t(_=>{let e=`solana address --keypair ${_}`,{stdout:E}=rs(e,{shell:!0,stdio:"pipe"});return E.toString().trim()},"getSolanaAddress");var Rs=t(_=>new Promise(e=>setTimeout(e,_)),"sleep"),J=Rs;import{sendDiscord as as}from"@skeet-framework/utils";var Zt=30,Cs=t(async _=>{try{let e=_.NETWORK===c.TESTNET,{mainnetValidatorVoteKey:E,testnetValidatorVoteKey:o}=L(),n=M(e?o:E),T=await ae(_.RPC_URL,n,e),s=0;for(;!T.isActive;){if(s>=Zt){console.log("Max retries reached, exiting...");let S=`\u26A0\uFE0F Validator is not active for ${Zt} minutes!
4
4
  Account: ${T.pubkey}
5
5
  Reason: ${T.reason}
@@ -5795,7 +5795,7 @@ index 479e0f1829..a97f5778d4 100644
5795
5795
 
5796
5796
  /* FD_LOG_NOTICE(( ... printf style arguments ... )) will send a message
5797
5797
  at the NOTICE level to the logger. E.g. for a typical fd_log
5798
- `;return{filePath:_,body:e}},"modDiff"),qe=Bs;var $e=t(async(_,e,E=!1)=>{let o=_.NETWORK===c.TESTNET,i=e||(o?H_:I_),n=E||_.MOD,{filePath:T,body:s}=qe();K("sudo apt install --only-upgrade doublezero -y",{shell:!0,stdio:"inherit"}),K("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),n?(K("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer checkout v${i}`,{shell:!0,stdio:"inherit"}),K("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"}),K('git -C /home/solv/firedancer config --global user.email "you@example.com"',{shell:!0,stdio:"inherit"}),K('git -C /home/solv/firedancer config --global user.name "Your Name"',{shell:!0,stdio:"inherit"}),await ao.mkdir(gs.dirname(T),{recursive:!0}),await ao.writeFile(T,s,"utf8"),K(`sudo chown solv:solv "${T}"`,{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer apply ${T}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("git -C /home/solv/firedancer add /home/solv/firedancer/src/*",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("git -C /home/solv/firedancer add /home/solv/firedancer/book/*",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K('git -C /home/solv/firedancer commit -m "add mods"',{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"})):(K("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer checkout v${i}`,{shell:!0,stdio:"inherit"}),K("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})),K("export FD_AUTO_INSTALL_PACKAGES=1 && ./deps.sh fetch check install",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("sudo systemctl restart frankendancer",{shell:!0,stdio:"inherit"}),K("sudo systemctl restart port-relay",{shell:!0,stdio:"inherit"})},"frankendancerUpdate");import{spawnSync as ys}from"node:child_process";var co=t(_=>{let e=_.NETWORK===c.TESTNET,E=_.NODE_TYPE===D.RPC,o=_.VALIDATOR_TYPE===d.JITO,i=_.VALIDATOR_TYPE===d.FRANKENDANCER,n=_.AUTO_RESTART,T=_.MOD,s=10;n&&!e&&(s=30);let S=e?T_:v;o&&(S=s_,e&&(S=se)),i&&(S=I_,e&&(S=H_)),E&&(S=h_,o&&(S=Ut)),N.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).action(async r=>{let C=J_(),a=e?_.TESTNET_DELINQUENT_STAKE:_.MAINNET_DELINQUENT_STAKE;if(console.log(Co.white(`Current solv version: ${C}`)),r.auto){await eo(_);return}if(r.migrateConfig){let R=Ro().config,O=X.TRIPLE;R.DISK_TYPES===0?O=X.DOUBLE:R.DISK_TYPES===1?O=X.SINGLE:O=X.TRIPLE;let I=R.SOLANA_NETWORK===D_.TESTNET,l=R.SOLV_TYPE===Ge.RPC_NODE,F=R.MAINNET_TYPE===ke.JITO_MEV,G={NETWORK:I?c.TESTNET:c.MAINNET,NODE_TYPE:l?D.RPC:D.VALIDATOR,MNT_DISK_TYPE:O,RPC_TYPE:l?w.JITO:w.NONE,VALIDATOR_TYPE:F?d.JITO:I?d.AGAVE:d.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};await u(G)}if(r.config){if(await u({TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v}),o){let R=e?se:s_;await re({version:R,tag:`v${R}`})}console.log(Co.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(r.firewall){await $t();return}if(r.background){let R=r.version,O=!!R.startsWith("3");if(await u({TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v}),o){we(`v${R}`,r.mod||T,O),await re({version:R,tag:`v${R}`}),await Ke(a,!0,s);return}if(i){await $e(_,R,r.mod||T),await Ke(a,!0,s);return}await ye(R,r.mod||T,O);let I=e?10:5;e&&ys("solv start",{stdio:"inherit",shell:!0}),await Ke(I,!0,s);return}else if(r.commission){let R=await qt();Qt(R.commission,e)}else Jt()})},"updateCommands");import{spawnSync as Ks}from"node:child_process";var No=t(_=>{try{let{log:e}=P_(),E=`tail -f ${e}`;_.error?E+=" | grep '\\(WARN\\|ERR\\)'":_.info?E+=" | grep INFO":_.warning&&(E+=" | grep WARN"),console.log(E);let o=Ks(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 Oo=t(()=>{N.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(_=>{No(_)})},"logCommands");import O_ from"chalk";import{spawnSync as Gs}from"child_process";import{homedir as ks}from"os";var We=t(_=>{let e=ks(),E=L(e),o=E.testnetValidatorVoteKey,i=E.testnetValidatorKey,n=E.testnetValidatorAuthorityKey,T=D_.TESTNET,s=_.COMMISSION;_.NETWORK===c.MAINNET&&(o=E.mainnetValidatorVoteKey,i=E.mainnetValidatorKey,n=E.mainnetValidatorAuthorityKey,T=D_.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${s} - ${T}`);let S=_.RPC_URL||T;_.NETWORK===c.TESTNET&&(S=D_.TESTNET);let r=`solana create-vote-account ${o} ${i} ${n} --commission ${s} --url ${S} --keypair ${i}`;Gs(r,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Xe}from"child_process";import{existsSync as lo,readdirSync as Vs,rmSync as bs}from"fs";import{homedir as ws}from"os";import Fo from"path";var je=t(_=>{let e=[],E=0;_.NODE_TYPE===D.RPC&&(e=[B.MAINNET_VALIDATOR_KEY],E=1),_.NETWORK===c.TESTNET?(e=[B.TESTNET_VALIDATOR_KEY,B.TESTNET_VALITATOR_AUTHORITY_KEY,B.TESTNET_VALIDATOR_VOTE_KEY,B.MAINNET_VALIDATOR_KEY,B.MAINNET_VALITATOR_AUTHORITY_KEY,B.MAINNET_VALIDATOR_VOTE_KEY],E=6):(e=[B.MAINNET_VALIDATOR_KEY,B.MAINNET_VALITATOR_AUTHORITY_KEY,B.MAINNET_VALIDATOR_VOTE_KEY],E=3);let o=`solana-keygen grind --starts-and-ends-with E:SV:${E}`;Xe(o,{shell:!0,stdio:"ignore"});let i=Vs("./").filter(S=>S.endsWith("SV.json")),n=ws(),T=Fo.join(n,"unstaked-identity.json");lo(T)&&Xe(`mv ${T} ${n}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let s=0;for(let S of i){let r=Fo.join(n,e[s]);if(s++,lo(r)){console.log(`${r} is already exist!`),bs(S,{recursive:!0});continue}let C=`mv ${S} ${r}`;Xe(C,{shell:!0,stdio:"inherit"})}Xe("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 Do}from"child_process";var vs=t((_,e,E,o=2001)=>{let i="/etc/systemd/system/jupiter-api.service",n=`[Unit]
5798
+ `;return{filePath:_,body:e}},"modDiff"),qe=Bs;var $e=t(async(_,e,E=!1)=>{let o=_.NETWORK===c.TESTNET,i=e||(o?H_:I_),n=E||_.MOD,{filePath:T,body:s}=qe();K("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),K("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),n?(K("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer checkout v${i}`,{shell:!0,stdio:"inherit"}),K("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"}),K('git -C /home/solv/firedancer config --global user.email "you@example.com"',{shell:!0,stdio:"inherit"}),K('git -C /home/solv/firedancer config --global user.name "Your Name"',{shell:!0,stdio:"inherit"}),await ao.mkdir(gs.dirname(T),{recursive:!0}),await ao.writeFile(T,s,"utf8"),K(`sudo chown solv:solv "${T}"`,{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer apply ${T}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("git -C /home/solv/firedancer add /home/solv/firedancer/src/*",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("git -C /home/solv/firedancer add /home/solv/firedancer/book/*",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K('git -C /home/solv/firedancer commit -m "add mods"',{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"})):(K("git -C /home/solv/firedancer fetch origin",{shell:!0,stdio:"inherit"}),K(`git -C /home/solv/firedancer checkout v${i}`,{shell:!0,stdio:"inherit"}),K("git -C /home/solv/firedancer submodule update --init --recursive",{shell:!0,stdio:"inherit"})),K("export FD_AUTO_INSTALL_PACKAGES=1 && ./deps.sh fetch check install",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),K("sudo systemctl restart frankendancer",{shell:!0,stdio:"inherit"}),K("sudo systemctl restart port-relay",{shell:!0,stdio:"inherit"})},"frankendancerUpdate");import{spawnSync as ys}from"node:child_process";var co=t(_=>{let e=_.NETWORK===c.TESTNET,E=_.NODE_TYPE===D.RPC,o=_.VALIDATOR_TYPE===d.JITO,i=_.VALIDATOR_TYPE===d.FRANKENDANCER,n=_.AUTO_RESTART,T=_.MOD,s=10;n&&!e&&(s=30);let S=e?T_:v;o&&(S=s_,e&&(S=se)),i&&(S=I_,e&&(S=H_)),E&&(S=h_,o&&(S=Ut)),N.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).action(async r=>{let C=J_(),a=e?_.TESTNET_DELINQUENT_STAKE:_.MAINNET_DELINQUENT_STAKE;if(console.log(Co.white(`Current solv version: ${C}`)),r.auto){await eo(_);return}if(r.migrateConfig){let R=Ro().config,O=X.TRIPLE;R.DISK_TYPES===0?O=X.DOUBLE:R.DISK_TYPES===1?O=X.SINGLE:O=X.TRIPLE;let I=R.SOLANA_NETWORK===D_.TESTNET,l=R.SOLV_TYPE===Ge.RPC_NODE,F=R.MAINNET_TYPE===ke.JITO_MEV,G={NETWORK:I?c.TESTNET:c.MAINNET,NODE_TYPE:l?D.RPC:D.VALIDATOR,MNT_DISK_TYPE:O,RPC_TYPE:l?w.JITO:w.NONE,VALIDATOR_TYPE:F?d.JITO:I?d.AGAVE:d.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};await u(G)}if(r.config){if(await u({TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v}),o){let R=e?se:s_;await re({version:R,tag:`v${R}`})}console.log(Co.green("\u2714\uFE0F Updated Solv Config Default Solana Version\n\n You can now run `solv i` to install the latest version"));return}if(r.firewall){await $t();return}if(r.background){let R=r.version,O=!!R.startsWith("3");if(await u({TESTNET_SOLANA_VERSION:T_,MAINNET_SOLANA_VERSION:v}),o){we(`v${R}`,r.mod||T,O),await re({version:R,tag:`v${R}`}),await Ke(a,!0,s);return}if(i){await $e(_,R,r.mod||T),await Ke(a,!0,s);return}await ye(R,r.mod||T,O);let I=e?10:5;e&&ys("solv start",{stdio:"inherit",shell:!0}),await Ke(I,!0,s);return}else if(r.commission){let R=await qt();Qt(R.commission,e)}else Jt()})},"updateCommands");import{spawnSync as Ks}from"node:child_process";var No=t(_=>{try{let{log:e}=P_(),E=`tail -f ${e}`;_.error?E+=" | grep '\\(WARN\\|ERR\\)'":_.info?E+=" | grep INFO":_.warning&&(E+=" | grep WARN"),console.log(E);let o=Ks(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 Oo=t(()=>{N.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(_=>{No(_)})},"logCommands");import O_ from"chalk";import{spawnSync as Gs}from"child_process";import{homedir as ks}from"os";var We=t(_=>{let e=ks(),E=L(e),o=E.testnetValidatorVoteKey,i=E.testnetValidatorKey,n=E.testnetValidatorAuthorityKey,T=D_.TESTNET,s=_.COMMISSION;_.NETWORK===c.MAINNET&&(o=E.mainnetValidatorVoteKey,i=E.mainnetValidatorKey,n=E.mainnetValidatorAuthorityKey,T=D_.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${s} - ${T}`);let S=_.RPC_URL||T;_.NETWORK===c.TESTNET&&(S=D_.TESTNET);let r=`solana create-vote-account ${o} ${i} ${n} --commission ${s} --url ${S} --keypair ${i}`;Gs(r,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Xe}from"child_process";import{existsSync as lo,readdirSync as Vs,rmSync as bs}from"fs";import{homedir as ws}from"os";import Fo from"path";var je=t(_=>{let e=[],E=0;_.NODE_TYPE===D.RPC&&(e=[B.MAINNET_VALIDATOR_KEY],E=1),_.NETWORK===c.TESTNET?(e=[B.TESTNET_VALIDATOR_KEY,B.TESTNET_VALITATOR_AUTHORITY_KEY,B.TESTNET_VALIDATOR_VOTE_KEY,B.MAINNET_VALIDATOR_KEY,B.MAINNET_VALITATOR_AUTHORITY_KEY,B.MAINNET_VALIDATOR_VOTE_KEY],E=6):(e=[B.MAINNET_VALIDATOR_KEY,B.MAINNET_VALITATOR_AUTHORITY_KEY,B.MAINNET_VALIDATOR_VOTE_KEY],E=3);let o=`solana-keygen grind --starts-and-ends-with E:SV:${E}`;Xe(o,{shell:!0,stdio:"ignore"});let i=Vs("./").filter(S=>S.endsWith("SV.json")),n=ws(),T=Fo.join(n,"unstaked-identity.json");lo(T)&&Xe(`mv ${T} ${n}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let s=0;for(let S of i){let r=Fo.join(n,e[s]);if(s++,lo(r)){console.log(`${r} is already exist!`),bs(S,{recursive:!0});continue}let C=`mv ${S} ${r}`;Xe(C,{shell:!0,stdio:"inherit"})}Xe("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 Do}from"child_process";var vs=t((_,e,E,o=2001)=>{let i="/etc/systemd/system/jupiter-api.service",n=`[Unit]
5799
5799
  Description=Jupiter API Service Instance
5800
5800
  After=network.target
5801
5801
 
@@ -5816,7 +5816,7 @@ unzip jupiter-swap-api-x86_64-unknown-linux-gnu.zip
5816
5816
  chmod +x jupiter-swap-api
5817
5817
  rm jupiter-swap-api-x86_64-unknown-linux-gnu.zip`,{shell:!0,stdio:"inherit"});let{filePath:E,body:o}=Io(_.rpcUrl,_.grpcUrl,_.grpcToken);Do(`echo '${o}' | sudo tee ${E}`,{shell:!0,stdio:"inherit"}),console.log(Ys.white(`\u{1F7E2} Jupiter Swap API Setup Completed
5818
5818
 
5819
- $ solv jupiter --help`))},"jupiterAPISetup"),Po=Js;import{existsAsync as xs}from"@skeet-framework/utils";import{readFile as Qs,writeFile as fo}from"fs/promises";import{homedir as qs}from"os";import $s from"path";var o_=t(async()=>{let _=qs(),e=$s.join(_,r_.JITO_CONFIG);await xs(e)||(await fo(e,JSON.stringify(t_,null,2)),console.log(`Created jito config file at ${e}`));let E;try{E=JSON.parse(await Qs(e,"utf-8"))}catch(o){console.log(`readOrCreateJitoConfig - ${o}`),await fo(e,JSON.stringify(t_,null,2)),E=t_}return E},"readOrCreateJitoConfig");import{spawnSync as Ws}from"child_process";var Ce=t(()=>{Ws("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import ce from"chalk";import ze from"inquirer";import Xs from"inquirer";var Uo=t(async _=>{let E=Object.keys(_?Se.TESTNET:Se.MAINNET),o=_?Se.TESTNET:Se.MAINNET,i=await Xs.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:E}]),n=i.region,T=o[n];return{version:t_.version,tag:t_.tag,commissionBps:i.commissionBps,blockEngineUrl:T.BLOCK_ENGINE_URL,relayerUrl:T.RELAYER_URL,shredReceiverAddr:T.SHRED_RECEIVER_ADDR,bamUrl:T.BAM_URL}},"askJitoSetting");var js=t(async()=>{try{let _=d.NONE,e=w.AGAVE,E=N_.COMMISSION,o=!1,i=await ze.prompt([{name:"network",type:"list",message:"Choose Network",choices:Wt,default:c.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:Xt,default:D.RPC}]),n=i.network===c.TESTNET;if(i.nodeType===D.VALIDATOR){let S=i.network===c.MAINNET?[d.JITO,d.SOLANA]:[d.AGAVE,d.JITO,d.FRANKENDANCER,d.BAM];_=await ze.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:S,default:d.AGAVE}).then(r=>r.validatorType),e=w.NONE}if(i.nodeType===D.RPC&&(e=await ze.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:jt,default:w.AGAVE}).then(S=>S.rpcType)),i.nodeType===D.VALIDATOR){let S=await ze.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${N_.COMMISSION}%)'`,default:N_.COMMISSION},{name:"isDummy",type:"confirm",message:"Do you want to setup as a dummy(Inactive) node?(\u203BFor Migration)",default:!0}]);if(E=S.commission,o=S.isDummy,_===d.JITO||_===d.FRANKENDANCER||_===d.BAM){await o_();let r=await Uo(n);await re(r)}}let{network:T,nodeType:s}=i;return console.log(ce.white("Network:",T)),console.log(ce.white("Node Type:",s)),console.log(ce.white("Validator Type:",_)),console.log(ce.white("RPC Type:",e)),s===D.VALIDATOR&&console.log(ce.white("Commission:",E)),await u({NETWORK:T,NODE_TYPE:s,VALIDATOR_TYPE:_,RPC_TYPE:e,COMMISSION:E,IS_DUMMY:o}),!0}catch(_){throw new Error(_)}},"initialConfigSetup"),Ao=js;import{spawnSync as j}from"child_process";var de=t((_=s_,e=!1,E=!1)=>{if(E)if(e){let o=`v${_}-mod`;j(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${o}/installer)"`,{shell:!0,stdio:"inherit"})}else{let o=`v${_}-jito`;j(`mkdir /tmp/${o}`,{shell:!0,stdio:"inherit"}),j(`cd /tmp/${o}`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} checkout ${o}`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),j(`CI_COMMIT=$(git -C /tmp/${o} rev-parse HEAD) /tmp/${o}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${o}`,{shell:!0,stdio:"inherit"}),j("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),j(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${o}/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),j(`sudo rm -rf /tmp/${o}`,{shell:!0,stdio:"inherit"}),j("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?j(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):j(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${_}-jito/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var Lo=t(()=>`#!/bin/bash
5819
+ $ solv jupiter --help`))},"jupiterAPISetup"),Po=Js;import{existsAsync as xs}from"@skeet-framework/utils";import{readFile as Qs,writeFile as fo}from"fs/promises";import{homedir as qs}from"os";import $s from"path";var o_=t(async()=>{let _=qs(),e=$s.join(_,r_.JITO_CONFIG);await xs(e)||(await fo(e,JSON.stringify(t_,null,2)),console.log(`Created jito config file at ${e}`));let E;try{E=JSON.parse(await Qs(e,"utf-8"))}catch(o){console.log(`readOrCreateJitoConfig - ${o}`),await fo(e,JSON.stringify(t_,null,2)),E=t_}return E},"readOrCreateJitoConfig");import{spawnSync as Ws}from"child_process";var Ce=t(()=>{Ws("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import ce from"chalk";import ze from"inquirer";import Xs from"inquirer";var Uo=t(async _=>{let E=Object.keys(_?Se.TESTNET:Se.MAINNET),o=_?Se.TESTNET:Se.MAINNET,i=await Xs.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:E}]),n=i.region,T=o[n];return{version:t_.version,tag:t_.tag,commissionBps:i.commissionBps,blockEngineUrl:T.BLOCK_ENGINE_URL,relayerUrl:T.RELAYER_URL,shredReceiverAddr:T.SHRED_RECEIVER_ADDR,bamUrl:T.BAM_URL}},"askJitoSetting");var js=t(async()=>{try{let _=d.NONE,e=w.AGAVE,E=N_.COMMISSION,o=!1,i=await ze.prompt([{name:"network",type:"list",message:"Choose Network",choices:Wt,default:c.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:Xt,default:D.RPC}]),n=i.network===c.TESTNET;if(i.nodeType===D.VALIDATOR){let S=i.network===c.MAINNET?[d.JITO,d.SOLANA]:[d.AGAVE,d.JITO,d.FRANKENDANCER,d.BAM];_=await ze.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:S,default:d.AGAVE}).then(r=>r.validatorType),e=w.NONE}if(i.nodeType===D.RPC&&(e=await ze.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:jt,default:w.AGAVE}).then(S=>S.rpcType)),i.nodeType===D.VALIDATOR){let S=await ze.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${N_.COMMISSION}%)'`,default:N_.COMMISSION},{name:"isDummy",type:"confirm",message:"Do you want to setup as a dummy(Inactive) node?(\u203BFor Migration)",default:!0}]);if(E=S.commission,o=S.isDummy,_===d.JITO||_===d.FRANKENDANCER||_===d.BAM){await o_();let r=await Uo(n);await re(r)}}let{network:T,nodeType:s}=i;return console.log(ce.white("Network:",T)),console.log(ce.white("Node Type:",s)),console.log(ce.white("Validator Type:",_)),console.log(ce.white("RPC Type:",e)),s===D.VALIDATOR&&console.log(ce.white("Commission:",E)),await u({NETWORK:T,NODE_TYPE:s,VALIDATOR_TYPE:_,RPC_TYPE:e,COMMISSION:E,IS_DUMMY:o}),!0}catch(_){throw new Error(_)}},"initialConfigSetup"),Ao=js;import{spawnSync as j}from"child_process";var de=t((_=s_,e=!1,E=!1)=>{if(E)if(e){let o=`v${_}-mod`;j(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${o}/installer)"`,{shell:!0,stdio:"inherit"})}else{let o=`v${_}-jito`;j(`mkdir /tmp/${o}`,{shell:!0,stdio:"inherit"}),j(`cd /tmp/${o}`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} checkout ${o}`,{shell:!0,stdio:"inherit"}),j(`git -C /tmp/${o} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),j(`CI_COMMIT=$(git -C /tmp/${o} rev-parse HEAD) /tmp/${o}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${o}`,{shell:!0,stdio:"inherit"}),j("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),j(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${o} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),j(`sudo rm -rf /tmp/${o}`,{shell:!0,stdio:"inherit"}),j("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?j(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):j(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${_}-jito/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var Lo=t(()=>`#!/bin/bash
5820
5820
  exec agave-validator \\
5821
5821
  --identity ${f} \\
5822
5822
  --log ${b} \\
@@ -6058,7 +6058,7 @@ ${C}
6058
6058
  --snapshot-interval-slots 0 \\
6059
6059
  --private-rpc \\
6060
6060
  --full-rpc-api \\
6061
- `},"startBamMainnetScript");import{spawnSync as Z}from"child_process";var wE=t((_=s_,e=!1,E=!1)=>{if(E)if(e){let o=`v${_}-mod`;Z(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/v${o}/installer)"`,{shell:!0,stdio:"inherit"})}else{let o=`v${_}-bam`;Z(`mkdir /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z(`cd /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} clone https://github.com/jito-labs/bam-client.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} checkout ${o}`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Z(`CI_COMMIT=$(git -C /tmp/${o} rev-parse HEAD) /tmp/${o}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${o}`,{shell:!0,stdio:"inherit"}),Z("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),Z(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${o}/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),Z(`sudo rm -rf /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?Z(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Z(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${_}-bam/install)"`,{shell:!0,stdio:"inherit"})},"installBam");var Go=t((_=1e4,e,E,o,i,n,T="agave-validator")=>{let{validatorKeyAddress:s}=z(n),C=w_.filter(R=>R!==s).map(R=>`--known-validator ${R} \\`).join(`
6061
+ `},"startBamMainnetScript");import{spawnSync as Z}from"child_process";var wE=t((_=s_,e=!1,E=!1)=>{if(E)if(e){let o=`v${_}-mod`;Z(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/v${o}/installer)"`,{shell:!0,stdio:"inherit"})}else{let o=`v${_}-bam`;Z(`mkdir /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z(`cd /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} clone https://github.com/jito-labs/bam-client.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} checkout ${o}`,{shell:!0,stdio:"inherit"}),Z(`git -C /tmp/${o} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Z(`CI_COMMIT=$(git -C /tmp/${o} rev-parse HEAD) /tmp/${o}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${o}`,{shell:!0,stdio:"inherit"}),Z("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),Z(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${o} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),Z(`sudo rm -rf /tmp/${o}`,{shell:!0,stdio:"inherit"}),Z("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?Z(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/v${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Z(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${_}-bam/install)"`,{shell:!0,stdio:"inherit"})},"installBam");var Go=t((_=1e4,e,E,o,i,n,T="agave-validator")=>{let{validatorKeyAddress:s}=z(n),C=w_.filter(R=>R!==s).map(R=>`--known-validator ${R} \\`).join(`
6062
6062
  `);return`#!/bin/bash
6063
6063
  exec ${T} \\
6064
6064
  --identity ${f} \\
@@ -6438,7 +6438,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:E}},"jitoRelayerSeparateServi
6438
6438
  `);await xS(_,o),YS(`chmod +x ${_}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Ni=QS;import qS from"inquirer";import{writeFile as $S}from"node:fs/promises";var Oi=t(async()=>{let e=(await qS.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";qE(E,{shell:!0,stdio:"inherit"}),qE(o,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),qE(i,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:n,defaultConfig:T}=di(e),s=JSON.stringify(T,null,2);await $S(n,s,{encoding:"utf8"}),await Ni()},"yellowstoneGeyser");var li=t(_=>{N.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 ...")),We(_),process.exit(0);else if(e.key)console.log(O_.white("\u{1F511} Setting up Validator Keypairs ...")),je(_),process.exit(0);else if(e.relayer){console.log(O_.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let i=(await o_()).blockEngineUrl;await ci(i,!1),console.log(O_.green(`Jito Relayer Setup Completed
6439
6439
 
6440
6440
  $ solv relayer --help`)),Ce(),g_(),process.exit(0)}else if(e.jupiter)console.log(O_.white("\u{1F30F} Setting up Jupiter Swap API ...")),await Po(),Ce(),g_(),process.exit(0);else if(e.geyser){console.log(O_.white("\u26A1\uFE0F Setting up Geyser ...")),await Oi();return}else if(e.firedancer){console.log(O_.white("\u{1F525} Setting up Firedancer ...")),await Oe(E);return}await Ri(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 WS}from"child_process";var $E=t(()=>{let E=WS("df -h").toString().split(`
6441
- `).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)=>y_(n.Avail)-y_(i.Avail)).slice(0,10),o=E.some(i=>i.MountedOn==="/mnt"&&y_(i.Size)>9e11-1);return E.forEach(i=>{i.MountedOn==="/mnt"&&y_(i.Size)>9e11-1?console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: green"):i.Filesystem.startsWith("/dev/")&&y_(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/")&&y_(n.Size)>899999999999).map(n=>n.Filesystem).length>0,E},"df");import Fi from"chalk";import XS from"cli-table3";var WE=t(_=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(o=>Fi.blue(o)),E=new XS({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=>Fi.white(i)))}),console.log(E.toString())},"displayTable");var Ii=t(async()=>{N.command("df").description("Disk Free Command").action(()=>{let _=$E();WE(_)})},"dfCommands"),y_=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 Di=t(_=>{N.command("start").description("Start Solana Validator").action(()=>{EE(_),process.exit(0)})},"startCommand");import{spawnSync as jS}from"node:child_process";import zS from"chalk";var Pi=t(async _=>{zS.white(console.log("Starting solv stop process..."));let E=[`sudo systemctl stop ${_.VALIDATOR_TYPE===d.FRANKENDANCER?"frankendancer":"solv"}`];jS(E[0],{shell:!0,stdio:"inherit"})},"stopSolana");var fi=t(_=>{N.command("stop").description("Stop Solana Validator").action(()=>{Pi(_),process.exit(0)})},"stopCommand");import{spawnSync as Ie}from"node:child_process";import Ui from"chalk";var Ai=t(_=>{let e=S_();N.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async E=>{let o=_.AUTO_RESTART,i=_.NETWORK===c.TESTNET,n=o&&i?10:30;E.rm&&(console.log(Ui.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Ie("solv stop",{stdio:"inherit",shell:!0}),Ie("solv rm:snapshot",{stdio:"inherit",shell:!0}),Ie("solv get snapshot",{stdio:"inherit",shell:!0}),Ie("solv start",{stdio:"inherit",shell:!0}),console.log(Ui.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}`;Ie(T,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");import{spawnSync as x}from"child_process";var Li=t((_=t_.tag,e=!1,E=!1)=>{x("sudo apt install --only-upgrade doublezero -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-bam/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(x(`mkdir /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`cd /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git clone https://github.com/jito-labs/bam-client.git --recurse-submodules /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_}-bam checkout ${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_}-bam submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),x(`CI_COMMIT=$(git -C /tmp/${_}-bam rev-parse HEAD) /tmp/${_}-bam/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-bam`,{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/${_}-bam/ /home/solv/.local/share/solana/install/active_release/`,{shell:!0,stdio:"inherit"}),x(`sudo rm -rf /tmp/${_}-bam`,{shell:!0,stdio:"inherit"})):e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):x(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}-bam/install)"`,{shell:!0,stdio:"inherit"})},"bamUpdate");var Mi=t(_=>{let E=_.NETWORK===c.TESTNET?T_:v;_.NODE_TYPE===D.RPC&&(E=h_),N.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===d.JITO,n=_.VALIDATOR_TYPE===d.BAM,T=_.VALIDATOR_TYPE===d.FRANKENDANCER,s=o.mod||_.MOD;if(i){let C=o.version||s_,a=`v${C}`,R=!!C.startsWith("3");we(a,s,R);return}if(n){let C=o.version||s_,a=`v${C}`,R=!!C.startsWith("3");Li(a,s,R);return}if(T){let C=o.version||I_;$e(_,C,s);return}_.NODE_TYPE===D.RPC&&(E=h_);let r=o.version||E;await ye(r,s)})},"installCommands");import{spawnSync as ZS}from"child_process";var ui=t(()=>{N.command("mtr").description("Mount Reload Command").action(()=>{ZS("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),N.command("disks").description("Show unmounted disks").action(()=>{let _=le();console.log(_)})},"mountCommands");import{spawnSync as Er}from"node:child_process";import pi from"chalk";import{spawnSync as _r}from"child_process";var er=t(async()=>{try{let _=_r("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"),nE=er;var mi=t(()=>{N.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 nE()&&(console.log(pi.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 -`;Er(o,{shell:!0,stdio:"inherit"}),console.log(pi.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var De={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 or,mkdirSync as ir}from"fs";import nr from"inquirer";import{homedir as Tr}from"os";import{spawnSync as tr}from"node:child_process";function hi(_,e,E,o){let i=o?`scp -o StrictHostKeyChecking=no solv@${_}:${e} ${E}`:`scp -o StrictHostKeyChecking=no ${e} solv@${_}:${E}`;return tr(i,{shell:!0,stdio:"inherit"}).status===0}t(hi,"executeSCP");var XE=t(async(_="")=>{let e=_;_===""&&(e=(await nr.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let E=Object.values(L()),o=Tr(),i=o.includes("/home/solv")?"/home/solv":o+De.SOLV_KEYPAIR_DOWNLOAD_PATH;or(i)||ir(i,{recursive:!0});let n=!0,T=o+"/"+ct;E.push(T);for(let s of E){let S=s.split("/"),r=S[S.length-1];r=o.includes("/home/solv")?r:r.replace(".json",`-${e}.json`);let C=`${i}/${r}`;hi(e,s,C,n)&&console.log(`Successfully Exported - ${C} \u{1F389}`)}},"download");import{spawnSync as sr}from"child_process";import{existsSync as Sr}from"fs";import rr from"inquirer";import Rr from"os";var Bi=t(async(_="")=>{let e=Rr.userInfo().homedir,E=_;_===""&&(E=(await rr.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=`${e}${De.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(o=De.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let i=Object.values(L(o));for(let n of i){let T=n.split("/"),s=T[T.length-1];if(!s.endsWith("keypair.json"))continue;let S=`${o}/${s}`;if(!Sr(S))continue;let r=`scp -o StrictHostKeyChecking=no ${S} solv@${E}:${n}`;sr(r,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${s} \u{1F389}`)}},"upload");import{spawnSync as ar}from"child_process";import Cr from"inquirer";var gi=t(async()=>{let _=await Cr.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}`;ar(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import TE from"chalk";import{readFileSync as cr}from"fs";import dr from"os";var yi=t(()=>{try{let e=`${dr.userInfo().homedir}/.ssh/id_rsa.pub`,E=cr(e,"utf8");console.log(TE.white(`Your SSH Public Key is:
6441
+ `).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)=>y_(n.Avail)-y_(i.Avail)).slice(0,10),o=E.some(i=>i.MountedOn==="/mnt"&&y_(i.Size)>9e11-1);return E.forEach(i=>{i.MountedOn==="/mnt"&&y_(i.Size)>9e11-1?console.log(`%c${i.Filesystem} ${i.Size} ${i.MountedOn}`,"color: green"):i.Filesystem.startsWith("/dev/")&&y_(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/")&&y_(n.Size)>899999999999).map(n=>n.Filesystem).length>0,E},"df");import Fi from"chalk";import XS from"cli-table3";var WE=t(_=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(o=>Fi.blue(o)),E=new XS({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=>Fi.white(i)))}),console.log(E.toString())},"displayTable");var Ii=t(async()=>{N.command("df").description("Disk Free Command").action(()=>{let _=$E();WE(_)})},"dfCommands"),y_=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 Di=t(_=>{N.command("start").description("Start Solana Validator").action(()=>{EE(_),process.exit(0)})},"startCommand");import{spawnSync as jS}from"node:child_process";import zS from"chalk";var Pi=t(async _=>{zS.white(console.log("Starting solv stop process..."));let E=[`sudo systemctl stop ${_.VALIDATOR_TYPE===d.FRANKENDANCER?"frankendancer":"solv"}`];jS(E[0],{shell:!0,stdio:"inherit"})},"stopSolana");var fi=t(_=>{N.command("stop").description("Stop Solana Validator").action(()=>{Pi(_),process.exit(0)})},"stopCommand");import{spawnSync as Ie}from"node:child_process";import Ui from"chalk";var Ai=t(_=>{let e=S_();N.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async E=>{let o=_.AUTO_RESTART,i=_.NETWORK===c.TESTNET,n=o&&i?10:30;E.rm&&(console.log(Ui.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Ie("solv stop",{stdio:"inherit",shell:!0}),Ie("solv rm:snapshot",{stdio:"inherit",shell:!0}),Ie("solv get snapshot",{stdio:"inherit",shell:!0}),Ie("solv start",{stdio:"inherit",shell:!0}),console.log(Ui.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}`;Ie(T,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");import{spawnSync as x}from"child_process";var Li=t((_=t_.tag,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-bam/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(x(`mkdir /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`cd /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git clone https://github.com/jito-labs/bam-client.git --recurse-submodules /tmp/${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_}-bam checkout ${_}-bam`,{shell:!0,stdio:"inherit"}),x(`git -C /tmp/${_}-bam submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),x(`CI_COMMIT=$(git -C /tmp/${_}-bam rev-parse HEAD) /tmp/${_}-bam/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-bam`,{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/${_}-bam /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),x(`sudo rm -rf /tmp/${_}-bam`,{shell:!0,stdio:"inherit"})):e?x(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-bam/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):x(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}-bam/install)"`,{shell:!0,stdio:"inherit"})},"bamUpdate");var Mi=t(_=>{let E=_.NETWORK===c.TESTNET?T_:v;_.NODE_TYPE===D.RPC&&(E=h_),N.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===d.JITO,n=_.VALIDATOR_TYPE===d.BAM,T=_.VALIDATOR_TYPE===d.FRANKENDANCER,s=o.mod||_.MOD;if(i){let C=o.version||s_,a=`v${C}`,R=!!C.startsWith("3");we(a,s,R);return}if(n){let C=o.version||s_,a=`v${C}`,R=!!C.startsWith("3");Li(a,s,R);return}if(T){let C=o.version||I_;$e(_,C,s);return}_.NODE_TYPE===D.RPC&&(E=h_);let r=o.version||E;await ye(r,s)})},"installCommands");import{spawnSync as ZS}from"child_process";var ui=t(()=>{N.command("mtr").description("Mount Reload Command").action(()=>{ZS("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),N.command("disks").description("Show unmounted disks").action(()=>{let _=le();console.log(_)})},"mountCommands");import{spawnSync as Er}from"node:child_process";import pi from"chalk";import{spawnSync as _r}from"child_process";var er=t(async()=>{try{let _=_r("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"),nE=er;var mi=t(()=>{N.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 nE()&&(console.log(pi.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 -`;Er(o,{shell:!0,stdio:"inherit"}),console.log(pi.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var De={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 or,mkdirSync as ir}from"fs";import nr from"inquirer";import{homedir as Tr}from"os";import{spawnSync as tr}from"node:child_process";function hi(_,e,E,o){let i=o?`scp -o StrictHostKeyChecking=no solv@${_}:${e} ${E}`:`scp -o StrictHostKeyChecking=no ${e} solv@${_}:${E}`;return tr(i,{shell:!0,stdio:"inherit"}).status===0}t(hi,"executeSCP");var XE=t(async(_="")=>{let e=_;_===""&&(e=(await nr.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let E=Object.values(L()),o=Tr(),i=o.includes("/home/solv")?"/home/solv":o+De.SOLV_KEYPAIR_DOWNLOAD_PATH;or(i)||ir(i,{recursive:!0});let n=!0,T=o+"/"+ct;E.push(T);for(let s of E){let S=s.split("/"),r=S[S.length-1];r=o.includes("/home/solv")?r:r.replace(".json",`-${e}.json`);let C=`${i}/${r}`;hi(e,s,C,n)&&console.log(`Successfully Exported - ${C} \u{1F389}`)}},"download");import{spawnSync as sr}from"child_process";import{existsSync as Sr}from"fs";import rr from"inquirer";import Rr from"os";var Bi=t(async(_="")=>{let e=Rr.userInfo().homedir,E=_;_===""&&(E=(await rr.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=`${e}${De.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(o=De.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let i=Object.values(L(o));for(let n of i){let T=n.split("/"),s=T[T.length-1];if(!s.endsWith("keypair.json"))continue;let S=`${o}/${s}`;if(!Sr(S))continue;let r=`scp -o StrictHostKeyChecking=no ${S} solv@${E}:${n}`;sr(r,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${s} \u{1F389}`)}},"upload");import{spawnSync as ar}from"child_process";import Cr from"inquirer";var gi=t(async()=>{let _=await Cr.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}`;ar(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import TE from"chalk";import{readFileSync as cr}from"fs";import dr from"os";var yi=t(()=>{try{let e=`${dr.userInfo().homedir}/.ssh/id_rsa.pub`,E=cr(e,"utf8");console.log(TE.white(`Your SSH Public Key is:
6442
6442
  `)),console.log(TE.white(E))}catch(_){console.error(TE.white(`Error reading SSH Public Key
6443
6443
  `)),console.error(TE.white(_))}},"cat");import{spawnSync as Nr}from"child_process";var Ki=t(()=>{Nr("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Or}from"child_process";import{readFileSync as lr}from"fs";import{Readable as Fr}from"stream";var Gi=t(async _=>new Promise((e,E)=>{try{let o=Or("find",["/","-name","*.json","-size","-301c"]),i=[];o.stdout.on("data",n=>{i.push(...n.toString().split(`
6444
6444
  `).filter(T=>T)),_.increment()}),o.stderr.on("data",n=>{_.increment()}),o.on("close",n=>{e(i)})}catch(o){E(`search Error: ${o}`)}}),"search"),Ir=t(_=>{try{return JSON.parse(lr(_,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),ki=t(async(_,e)=>{let E=[],o=Fr.from(_);return o.on("data",async i=>{Ir(i)&&E.push(i)}),new Promise((i,n)=>{o.on("end",()=>{i(E)}),o.on("error",T=>{n(T)})})},"processPaths");import sE from"chalk";import{Presets as Ur,SingleBar as Ar}from"cli-progress";import Vi from"chalk";import{spawnSync as Dr}from"node:child_process";import Pr from"node-fetch";var fr=t(async()=>{let _=await Pr(Ft,{method:"POST",headers:{"Content-Type":"application/json"}});if(_.status!==200)return console.log(Vi.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.