@gabrielhicks/solv 5.5.1 → 5.5.2
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 +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var 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.2";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
|
|
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}
|
|
@@ -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}
|
|
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}
|
|
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
|
|
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:
|
|
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.
|