@gabrielhicks/solv 4.8.6 → 4.8.7
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 +15 -11
- 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 ai=Object.defineProperty;var r=(t,e)=>ai(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as vd}from"commander";var Ho="4.8.6";var Fo={name:"@gabrielhicks/solv",version:Ho,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"}};var pe=Fo.version;var Yt="https://validators.solutions";var de="solv4.config.json";var yt="identity.json",St="unstaked-identity.json",Yo="relayer-keypair.json",ci="mainnet-validator-keypair.json",li="mainnet-vote-account-keypair.json",mi="mainnet-authority-keypair.json",pi="testnet-validator-keypair.json",di="testnet-vote-account-keypair.json",ui="testnet-authority-keypair.json",C="/home/solv",k=`${C}/${yt}`,Ld=`${C}/${St}`,D=`${C}/${ci}`,ue=`${C}/${li}`,xd=`${C}/${mi}`,P=`${C}/${pi}`,jo=`${C}/${di}`,Vd=`${C}/${ui}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",S="/mnt/ledger",vt="/mnt/accounts",kt=`${S}`,Bo="solana-validator",Jo="agave-validator",Go="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var fe=3,zo="https://api.testnet.solana.com",Wo="https://api.mainnet-beta.solana.com",qo="https://verify.validators.solutions/solv-migrate",Qo="https://jup.validators.solutions/v1/jup",io;(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"})(io||(io={}));var Xo=Object.values(io),he="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Zo="SOLV420",tr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Si}from"child_process";import{spawnSync as fi}from"node:child_process";var hi=r(t=>{fi(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Rt=hi;var er="agave-validator",yi=r(()=>{try{return er}catch(t){return console.error(t),er}},"getSolanaCLI"),K=yi;var Se=r(async t=>{Rt(t)},"updateVersion"),lo=r(async(t,e=!1)=>{let o=K(),n=`${o} --ledger ${S} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${S} exit --max-delinquent-stake ${t}`),Si(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Fr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var or;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(or||(or={}));var rr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(rr||(rr={}));var lt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(lt||(lt={}));var nr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(nr||(nr={}));var sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(sr||(sr={}));var ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ar||(ar={}));var ir;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ir||(ir={}));var Te;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Te||(Te={}));var Ee;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ee||(Ee={}));var mr=!1,pr=!0,M={ID:"solv",LANG:Tt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",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},b={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},Q={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",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"},R={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"},N=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),mt=r((t=!0)=>{let e=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Q.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=`${b.ROOT}/${Q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var J="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",mo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",dr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ur=9,X="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",fr="So11111111111111111111111111111111111111112",hr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",yr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",cr;(function(t){t[t.ELSOL=X]="ELSOL",t[t.SOL=fr]="SOL",t[t.USDC=hr]="USDC",t[t.EPCT=yr]="EPCT"})(cr||(cr={}));var lr;(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"})(lr||(lr={}));var Wd={[fr]:9,[X]:9,[hr]:6,[yr]:6},ge="/home/solv/currentEpoch.json",po=.5,Ae="https://api.testnet.solana.com";import{spawnSync as uo}from"child_process";var Sr=r(()=>{uo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;uo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),uo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var st={version:"2.0.18",tag:"v2.0.18-mod",commissionBps:700,relayerUrl:"http://amsterdam.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://amsterdam.mainnet.block-engine.jito.wtf",shredReceiverAddr:"74.118.140.240:1002"},fo={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"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"145.40.93.84: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"}};import{spawnSync as Ti}from"child_process";var we=r((t=st.tag)=>{Ti(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}/installer)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ei,writeFile as gi}from"fs/promises";import{homedir as Ai}from"os";var jt=r(async t=>{let o=`${Ai()}/${Q.JITO_CONFIG}`,s={...JSON.parse(await Ei(o,"utf8")),...t},a=JSON.stringify(s,null,2);await gi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Tr}from"child_process";import wi from"inquirer";var Er=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";Tr(`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}`;Tr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),gr=r(async()=>await wi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Bt}from"@skeet-framework/utils";import _i from"chalk";import Ni from"inquirer";var Ar=r(async()=>{let t=await Ni.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Bt("sudo ufw delete allow 8899/udp"),await Bt("sudo ufw delete allow 8899/tcp"),await Bt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Bt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Bt("sudo ufw reload"),console.log(_i.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Oi=r(()=>Ho,"getSolvVersion"),Ct=Oi;import{readFile as Ri,writeFile as Ci}from"fs/promises";import{existsAsync as Ii}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var _u=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var wr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var _r=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Nu=Object.values(A).filter(t=>t!=="none"),V;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(V||(V={}));var Nr=Object.values(V).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));var Z="2.1.5",tt="2.0.19",Et="2.1.5",Jt="2.0.19",Or="2.1.5",gt="2.1.5";var vr="20.17.0";var kr="0.113.20007";var ki={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:V.AGAVE,MNT_DISK_TYPE:G.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:vr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Go,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Wo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:S,ACCOUNTS_PATH:vt,SNAPSHOTS_PATH:kt},at=ki;import{homedir as Pi}from"os";var Li=r(async()=>{let e=`${Pi()}/${de}`;return await Ii(e)?JSON.parse(await Ri(e,"utf-8")):(console.log("Creating default config file at",e),await Ci(e,JSON.stringify(at,null,2)),at)},"readConfig"),$=Li;import xi from"node-fetch";var x=r(async t=>{try{let e=await $();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var ai=Object.defineProperty;var r=(t,e)=>ai(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as vd}from"commander";var Ho="4.8.7";var Fo={name:"@gabrielhicks/solv",version:Ho,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"}};var pe=Fo.version;var Yt="https://validators.solutions";var de="solv4.config.json";var yt="identity.json",St="unstaked-identity.json",Yo="relayer-keypair.json",ci="mainnet-validator-keypair.json",li="mainnet-vote-account-keypair.json",mi="mainnet-authority-keypair.json",pi="testnet-validator-keypair.json",di="testnet-vote-account-keypair.json",ui="testnet-authority-keypair.json",C="/home/solv",k=`${C}/${yt}`,Ld=`${C}/${St}`,D=`${C}/${ci}`,ue=`${C}/${li}`,xd=`${C}/${mi}`,P=`${C}/${pi}`,jo=`${C}/${di}`,Vd=`${C}/${ui}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",S="/mnt/ledger",vt="/mnt/accounts",kt=`${S}`,Bo="solana-validator",Jo="agave-validator",Go="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var fe=3,zo="https://api.testnet.solana.com",Wo="https://api.mainnet-beta.solana.com",qo="https://verify.validators.solutions/solv-migrate",Qo="https://jup.validators.solutions/v1/jup",io;(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"})(io||(io={}));var Xo=Object.values(io),he="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Zo="SOLV420",tr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Si}from"child_process";import{spawnSync as fi}from"node:child_process";var hi=r(t=>{fi(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Rt=hi;var er="agave-validator",yi=r(()=>{try{return er}catch(t){return console.error(t),er}},"getSolanaCLI"),K=yi;var Se=r(async t=>{Rt(t)},"updateVersion"),lo=r(async(t,e=!1)=>{let o=K(),n=`${o} --ledger ${S} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${S} exit --max-delinquent-stake ${t}`),Si(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Fr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var or;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(or||(or={}));var rr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(rr||(rr={}));var lt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(lt||(lt={}));var nr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(nr||(nr={}));var sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(sr||(sr={}));var ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ar||(ar={}));var ir;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ir||(ir={}));var Te;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Te||(Te={}));var Ee;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Ee||(Ee={}));var mr=!1,pr=!0,M={ID:"solv",LANG:Tt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",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},b={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},Q={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",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"},R={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"},N=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),mt=r((t=!0)=>{let e=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Q.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=`${b.ROOT}/${Q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var J="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",mo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",dr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ur=9,X="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",fr="So11111111111111111111111111111111111111112",hr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",yr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",cr;(function(t){t[t.ELSOL=X]="ELSOL",t[t.SOL=fr]="SOL",t[t.USDC=hr]="USDC",t[t.EPCT=yr]="EPCT"})(cr||(cr={}));var lr;(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"})(lr||(lr={}));var Wd={[fr]:9,[X]:9,[hr]:6,[yr]:6},ge="/home/solv/currentEpoch.json",po=.5,Ae="https://api.testnet.solana.com";import{spawnSync as uo}from"child_process";var Sr=r(()=>{uo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;uo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),uo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var st={version:"2.0.18",tag:"v2.0.18-mod",commissionBps:700,relayerUrl:"http://amsterdam.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://amsterdam.mainnet.block-engine.jito.wtf",shredReceiverAddr:"74.118.140.240:1002"},fo={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"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"145.40.93.84: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"}};import{spawnSync as Ti}from"child_process";var we=r((t=st.tag)=>{Ti(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}/installer)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ei,writeFile as gi}from"fs/promises";import{homedir as Ai}from"os";var jt=r(async t=>{let o=`${Ai()}/${Q.JITO_CONFIG}`,s={...JSON.parse(await Ei(o,"utf8")),...t},a=JSON.stringify(s,null,2);await gi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Tr}from"child_process";import wi from"inquirer";var Er=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";Tr(`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}`;Tr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),gr=r(async()=>await wi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Bt}from"@skeet-framework/utils";import _i from"chalk";import Ni from"inquirer";var Ar=r(async()=>{let t=await Ni.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Bt("sudo ufw delete allow 8899/udp"),await Bt("sudo ufw delete allow 8899/tcp"),await Bt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Bt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Bt("sudo ufw reload"),console.log(_i.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Oi=r(()=>Ho,"getSolvVersion"),Ct=Oi;import{readFile as Ri,writeFile as Ci}from"fs/promises";import{existsAsync as Ii}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var _u=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var wr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var _r=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Nu=Object.values(A).filter(t=>t!=="none"),V;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(V||(V={}));var Nr=Object.values(V).filter(t=>t!=="none"),G;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(G||(G={}));var Z="2.1.5",tt="2.0.18",Et="2.1.5",Jt="2.0.18",Or="2.1.5",gt="2.1.5";var vr="20.17.0";var kr="0.113.20007";var ki={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:V.AGAVE,MNT_DISK_TYPE:G.TRIPLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:vr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Go,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Wo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:S,ACCOUNTS_PATH:vt,SNAPSHOTS_PATH:kt},at=ki;import{homedir as Pi}from"os";var Li=r(async()=>{let e=`${Pi()}/${de}`;return await Ii(e)?JSON.parse(await Ri(e,"utf-8")):(console.log("Creating default config file at",e),await Ci(e,JSON.stringify(at,null,2)),at)},"readConfig"),$=Li;import xi from"node-fetch";var x=r(async t=>{try{let e=await $();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 xi(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 Mi}from"child_process";import{Connection as Rr}from"@solana/web3.js";var Gt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Rr("https://api.testnet.solana.com"):new Rr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e);if(!c)return i.delinquent.find(h=>h.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(),c=i.current.find(p=>p.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;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 Vi}from"child_process";var _=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Vi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var $i=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),et=$i;import{sendDiscord as Di}from"@skeet-framework/utils";var Cr=60,Ki=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=_(e?n:o),i=await Gt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Cr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Cr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -135,21 +135,21 @@ exec ${a} \\
|
|
|
135
135
|
--known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \\
|
|
136
136
|
--known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \\
|
|
137
137
|
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \\
|
|
138
|
-
--expected-shred-version 50093 \\
|
|
139
138
|
--tip-payment-program-pubkey T1pyyaTNZsKv2WcRAB8oVnk93mLJw2XzjtVYqCsaHqt \\
|
|
140
139
|
--tip-distribution-program-pubkey 4R3gSG8BpU4t19KYj8CfnbtRpnT8gtk4dvTHxVRwc2r7 \\
|
|
141
140
|
--merkle-root-upload-authority GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib \\
|
|
142
141
|
--commission-bps ${t} \\
|
|
143
|
-
--relayer-url ${e} \\
|
|
144
142
|
--rpc-bind-address 0.0.0.0 \\
|
|
145
143
|
--block-engine-url ${o} \\
|
|
146
144
|
--shred-receiver-address ${n} \\
|
|
147
145
|
--dynamic-port-range 8000-8020 \\
|
|
148
146
|
--rpc-port 8899 \\
|
|
149
147
|
--wal-recovery-mode skip_any_corrupted_record \\
|
|
150
|
-
--use-snapshot-archives-at-startup when-newest \\
|
|
151
148
|
--limit-ledger-size \\
|
|
152
149
|
--block-production-method central-scheduler \\
|
|
150
|
+
--block-verification-method unified-scheduler \\
|
|
151
|
+
--snapshot-interval-slots 0 \\
|
|
152
|
+
--private-rpc \\
|
|
153
153
|
`,"startJitoValidatorScript");var rn=r((t,e="agave-validator")=>`#!/bin/bash
|
|
154
154
|
exec ${e} \\
|
|
155
155
|
--identity ${k} \\
|
|
@@ -177,6 +177,9 @@ exec ${e} \\
|
|
|
177
177
|
--use-snapshot-archives-at-startup when-newest \\
|
|
178
178
|
--limit-ledger-size \\
|
|
179
179
|
--block-production-method central-scheduler \\
|
|
180
|
+
--block-verification-method unified-scheduler \\
|
|
181
|
+
--snapshot-interval-slots 0 \\
|
|
182
|
+
--private-rpc \\
|
|
180
183
|
`,"startMainnetValidatorScript");var go=r(t=>`#!/bin/bash
|
|
181
184
|
exec agave-validator \\
|
|
182
185
|
--identity ${k} \\
|
|
@@ -191,16 +194,17 @@ exec agave-validator \\
|
|
|
191
194
|
--entrypoint entrypoint3.testnet.solana.com:8001 \\
|
|
192
195
|
--known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \\
|
|
193
196
|
--only-known-rpc \\
|
|
197
|
+
--private-rpc \\
|
|
194
198
|
--expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \\
|
|
195
199
|
--dynamic-port-range 8000-8020 \\
|
|
196
200
|
--rpc-port 8899 \\
|
|
197
201
|
--wal-recovery-mode skip_any_corrupted_record \\
|
|
198
|
-
--wait-for-supermajority
|
|
199
|
-
--expected-shred-version
|
|
200
|
-
--expected-bank-hash
|
|
201
|
-
--use-snapshot-archives-at-startup when-newest \\
|
|
202
|
+
--wait-for-supermajority 306450862 \\
|
|
203
|
+
--expected-shred-version 64506 \\
|
|
204
|
+
--expected-bank-hash BiGFLfFewfTB2asBRLjwRL6z7VNfuvYraS3H7RfQNCrf \\
|
|
202
205
|
--limit-ledger-size \\
|
|
203
206
|
--block-production-method central-scheduler \\
|
|
207
|
+
--block-verification-method unified-scheduler \\
|
|
204
208
|
`,"startTestnetAgaveValidatorScript");import{existsAsync as nn}from"@skeet-framework/utils";import{writeFile as sn}from"fs/promises";var Cc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Ic(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Pc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Ic=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case A.SOLANA:To(o),n=rn(t);break;case A.JITO:console.log("JITO Validator Setup for Mainnet");let s=await At();qt(o),n=Eo(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr,t);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await nn(q)){console.log("Startup script already exists. Skipping...");return}await sn(q,n,"utf-8"),Qt()},"setupMainnetValidator"),Pc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case A.SOLANA:To(t.TESTNET_SOLANA_VERSION),o=go(t);case A.AGAVE:console.log("Agave Validator Setup for Testnet"),Rt(t.TESTNET_SOLANA_VERSION),o=go(t);break;case A.JITO:console.log("JITO Validator Setup for Testnet");let n=await At();qt(t.TESTNET_SOLANA_VERSION),o=Eo(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr,t);break;default:console.log("Unknown Validator Type for Testnet");break}if(await nn(q)){console.log("Startup script already exists. Skipping...");return}await sn(q,o,"utf-8"),Qt()},"setupTestnetValidator"),an=Cc;import Vn from"chalk";import{execSync as cn}from"node:child_process";function ln(t){try{cn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{cn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(ln,"createDirectoryIfNotExists");var mn=r(()=>{try{let t=[O.ACCOUNTS,O.LEDGER,O.SNAPSHOTS];for(let e of t)ln(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as Lc}from"child_process";function xc(){let e=Lc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
|
|
205
209
|
`).slice(1),o=[],n=e.map(y=>y.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c=!1,l="";for(let y of e){let[T,B,I]=y.trim().split(/\s+/);if(!T||!B)continue;let z=parseInt(B,10);if(isNaN(z))continue;let ht=I!==void 0&&I!=="";I==="/"&&(l=T.replace(/p?\d*$/,""));let me=n.some(Uo=>Uo!==T&&Uo.startsWith(T)),si=T.startsWith("nvme")?"NVMe":"SATA";z>=400*1024*1024*1024&&o.push({name:T,size:z,mountpoint:I||"",isMounted:ht,hasPartition:me,type:si})}console.log("Found root disk name: ",l);let m=n.filter(y=>y.startsWith(l));m.forEach(y=>console.log("Found root disk partition: ",y));let p=o.filter(y=>!m.includes(y.name)).sort((y,T)=>T.size-y.size),h=p.filter(y=>y.type==="NVMe").sort((y,T)=>T.size-y.size),g=p.filter(y=>y.type==="SATA").sort((y,T)=>T.size-y.size),w=[...h,...g];if(w.length>0){let y=w[0];if(y.size>=850*1024*1024*1024&&!y.isMounted&&(s=!0),y.size>=1250*1024*1024*1024&&y.isMounted&&(i=!0),w.length>1){let T=w[1];T.size>=400*1024*1024*1024&&!T.isMounted&&(a=!0)}if(w.length>2){let T=w[2];T.size>=400*1024*1024*1024&&!T.isMounted&&(c=!0)}}return w.forEach((y,T)=>console.log(`Prioritized Disk ${T+1}: ${y.name} ${y.size}`)),{disks:w,has850GB:s,has400GB:a,hasUsed1250GB:i,hasThirdDisk400GB:c}}r(xc,"getPreferredDisks");var Xt=xc;import{spawnSync as pn}from"child_process";var pt=r(t=>{if(pn(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return pn(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as Ao}from"child_process";var Zt=r((t,e="",o="",n=!1,s=!1)=>{let a=`${t} ${O.ROOT} ext4 auto 0 0`;n&&(a=`${t} ${O.LEDGER} ext4 auto 0 0
|
|
206
210
|
${e} ${O.ACCOUNTS} ext4 auto 0 0`),s&&(a=`${t} ${O.LEDGER} ext4 auto 0 0
|
|
@@ -357,7 +361,7 @@ dynamic_port_range = "8900-9000"
|
|
|
357
361
|
|
|
358
362
|
|
|
359
363
|
[hugetlbfs]
|
|
360
|
-
mount_path = "/mnt"`}),"configToml"),xn=nl;var sl=r(async()=>{ot("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),ot(`git checkout v${kr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Pn();ot(`echo "${e}" | sudo tee ${t} > /dev/null`,{shell:!0,stdio:"inherit"}),ot(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=Ln();ot(`echo "${o.body}" | sudo tee ${o.filePath} > /dev/null`,{shell:!0,stdio:"inherit"}),ot("sudo systemctl daemon-reload",{shell:!0});let n=xn();ot(`echo "${n.body}" | sudo tee ${n.filePath} > /dev/null`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Ue=sl;var $n=r(async(t=!1,e=!1)=>{try{t||(console.log(Vn.white("\u{1F7E2} Initializing Setup")),await $(),await Zr());let
|
|
364
|
+
mount_path = "/mnt"`}),"configToml"),xn=nl;var sl=r(async()=>{ot("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),ot(`git checkout v${kr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Pn();ot(`echo "${e}" | sudo tee ${t} > /dev/null`,{shell:!0,stdio:"inherit"}),ot(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=Ln();ot(`echo "${o.body}" | sudo tee ${o.filePath} > /dev/null`,{shell:!0,stdio:"inherit"}),ot("sudo systemctl daemon-reload",{shell:!0});let n=xn();ot(`echo "${n.body}" | sudo tee ${n.filePath} > /dev/null`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Ue=sl;var $n=r(async(t=!1,e=!1,o=!1)=>{try{t||(console.log(Vn.white("\u{1F7E2} Initializing Setup")),await $(),await Zr());let n=await $(),s=n.NETWORK===u.TESTNET;switch(mn(),(!e||!o)&&un(),gn(s),kn(),_n(),await vn(),An(n),In(n.IS_DUMMY,s),n.NODE_TYPE){case E.RPC:await on(n);break;case E.VALIDATOR:await an(n),n.VALIDATOR_TYPE===A.FRANKENDANCER&&await Ue();break;default:throw new Error("Unknown Node Type")}o||fn(),zt(),n.VALIDATOR_TYPE!==A.FRANKENDANCER&&(o||(Rn(),$e(s,"100",n.SNAPSHOTS_PATH,s?n.TESTNET_SOLANA_VERSION:n.MAINNET_SOLANA_VERSION))),o||De(n),console.log(Vn.white("\u{1F7E2} Setup Completed")),wt()}catch(n){throw new Error(`Setup Error: ${n.message}`)}},"setupV2");var Dn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
|
|
361
365
|
[Unit]
|
|
362
366
|
Description=Solana transaction relayer
|
|
363
367
|
Requires=network-online.target
|
|
@@ -408,9 +412,9 @@ ExecStart=/home/solv/jito-relayer/target/release/jito-transaction-relayer
|
|
|
408
412
|
[Install]
|
|
409
413
|
WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Me,spawnSync as dt}from"child_process";var bn=r(async(t,e=!0)=>{dt("openssl",["genrsa","-out","/home/solv/private.pem"],{stdio:"inherit",shell:!0}),dt("openssl",["rsa","-in","/home/solv/private.pem","-pubout","-out","/home/solv/public.pem"],{stdio:"inherit",shell:!0}),dt("solana-keygen",["new","--no-bip39-passphrase","--outfile","/home/solv/relayer-keypair.json"],{stdio:"inherit",shell:!0}),dt("git",["clone","https://github.com/jito-foundation/jito-relayer.git"],{stdio:"inherit",shell:!0}),dt("git",["submodule","update","--init","--recursive"],{cwd:"jito-relayer",stdio:"inherit",shell:!0}),dt("cargo",["build","--release"],{cwd:"jito-relayer",stdio:"inherit",shell:!0});let{filePath:o,body:n}=e?Dn(t):Kn(t);Me(`echo "${n}" | sudo tee ${o} > /dev/null`),dt("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),dt("sudo",["systemctl","start","relayer"],{stdio:"inherit"}),Me("sudo ufw allow 11228",{stdio:"inherit"}),Me("sudo ufw allow 11229",{stdio:"inherit"}),Me("sudo ufw allow 11226",{stdio:"inherit"})},"jitoRelayerSetup");import{spawnSync as No}from"node:child_process";var al=r(t=>({filePath:"/home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json",defaultConfig:{libpath:"/home/solv/yellowstone-grpc/target/release/libyellowstone_grpc_geyser.so",log:{level:"info"},grpc:{address:"0.0.0.0:10000",compression:{accept:["gzip"],send:["gzip"]},max_decoding_message_size:"4_194_304",snapshot_plugin_channel_capacity:null,snapshot_client_channel_capacity:"50_000_000",channel_capacity:"100_000",unary_concurrency_limit:100,unary_disabled:!1,x_token:t},prometheus:{address:"0.0.0.0:8999"}}}),"geyserConfig"),Un=al;import{spawnSync as il}from"node:child_process";import{readFile as cl,writeFile as ll}from"fs/promises";var ml=r(async()=>{let t="/home/solv/start-validator.sh",o=(await cl(t,"utf-8")).split(`
|
|
410
414
|
`);o.splice(-1,0,"--geyser-plugin-config /home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json \\");let n=o.join(`
|
|
411
|
-
`);await ll(t,n),il(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Mn=ml;import pl from"inquirer";import{writeFile as dl}from"node:fs/promises";var Hn=r(async()=>{let e=(await pl.prompt([{type:"input",name:"xToken",message:"Enter the xToken",default:"xToken"}])).xToken,o="git clone https://github.com/rpcpool/yellowstone-grpc.git",n="cargo build -r",s="cargo-fmt && cargo run --bin config-check -- --config yellowstone-grpc-geyser/config.json";No(o,{shell:!0,stdio:"inherit"}),No(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),No(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Un(e),c=JSON.stringify(i,null,2);await dl(a,c,{encoding:"utf8"}),await Mn()},"yellowstoneGeyser");var Fn=r(t=>{f.command("setup").description("Setup Solana Validator").option("--vote","Setup Vote Account",!1).option("--key","Setup Validator Keypairs",!1).option("--relayer","Setup Jito Relayer",!1).option("--jupiter","Setup Jupiter Swap API",!1).option("--geyser","Setup Geyser",!1).option("--firedancer","Setup Firedancer",!1).option("--skip-init-config","Skip Initial Config",!1).option("--skip-mount","Skip Mount",!1).action(async e=>{try{if(e.vote)console.log(it.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Ie(t),process.exit(0);else if(e.key)console.log(it.white("\u{1F511} Setting up Validator Keypairs ...")),Le(t),process.exit(0);else if(e.relayer){console.log(it.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await At()).blockEngineUrl;await bn(n,!1),console.log(it.green(`Jito Relayer Setup Completed
|
|
415
|
+
`);await ll(t,n),il(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Mn=ml;import pl from"inquirer";import{writeFile as dl}from"node:fs/promises";var Hn=r(async()=>{let e=(await pl.prompt([{type:"input",name:"xToken",message:"Enter the xToken",default:"xToken"}])).xToken,o="git clone https://github.com/rpcpool/yellowstone-grpc.git",n="cargo build -r",s="cargo-fmt && cargo run --bin config-check -- --config yellowstone-grpc-geyser/config.json";No(o,{shell:!0,stdio:"inherit"}),No(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),No(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Un(e),c=JSON.stringify(i,null,2);await dl(a,c,{encoding:"utf8"}),await Mn()},"yellowstoneGeyser");var Fn=r(t=>{f.command("setup").description("Setup Solana Validator").option("--vote","Setup Vote Account",!1).option("--key","Setup Validator Keypairs",!1).option("--relayer","Setup Jito Relayer",!1).option("--jupiter","Setup Jupiter Swap API",!1).option("--geyser","Setup Geyser",!1).option("--firedancer","Setup Firedancer",!1).option("--skip-init-config","Skip Initial Config",!1).option("--skip-mount","Skip Mount",!1).option("--pivot","Pivot install",!1).action(async e=>{try{if(e.vote)console.log(it.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Ie(t),process.exit(0);else if(e.key)console.log(it.white("\u{1F511} Setting up Validator Keypairs ...")),Le(t),process.exit(0);else if(e.relayer){console.log(it.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await At()).blockEngineUrl;await bn(n,!1),console.log(it.green(`Jito Relayer Setup Completed
|
|
412
416
|
|
|
413
|
-
$ solv relayer --help`)),zt(),wt(),process.exit(0)}else if(e.jupiter)console.log(it.white("\u{1F30F} Setting up Jupiter Swap API ...")),await qr(),zt(),wt(),process.exit(0);else if(e.geyser){console.log(it.white("\u26A1\uFE0F Setting up Geyser ...")),await Hn();return}else if(e.firedancer){console.log(it.white("\u{1F525} Setting up Firedancer ...")),await Ue();return}await $n(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(it.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(it.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as ul}from"child_process";var Oo=r(()=>{let o=ul("df -h").toString().split(`
|
|
417
|
+
$ solv relayer --help`)),zt(),wt(),process.exit(0)}else if(e.jupiter)console.log(it.white("\u{1F30F} Setting up Jupiter Swap API ...")),await qr(),zt(),wt(),process.exit(0);else if(e.geyser){console.log(it.white("\u26A1\uFE0F Setting up Geyser ...")),await Hn();return}else if(e.firedancer){console.log(it.white("\u{1F525} Setting up Firedancer ...")),await Ue();return}await $n(e.skipInitConfig,e.skipMount,e.pivot)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(it.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(it.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as ul}from"child_process";var Oo=r(()=>{let o=ul("df -h").toString().split(`
|
|
414
418
|
`).slice(1).filter(s=>s.split(/\s+/)[0]!=="").map(s=>{let a=s.split(/\s+/);return{Filesystem:a[0],Size:a[1],Used:a[2],Avail:a[3],Use:a[4],MountedOn:a[5]}}).sort((s,a)=>_t(a.Avail)-_t(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&_t(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&_t(s.Size)>9e11-1&&console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: red")}),n?console.log("your mount point is correct"):o.filter(a=>a.Filesystem.startsWith("/dev/")&&_t(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Yn from"chalk";import fl from"cli-table3";var vo=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Yn.blue(n)),o=new fl({head:e,colWidths:[20,10,10,10,10,20]});t.forEach(n=>{o.push([n.Filesystem,n.Size,n.Used,n.Avail,n.Use,n.MountedOn].map(s=>Yn.white(s)))}),console.log(o.toString())},"displayTable");var jn=r(async()=>{f.command("df").description("Disk Free Command").action(()=>{let t=Oo();vo(t)})},"dfCommands"),_t=r(t=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},o=t.match(/[A-Za-z]+/)?.[0]||"",n=parseFloat(t);return e[o]?n*e[o]:n},"convertToBytes");var Bn=r(t=>{f.command("start").description("Start Solana Validator").action(()=>{De(t),process.exit(0)})},"startCommand");import{spawnSync as hl}from"node:child_process";var Jn=r(t=>{let o=[`sudo systemctl stop ${t.VALIDATOR_TYPE===A.FRANKENDANCER?"frankendancer":"solv"}`];hl(o[0],{shell:!0,stdio:"inherit"})},"stopSolana");var Gn=r(t=>{f.command("stop").description("Stop Solana Validator").action(()=>{Jn(t),process.exit(0)})},"stopCommand");import{spawnSync as te}from"node:child_process";import zn from"chalk";var Wn=r(t=>{let e=K();f.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(zn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),te("solv stop",{stdio:"inherit",shell:!0}),te("solv rm:snapshot",{stdio:"inherit",shell:!0}),te("solv get snapshot",{stdio:"inherit",shell:!0}),te("solv start",{stdio:"inherit",shell:!0}),console.log(zn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${t.LEDGER_PATH} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;te(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var qn=r(t=>{let o=t.NETWORK===u.TESTNET?Z:tt;t.NODE_TYPE===E.RPC&&(o=gt),f.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).action(async n=>{if(t.VALIDATOR_TYPE===A.JITO){let l=`v${n.version||Jt}-mod`;we(l);return}t.NODE_TYPE===E.RPC&&(o=gt);let i=n.version||o;await Se(i)})},"installCommands");import{spawnSync as yl}from"child_process";var Qn=r(()=>{f.command("mtr").description("Mount Reload Command").action(()=>{yl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),f.command("disks").description("Show unmounted disks").action(()=>{let t=Xt();console.log(t)})},"mountCommands");import{spawnSync as El}from"node:child_process";import Xn from"chalk";import{spawnSync as Sl}from"child_process";var Tl=r(async()=>{try{let t=Sl("crontab",["-l"],{encoding:"utf-8"});if(t.status!==0)return console.log("No crontab for this user."),!1;let e=t.stdout;return console.log(e),e.includes("solv epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),He=Tl;var Zn=r(()=>{f.command("cron").description("Cron Job Commands").command("epoch").description("Solv Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await He()&&(console.log(Xn.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let n=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solv epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;El(n,{shell:!0,stdio:"inherit"}),console.log(Xn.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var ee={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as Al,mkdirSync as wl}from"fs";import _l from"inquirer";import{homedir as Nl}from"os";import{spawnSync as gl}from"node:child_process";function ts(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return gl(s,{shell:!0,stdio:"inherit"}).status===0}r(ts,"executeSCP");var ko=r(async(t="")=>{let e=t;t===""&&(e=(await _l.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(N()),n=Nl(),s=n.includes("/home/solv")?"/home/solv":n+ee.SOLV_KEYPAIR_DOWNLOAD_PATH;Al(s)||wl(s,{recursive:!0});let a=!0,i=n+"/"+Yo;o.push(i);for(let c of o){let l=c.split("/"),m=l[l.length-1];m=n.includes("/home/solv")?m:m.replace(".json",`-${e}.json`);let d=`${s}/${m}`;ts(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as Ol}from"child_process";import{existsSync as vl}from"fs";import kl from"inquirer";import Rl from"os";var es=r(async(t="")=>{let e=Rl.userInfo().homedir,o=t;t===""&&(o=(await kl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${ee.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=ee.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(N(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let l=`${n}/${c}`;if(!vl(l))continue;let m=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;Ol(m,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Cl}from"child_process";import Il from"inquirer";var os=r(async()=>{let t=await Il.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${b.ROOT}/.ssh && echo "${t.pubkey}" >> ${b.AUTHORIZED_KEYS}`;Cl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Fe from"chalk";import{readFileSync as Pl}from"fs";import Ll from"os";var rs=r(()=>{try{let e=`${Ll.userInfo().homedir}/.ssh/id_rsa.pub`,o=Pl(e,"utf8");console.log(Fe.white(`Your SSH Public Key is:
|
|
415
419
|
`)),console.log(Fe.white(o))}catch(t){console.error(Fe.white(`Error reading SSH Public Key
|
|
416
420
|
`)),console.error(Fe.white(t))}},"cat");import{spawnSync as xl}from"child_process";var ns=r(()=>{xl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Vl}from"child_process";import{readFileSync as $l}from"fs";import{Readable as Dl}from"stream";var ss=r(async t=>new Promise((e,o)=>{try{let n=Vl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
|