@gabrielhicks/solv 5.6.11 → 5.6.12
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.
|
@@ -10,9 +10,13 @@ def load_identity_account_pubkey(config: ValidatorConfig) -> Optional[str]:
|
|
|
10
10
|
:param config: Validator Configuration
|
|
11
11
|
:return: returns validator identity pubkey or None
|
|
12
12
|
"""
|
|
13
|
-
identity_cmd = f'solana
|
|
13
|
+
identity_cmd = f'solana-keygen pubkey ' + config.secrets_path + '/validator-keypair.json'
|
|
14
14
|
debug(config, identity_cmd)
|
|
15
|
-
|
|
15
|
+
result = execute_cmd_str(config, identity_cmd, convert_to_json=False)
|
|
16
|
+
# Strip whitespace and return None if empty
|
|
17
|
+
if result:
|
|
18
|
+
return result.strip()
|
|
19
|
+
return None
|
|
16
20
|
|
|
17
21
|
|
|
18
22
|
def load_vote_account_pubkey(config: ValidatorConfig) -> Optional[str]:
|
|
@@ -21,9 +25,13 @@ def load_vote_account_pubkey(config: ValidatorConfig) -> Optional[str]:
|
|
|
21
25
|
:param config: Validator Configuration
|
|
22
26
|
:return: returns vote account pubkey or None
|
|
23
27
|
"""
|
|
24
|
-
vote_pubkey_cmd = f'solana
|
|
28
|
+
vote_pubkey_cmd = f'solana-keygen pubkey ' + config.secrets_path + '/vote-account-keypair.json'
|
|
25
29
|
debug(config, vote_pubkey_cmd)
|
|
26
|
-
|
|
30
|
+
result = execute_cmd_str(config, vote_pubkey_cmd, convert_to_json=False)
|
|
31
|
+
# Strip whitespace and return None if empty
|
|
32
|
+
if result:
|
|
33
|
+
return result.strip()
|
|
34
|
+
return None
|
|
27
35
|
|
|
28
36
|
|
|
29
37
|
def load_vote_account_balance(config: ValidatorConfig, vote_account_pubkey: str):
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var Zr=Object.defineProperty;var E=(_,e)=>Zr(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as YC}from"commander";var To="5.6.11";var ao={name:"@gabrielhicks/solv",version:To,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","dist/cli/monitoring/scripts"],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 nt=ao.version;var me="https://validators.solutions";var st="solv4.config.json";var v_="identity.json",H_="unstaked-identity.json",So="relayer-keypair.json",eT="mainnet-validator-keypair.json",tT="mainnet-vote-account-keypair.json",ET="mainnet-authority-keypair.json",oT="testnet-validator-keypair.json",iT="testnet-vote-account-keypair.json",nT="testnet-authority-keypair.json",w="/home/solv",p=`${w}/${v_}`,ZC=`${w}/${H_}`,Q=`${w}/${eT}`,te=`${w}/${tT}`,_d=`${w}/${ET}`,y=`${w}/${oT}`,h_=`${w}/${iT}`,ed=`${w}/${nT}`,v=`${w}/solana-validator.log`,d_=w+"/start-validator.sh",u="/mnt/ledger",g_="/mnt/accounts",l_="/mnt/snapshots",Ro="solana-validator",co="agave-validator",Co="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var rt=3;var lo="https://api.mainnet-beta.solana.com",No="https://verify.validators.solutions/solv-migrate",Oo="https://jup.validators.solutions/v1/jup",fE;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(fE||(fE={}));var Fo=Object.values(fE),Tt="So11111111111111111111111111111111111111112",at="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",DE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Io="SOLV420",fo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},Ee=["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"],N_=["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 TT}from"child_process";import{spawnSync as k}from"node:child_process";var sT=E((_,e=!1,t=!1,o=!1)=>{t?e?(k(`mkdir /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`cd /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave-mod checkout ${_}-mod`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),k(`CI_COMMIT=$(git -C /tmp/${_}-agave-mod rev-parse HEAD) /tmp/${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),k(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave-mod /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&k("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),k(`sudo rm -rf /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(k(`mkdir /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`cd /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave checkout ${_}`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),k(`CI_COMMIT=$(git -C /tmp/${_}-agave rev-parse HEAD) /tmp/${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave`,{shell:!0,stdio:"inherit"}),k("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),k(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&k("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),k(`sudo rm -rf /tmp/${_}-agave`,{shell:!0,stdio:"inherit"})):e?k(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):k(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),oe=sT;var Do="agave-validator",rT=E(()=>{try{return Do}catch(_){return console.error(_),Do}},"getSolanaCLI"),O_=rT;var F_="3.1.4",T_="3.0.12",Me="",Le="3.1.4",Y_="3.0.12",U_="",PE="3.0.12",he="3.0.12",J_="",Po="3.1.4",x_="3.0.12";var Ao="20.17.0",ie="0.806.30102",B_="0.805.30008";var St="0.8.0-1",Rt="0.8.0-1";var ct=E(async(_,e=!1,t=!1,o=!1)=>{let i=Me,s=`${`v${_}`}${i}`;oe(s,e,t,o)},"updateVersion"),ge=E(async(_,e=!1,t=10)=>{let o=O_(),i=`${o} --ledger ${u} exit --max-delinquent-stake ${_} --min-idle-time ${t}`;e&&(i=`${o} --ledger ${u} exit --max-delinquent-stake ${_} --min-idle-time ${t}`),TT(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import mi from"chalk";var Q_;(function(_){_.EN="en",_.JA="ja"})(Q_||(Q_={}));var Uo;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Uo||(Uo={}));var uo;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(uo||(uo={}));var y_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(y_||(y_={}));var po;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(po||(po={}));var mo;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(mo||(mo={}));var Mo;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(Mo||(Mo={}));var Lo;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Lo||(Lo={}));var Ct;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(Ct||(Ct={}));var dt;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(dt||(dt={}));var Bo=!1,yo=!1,Ko=!1,Go=!1,ko=!1,Vo=!1,o_={ID:"solv",LANG:Q_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.1.4",MAINNET_SOLANA_VERSION:"3.0.12",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},H={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},m={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},I_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",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"},h={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"},g=E((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,t=`${e}/${h.MAINNET_VALIDATOR_KEY}`,o=`${e}/${h.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${h.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${h.TESTNET_VALIDATOR_KEY}`,s=`${e}/${h.TESTNET_VALIDATOR_VOTE_KEY}`,r=`${e}/${h.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:t,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:s,testnetValidatorAuthorityKey:r}},"getAllKeyPaths"),K_=E((_=!0)=>{let e=_?`${H.ROOT}/${h.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${h.MAINNET_VALIDATOR_KEY}`,t=_?`${H.ROOT}/${h.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${h.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${I_.LOG}`,i=m.ACCOUNTS,n=m.LEDGER,s=m.SNAPSHOTS,r=`${H.ROOT}/${I_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:t,log:o,accounts:i,ledger:n,scriptPath:r,snapshots:s}},"startupScriptPaths");var S_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",AE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",bo="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",wo=9,f_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",vo="So11111111111111111111111111111111111111112",Ho="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Yo="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ho;(function(_){_[_.ELSOL=f_]="ELSOL",_[_.SOL=vo]="SOL",_[_.USDC=Ho]="USDC",_[_.EPCT=Yo]="EPCT"})(ho||(ho={}));var go;(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"})(go||(go={}));var Od={[vo]:9,[f_]:9,[Ho]:6,[Yo]:6},lt="/home/solv/currentEpoch.json";var Nt="https://api.testnet.solana.com";import{spawnSync as UE}from"child_process";var Jo=E(()=>{UE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=o_.NODE_VERSION;UE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),UE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as $}from"child_process";var Ot=E((_,e=!1,t=!1,o=!1)=>{$("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),$("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),t?e?$(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):($(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),$(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),$(`CI_COMMIT=$(git -C /tmp/${_} rev-parse HEAD) /tmp/${_}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}`,{shell:!0,stdio:"inherit"}),$("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),$(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&$("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),$(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?$(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):$(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as aT,writeFile as ST}from"fs/promises";import{homedir as RT}from"os";var $_=E(async _=>{let t=`${RT()}/${I_.JITO_CONFIG}`,i={...JSON.parse(await aT(t,"utf8")),..._},n=JSON.stringify(i,null,2);await ST(t,n),console.log(`Updated ${t} with new values.`)},"updateJitoSolvConfig");import{spawnSync as xo}from"child_process";import cT from"inquirer";var Qo=E((_,e=!0)=>{let t=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";xo(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${t}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${t} --keypair ${t}`;xo(n,{shell:!0,stdio:"inherit"})},"updateCommission"),$o=E(async()=>await cT.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Be}from"@skeet-framework/utils";import CT from"chalk";import dT from"inquirer";var qo=E(async()=>{let _=await dT.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Be("sudo ufw delete allow 8899/udp"),await Be("sudo ufw delete allow 8899/tcp"),await Be(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Be(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Be("sudo ufw reload"),console.log(CT.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var lT=E(()=>To,"getSolvVersion"),ne=lT;import{readFile as FT,writeFile as IT}from"fs/promises";import{existsAsync as fT}from"@skeet-framework/utils";var uE;(function(_){_.EN="en",_.JA="ja"})(uE||(uE={}));var Jd=Object.values(uE),O;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(O||(O={}));var Wo=Object.values(O),P;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(P||(P={}));var Xo=Object.values(P),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var xd=Object.values(F).filter(_=>_!=="none"),q;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(q||(q={}));var jo=Object.values(q).filter(_=>_!=="none"),i_;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(i_||(i_={}));var OT={NETWORK:O.TESTNET,NODE_TYPE:P.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:q.AGAVE,MNT_DISK_TYPE:i_.TRIPLE,TESTNET_SOLANA_VERSION:F_,MAINNET_SOLANA_VERSION:T_,NODE_VERSION:Ao,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Co,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:u,ACCOUNTS_PATH:g_,SNAPSHOTS_PATH:l_,MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},u_=OT;import{homedir as DT}from"os";var PT=E(async()=>{let e=`${DT()}/${st}`;return await fT(e)?JSON.parse(await FT(e,"utf-8")):(console.log("Creating default config file at",e),await IT(e,JSON.stringify(u_,null,2)),u_)},"readConfig"),J=PT;import AT from"node-fetch";var D_=E(async _=>{try{let e=await J();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var Zr=Object.defineProperty;var E=(_,e)=>Zr(_,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as YC}from"commander";var To="5.6.12";var ao={name:"@gabrielhicks/solv",version:To,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","dist/cli/monitoring/scripts"],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 nt=ao.version;var me="https://validators.solutions";var st="solv4.config.json";var v_="identity.json",H_="unstaked-identity.json",So="relayer-keypair.json",eT="mainnet-validator-keypair.json",tT="mainnet-vote-account-keypair.json",ET="mainnet-authority-keypair.json",oT="testnet-validator-keypair.json",iT="testnet-vote-account-keypair.json",nT="testnet-authority-keypair.json",w="/home/solv",p=`${w}/${v_}`,ZC=`${w}/${H_}`,Q=`${w}/${eT}`,te=`${w}/${tT}`,_d=`${w}/${ET}`,y=`${w}/${oT}`,h_=`${w}/${iT}`,ed=`${w}/${nT}`,v=`${w}/solana-validator.log`,d_=w+"/start-validator.sh",u="/mnt/ledger",g_="/mnt/accounts",l_="/mnt/snapshots",Ro="solana-validator",co="agave-validator",Co="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var rt=3;var lo="https://api.mainnet-beta.solana.com",No="https://verify.validators.solutions/solv-migrate",Oo="https://jup.validators.solutions/v1/jup",fE;(function(_){_.SOL="SOL",_.USDC="USDC",_.elSOL="elSOL",_.JitoSOL="JitoSOL",_.mSOL="mSOL",_.bSOL="bSOL",_.EPCT="EPCT",_.JUP="JUP",_.BONK="BONK",_.JTO="JTO"})(fE||(fE={}));var Fo=Object.values(fE),Tt="So11111111111111111111111111111111111111112",at="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",DE="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Io="SOLV420",fo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"},Ee=["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"],N_=["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 TT}from"child_process";import{spawnSync as k}from"node:child_process";var sT=E((_,e=!1,t=!1,o=!1)=>{t?e?(k(`mkdir /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`cd /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave-mod checkout ${_}-mod`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),k(`CI_COMMIT=$(git -C /tmp/${_}-agave-mod rev-parse HEAD) /tmp/${_}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave-mod`,{shell:!0,stdio:"inherit"}),k("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),k(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave-mod /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&k("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),k(`sudo rm -rf /tmp/${_}-agave-mod`,{shell:!0,stdio:"inherit"})):(k(`mkdir /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`cd /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/${_}-agave`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave checkout ${_}`,{shell:!0,stdio:"inherit"}),k(`git -C /tmp/${_}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),k(`CI_COMMIT=$(git -C /tmp/${_}-agave rev-parse HEAD) /tmp/${_}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}-agave`,{shell:!0,stdio:"inherit"}),k("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),k(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_}-agave /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&k("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),k(`sudo rm -rf /tmp/${_}-agave`,{shell:!0,stdio:"inherit"})):e?k(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/${_}-mod/installer)"`,{shell:!0,stdio:"inherit"}):k(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/${_}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),oe=sT;var Do="agave-validator",rT=E(()=>{try{return Do}catch(_){return console.error(_),Do}},"getSolanaCLI"),O_=rT;var F_="3.1.4",T_="3.0.12",Me="",Le="3.1.4",Y_="3.0.12",U_="",PE="3.0.12",he="3.0.12",J_="",Po="3.1.4",x_="3.0.12";var Ao="20.17.0",ie="0.806.30102",B_="0.805.30008";var St="0.8.0-1",Rt="0.8.0-1";var ct=E(async(_,e=!1,t=!1,o=!1)=>{let i=Me,s=`${`v${_}`}${i}`;oe(s,e,t,o)},"updateVersion"),ge=E(async(_,e=!1,t=10)=>{let o=O_(),i=`${o} --ledger ${u} exit --max-delinquent-stake ${_} --min-idle-time ${t}`;e&&(i=`${o} --ledger ${u} exit --max-delinquent-stake ${_} --min-idle-time ${t}`),TT(i,{shell:!0,stdio:"inherit"})},"monitorUpdate");import mi from"chalk";var Q_;(function(_){_.EN="en",_.JA="ja"})(Q_||(Q_={}));var Uo;(function(_){_[_.DOUBLE=0]="DOUBLE",_[_.SINGLE=1]="SINGLE",_[_.TRIPLE=2]="TRIPLE"})(Uo||(Uo={}));var uo;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(uo||(uo={}));var y_;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(y_||(y_={}));var po;(function(_){_.VALIDATOR="validator",_.RPC="rpc"})(po||(po={}));var mo;(function(_){_.SOLANA="solana",_.JITO="jito",_.AGAVE="agave",_.FIREDANCER="firedancer"})(mo||(mo={}));var Mo;(function(_){_.CO_HOST_RELAYER="co-host-relayer",_.SEPARATED_RELAYER="separated-relayer",_.WITHOUT_RELAYER="without-relayer"})(Mo||(Mo={}));var Lo;(function(_){_.FIREDANCER="firedancer",_.FRANKENDANCER="frankendancer"})(Lo||(Lo={}));var Ct;(function(_){_[_.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",_[_.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",_[_.RPC_NODE=2]="RPC_NODE"})(Ct||(Ct={}));var dt;(function(_){_.SOLANA_CLIENT="SolanaClient",_.JITO_MEV="JitoMev",_.FIREDANCER="Firedancer"})(dt||(dt={}));var Bo=!1,yo=!1,Ko=!1,Go=!1,ko=!1,Vo=!1,o_={ID:"solv",LANG:Q_.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.1.4",MAINNET_SOLANA_VERSION:"3.0.12",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots",MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},H={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},m={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},I_={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",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"},h={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"},g=E((_=H.ROOT)=>{let e=_===H.ROOT?H.ROOT:_,t=`${e}/${h.MAINNET_VALIDATOR_KEY}`,o=`${e}/${h.MAINNET_VALIDATOR_VOTE_KEY}`,i=`${e}/${h.MAINNET_VALITATOR_AUTHORITY_KEY}`,n=`${e}/${h.TESTNET_VALIDATOR_KEY}`,s=`${e}/${h.TESTNET_VALIDATOR_VOTE_KEY}`,r=`${e}/${h.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:t,mainnetValidatorVoteKey:o,mainnetValidatorAuthorityKey:i,testnetValidatorKey:n,testnetValidatorVoteKey:s,testnetValidatorAuthorityKey:r}},"getAllKeyPaths"),K_=E((_=!0)=>{let e=_?`${H.ROOT}/${h.TESTNET_VALIDATOR_KEY}`:`${H.ROOT}/${h.MAINNET_VALIDATOR_KEY}`,t=_?`${H.ROOT}/${h.TESTNET_VALIDATOR_VOTE_KEY}`:`${H.ROOT}/${h.MAINNET_VALIDATOR_VOTE_KEY}`,o=`${H.ROOT}/${I_.LOG}`,i=m.ACCOUNTS,n=m.LEDGER,s=m.SNAPSHOTS,r=`${H.ROOT}/${I_.STARTUP_SCRIPT}`;return{identity:e,voteAccount:t,log:o,accounts:i,ledger:n,scriptPath:r,snapshots:s}},"startupScriptPaths");var S_="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",AE="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",bo="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",wo=9,f_="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",vo="So11111111111111111111111111111111111111112",Ho="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Yo="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ho;(function(_){_[_.ELSOL=f_]="ELSOL",_[_.SOL=vo]="SOL",_[_.USDC=Ho]="USDC",_[_.EPCT=Yo]="EPCT"})(ho||(ho={}));var go;(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"})(go||(go={}));var Od={[vo]:9,[f_]:9,[Ho]:6,[Yo]:6},lt="/home/solv/currentEpoch.json";var Nt="https://api.testnet.solana.com";import{spawnSync as UE}from"child_process";var Jo=E(()=>{UE("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let _=o_.NODE_VERSION;UE(`pnpm env use ${_} --global`,{shell:!0,stdio:"inherit"}),UE("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");import{spawnSync as $}from"child_process";var Ot=E((_,e=!1,t=!1,o=!1)=>{$("sudo apt install --only-upgrade doublezero doublezero-solana -y",{shell:!0,stdio:"inherit"}),$("sudo systemctl restart doublezerod",{shell:!0,stdio:"inherit"}),t?e?$(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):($(`mkdir /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`cd /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${_}`,{shell:!0,stdio:"inherit"}),$(`git -C /tmp/${_} checkout ${_}`,{shell:!0,stdio:"inherit"}),$(`git -C /tmp/${_} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),$(`CI_COMMIT=$(git -C /tmp/${_} rev-parse HEAD) /tmp/${_}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${_}`,{shell:!0,stdio:"inherit"}),$("sudo rm -rf /home/solv/.local/share/solana/install/active_release",{shell:!0,stdio:"inherit"}),$(`sudo ln -sfn /home/solv/.local/share/solana/install/releases/${_} /home/solv/.local/share/solana/install/active_release`,{shell:!0,stdio:"inherit"}),o&&$("sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /home/solv/.local/share/solana/install/active_release/bin/agave-validator",{shell:!0,stdio:"inherit"}),$(`sudo rm -rf /tmp/${_}`,{shell:!0,stdio:"inherit"})):e?$(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${_}/installer)"`,{shell:!0,stdio:"inherit"}):$(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${_}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as aT,writeFile as ST}from"fs/promises";import{homedir as RT}from"os";var $_=E(async _=>{let t=`${RT()}/${I_.JITO_CONFIG}`,i={...JSON.parse(await aT(t,"utf8")),..._},n=JSON.stringify(i,null,2);await ST(t,n),console.log(`Updated ${t} with new values.`)},"updateJitoSolvConfig");import{spawnSync as xo}from"child_process";import cT from"inquirer";var Qo=E((_,e=!0)=>{let t=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";xo(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${t}`,{shell:!0,stdio:"inherit"});let n=`solana vote-update-commission ${o} ${_} ${t} --keypair ${t}`;xo(n,{shell:!0,stdio:"inherit"})},"updateCommission"),$o=E(async()=>await cT.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Be}from"@skeet-framework/utils";import CT from"chalk";import dT from"inquirer";var qo=E(async()=>{let _=await dT.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Be("sudo ufw delete allow 8899/udp"),await Be("sudo ufw delete allow 8899/tcp"),await Be(`sudo ufw allow from ${_.ip} to any port 8899 proto tcp`),await Be(`sudo ufw allow from ${_.ip} to any port 8899 proto udp`),await Be("sudo ufw reload"),console.log(CT.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var lT=E(()=>To,"getSolvVersion"),ne=lT;import{readFile as FT,writeFile as IT}from"fs/promises";import{existsAsync as fT}from"@skeet-framework/utils";var uE;(function(_){_.EN="en",_.JA="ja"})(uE||(uE={}));var Jd=Object.values(uE),O;(function(_){_.MAINNET="mainnet-beta",_.TESTNET="testnet"})(O||(O={}));var Wo=Object.values(O),P;(function(_){_.RPC="rpc",_.VALIDATOR="validator"})(P||(P={}));var Xo=Object.values(P),F;(function(_){_.SOLANA="solana",_.AGAVE="agave",_.JITO="jito",_.FRANKENDANCER="frankendancer",_.BAM="bam",_.NONE="none"})(F||(F={}));var xd=Object.values(F).filter(_=>_!=="none"),q;(function(_){_.AGAVE="agave",_.JITO="jito",_.NONE="none"})(q||(q={}));var jo=Object.values(q).filter(_=>_!=="none"),i_;(function(_){_.SINGLE="single",_.DOUBLE="double",_.TRIPLE="triple"})(i_||(i_={}));var OT={NETWORK:O.TESTNET,NODE_TYPE:P.RPC,VALIDATOR_TYPE:F.NONE,RPC_TYPE:q.AGAVE,MNT_DISK_TYPE:i_.TRIPLE,TESTNET_SOLANA_VERSION:F_,MAINNET_SOLANA_VERSION:T_,NODE_VERSION:Ao,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Co,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:lo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:u,ACCOUNTS_PATH:g_,SNAPSHOTS_PATH:l_,MOD:!1,XDP:!1,ZERO_COPY:!1,JAG_SNAPSHOTS:!1,JAG_REGION:""},u_=OT;import{homedir as DT}from"os";var PT=E(async()=>{let e=`${DT()}/${st}`;return await fT(e)?JSON.parse(await FT(e,"utf-8")):(console.log("Creating default config file at",e),await IT(e,JSON.stringify(u_,null,2)),u_)},"readConfig"),J=PT;import AT from"node-fetch";var D_=E(async _=>{try{let e=await J();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
3
3
|
Please set DISCORD_WEBHOOK_URL in .env`);let t={content:_,username:"\u{1FA84} Solv Notifier"};return(await AT(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${_}`}),!1}},"sendDiscord");import{spawnSync as MT}from"child_process";import{Connection as zo}from"@solana/web3.js";var ye=E(async(_,e,t=!1,o=200)=>{let i={pubkey:e,isActive:!1,reason:""};try{let n=t?new zo("https://api.testnet.solana.com"):new zo(_,"confirmed"),s=await n.getVoteAccounts(),r=s.current.find(R=>R.votePubkey===e);if(!r)return s.delinquent.find(C=>C.votePubkey===e)?(i.isActive=!1,i.reason="Validator is delinquent.",i):(i.isActive=!1,i.reason="Validator is not found in both current and delinquent lists.",i);if(s=await n.getVoteAccounts(),r=s.current.find(R=>R.votePubkey===e),!r)return i.isActive=!1,i.reason="Validator is not found in the current list.",i;let T=r.lastVote,c=await n.getSlot()-T;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 UT}from"child_process";var K=E(_=>{let e=`solana address --keypair ${_}`,{stdout:t}=UT(e,{shell:!0,stdio:"pipe"});return t.toString().trim()},"getSolanaAddress");var uT=E(_=>new Promise(e=>setTimeout(e,_)),"sleep"),j=uT;import{sendDiscord as pT}from"@skeet-framework/utils";var Zo=30,mT=E(async _=>{try{let e=_.NETWORK===O.TESTNET,{mainnetValidatorVoteKey:t,testnetValidatorVoteKey:o}=g(),n=K(e?o:t),s=await ye(_.RPC_URL,n,e),r=0;for(;!s.isActive;){if(r>=Zo){console.log("Max retries reached, exiting...");let T=`\u26A0\uFE0F Validator is not active for ${Zo} minutes!
|
|
4
4
|
Account: ${s.pubkey}
|
|
5
5
|
Reason: ${s.reason}
|