@gabrielhicks/solv 5.3.38 → 5.3.39
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 +2 -2
- 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 Ii=Object.defineProperty;var r=(t,e)=>Ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as tu}from"commander";var nr="5.3.38";var sr={name:"@gabrielhicks/solv",version:nr,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 Ae=sr.version;var te="https://validators.solutions";var we="solv4.config.json";var vt="identity.json",Nt="unstaked-identity.json",ar="relayer-keypair.json",Pi="mainnet-validator-keypair.json",xi="mainnet-vote-account-keypair.json",$i="mainnet-authority-keypair.json",Vi="testnet-validator-keypair.json",Di="testnet-vote-account-keypair.json",bi="testnet-authority-keypair.json",x="/home/solv",R=`${x}/${vt}`,mu=`${x}/${Nt}`,U=`${x}/${Pi}`,_e=`${x}/${xi}`,pu=`${x}/${$i}`,$=`${x}/${Vi}`,ve=`${x}/${Di}`,du=`${x}/${bi}`,W=`${x}/solana-validator.log`,nt=x+"/start-validator.sh",w="/mnt/ledger",xt="/mnt/accounts",st="/mnt/snapshots",ir="solana-validator",lr="agave-validator",cr="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Ne=3,mr="https://api.testnet.solana.com",pr="https://api.mainnet-beta.solana.com",dr="https://verify.validators.solutions/solv-migrate",ur="https://jup.validators.solutions/v1/jup",No;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(No||(No={}));var fr=Object.values(No),Re="So11111111111111111111111111111111111111112",Oe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Ro="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var hr="SOLV420",yr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Mi}from"child_process";var q="3.0.6",b="2.3.11",ee="3.0.6",Rt="2.3.11",Sr="2.3.11",Ot="2.3.11";var Tr="20.17.0",$t="0.711.30006",Vt="0.708.20306";import{spawnSync as P}from"node:child_process";var Ki=r((t=b,e=!1,o=!1)=>{o?e?(P(`mkdir /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`cd /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave-mod checkout v${t}-mod`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),P(`CI_COMMIT=$(git -C /tmp/v${t}-agave-mod rev-parse HEAD) /tmp/v${t}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),P(`cp -r /home/solv/.local/share/solana/install/releases/v${t}-agave-mod/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),P(`sudo rm -rf /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"})):(P(`mkdir /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`cd /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave checkout v${t}`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),P(`CI_COMMIT=$(git -C /tmp/v${t}-agave rev-parse HEAD) /tmp/v${t}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${t}-agave`,{shell:!0,stdio:"inherit"}),P("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),P(`cp -r /home/solv/.local/share/solana/install/releases/v${t}-agave/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),P(`sudo rm -rf /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"})):e?P(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):P(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Dt=Ki;var Er="agave-validator",Ui=r(()=>{try{return Er}catch(t){return console.error(t),Er}},"getSolanaCLI"),at=Ui;var ke=r(async(t,e=!1,o=!1)=>{Dt(t,e,o)},"updateVersion"),Ce=r(async(t,e=!1,o=10)=>{let n=at(),s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --monitor --min-idle-time ${o}`;e&&(s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --min-idle-time ${o}`),Mi(s,{shell:!0,stdio:"inherit"})},"monitorUpdate");import an from"chalk";var kt;(function(t){t.EN="en",t.JA="ja"})(kt||(kt={}));var gr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(gr||(gr={}));var Ar;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(Ar||(Ar={}));var St;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(St||(St={}));var wr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(wr||(wr={}));var _r;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(_r||(_r={}));var vr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(vr||(vr={}));var Nr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(Nr||(Nr={}));var Ie;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ie||(Ie={}));var Le;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Le||(Le={}));var kr=!1,Cr=!0,Ir=!1,Lr=!0,G={ID:"solv",LANG:kt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.0.6",MAINNET_SOLANA_VERSION:"2.3.11",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},M={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},it={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},C={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"},I={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"},v=r((t=M.ROOT)=>{let e=t===M.ROOT?M.ROOT:t,o=`${e}/${I.MAINNET_VALIDATOR_KEY}`,n=`${e}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${I.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${I.TESTNET_VALIDATOR_KEY}`,i=`${e}/${I.TESTNET_VALIDATOR_VOTE_KEY}`,l=`${e}/${I.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:l}},"getAllKeyPaths"),Tt=r((t=!0)=>{let e=t?`${M.ROOT}/${I.TESTNET_VALIDATOR_KEY}`:`${M.ROOT}/${I.MAINNET_VALIDATOR_KEY}`,o=t?`${M.ROOT}/${I.TESTNET_VALIDATOR_VOTE_KEY}`:`${M.ROOT}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${M.ROOT}/${it.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,l=`${M.ROOT}/${it.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:l,snapshots:i}},"startupScriptPaths");var et="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",Oo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Pr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",xr=9,lt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",$r="So11111111111111111111111111111111111111112",Vr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Dr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Rr;(function(t){t[t.ELSOL=lt]="ELSOL",t[t.SOL=$r]="SOL",t[t.USDC=Vr]="USDC",t[t.EPCT=Dr]="EPCT"})(Rr||(Rr={}));var Or;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(Or||(Or={}));var Cu={[$r]:9,[lt]:9,[Vr]:6,[Dr]:6},Pe="/home/solv/currentEpoch.json",ko=.5,xe="https://api.testnet.solana.com";import{spawnSync as Co}from"child_process";var br=r(()=>{Co("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=G.NODE_VERSION;Co(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Co("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var dt={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"},oe={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"},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"}},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"},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"},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"},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"},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"},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"},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"}}};import{spawnSync as Q}from"child_process";var $e=r((t=dt.tag,e=!1,o=!1)=>{o?e?Q(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(Q(`mkdir /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`cd /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git -C /tmp/${t}-jito checkout ${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git -C /tmp/${t}-jito submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Q(`CI_COMMIT=$(git -C /tmp/${t}-jito rev-parse HEAD) /tmp/${t}-jito/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${t}-jito`,{shell:!0,stdio:"inherit"}),Q("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),Q(`cp -r /home/solv/.local/share/solana/install/releases/${t}-jito/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),Q(`sudo rm -rf /tmp/${t}-jito`,{shell:!0,stdio:"inherit"})):e?Q(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Q(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Hi,writeFile as Fi}from"fs/promises";import{homedir as ji}from"os";var re=r(async t=>{let o=`${ji()}/${it.JITO_CONFIG}`,s={...JSON.parse(await Hi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Fi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Kr}from"child_process";import Yi from"inquirer";var Ur=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";Kr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;Kr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Mr=r(async()=>await Yi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as ne}from"@skeet-framework/utils";import Gi from"chalk";import Ji from"inquirer";var Hr=r(async()=>{let t=await Ji.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await ne("sudo ufw delete allow 8899/udp"),await ne("sudo ufw delete allow 8899/tcp"),await ne(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await ne(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await ne("sudo ufw reload"),console.log(Gi.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Bi=r(()=>nr,"getSolvVersion"),bt=Bi;import{readFile as qi,writeFile as Qi}from"fs/promises";import{existsAsync as Zi}from"@skeet-framework/utils";var Io;(function(t){t.EN="en",t.JA="ja"})(Io||(Io={}));var rf=Object.values(Io),f;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(f||(f={}));var Fr=Object.values(f),A;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(A||(A={}));var jr=Object.values(A),T;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(T||(T={}));var nf=Object.values(T).filter(t=>t!=="none"),K;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(K||(K={}));var Yr=Object.values(K).filter(t=>t!=="none"),J;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(J||(J={}));var Wi={NETWORK:f.TESTNET,NODE_TYPE:A.RPC,VALIDATOR_TYPE:T.NONE,RPC_TYPE:K.AGAVE,MNT_DISK_TYPE:J.TRIPLE,TESTNET_SOLANA_VERSION:q,MAINNET_SOLANA_VERSION:b,NODE_VERSION:Tr,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:cr,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:pr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:xt,SNAPSHOTS_PATH:st,MOD:!1},ut=Wi;import{homedir as Xi}from"os";var tl=r(async()=>{let e=`${Xi()}/${we}`;return await Zi(e)?JSON.parse(await qi(e,"utf-8")):(console.log("Creating default config file at",e),await Qi(e,JSON.stringify(ut,null,2)),ut)},"readConfig"),V=tl;import el from"node-fetch";var Z=r(async t=>{try{let e=await V();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var Ii=Object.defineProperty;var r=(t,e)=>Ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as tu}from"commander";var nr="5.3.39";var sr={name:"@gabrielhicks/solv",version:nr,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 Ae=sr.version;var te="https://validators.solutions";var we="solv4.config.json";var vt="identity.json",Nt="unstaked-identity.json",ar="relayer-keypair.json",Pi="mainnet-validator-keypair.json",xi="mainnet-vote-account-keypair.json",$i="mainnet-authority-keypair.json",Vi="testnet-validator-keypair.json",Di="testnet-vote-account-keypair.json",bi="testnet-authority-keypair.json",x="/home/solv",R=`${x}/${vt}`,mu=`${x}/${Nt}`,U=`${x}/${Pi}`,_e=`${x}/${xi}`,pu=`${x}/${$i}`,$=`${x}/${Vi}`,ve=`${x}/${Di}`,du=`${x}/${bi}`,W=`${x}/solana-validator.log`,nt=x+"/start-validator.sh",w="/mnt/ledger",xt="/mnt/accounts",st="/mnt/snapshots",ir="solana-validator",lr="agave-validator",cr="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var Ne=3,mr="https://api.testnet.solana.com",pr="https://api.mainnet-beta.solana.com",dr="https://verify.validators.solutions/solv-migrate",ur="https://jup.validators.solutions/v1/jup",No;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(No||(No={}));var fr=Object.values(No),Re="So11111111111111111111111111111111111111112",Oe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Ro="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var hr="SOLV420",yr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Mi}from"child_process";var q="3.0.6",b="3.0.6",ee="3.0.6",Rt="3.0.6",Sr="3.0.6",Ot="3.0.6";var Tr="20.17.0",$t="0.711.30006",Vt="0.712.20306";import{spawnSync as P}from"node:child_process";var Ki=r((t=b,e=!1,o=!1)=>{o?e?(P(`mkdir /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`cd /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`git clone https://github.com/gabrielhicks/agave.git --recurse-submodules /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave-mod checkout v${t}-mod`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave-mod submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),P(`CI_COMMIT=$(git -C /tmp/v${t}-agave-mod rev-parse HEAD) /tmp/v${t}-agave-mod/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${t}-agave-mod`,{shell:!0,stdio:"inherit"}),P("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),P(`cp -r /home/solv/.local/share/solana/install/releases/v${t}-agave-mod/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),P(`sudo rm -rf /tmp/v${t}-agave-mod`,{shell:!0,stdio:"inherit"})):(P(`mkdir /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`cd /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`git clone https://github.com/anza-xyz/agave.git --recurse-submodules /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave checkout v${t}`,{shell:!0,stdio:"inherit"}),P(`git -C /tmp/v${t}-agave submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),P(`CI_COMMIT=$(git -C /tmp/v${t}-agave rev-parse HEAD) /tmp/v${t}-agave/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/v${t}-agave`,{shell:!0,stdio:"inherit"}),P("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),P(`cp -r /home/solv/.local/share/solana/install/releases/v${t}-agave/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),P(`sudo rm -rf /tmp/v${t}-agave`,{shell:!0,stdio:"inherit"})):e?P(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):P(`sh -c "$(curl --netrc-optional -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Dt=Ki;var Er="agave-validator",Ui=r(()=>{try{return Er}catch(t){return console.error(t),Er}},"getSolanaCLI"),at=Ui;var ke=r(async(t,e=!1,o=!1)=>{Dt(t,e,o)},"updateVersion"),Ce=r(async(t,e=!1,o=10)=>{let n=at(),s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --monitor --min-idle-time ${o}`;e&&(s=`${n} --ledger ${w} exit --max-delinquent-stake ${t} --min-idle-time ${o}`),Mi(s,{shell:!0,stdio:"inherit"})},"monitorUpdate");import an from"chalk";var kt;(function(t){t.EN="en",t.JA="ja"})(kt||(kt={}));var gr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(gr||(gr={}));var Ar;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(Ar||(Ar={}));var St;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(St||(St={}));var wr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(wr||(wr={}));var _r;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(_r||(_r={}));var vr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(vr||(vr={}));var Nr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(Nr||(Nr={}));var Ie;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ie||(Ie={}));var Le;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Le||(Le={}));var kr=!1,Cr=!1,Ir=!1,Lr=!1,G={ID:"solv",LANG:kt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"3.0.6",MAINNET_SOLANA_VERSION:"2.3.11",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},M={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},_={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},it={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},C={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"},I={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"},v=r((t=M.ROOT)=>{let e=t===M.ROOT?M.ROOT:t,o=`${e}/${I.MAINNET_VALIDATOR_KEY}`,n=`${e}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${I.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${I.TESTNET_VALIDATOR_KEY}`,i=`${e}/${I.TESTNET_VALIDATOR_VOTE_KEY}`,l=`${e}/${I.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:l}},"getAllKeyPaths"),Tt=r((t=!0)=>{let e=t?`${M.ROOT}/${I.TESTNET_VALIDATOR_KEY}`:`${M.ROOT}/${I.MAINNET_VALIDATOR_KEY}`,o=t?`${M.ROOT}/${I.TESTNET_VALIDATOR_VOTE_KEY}`:`${M.ROOT}/${I.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${M.ROOT}/${it.LOG}`,s=_.ACCOUNTS,a=_.LEDGER,i=_.SNAPSHOTS,l=`${M.ROOT}/${it.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:l,snapshots:i}},"startupScriptPaths");var et="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",Oo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Pr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",xr=9,lt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",$r="So11111111111111111111111111111111111111112",Vr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Dr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Rr;(function(t){t[t.ELSOL=lt]="ELSOL",t[t.SOL=$r]="SOL",t[t.USDC=Vr]="USDC",t[t.EPCT=Dr]="EPCT"})(Rr||(Rr={}));var Or;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(Or||(Or={}));var Cu={[$r]:9,[lt]:9,[Vr]:6,[Dr]:6},Pe="/home/solv/currentEpoch.json",ko=.5,xe="https://api.testnet.solana.com";import{spawnSync as Co}from"child_process";var br=r(()=>{Co("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=G.NODE_VERSION;Co(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Co("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var dt={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"},oe={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"},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"}},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"},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"},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"},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"},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"},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"},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"}}};import{spawnSync as Q}from"child_process";var $e=r((t=dt.tag,e=!1,o=!1)=>{o?e?Q(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):(Q(`mkdir /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`cd /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules /tmp/${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git -C /tmp/${t}-jito checkout ${t}-jito`,{shell:!0,stdio:"inherit"}),Q(`git -C /tmp/${t}-jito submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),Q(`CI_COMMIT=$(git -C /tmp/${t}-jito rev-parse HEAD) /tmp/${t}-jito/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${t}-jito`,{shell:!0,stdio:"inherit"}),Q("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),Q(`cp -r /home/solv/.local/share/solana/install/releases/${t}-jito/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),Q(`sudo rm -rf /tmp/${t}-jito`,{shell:!0,stdio:"inherit"})):e?Q(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Q(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Hi,writeFile as Fi}from"fs/promises";import{homedir as ji}from"os";var re=r(async t=>{let o=`${ji()}/${it.JITO_CONFIG}`,s={...JSON.parse(await Hi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Fi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Kr}from"child_process";import Yi from"inquirer";var Ur=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";Kr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;Kr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Mr=r(async()=>await Yi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as ne}from"@skeet-framework/utils";import Gi from"chalk";import Ji from"inquirer";var Hr=r(async()=>{let t=await Ji.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await ne("sudo ufw delete allow 8899/udp"),await ne("sudo ufw delete allow 8899/tcp"),await ne(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await ne(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await ne("sudo ufw reload"),console.log(Gi.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Bi=r(()=>nr,"getSolvVersion"),bt=Bi;import{readFile as qi,writeFile as Qi}from"fs/promises";import{existsAsync as Zi}from"@skeet-framework/utils";var Io;(function(t){t.EN="en",t.JA="ja"})(Io||(Io={}));var rf=Object.values(Io),f;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(f||(f={}));var Fr=Object.values(f),A;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(A||(A={}));var jr=Object.values(A),T;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(T||(T={}));var nf=Object.values(T).filter(t=>t!=="none"),K;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(K||(K={}));var Yr=Object.values(K).filter(t=>t!=="none"),J;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(J||(J={}));var Wi={NETWORK:f.TESTNET,NODE_TYPE:A.RPC,VALIDATOR_TYPE:T.NONE,RPC_TYPE:K.AGAVE,MNT_DISK_TYPE:J.TRIPLE,TESTNET_SOLANA_VERSION:q,MAINNET_SOLANA_VERSION:b,NODE_VERSION:Tr,TESTNET_DELINQUENT_STAKE:10,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:cr,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:pr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:xt,SNAPSHOTS_PATH:st,MOD:!1},ut=Wi;import{homedir as Xi}from"os";var tl=r(async()=>{let e=`${Xi()}/${we}`;return await Zi(e)?JSON.parse(await qi(e,"utf-8")):(console.log("Creating default config file at",e),await Qi(e,JSON.stringify(ut,null,2)),ut)},"readConfig"),V=tl;import el from"node-fetch";var Z=r(async t=>{try{let e=await V();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
3
3
|
Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solv Notifier"};return(await el(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${t}`}),!1}},"sendDiscord");import{spawnSync as al}from"child_process";import{Connection as Gr}from"@solana/web3.js";var se=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Gr("https://api.testnet.solana.com"):new Gr(t,"confirmed"),i=await a.getVoteAccounts(),l=i.current.find(u=>u.votePubkey===e);if(!l)return i.delinquent.find(p=>p.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),l=i.current.find(u=>u.votePubkey===e),!l)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let c=l.lastVote,d=await a.getSlot()-c;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as ol}from"child_process";var N=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=ol(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var rl=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),H=rl;import{sendDiscord as nl}from"@skeet-framework/utils";var Jr=10,sl=r(async t=>{try{let e=t.NETWORK===f.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=v(),a=N(e?n:o),i=await se(t.RPC_URL,a,e),l=0;for(;!i.isActive;){if(l>=Jr){console.log("Max retries reached, exiting...");let c=`\u26A0\uFE0F Validator is not active for ${Jr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -25,7 +25,7 @@ unzip jupiter-swap-api-x86_64-unknown-linux-gnu.zip
|
|
|
25
25
|
chmod +x jupiter-swap-api
|
|
26
26
|
rm jupiter-swap-api-x86_64-unknown-linux-gnu.zip`,{shell:!0,stdio:"inherit"});let{filePath:o,body:n}=un(t.rpcUrl,t.grpcUrl,t.grpcToken);fn(`echo '${n}' | sudo tee ${o}`,{shell:!0,stdio:"inherit"}),console.log(xl.white(`\u{1F7E2} Jupiter Swap API Setup Completed
|
|
27
27
|
|
|
28
|
-
$ solv jupiter --help`))},"jupiterAPISetup"),hn=$l;import{existsAsync as Vl}from"@skeet-framework/utils";import{readFile as Dl,writeFile as yn}from"fs/promises";import{homedir as bl}from"os";import Kl from"path";var ft=r(async()=>{let t=bl(),e=Kl.join(t,it.JITO_CONFIG);await Vl(e)||(await yn(e,JSON.stringify(dt,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await Dl(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await yn(e,JSON.stringify(dt,null,2)),o=dt}return o},"readOrCreateJitoConfig");import{spawnSync as Ul}from"child_process";var ae=r(()=>{Ul("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import ie from"chalk";import Ye from"inquirer";import Ml from"inquirer";var Sn=r(async t=>{let o=Object.keys(t?oe.TESTNET:oe.MAINNET),n=t?oe.TESTNET:oe.MAINNET,s=await Ml.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:o}]),a=s.region,i=n[a];return{version:dt.version,tag:dt.tag,commissionBps:s.commissionBps,blockEngineUrl:i.BLOCK_ENGINE_URL,relayerUrl:i.RELAYER_URL,shredReceiverAddr:i.SHRED_RECEIVER_ADDR}},"askJitoSetting");var Hl=r(async()=>{try{let t=T.NONE,e=K.AGAVE,o=ut.COMMISSION,n=!1,s=await Ye.prompt([{name:"network",type:"list",message:"Choose Network",choices:Fr,default:f.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:jr,default:A.RPC}]),a=s.network===f.TESTNET;if(s.nodeType===A.VALIDATOR){let c=s.network===f.MAINNET?[T.JITO,T.SOLANA]:[T.AGAVE,T.JITO,T.FRANKENDANCER];t=await Ye.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:T.AGAVE}).then(m=>m.validatorType),e=K.NONE}if(s.nodeType===A.RPC&&(e=await Ye.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:Yr,default:K.AGAVE}).then(c=>c.rpcType)),s.nodeType===A.VALIDATOR){let c=await Ye.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${ut.COMMISSION}%)'`,default:ut.COMMISSION},{name:"isDummy",type:"confirm",message:"Do you want to setup as a dummy(Inactive) node?(\u203BFor Migration)",default:!0}]);if(o=c.commission,n=c.isDummy,t===T.JITO||t===T.FRANKENDANCER){await ft();let m=await Sn(a);await re(m)}}let{network:i,nodeType:l}=s;return console.log(ie.white("Network:",i)),console.log(ie.white("Node Type:",l)),console.log(ie.white("Validator Type:",t)),console.log(ie.white("RPC Type:",e)),l===A.VALIDATOR&&console.log(ie.white("Commission:",o)),await O({NETWORK:i,NODE_TYPE:l,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),Tn=Hl;import{spawnSync as B}from"child_process";var le=r((t=Rt,e=!1,o=!1)=>{if(o)if(e){let n=`v${t}-mod`;B(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${n}/installer)"`,{shell:!0,stdio:"inherit"})}else{let n=`v${t}-jito`;B(`mkdir /tmp/${n}`,{shell:!0,stdio:"inherit"}),B(`cd /tmp/${n}`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} checkout ${n}`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),B(`CI_COMMIT=$(git -C /tmp/${n} rev-parse HEAD) /tmp/${n}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${n}`,{shell:!0,stdio:"inherit"}),B("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),B(`cp -r /home/solv/.local/share/solana/install/releases/${n}/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),B(`sudo rm -rf /tmp/${n}`,{shell:!0,stdio:"inherit"}),B("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?B(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):B(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var En=r(()=>`#!/bin/bash
|
|
28
|
+
$ solv jupiter --help`))},"jupiterAPISetup"),hn=$l;import{existsAsync as Vl}from"@skeet-framework/utils";import{readFile as Dl,writeFile as yn}from"fs/promises";import{homedir as bl}from"os";import Kl from"path";var ft=r(async()=>{let t=bl(),e=Kl.join(t,it.JITO_CONFIG);await Vl(e)||(await yn(e,JSON.stringify(dt,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await Dl(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await yn(e,JSON.stringify(dt,null,2)),o=dt}return o},"readOrCreateJitoConfig");import{spawnSync as Ul}from"child_process";var ae=r(()=>{Ul("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import ie from"chalk";import Ye from"inquirer";import Ml from"inquirer";var Sn=r(async t=>{let o=Object.keys(t?oe.TESTNET:oe.MAINNET),n=t?oe.TESTNET:oe.MAINNET,s=await Ml.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:o}]),a=s.region,i=n[a];return{version:dt.version,tag:dt.tag,commissionBps:s.commissionBps,blockEngineUrl:i.BLOCK_ENGINE_URL,relayerUrl:i.RELAYER_URL,shredReceiverAddr:i.SHRED_RECEIVER_ADDR}},"askJitoSetting");var Hl=r(async()=>{try{let t=T.NONE,e=K.AGAVE,o=ut.COMMISSION,n=!1,s=await Ye.prompt([{name:"network",type:"list",message:"Choose Network",choices:Fr,default:f.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:jr,default:A.RPC}]),a=s.network===f.TESTNET;if(s.nodeType===A.VALIDATOR){let c=s.network===f.MAINNET?[T.JITO,T.SOLANA]:[T.AGAVE,T.JITO,T.FRANKENDANCER];t=await Ye.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:T.AGAVE}).then(m=>m.validatorType),e=K.NONE}if(s.nodeType===A.RPC&&(e=await Ye.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:Yr,default:K.AGAVE}).then(c=>c.rpcType)),s.nodeType===A.VALIDATOR){let c=await Ye.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${ut.COMMISSION}%)'`,default:ut.COMMISSION},{name:"isDummy",type:"confirm",message:"Do you want to setup as a dummy(Inactive) node?(\u203BFor Migration)",default:!0}]);if(o=c.commission,n=c.isDummy,t===T.JITO||t===T.FRANKENDANCER){await ft();let m=await Sn(a);await re(m)}}let{network:i,nodeType:l}=s;return console.log(ie.white("Network:",i)),console.log(ie.white("Node Type:",l)),console.log(ie.white("Validator Type:",t)),console.log(ie.white("RPC Type:",e)),l===A.VALIDATOR&&console.log(ie.white("Commission:",o)),await O({NETWORK:i,NODE_TYPE:l,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),Tn=Hl;import{spawnSync as B}from"child_process";var le=r((t=Rt,e=!1,o=!1)=>{if(o)if(e){let n=`v${t}-mod`;B(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${n}/installer)"`,{shell:!0,stdio:"inherit"})}else{let n=`v${t}-jito.1`;B(`mkdir /tmp/${n}`,{shell:!0,stdio:"inherit"}),B(`cd /tmp/${n}`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules .`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} checkout ${n}`,{shell:!0,stdio:"inherit"}),B(`git -C /tmp/${n} submodule update --init --recursive`,{shell:!0,stdio:"inherit"}),B(`CI_COMMIT=$(git -C /tmp/${n} rev-parse HEAD) /tmp/${n}/scripts/cargo-install-all.sh /home/solv/.local/share/solana/install/releases/${n}`,{shell:!0,stdio:"inherit"}),B("sudo rm -rf /home/solv/.local/share/solana/install/active_release/bin/",{shell:!0,stdio:"inherit"}),B(`cp -r /home/solv/.local/share/solana/install/releases/${n}/bin/ /home/solv/.local/share/solana/install/active_release/bin/`,{shell:!0,stdio:"inherit"}),B(`sudo rm -rf /tmp/${n}`,{shell:!0,stdio:"inherit"}),B("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})}else e?B(`sh -c "$(curl --netrc-optional -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):B(`sh -c "$(curl --netrc-optional -sSfL https://release.jito.wtf/v${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var En=r(()=>`#!/bin/bash
|
|
29
29
|
exec agave-validator \\
|
|
30
30
|
--identity ${R} \\
|
|
31
31
|
--log ${W} \\
|