@ily-validator/solc 5.1.5 → 5.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,28 +1,28 @@
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 Ld}from"commander";var Mo="5.1.5";var Fo={name:"@ily-validator/solc",version:Mo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",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 ce=Fo.version;var Mt="https://validators.solutions";var le="solc4.config.json";var ft="identity.json",ht="unstaked-identity.json",Ho="relayer-keypair.json",li="mainnet-validator-keypair.json",mi="mainnet-vote-account-keypair.json",pi="mainnet-authority-keypair.json",di="testnet-validator-keypair.json",ui="testnet-vote-account-keypair.json",fi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ft}`,bd=`${C}/${ht}`,K=`${C}/${li}`,me=`${C}/${mi}`,Ud=`${C}/${pi}`,P=`${C}/${di}`,Yo=`${C}/${ui}`,Md=`${C}/${fi}`,z=`${C}/solana-validator.log`,W=C+"/start-validator.sh",y="/mnt/ledger",q="/mnt/accounts",jo="solana-validator",Jo="agave-validator",Bo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var pe=3,Go="https://api.testnet.solana.com",zo="https://api.mainnet-beta.solana.com",Wo="https://verify.validators.solutions/solc-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 Qo=Object.values(io),de="So11111111111111111111111111111111111111112",ue="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Xo="SOLV420",Zo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ti}from"child_process";import{spawnSync as hi}from"node:child_process";var yi=r(t=>{hi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Nt=yi;var tr="agave-validator",Si=r(()=>{try{return tr}catch(t){return console.error(t),tr}},"getSolanaCLI"),D=Si;var fe=r(async t=>{Nt(t)},"updateVersion"),lo=r(async(t,e=!1)=>{let o=D(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),Ti(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Fr from"chalk";var yt;(function(t){t.EN="en",t.JA="ja"})(yt||(yt={}));var er;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(er||(er={}));var or;(function(t){t.SINGLE="single",t.DOUBLE="double"})(or||(or={}));var lt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(lt||(lt={}));var rr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(rr||(rr={}));var nr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(nr||(nr={}));var sr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(sr||(sr={}));var ar;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ar||(ar={}));var he;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(he||(he={}));var ye;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ye||(ye={}));var lr=!1,mr=!0,M={ID:"solc",LANG:yt.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"},R={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},Q={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.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"},v={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"},A=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.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}/${v.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Q.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${b.ROOT}/${Q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",mo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",pr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",dr=9,X="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",ur="So11111111111111111111111111111111111111112",fr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",hr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ir;(function(t){t[t.ELSOL=X]="ELSOL",t[t.SOL=ur]="SOL",t[t.USDC=fr]="USDC",t[t.EPCT=hr]="EPCT"})(ir||(ir={}));var cr;(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"})(cr||(cr={}));var eu={[ur]:9,[X]:9,[fr]:6,[hr]:6},Se="/home/solv/currentEpoch.json",po=.5,Te="https://api.testnet.solana.com";import{spawnSync as uo}from"child_process";var yr=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 @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var Z="3.0.1",tt="2.3.8",Ft="3.0.1",H="2.3.8",Sr="2.3.8",St="2.3.8";var Tr="20.19.5";var gr="0.708.20306";var st={version:H,tag:`v${H}-jito`,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 gi}from"child_process";var ge=r((t=st.tag)=>{gi(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ei,writeFile as wi}from"fs/promises";import{homedir as Ai}from"os";var Ht=r(async t=>{let o=`${Ai()}/${Q.JITO_CONFIG}`,s={...JSON.parse(await Ei(o,"utf8")),...t},a=JSON.stringify(s,null,2);await wi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Er}from"child_process";import _i from"inquirer";var wr=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";Er(`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}`;Er(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Ar=r(async()=>await _i.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Yt}from"@skeet-framework/utils";import Ni from"chalk";import Oi from"inquirer";var _r=r(async()=>{let t=await Oi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Yt("sudo ufw delete allow 8899/udp"),await Yt("sudo ufw delete allow 8899/tcp"),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Yt("sudo ufw reload"),console.log(Ni.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ki=r(()=>Mo,"getSolvVersion"),Ot=ki;import{readFile as Ci,writeFile as Ii}from"fs/promises";import{existsAsync as Pi}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Pu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Nr=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var Or=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Lu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var kr=Object.values($).filter(t=>t!=="none"),et;(function(t){t.SINGLE="single",t.DOUBLE="double"})(et||(et={}));var Ri={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:et.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:Tr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Bo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},at=Ri;import{homedir as Li}from"os";var xi=r(async()=>{let e=`${Li()}/${le}`;return await Pi(e)?JSON.parse(await Ci(e,"utf-8")):(console.log("Creating default config file at",e),await Ii(e,JSON.stringify(at,null,2)),at)},"readConfig"),I=xi;import Vi from"node-fetch";var x=r(async t=>{try{let e=await I();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
3
- Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solc Notifier"};return(await Vi(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 Fi}from"child_process";import{Connection as vr}from"@solana/web3.js";var jt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new vr("https://api.testnet.solana.com"):new vr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(m=>m.votePubkey===e);if(!c)return i.delinquent.find(f=>f.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(m=>m.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 $i}from"child_process";var E=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=$i(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Ki=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),ot=Ki;import{sendDiscord as Di}from"@skeet-framework/utils";var Rr=60,bi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=E(e?n:o),i=await jt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Rr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Rr} minutes!
2
+ var mi=Object.defineProperty;var r=(t,e)=>mi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Md}from"commander";var Fo="5.1.6";var Ho={name:"@ily-validator/solc",version:Fo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",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 le=Ho.version;var Ht="https://validators.solutions";var me="solc4.config.json";var ht="identity.json",yt="unstaked-identity.json",Yo="relayer-keypair.json",di="mainnet-validator-keypair.json",ui="mainnet-vote-account-keypair.json",fi="mainnet-authority-keypair.json",hi="testnet-validator-keypair.json",yi="testnet-vote-account-keypair.json",Si="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ht}`,Bd=`${C}/${yt}`,K=`${C}/${di}`,pe=`${C}/${ui}`,Gd=`${C}/${fi}`,L=`${C}/${hi}`,jo=`${C}/${yi}`,zd=`${C}/${Si}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",y="/mnt/ledger",Q="/mnt/accounts",Jo="solana-validator",Bo="agave-validator",Go="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var de=3,zo="https://api.testnet.solana.com",Wo="https://api.mainnet-beta.solana.com",qo="https://verify.validators.solutions/solc-migrate",Qo="https://jup.validators.solutions/v1/jup",co;(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"})(co||(co={}));var Xo=Object.values(co),ue="So11111111111111111111111111111111111111112",fe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",lo="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 wi}from"child_process";import{spawnSync as Ti}from"node:child_process";var gi=r(t=>{Ti(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),kt=gi;var er="agave-validator",Ei=r(()=>{try{return er}catch(t){return console.error(t),er}},"getSolanaCLI"),D=Ei;var he=r(async t=>{kt(t)},"updateVersion"),mo=r(async(t,e=!1)=>{let o=D(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),wi(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Hr from"chalk";var St;(function(t){t.EN="en",t.JA="ja"})(St||(St={}));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 mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));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 ye;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(ye||(ye={}));var Se;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Se||(Se={}));var mr=!1,pr=!0,M={ID:"solc",LANG:St.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"},v={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},X={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},P={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"},A=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"),pt=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}/${X.LOG}`,s=v.ACCOUNTS,a=v.LEDGER,i=`${b.ROOT}/${X.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",po="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",dr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ur=9,Z="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",fr="So11111111111111111111111111111111111111112",hr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",yr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",cr;(function(t){t[t.ELSOL=Z]="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 lu={[fr]:9,[Z]:9,[hr]:6,[yr]:6},Te="/home/solv/currentEpoch.json",uo=.5,ge="https://api.testnet.solana.com";import{spawnSync as fo}from"child_process";var Sr=r(()=>{fo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;fo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),fo("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var tt="3.0.1",et="2.3.8",Yt="3.0.1",H="2.3.8",Tr="2.3.8",Tt="2.3.8";var gr="20.19.5";var Er="0.708.20306";var at={version:H,tag:`v${H}-jito`,commissionBps:700,relayerUrl:"http://amsterdam.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://amsterdam.mainnet.block-engine.jito.wtf",shredReceiverAddr:"74.118.140.240:1002"},G={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 Ai}from"child_process";var Ee=r((t=at.tag)=>{Ai(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as _i,writeFile as Ni}from"fs/promises";import{homedir as Oi}from"os";var jt=r(async t=>{let o=`${Oi()}/${X.JITO_CONFIG}`,s={...JSON.parse(await _i(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ni(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as wr}from"child_process";import ki from"inquirer";var Ar=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";wr(`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}`;wr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),_r=r(async()=>await ki.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ri from"chalk";import vi from"inquirer";var Nr=r(async()=>{let t=await vi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Jt("sudo ufw delete allow 8899/udp"),await Jt("sudo ufw delete allow 8899/tcp"),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Jt("sudo ufw reload"),console.log(Ri.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Ci=r(()=>Fo,"getSolvVersion"),Rt=Ci;import{readFile as Pi,writeFile as xi}from"fs/promises";import{existsAsync as Vi}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Uu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Or=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var kr=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Mu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Rr=Object.values($).filter(t=>t!=="none"),ot;(function(t){t.SINGLE="single",t.DOUBLE="double"})(ot||(ot={}));var Li={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:ot.SINGLE,TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et,NODE_VERSION:gr,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:""},it=Li;import{homedir as $i}from"os";var Ki=r(async()=>{let e=`${$i()}/${me}`;return await Vi(e)?JSON.parse(await Pi(e,"utf-8")):(console.log("Creating default config file at",e),await xi(e,JSON.stringify(it,null,2)),it)},"readConfig"),I=Ki;import Di from"node-fetch";var x=r(async t=>{try{let e=await I();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
3
+ Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solc Notifier"};return(await Di(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 ji}from"child_process";import{Connection as vr}from"@solana/web3.js";var Bt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new vr("https://api.testnet.solana.com"):new vr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e);if(!c)return i.delinquent.find(f=>f.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 bi}from"child_process";var E=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=bi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Ui=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),rt=Ui;import{sendDiscord as Mi}from"@skeet-framework/utils";var Cr=60,Fi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=E(e?n:o),i=await Bt(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}
6
6
  Message: Max retries reached, exiting catchup check...
7
- Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await Di(l),!1}console.log("Waiting for validator to catch up..."),await ot(60*1e3),i=await jt(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),Cr=bi;import{spawnSync as Ui}from"node:child_process";var Mi=r(()=>{let{stdout:t}=Ui("solana --version",{shell:!0});return(t?String(t):"Unknown").trim()},"getSolanaVersion"),Ee=Mi;var Hi=r(async t=>{let e=t.NETWORK===u.MAINNET,{mainnetValidatorKey:o,testnetValidatorKey:n}=A(),s=e?o:n,a=Ee(),i=e?lr:mr;i=i&&t.AUTO_RESTART;let c=E(s),l=`=== \u2728 solc updated to the latest version \u2728 ===
7
+ Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await Mi(l),!1}console.log("Waiting for validator to catch up..."),await rt(60*1e3),i=await Bt(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),Ir=Fi;import{spawnSync as Hi}from"node:child_process";var Yi=r(()=>{let{stdout:t}=Hi("solana --version",{shell:!0});return(t?String(t):"Unknown").trim()},"getSolanaVersion"),we=Yi;var Ji=r(async t=>{let e=t.NETWORK===u.MAINNET,{mainnetValidatorKey:o,testnetValidatorKey:n}=A(),s=e?o:n,a=we(),i=e?mr:pr;i=i&&t.AUTO_RESTART;let c=E(s),l=`=== \u2728 solc updated to the latest version \u2728 ===
8
8
  Validator Address: ${c}
9
- solc Version: ${Ot()}
9
+ solc Version: ${Rt()}
10
10
  Solana Version: ${a}
11
11
  Network: ${e?"Mainnet":"Testnet"}
12
12
  isNodeRestartRequired: ${i}
13
- `;if(await x(l),i){let p=`== \u23F3 Restarting the Node \u23F3 ==
13
+ `;if(await x(l),i){let m=`== \u23F3 Restarting the Node \u23F3 ==
14
14
  Address: ${c}
15
15
  This will take a few minutes to catch up...
16
16
  \u203B sometimes it may take longer than expected
17
- `;await x(p);try{Fi("solc update -b",{stdio:"inherit",shell:!0})}catch(f){let S=`\u274C Error in restarting the node
17
+ `;await x(m);try{ji("solc update -b",{stdio:"inherit",shell:!0})}catch(f){let S=`\u274C Error in restarting the node
18
18
  Address: ${c}
19
19
  Error: ${f}`;return await x(S),!1}let d=`== \u{1F646} Your Node has been restarted! ==
20
20
  Address: ${c}
21
21
  Now Catching up... \u{1F69B}\u{1F4A8}
22
- `;await x(d),await ot(180*1e3);let m=await Cr(t);if(m){let f=`== \u{1F7E2} Your Node has caught up! ==
22
+ `;await x(d),await rt(180*1e3);let p=await Ir(t);if(p){let f=`== \u{1F7E2} Your Node has caught up! ==
23
23
  Address: ${c}
24
24
  \u2728 Auto Update Completed \u2728
25
- `;await x(f)}return m}return!0},"autoUpdate"),Ir=Hi;import{homedir as Yi}from"os";import{readFile as ji,writeFile as Pr}from"fs/promises";import{existsAsync as Ji}from"@skeet-framework/utils";var k=r(async t=>{let o=`${Yi()}/${le}`;await Ji(o)||(console.log("Creating default config file at",o),await Pr(o,JSON.stringify(at,null,2)));let s={...JSON.parse(await ji(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Pr(o,a)},"updateDefaultConfig");var Bi={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},we=Bi;var Gi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},Lr=Gi;var zi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},Ae=zi;var Wi={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},xr=Wi;var _e=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Ne=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var Vr=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],$r=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Oe=qi;var Qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Kr=Qi;var ke=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Dr=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var Xi=r(t=>{let e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};switch(t){case yt.EN:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};break;case yt.JA:e={cmds:Lr,subCmds:Kr,logs:xr,installer:Vr,installerSub:$r,clientCmds:Dr};break;default:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke}}return e},"readLocale"),br=Xi;import{existsSync as oc,readFileSync as rc,writeFileSync as Ur}from"fs";import{readFileSync as Zi,writeFileSync as tc}from"fs";import{homedir as ec}from"os";var kt=r(t=>{let o=`${ec()}/${Q.CONFIG}`,s={...JSON.parse(Zi(o,"utf8")),...t},a=JSON.stringify(s,null,2);tc(o,a)},"updateSolvConfig");import{homedir as nc}from"os";var Mr=r(()=>{let e=`${nc()}/${Q.CONFIG}`;oc(e)||(Ur(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(rc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Ur(e,JSON.stringify(M,null,2)),o=M}let n=br(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,kt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,kt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",kt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Hr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===g.JITO,s=e?Z:tt;n&&(s=H,e&&(s=Ft)),o&&(s=St,n&&(s=Sr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=Ot(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Fr.white(`Current solc version: ${i}`)),a.auto){await Ir(t);return}if(a.migrateConfig){let l=Mr().config,p=l.SOLANA_NETWORK===lt.TESTNET,d=l.SOLV_TYPE===he.RPC_NODE,m=l.MAINNET_TYPE===ye.JITO_MEV,f={NETWORK:p?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?et.DOUBLE:et.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:m?g.JITO:p?g.AGAVE:g.SOLANA,TESTNET_SOLANA_VERSION:l.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:l.MAINNET_SOLANA_VERSION,NODE_VERSION:l.NODE_VERSION,TESTNET_DELINQUENT_STAKE:l.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:l.MAINNET_DELINQUENT_STAKE,COMMISSION:l.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:l.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:l.STAKE_ACCOUNT,HARVEST_ACCOUNT:l.HARVEST_ACCOUNT,IS_MEV_MODE:l.IS_MEV_MODE,RPC_URL:l.RPC_URL,KEYPAIR_PATH:l.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:l.DISCORD_WEBHOOK_URL,AUTO_UPDATE:l.AUTO_UPDATE,AUTO_RESTART:l.AUTO_RESTART,IS_DUMMY:!1,API_KEY:""};await k(f)}if(a.config){if(await k({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){let l=e?Ft:H;await Ht({version:l,tag:`v${l}-jito`})}console.log(Fr.green("\u2714\uFE0F Updated Solc Config Default Solana Version\n\n You can now run `solc i` to install the latest version"));return}if(a.firewall){await _r();return}if(a.background){let l=a.version;if(await k({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){ge(),await Ht({version:l,tag:`v${l}-jito`}),await lo(c,!0);return}await fe(l),await lo(e?5:5,!0);return}else if(a.commission){let l=await Ar();wr(l.commission,e)}else yr()})},"updateCommands");import{spawnSync as sc}from"node:child_process";var Yr=r(t=>{try{let{log:e}=mt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=sc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var jr=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{Yr(t)})},"logCommands");import it from"chalk";import{spawnSync as ac}from"child_process";import{homedir as ic}from"os";var ve=r(t=>{let e=ic(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=lt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=lt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=lt.TESTNET);let p=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;ac(p,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Re}from"child_process";import{existsSync as Jr,readdirSync as cc,rmSync as lc}from"fs";import{homedir as mc}from"os";import Br from"path";var Ce=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[v.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[v.TESTNET_VALIDATOR_KEY,v.TESTNET_VALITATOR_AUTHORITY_KEY,v.TESTNET_VALIDATOR_VOTE_KEY,v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Re(n,{shell:!0,stdio:"ignore"});let s=cc("./").filter(l=>l.endsWith("SV.json")),a=mc(),i=Br.join(a,"unstaked-identity.json");Jr(i)&&Re(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let p=Br.join(a,e[c]);if(c++,Jr(p)){console.log(`${p} is already exist!`),lc(l,{recursive:!0});continue}let d=`mv ${l} ${p}`;Re(d,{shell:!0,stdio:"inherit"})}Re("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as zr}from"child_process";var pc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
25
+ `;await x(f)}return p}return!0},"autoUpdate"),Lr=Ji;import{homedir as Bi}from"os";import{readFile as Gi,writeFile as Pr}from"fs/promises";import{existsAsync as zi}from"@skeet-framework/utils";var k=r(async t=>{let o=`${Bi()}/${me}`;await zi(o)||(console.log("Creating default config file at",o),await Pr(o,JSON.stringify(it,null,2)));let s={...JSON.parse(await Gi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Pr(o,a)},"updateDefaultConfig");var Wi={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},Ae=Wi;var qi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},xr=qi;var Qi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},_e=Qi;var Xi={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Vr=Xi;var Ne=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Oe=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var $r=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],Kr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var Zi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},ke=Zi;var tc={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Dr=tc;var Re=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var br=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var ec=r(t=>{let e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:Re};switch(t){case St.EN:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:Re};break;case St.JA:e={cmds:xr,subCmds:Dr,logs:Vr,installer:$r,installerSub:Kr,clientCmds:br};break;default:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:Re}}return e},"readLocale"),Ur=ec;import{existsSync as sc,readFileSync as ac,writeFileSync as Mr}from"fs";import{readFileSync as oc,writeFileSync as rc}from"fs";import{homedir as nc}from"os";var vt=r(t=>{let o=`${nc()}/${X.CONFIG}`,s={...JSON.parse(oc(o,"utf8")),...t},a=JSON.stringify(s,null,2);rc(o,a)},"updateSolvConfig");import{homedir as ic}from"os";var Fr=r(()=>{let e=`${ic()}/${X.CONFIG}`;sc(e)||(Mr(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(ac(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Mr(e,JSON.stringify(M,null,2)),o=M}let n=Ur(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,vt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,vt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",vt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Yr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===g.JITO,s=e?tt:et;n&&(s=H,e&&(s=Yt)),o&&(s=Tt,n&&(s=Tr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=Rt(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Hr.white(`Current solc version: ${i}`)),a.auto){await Lr(t);return}if(a.migrateConfig){let l=Fr().config,m=l.SOLANA_NETWORK===mt.TESTNET,d=l.SOLV_TYPE===ye.RPC_NODE,p=l.MAINNET_TYPE===Se.JITO_MEV,f={NETWORK:m?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?ot.DOUBLE:ot.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:p?g.JITO:m?g.AGAVE:g.SOLANA,TESTNET_SOLANA_VERSION:l.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:l.MAINNET_SOLANA_VERSION,NODE_VERSION:l.NODE_VERSION,TESTNET_DELINQUENT_STAKE:l.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:l.MAINNET_DELINQUENT_STAKE,COMMISSION:l.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:l.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:l.STAKE_ACCOUNT,HARVEST_ACCOUNT:l.HARVEST_ACCOUNT,IS_MEV_MODE:l.IS_MEV_MODE,RPC_URL:l.RPC_URL,KEYPAIR_PATH:l.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:l.DISCORD_WEBHOOK_URL,AUTO_UPDATE:l.AUTO_UPDATE,AUTO_RESTART:l.AUTO_RESTART,IS_DUMMY:!1,API_KEY:""};await k(f)}if(a.config){if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){let l=e?Yt:H;await jt({version:l,tag:`v${l}-jito`})}console.log(Hr.green("\u2714\uFE0F Updated Solc Config Default Solana Version\n\n You can now run `solc i` to install the latest version"));return}if(a.firewall){await Nr();return}if(a.background){let l=a.version;if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){Ee(),await jt({version:l,tag:`v${l}-jito`}),await mo(c,!0);return}await he(l),await mo(e?5:5,!0);return}else if(a.commission){let l=await _r();Ar(l.commission,e)}else Sr()})},"updateCommands");import{spawnSync as cc}from"node:child_process";var jr=r(t=>{try{let{log:e}=pt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=cc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Jr=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{jr(t)})},"logCommands");import ct from"chalk";import{spawnSync as lc}from"child_process";import{homedir as mc}from"os";var ve=r(t=>{let e=mc(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=mt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=mt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=mt.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;lc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ce}from"child_process";import{existsSync as Br,readdirSync as pc,rmSync as dc}from"fs";import{homedir as uc}from"os";import Gr from"path";var Ie=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[R.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[R.TESTNET_VALIDATOR_KEY,R.TESTNET_VALITATOR_AUTHORITY_KEY,R.TESTNET_VALIDATOR_VOTE_KEY,R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Ce(n,{shell:!0,stdio:"ignore"});let s=pc("./").filter(l=>l.endsWith("SV.json")),a=uc(),i=Gr.join(a,"unstaked-identity.json");Br(i)&&Ce(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=Gr.join(a,e[c]);if(c++,Br(m)){console.log(`${m} is already exist!`),dc(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;Ce(d,{shell:!0,stdio:"inherit"})}Ce("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as Wr}from"child_process";var fc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
26
26
  Description=Jupiter API Service Instance
27
27
  After=network.target
28
28
 
@@ -37,17 +37,17 @@ Environment=RUST_LOG=info
37
37
  Environment=PATH=/home/solv/.local/share/solana/install/active_release/bin:/home/solv/.local/share/pnpm:/home/solv/.cargo/env:/home/solv/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/solv/.local/share/pnpm/npx
38
38
 
39
39
  [Install]
40
- WantedBy=multi-user.target`;return{filePath:s,body:a}},"jupiterAPIService"),Gr=pc;import dc from"inquirer";import uc from"chalk";var fc=r(async()=>{let t=await dc.prompt([{name:"rpcUrl",message:"Enter RPC URL",type:"input",default:"http://localhost:8899"},{name:"grpcUrl",message:"Enter GRPC URL",type:"input",default:"http://localhost:10000"},{name:"grpcToken",message:"Enter GRPC Token",type:"input",default:"token"}]);zr(`sudo apt-get install unzip wget -y
40
+ WantedBy=multi-user.target`;return{filePath:s,body:a}},"jupiterAPIService"),zr=fc;import hc from"inquirer";import yc from"chalk";var Sc=r(async()=>{let t=await hc.prompt([{name:"rpcUrl",message:"Enter RPC URL",type:"input",default:"http://localhost:8899"},{name:"grpcUrl",message:"Enter GRPC URL",type:"input",default:"http://localhost:10000"},{name:"grpcToken",message:"Enter GRPC Token",type:"input",default:"token"}]);Wr(`sudo apt-get install unzip wget -y
41
41
  wget https://github.com/jup-ag/jupiter-swap-api/releases/download/v6.0.25/jupiter-swap-api-x86_64-unknown-linux-gnu.zip
42
42
  unzip jupiter-swap-api-x86_64-unknown-linux-gnu.zip
43
43
  chmod +x jupiter-swap-api
44
- rm jupiter-swap-api-x86_64-unknown-linux-gnu.zip`,{shell:!0,stdio:"inherit"});let{filePath:o,body:n}=Gr(t.rpcUrl,t.grpcUrl,t.grpcToken);zr(`echo '${n}' | sudo tee ${o}`,{shell:!0,stdio:"inherit"}),console.log(uc.white(`\u{1F7E2} Jupiter Swap API Setup Completed
44
+ rm jupiter-swap-api-x86_64-unknown-linux-gnu.zip`,{shell:!0,stdio:"inherit"});let{filePath:o,body:n}=zr(t.rpcUrl,t.grpcUrl,t.grpcToken);Wr(`echo '${n}' | sudo tee ${o}`,{shell:!0,stdio:"inherit"}),console.log(yc.white(`\u{1F7E2} Jupiter Swap API Setup Completed
45
45
 
46
- $ solc jupiter --help`))},"jupiterAPISetup"),Wr=fc;import{existsAsync as hc}from"@skeet-framework/utils";import{readFile as yc,writeFile as qr}from"fs/promises";import{homedir as Sc}from"os";import Tc from"path";var Tt=r(async()=>{let t=Sc(),e=Tc.join(t,Q.JITO_CONFIG);await hc(e)||(await qr(e,JSON.stringify(st,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await yc(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await qr(e,JSON.stringify(st,null,2)),o=st}return o},"readOrCreateJitoConfig");import{spawnSync as gc}from"child_process";var Jt=r(()=>{gc("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import Bt from"chalk";import Ie from"inquirer";import Ec from"inquirer";var Qr=r(async()=>{let e=Object.keys(fo),o=await Ec.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:e}]),n=o.region,s=fo[n];return{version:st.version,tag:st.tag,commissionBps:o.commissionBps,blockEngineUrl:s.BLOCK_ENGINE_URL,relayerUrl:s.RELAYER_URL,shredReceiverAddr:s.SHRED_RECEIVER_ADDR}},"askJitoSetting");var wc=r(async()=>{try{let t=g.NONE,e=$.AGAVE,o=at.COMMISSION,n=!1,s=await Ie.prompt([{name:"network",type:"list",message:"Choose Network",choices:Nr,default:u.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:Or,default:T.RPC}]);if(s.nodeType===T.VALIDATOR){let c=s.network===u.MAINNET?[g.JITO,g.SOLANA,g.FRANKENDANCER]:[g.AGAVE,g.JITO,g.FRANKENDANCER];t=await Ie.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:g.AGAVE}).then(l=>l.validatorType),e=$.NONE}if(s.nodeType===T.RPC&&(e=await Ie.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:kr,default:$.AGAVE}).then(c=>c.rpcType)),s.nodeType===T.VALIDATOR){let c=await Ie.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${at.COMMISSION}%)'`,default:at.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===g.JITO){await Tt();let l=await Qr();await Ht(l)}}let{network:a,nodeType:i}=s;return console.log(Bt.white("Network:",a)),console.log(Bt.white("Node Type:",i)),console.log(Bt.white("Validator Type:",t)),console.log(Bt.white("RPC Type:",e)),i===T.VALIDATOR&&console.log(Bt.white("Commission:",o)),await k({NETWORK:a,NODE_TYPE:i,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),Xr=wc;import{spawnSync as Ac}from"child_process";var Gt=r((t=H)=>{let e=`v${t}-jito`;Ac(`sh -c "$(curl -sSfL https://release.jito.wtf/${e}/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var Zr=r(()=>`#!/bin/bash
46
+ $ solc jupiter --help`))},"jupiterAPISetup"),qr=Sc;import{existsAsync as Tc}from"@skeet-framework/utils";import{readFile as gc,writeFile as Qr}from"fs/promises";import{homedir as Ec}from"os";import wc from"path";var gt=r(async()=>{let t=Ec(),e=wc.join(t,X.JITO_CONFIG);await Tc(e)||(await Qr(e,JSON.stringify(at,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await gc(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await Qr(e,JSON.stringify(at,null,2)),o=at}return o},"readOrCreateJitoConfig");import{spawnSync as Ac}from"child_process";var Gt=r(()=>{Ac("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import Et from"chalk";import Le from"inquirer";import _c from"inquirer";var Xr=r(async()=>{let e=Object.keys(G),o=await _c.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:e}]),n=o.region,s=G[n];return{version:at.version,tag:at.tag,commissionBps:o.commissionBps,blockEngineUrl:s.BLOCK_ENGINE_URL,relayerUrl:s.RELAYER_URL,shredReceiverAddr:s.SHRED_RECEIVER_ADDR}},"askJitoSetting");import Nc from"inquirer";var Oc=r(async()=>{let t=Object.keys(G);return(await Nc.prompt([{name:"region",type:"list",message:"Select Jito region for Firedancer",choices:t,default:"Amsterdam"}])).region},"askJitoRegion"),Zr=Oc;import{promises as tn}from"fs";import kc from"path";var Rc=kc.join(process.cwd(),"src/cli/setup/template/firedancer/configTomlMainnet.ts"),vc=r(async(t,e=Rc)=>{let o=await tn.readFile(e,"utf-8"),n=o.replace(/url\s*=\s*\\\"[^\\\"]*\\\"/,`url = \\"${t}\\"`);return o===n?!1:(await tn.writeFile(e,n,"utf-8"),!0)},"updateFiredancerBundleUrl"),en=vc;var Cc=r(async()=>{try{let t=g.NONE,e=$.AGAVE,o=it.COMMISSION,n=!1,s=await Le.prompt([{name:"network",type:"list",message:"Choose Network",choices:Or,default:u.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:kr,default:T.RPC}]);if(s.nodeType===T.VALIDATOR){let c=s.network===u.MAINNET?[g.JITO,g.SOLANA,g.FRANKENDANCER]:[g.AGAVE,g.JITO,g.FRANKENDANCER];t=await Le.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:g.AGAVE}).then(l=>l.validatorType),e=$.NONE}if(s.nodeType===T.RPC&&(e=await Le.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:Rr,default:$.AGAVE}).then(c=>c.rpcType)),s.nodeType===T.VALIDATOR){let c=await Le.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${it.COMMISSION}%)'`,default:it.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===g.JITO){await gt();let l=await Xr();await jt(l)}else if(t===g.FRANKENDANCER&&s.network===u.MAINNET){let l=await Zr(),{BLOCK_ENGINE_URL:m}=G[l],d=await en(m);console.log(d?Et.green(`Updated Firedancer mainnet template URL to ${m} (region: ${l})`):Et.yellow("No change applied to Firedancer mainnet template (URL already set?)"))}}let{network:a,nodeType:i}=s;return console.log(Et.white("Network:",a)),console.log(Et.white("Node Type:",i)),console.log(Et.white("Validator Type:",t)),console.log(Et.white("RPC Type:",e)),i===T.VALIDATOR&&console.log(Et.white("Commission:",o)),await k({NETWORK:a,NODE_TYPE:i,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),on=Cc;import{spawnSync as Ic}from"child_process";var zt=r((t=H)=>{let e=`v${t}-jito`;Ic(`sh -c "$(curl -sSfL https://release.jito.wtf/${e}/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var rn=r(()=>`#!/bin/bash
47
47
  exec agave-validator \\
48
48
  --identity ${O} \\
49
- --log ${z} \\
50
- --accounts ${q} \\
49
+ --log ${W} \\
50
+ --accounts ${Q} \\
51
51
  --ledger ${y} \\
52
52
  --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\
53
53
  --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\
@@ -81,11 +81,11 @@ exec agave-validator \\
81
81
  --wal-recovery-mode skip_any_corrupted_record \\
82
82
  --use-snapshot-archives-at-startup when-newest \\
83
83
  --limit-ledger-size 400000000 \\
84
- `,"startJitoRPCScript");import{existsAsync as Oc}from"@skeet-framework/utils";import{writeFile as kc}from"fs/promises";import{spawnSync as _c}from"node:child_process";var Nc=r(()=>{let t=`sudo chmod +x ${W}`;_c(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),zt=Nc;var tn=r(()=>`#!/bin/bash
84
+ `,"startJitoRPCScript");import{existsAsync as xc}from"@skeet-framework/utils";import{writeFile as Vc}from"fs/promises";import{spawnSync as Lc}from"node:child_process";var Pc=r(()=>{let t=`sudo chmod +x ${q}`;Lc(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),Wt=Pc;var nn=r(()=>`#!/bin/bash
85
85
  exec agave-validator \\
86
86
  --identity ${O} \\
87
- --log ${z} \\
88
- --accounts ${q} \\
87
+ --log ${W} \\
88
+ --accounts ${Q} \\
89
89
  --ledger ${y} \\
90
90
  --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\
91
91
  --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\
@@ -116,13 +116,13 @@ exec agave-validator \\
116
116
  --wal-recovery-mode skip_any_corrupted_record \\
117
117
  --use-snapshot-archives-at-startup when-newest \\
118
118
  --limit-ledger-size 400000000 \\
119
- `,"startRPCNodeScript");var vc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case $.AGAVE:console.log("Agave RPC Node Setup"),Nt(t.TESTNET_SOLANA_VERSION),o=tn();break;case $.JITO:console.log("JITO RPC Node Setup"),Gt(Ft),o=Zr();break;default:console.log("Unknown RPC Node Setup");break}if(await Oc(W)){console.log("Startup script already exists. Skipping...");return}await kc(W,o,"utf-8"),zt()},"setupRpcNode"),en=vc;import{spawnSync as Rc}from"node:child_process";var Cc=r(t=>{Rc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),To=Cc;var go=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
119
+ `,"startRPCNodeScript");var $c=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case $.AGAVE:console.log("Agave RPC Node Setup"),kt(t.TESTNET_SOLANA_VERSION),o=nn();break;case $.JITO:console.log("JITO RPC Node Setup"),zt(Yt),o=rn();break;default:console.log("Unknown RPC Node Setup");break}if(await xc(q)){console.log("Startup script already exists. Skipping...");return}await Vc(q,o,"utf-8"),Wt()},"setupRpcNode"),sn=$c;import{spawnSync as Kc}from"node:child_process";var Dc=r(t=>{Kc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),To=Dc;var go=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
120
120
  exec ${s} \\
121
121
  --identity ${O} \\
122
- --vote-account ${me} \\
122
+ --vote-account ${pe} \\
123
123
  --authorized-voter ${K} \\
124
- --log ${z} \\
125
- --accounts ${q} \\
124
+ --log ${W} \\
125
+ --accounts ${Q} \\
126
126
  --ledger ${y} \\
127
127
  --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\
128
128
  --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\
@@ -149,13 +149,13 @@ exec ${s} \\
149
149
  --use-snapshot-archives-at-startup when-newest \\
150
150
  --limit-ledger-size \\
151
151
  --block-production-method central-scheduler \\
152
- `,"startJitoValidatorScript");var on=r((t="agave-validator")=>`#!/bin/bash
152
+ `,"startJitoValidatorScript");var an=r((t="agave-validator")=>`#!/bin/bash
153
153
  exec ${t} \\
154
154
  --identity ${O} \\
155
- --vote-account ${me} \\
155
+ --vote-account ${pe} \\
156
156
  --authorized-voter ${K} \\
157
- --log ${z} \\
158
- --accounts ${q} \\
157
+ --log ${W} \\
158
+ --accounts ${Q} \\
159
159
  --ledger ${y} \\
160
160
  --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\
161
161
  --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\
@@ -178,10 +178,10 @@ exec ${t} \\
178
178
  `,"startMainnetValidatorScript");var Eo=r(()=>`#!/bin/bash
179
179
  exec agave-validator \\
180
180
  --identity ${O} \\
181
- --vote-account ${Yo} \\
182
- --authorized-voter ${P} \\
183
- --log ${z} \\
184
- --accounts ${q} \\
181
+ --vote-account ${jo} \\
182
+ --authorized-voter ${L} \\
183
+ --log ${W} \\
184
+ --accounts ${Q} \\
185
185
  --ledger ${y} \\
186
186
  --entrypoint entrypoint.testnet.solana.com:8001 \\
187
187
  --entrypoint entrypoint2.testnet.solana.com:8001 \\
@@ -198,13 +198,13 @@ exec agave-validator \\
198
198
  --use-snapshot-archives-at-startup when-newest \\
199
199
  --limit-ledger-size \\
200
200
  --block-production-method central-scheduler \\
201
- `,"startTestnetAgaveValidatorScript");import{existsAsync as rn}from"@skeet-framework/utils";import{writeFile as nn}from"fs/promises";var Ic=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Pc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Lc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Pc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case g.SOLANA:To(o),n=on();break;case g.JITO:console.log("JITO Validator Setup for Mainnet");let s=await Tt();Gt(o||H),n=go(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await rn(W)){console.log("Startup script already exists. Skipping...");return}await nn(W,n,"utf-8"),zt()},"setupMainnetValidator"),Lc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case g.SOLANA:To(t.TESTNET_SOLANA_VERSION),o=Eo();case g.AGAVE:console.log("Agave Validator Setup for Testnet"),Nt(t.TESTNET_SOLANA_VERSION),o=Eo();break;case g.JITO:console.log("JITO Validator Setup for Testnet");let n=await Tt();Gt(t.TESTNET_SOLANA_VERSION),o=go(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await rn(W)){console.log("Startup script already exists. Skipping...");return}await nn(W,o,"utf-8"),zt()},"setupTestnetValidator"),sn=Ic;import Ln from"chalk";import{execSync as an}from"node:child_process";function cn(t){try{an(`test -d ${t}`),console.log(`${t} already exists.`)}catch{an(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(cn,"createDirectoryIfNotExists");var ln=r(()=>{try{let t=[R.ACCOUNTS,R.LEDGER];for(let e of t)cn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as xc}from"child_process";function Vc(){let e=xc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
202
- `).slice(1),o=[],n=e.map(m=>m.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c="";for(let m of e){let[f,S,w]=m.trim().split(/\s+/);if(!f||!S)continue;let _=parseInt(S,10);if(isNaN(_))continue;let N=w!==void 0&&w!=="";w==="/"&&(c=f.replace(/[0-9]*$/,""));let G=n.some(V=>V!==f&&V.startsWith(f));_>=400*1024*1024*1024&&o.push({name:f,size:_,mountpoint:w||"",isMounted:N,hasPartition:G})}let l=n.filter(m=>m.startsWith(c)),d=o.filter(m=>!l.includes(m.name)).sort((m,f)=>f.size-m.size);if(d.length>0){let m=d[0];if(m.size>=850*1024*1024*1024&&!m.isMounted&&(s=!0),m.size>=1250*1024*1024*1024&&m.isMounted&&(i=!0),d.length>1){let f=d[1];f.size>=400*1024*1024*1024&&!f.isMounted&&(a=!0)}}return{disks:d,has850GB:s,has400GB:a,hasUsed1250GB:i}}r(Vc,"getPreferredDisks");var Wt=Vc;import{spawnSync as mn}from"child_process";var qt=r(t=>{if(mn(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return mn(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as wo}from"child_process";var Pe=r((t,e="",o=!1)=>{let n=o?R.LEDGER:R.ROOT,s=`${t} ${n} ext4 auto 0 0`,a=`${t} ${R.LEDGER} ext4 auto 0 0
203
- ${e} ${R.ACCOUNTS} ext4 auto 0 0
204
- `,c=[e!==""?a:s],p=wo("cat /etc/fstab",{shell:!0,encoding:"utf8"}).stdout,d=[];for(let m of c)p.includes(m)||d.push(m);if(d.length){let m=`echo "${d.join(`
205
- `)}" | sudo tee -a /etc/fstab`;wo(m,{shell:!0,encoding:"utf8"}),wo("sudo mount --all --verbose",{shell:!0,encoding:"utf8"}),console.log(`Added lines to /etc/fstab:
201
+ `,"startTestnetAgaveValidatorScript");import{existsAsync as cn}from"@skeet-framework/utils";import{writeFile as ln}from"fs/promises";var bc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Uc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Mc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Uc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case g.SOLANA:To(o),n=an();break;case g.JITO:console.log("JITO Validator Setup for Mainnet");let s=await gt();zt(o||H),n=go(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,n,"utf-8"),Wt()},"setupMainnetValidator"),Mc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case g.SOLANA:To(t.TESTNET_SOLANA_VERSION),o=Eo();case g.AGAVE:console.log("Agave Validator Setup for Testnet"),kt(t.TESTNET_SOLANA_VERSION),o=Eo();break;case g.JITO:console.log("JITO Validator Setup for Testnet");let n=await gt();zt(t.TESTNET_SOLANA_VERSION),o=go(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,o,"utf-8"),Wt()},"setupTestnetValidator"),mn=bc;import Kn from"chalk";import{execSync as pn}from"node:child_process";function dn(t){try{pn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{pn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(dn,"createDirectoryIfNotExists");var un=r(()=>{try{let t=[v.ACCOUNTS,v.LEDGER];for(let e of t)dn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as Fc}from"child_process";function Hc(){let e=Fc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
202
+ `).slice(1),o=[],n=e.map(p=>p.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c="";for(let p of e){let[f,S,w]=p.trim().split(/\s+/);if(!f||!S)continue;let _=parseInt(S,10);if(isNaN(_))continue;let N=w!==void 0&&w!=="";w==="/"&&(c=f.replace(/[0-9]*$/,""));let z=n.some(V=>V!==f&&V.startsWith(f));_>=400*1024*1024*1024&&o.push({name:f,size:_,mountpoint:w||"",isMounted:N,hasPartition:z})}let l=n.filter(p=>p.startsWith(c)),d=o.filter(p=>!l.includes(p.name)).sort((p,f)=>f.size-p.size);if(d.length>0){let p=d[0];if(p.size>=850*1024*1024*1024&&!p.isMounted&&(s=!0),p.size>=1250*1024*1024*1024&&p.isMounted&&(i=!0),d.length>1){let f=d[1];f.size>=400*1024*1024*1024&&!f.isMounted&&(a=!0)}}return{disks:d,has850GB:s,has400GB:a,hasUsed1250GB:i}}r(Hc,"getPreferredDisks");var qt=Hc;import{spawnSync as fn}from"child_process";var Qt=r(t=>{if(fn(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return fn(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as wo}from"child_process";var Pe=r((t,e="",o=!1)=>{let n=o?v.LEDGER:v.ROOT,s=`${t} ${n} ext4 auto 0 0`,a=`${t} ${v.LEDGER} ext4 auto 0 0
203
+ ${e} ${v.ACCOUNTS} ext4 auto 0 0
204
+ `,c=[e!==""?a:s],m=wo("cat /etc/fstab",{shell:!0,encoding:"utf8"}).stdout,d=[];for(let p of c)m.includes(p)||d.push(p);if(d.length){let p=`echo "${d.join(`
205
+ `)}" | sudo tee -a /etc/fstab`;wo(p,{shell:!0,encoding:"utf8"}),wo("sudo mount --all --verbose",{shell:!0,encoding:"utf8"}),console.log(`Added lines to /etc/fstab:
206
206
  ${d.join(`
207
- `)}`)}else console.log("All lines are already present in /etc/fstab")},"ensureFstabEntries");import{spawnSync as $c}from"child_process";var pn=r(t=>{try{let e=`sudo umount ${t}`,{stderr:o}=$c(e,{shell:!0,stdio:"inherit"});return!o.includes("busy")}catch(e){return console.log(`umount: ${e}`),!1}},"umount");var Kc=r(async()=>{let t=Wt(),e=t.disks[0].mountpoint;if(t.has850GB&&t.has400GB){console.log("Setting up DOUBLE DISK..."),await k({MNT_DISK_TYPE:et.DOUBLE});let o="/dev/"+t.disks[0].name,n="/dev/"+t.disks[1].name,s=qt(o),a=qt(n),i=s?o:"",c=a?n:"",l=!1;i===""&&c&&(i=c,c="",l=!0),Pe(i,c,l)}else if(console.log("Setting up SINGLE DISK..."),await k({MNT_DISK_TYPE:et.SINGLE}),e.includes("/mnt")){pn(e);let o="/dev/"+t.disks[0].name;qt(o),Pe(o)}else{let o="/dev/"+t.disks[0].name;qt(o),Pe(o)}},"mountDirs"),dn=Kc;import{spawnSync as Dc}from"child_process";var un=r(()=>{let t=[`sudo mkdir -p ${R.ROOT}`,`sudo chown -R solc:solc ${R.ROOT}`,`sudo chmod -R 755 ${R.ROOT}`,`sudo mkdir -p ${R.ACCOUNTS}`,`sudo chown -R solc:solc ${R.ACCOUNTS}`,`sudo chmod -R 755 ${R.ACCOUNTS}`,`sudo mkdir -p ${R.LEDGER}`,`sudo chown -R solc:solc ${R.LEDGER}`,`sudo chmod -R 755 ${R.LEDGER}`];for(let e of t)Dc(e,{shell:!0,stdio:"ignore"})},"setupPermissions");import{execSync as Le}from"child_process";import{existsSync as bc}from"fs";function fn(){if(!bc(L.SOL_SYSTEM_CONFIG21)){console.log("Creating solana-validator.conf sysctl configuration file");let t=`
207
+ `)}`)}else console.log("All lines are already present in /etc/fstab")},"ensureFstabEntries");import{spawnSync as Yc}from"child_process";var hn=r(t=>{try{let e=`sudo umount ${t}`,{stderr:o}=Yc(e,{shell:!0,stdio:"inherit"});return!o.includes("busy")}catch(e){return console.log(`umount: ${e}`),!1}},"umount");var jc=r(async()=>{let t=qt(),e=t.disks[0].mountpoint;if(t.has850GB&&t.has400GB){console.log("Setting up DOUBLE DISK..."),await k({MNT_DISK_TYPE:ot.DOUBLE});let o="/dev/"+t.disks[0].name,n="/dev/"+t.disks[1].name,s=Qt(o),a=Qt(n),i=s?o:"",c=a?n:"",l=!1;i===""&&c&&(i=c,c="",l=!0),Pe(i,c,l)}else if(console.log("Setting up SINGLE DISK..."),await k({MNT_DISK_TYPE:ot.SINGLE}),e.includes("/mnt")){hn(e);let o="/dev/"+t.disks[0].name;Qt(o),Pe(o)}else{let o="/dev/"+t.disks[0].name;Qt(o),Pe(o)}},"mountDirs"),yn=jc;import{spawnSync as Jc}from"child_process";var Sn=r(()=>{let t=[`sudo mkdir -p ${v.ROOT}`,`sudo chown -R solc:solc ${v.ROOT}`,`sudo chmod -R 755 ${v.ROOT}`,`sudo mkdir -p ${v.ACCOUNTS}`,`sudo chown -R solc:solc ${v.ACCOUNTS}`,`sudo chmod -R 755 ${v.ACCOUNTS}`,`sudo mkdir -p ${v.LEDGER}`,`sudo chown -R solc:solc ${v.LEDGER}`,`sudo chmod -R 755 ${v.LEDGER}`];for(let e of t)Jc(e,{shell:!0,stdio:"ignore"})},"setupPermissions");import{execSync as xe}from"child_process";import{existsSync as Bc}from"fs";function Tn(){if(!Bc(P.SOL_SYSTEM_CONFIG21)){console.log("Creating solana-validator.conf sysctl configuration file");let t=`
208
208
  # Increase UDP buffer sizes
209
209
  net.core.rmem_default = 134217728
210
210
  net.core.rmem_max = 134217728
@@ -219,7 +219,7 @@ fs.nr_open = 1000000
219
219
  `,e=`
220
220
  # Increase process file descriptor count limit
221
221
  * - nofile 1000000
222
- `;Le(`echo "${t}" | sudo tee ${L.SOL_SYSTEM_CONFIG21} > /dev/null`),Le(`sudo sysctl -p ${L.SOL_SYSTEM_CONFIG21}`),Le(`echo "DefaultLimitNOFILE=1000000" | sudo tee -a ${L.SOL_SYSTEM_CONF}`),Le(`echo "${e}" | sudo tee ${L.SOL_NOFILES_CONF} > /dev/null`)}}r(fn,"setupSystemd");var hn=r((t=M.USERNAME)=>{let{log:e}=mt();return`${e} {
222
+ `;xe(`echo "${t}" | sudo tee ${P.SOL_SYSTEM_CONFIG21} > /dev/null`),xe(`sudo sysctl -p ${P.SOL_SYSTEM_CONFIG21}`),xe(`echo "DefaultLimitNOFILE=1000000" | sudo tee -a ${P.SOL_SYSTEM_CONF}`),xe(`echo "${e}" | sudo tee ${P.SOL_NOFILES_CONF} > /dev/null`)}}r(Tn,"setupSystemd");var gn=r((t=M.USERNAME)=>{let{log:e}=pt();return`${e} {
223
223
  su ${t} ${t}
224
224
  daily
225
225
  rotate 1
@@ -230,7 +230,7 @@ fs.nr_open = 1000000
230
230
  systemctl kill -s USR1 solv.service
231
231
  endscript
232
232
  }
233
- `},"logRotates");import{existsSync as Uc}from"fs";import{execSync as Mc}from"child_process";function yn(){if(console.log("Creating logrotate configuration for solana"),Uc(L.SOL_LOGROTATE))console.log("SOL_LOGROTATE_PATH already exists. Skipping logrotate configuration.");else{let t=hn();Mc(`echo "${t}" | sudo tee ${L.SOL_LOGROTATE} > /dev/null`),console.log("Logrotate configuration created.")}}r(yn,"setupLogrotate");var Fc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password",Hc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea",Yc=`/home/${M.USERNAME}/.local/share/solana/install/active_release/bin`,Sn=r((t=!0)=>{let{scriptPath:e}=mt(t),o=t?Hc:Fc,n=Yc;return`[Unit]
233
+ `},"logRotates");import{existsSync as Gc}from"fs";import{execSync as zc}from"child_process";function En(){if(console.log("Creating logrotate configuration for solana"),Gc(P.SOL_LOGROTATE))console.log("SOL_LOGROTATE_PATH already exists. Skipping logrotate configuration.");else{let t=gn();zc(`echo "${t}" | sudo tee ${P.SOL_LOGROTATE} > /dev/null`),console.log("Logrotate configuration created.")}}r(En,"setupLogrotate");var Wc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password",qc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea",Qc=`/home/${M.USERNAME}/.local/share/solana/install/active_release/bin`,wn=r((t=!0)=>{let{scriptPath:e}=pt(t),o=t?qc:Wc,n=Qc;return`[Unit]
234
234
  Description=Solana Validator
235
235
  After=network.target
236
236
  StartLimitIntervalSec=0
@@ -248,7 +248,7 @@ Environment="${o}"
248
248
  ExecStart=${e}
249
249
 
250
250
  [Install]
251
- WantedBy=multi-user.target`},"solvService");import{execSync as jc}from"child_process";function Tn(t=!0){console.log("Creating solvService configuration for solana");let e=Sn(t);jc(`echo "${e}" | sudo tee ${L.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(Tn,"setupSolvService");var gn=r((t=!0)=>{yn(),Tn(t),fn()},"makeServices");import{spawnSync as Ao}from"node:child_process";var En=r(t=>{try{Ce(t);let e=t.NETWORK;return e===u.TESTNET?(Ao(`solana config set --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"}),Ao(`solana airdrop 1 --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"})):Ao(`solana config set --url ${e} -k ${K}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==T.RPC&&ve(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as wn}from"node:child_process";var xe=r((t=!1)=>{try{if(t){let o=["aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger ","https://snapshots.avorio.network/testnet/snapshot.tar.bz2","https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2"].join(" ");wn(o,{shell:!0,stdio:"inherit"});return}let e=["sudo apt-get update && sudo apt-get install -y aria2","&&","aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger","https://snapshots.avorio.network/mainnet-beta/snapshot.tar.bz2","https://snapshots.avorio.network/mainnet-beta/incremental-snapshot.tar.bz2"].join(" ");wn(e,{shell:!0,stdio:"inherit"})}catch(e){throw new Error(`getSnapshot Error: ${e}`)}},"getSnapshot");import{spawnSync as Jc}from"node:child_process";var Ve=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`;Jc(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as Bc}from"node:child_process";var Gc=r(()=>{try{Bc('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),An=Gc;import _o from"fs";import{promisify as Nn}from"util";import{execSync as _n}from"child_process";var zc=Nn(_o.readFile),Wc=Nn(_o.access),$e="/etc/sysctl.conf",qc=`# set default and maximum socket buffer sizes to 128MB
251
+ WantedBy=multi-user.target`},"solvService");import{execSync as Xc}from"child_process";function An(t=!0){console.log("Creating solvService configuration for solana");let e=wn(t);Xc(`echo "${e}" | sudo tee ${P.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(An,"setupSolvService");var _n=r((t=!0)=>{En(),An(t),Tn()},"makeServices");import{spawnSync as Ao}from"node:child_process";var Nn=r(t=>{try{Ie(t);let e=t.NETWORK;return e===u.TESTNET?(Ao(`solana config set --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"}),Ao(`solana airdrop 1 --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"})):Ao(`solana config set --url ${e} -k ${K}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==T.RPC&&ve(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as On}from"node:child_process";var Ve=r((t=!1)=>{try{if(t){let o=["aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger ","https://snapshots.avorio.network/testnet/snapshot.tar.bz2","https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2"].join(" ");On(o,{shell:!0,stdio:"inherit"});return}let e=["sudo apt-get update && sudo apt-get install -y aria2","&&","aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger","https://snapshots.avorio.network/mainnet-beta/snapshot.tar.bz2","https://snapshots.avorio.network/mainnet-beta/incremental-snapshot.tar.bz2"].join(" ");On(e,{shell:!0,stdio:"inherit"})}catch(e){throw new Error(`getSnapshot Error: ${e}`)}},"getSnapshot");import{spawnSync as Zc}from"node:child_process";var $e=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`;Zc(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as tl}from"node:child_process";var el=r(()=>{try{tl('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),kn=el;import _o from"fs";import{promisify as vn}from"util";import{execSync as Rn}from"child_process";var ol=vn(_o.readFile),rl=vn(_o.access),Ke="/etc/sysctl.conf",nl=`# set default and maximum socket buffer sizes to 128MB
252
252
  net.core.rmem_default=134217728
253
253
  net.core.wmem_default=134217728
254
254
  net.core.rmem_max=134217728
@@ -259,23 +259,23 @@ net.ipv4.tcp_rmem=10240 87380 134217728
259
259
  net.ipv4.tcp_wmem=10240 87380 134217728
260
260
 
261
261
  # Enable TCP westwood for kernels greater than or equal to 2.6.13
262
- net.ipv4.tcp_congestion_control=westwood`;async function Qc(){try{await Wc($e,_o.constants.F_OK)}catch{return console.log(`Skipping updateSysctlConfig: ${$e} does not exist`)}try{let t=await zc($e,"utf8");if(!t.includes("rmem_default")){console.log("No need to update sysctl.conf");return}let e=t.replace(/net\.core\.(rmem_default|wmem_default|rmem_max|wmem_max)=.*\n/g,"");e=e.replace(/net\.ipv4\.tcp_(rmem|wmem|congestion_control)=.*\n/g,""),e+=`
263
- ${qc}
264
- `,_n(`echo "${e}" | sudo tee ${$e} > /dev/null`),_n("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(Qc,"updateSysctlConfig");var On=Qc;import{spawnSync as Xc}from"child_process";var kn=r(()=>{Xc("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as Zc}from"node:child_process";var vn=r(()=>{Zc("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as Rn}from"child_process";var Cn=r((t=!1,e=!1)=>{t?el():tl(e)},"createSymLink"),tl=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),Rn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),el=r(()=>{Rn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import Ke from"chalk";var ol=r(()=>{let t=`${Ke.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${Ke.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
262
+ net.ipv4.tcp_congestion_control=westwood`;async function sl(){try{await rl(Ke,_o.constants.F_OK)}catch{return console.log(`Skipping updateSysctlConfig: ${Ke} does not exist`)}try{let t=await ol(Ke,"utf8");if(!t.includes("rmem_default")){console.log("No need to update sysctl.conf");return}let e=t.replace(/net\.core\.(rmem_default|wmem_default|rmem_max|wmem_max)=.*\n/g,"");e=e.replace(/net\.ipv4\.tcp_(rmem|wmem|congestion_control)=.*\n/g,""),e+=`
263
+ ${nl}
264
+ `,Rn(`echo "${e}" | sudo tee ${Ke} > /dev/null`),Rn("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(sl,"updateSysctlConfig");var Cn=sl;import{spawnSync as al}from"child_process";var In=r(()=>{al("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as il}from"node:child_process";var Ln=r(()=>{il("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as Pn}from"child_process";var xn=r((t=!1,e=!1)=>{t?ll():cl(e)},"createSymLink"),cl=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),Pn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),ll=r(()=>{Pn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import De from"chalk";var ml=r(()=>{let t=`${De.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${De.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
265
265
 
266
266
  We're excited to offer a free API key exclusively for the Validators DAO community \u{1F389}
267
267
  It's our way of supporting the community and empowering you with fast, reliable connections.
268
268
 
269
269
  To get your free API key, simply join us through the link below:
270
270
 
271
- Validators DAO: ${Ke.white("`https://discord.gg/X4BgkBHavp`")}
271
+ Validators DAO: ${De.white("`https://discord.gg/X4BgkBHavp`")}
272
272
 
273
273
  Unlock fast connections and elevate your experience with your very own API key \u{1F680}
274
- `;console.log(Ke.cyan(e))},"rpcLog"),gt=ol;import{spawnSync as rt}from"child_process";var rl=r(()=>({filePath:"/home/solv/start-firedancer.sh",body:`#!/usr/bin/env bash
274
+ `;console.log(De.cyan(e))},"rpcLog"),wt=ml;import{spawnSync as nt}from"child_process";var pl=r(()=>({filePath:"/home/solv/start-firedancer.sh",body:`#!/usr/bin/env bash
275
275
  sudo chmod -R 700 /mnt
276
276
  sudo fdctl configure init all --config /home/solv/firedancer/config.toml
277
277
  sudo chown -R solv:solv /mnt
278
- sudo fdctl run --config /home/solv/firedancer/config.toml`}),"startFiredancerScript"),In=rl;var nl=r(()=>({filePath:"/etc/systemd/system/frankendancer.service",body:`[Unit]
278
+ sudo fdctl run --config /home/solv/firedancer/config.toml`}),"startFiredancerScript"),Vn=pl;var dl=r(()=>({filePath:"/etc/systemd/system/frankendancer.service",body:`[Unit]
279
279
  Description=Firedancer Solana
280
280
  After=network.target
281
281
  StartLimitIntervalSec=0
@@ -291,7 +291,7 @@ ExecStart=/home/solv/start-firedancer.sh
291
291
 
292
292
  [Install]
293
293
  WantedBy=multi-user.target
294
- `}),"firedancerService"),Pn=nl;var sl=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solv"
294
+ `}),"firedancerService"),$n=dl;var ul=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solv"
295
295
  user = "solv"
296
296
  scratch_directory = "/home/{user}"
297
297
  dynamic_port_range = "8900-9000"
@@ -353,7 +353,7 @@ dynamic_port_range = "8900-9000"
353
353
 
354
354
 
355
355
  [hugetlbfs]
356
- mount_path = "/mnt"`}),"configToml"),De=sl;var al=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solv"
356
+ mount_path = "/mnt"`}),"configToml"),be=ul;var fl=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solv"
357
357
  user = "solv"
358
358
  scratch_directory = "/home/solv"
359
359
  dynamic_port_range = "8100-8120"
@@ -451,13 +451,13 @@ dynamic_port_range = "8100-8120"
451
451
  commission_bps = 1000
452
452
 
453
453
  [net]
454
- provider = "xdp"`}),"configTomlMainnet"),be=al;var il=r(async()=>{rt("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),rt(`git checkout v${gr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),rt("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),rt("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),rt("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=In();rt(`sudo tee ${t} > /dev/null << 'EOF'
454
+ provider = "xdp"`}),"configTomlMainnet"),Ue=fl;var hl=r(async()=>{nt("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),nt(`git checkout v${Er}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),nt("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),nt("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),nt("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Vn();nt(`sudo tee ${t} > /dev/null << 'EOF'
455
455
  ${e}
456
- EOF`,{shell:!0,stdio:"inherit"}),rt(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=Pn();rt(`sudo tee ${o.filePath} > /dev/null << 'EOF'
456
+ EOF`,{shell:!0,stdio:"inherit"}),nt(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=$n();nt(`sudo tee ${o.filePath} > /dev/null << 'EOF'
457
457
  ${o.body}
458
- EOF`,{shell:!0,stdio:"inherit"}),rt("sudo systemctl daemon-reload",{shell:!0});let s=(await I()).NETWORK===u.MAINNET?be():De();rt(`sudo tee ${s.filePath} > /dev/null << 'EOF'
458
+ EOF`,{shell:!0,stdio:"inherit"}),nt("sudo systemctl daemon-reload",{shell:!0});let s=(await I()).NETWORK===u.MAINNET?Ue():be();nt(`sudo tee ${s.filePath} > /dev/null << 'EOF'
459
459
  ${s.body}
460
- EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Ue=il;var xn=r(async(t=!1,e=!1)=>{try{t||(console.log(Ln.white("\u{1F7E2} Initializing Setup")),await I(),await Xr());let o=await I(),n=o.NETWORK===u.TESTNET;switch(ln(),e||dn(),gn(n),kn(),An(),await On(),En(o),Cn(o.IS_DUMMY,n),o.NODE_TYPE){case T.RPC:await en(o);break;case T.VALIDATOR:await sn(o),o.VALIDATOR_TYPE===g.FRANKENDANCER&&await Ue();break;default:throw new Error("Unknown Node Type")}un(),Jt(),o.VALIDATOR_TYPE!==g.FRANKENDANCER&&(vn(),xe(n)),Ve(o),console.log(Ln.white("\u{1F7E2} Setup Completed")),gt()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var Vn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
460
+ EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Me=hl;var Dn=r(async(t=!1,e=!1)=>{try{t||(console.log(Kn.white("\u{1F7E2} Initializing Setup")),await I(),await on());let o=await I(),n=o.NETWORK===u.TESTNET;switch(un(),e||yn(),_n(n),In(),kn(),await Cn(),Nn(o),xn(o.IS_DUMMY,n),o.NODE_TYPE){case T.RPC:await sn(o);break;case T.VALIDATOR:await mn(o),o.VALIDATOR_TYPE===g.FRANKENDANCER&&await Me();break;default:throw new Error("Unknown Node Type")}Sn(),Gt(),o.VALIDATOR_TYPE!==g.FRANKENDANCER&&(Ln(),Ve(n)),$e(o),console.log(Kn.white("\u{1F7E2} Setup Completed")),wt()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var bn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
461
461
  [Unit]
462
462
  Description=Solana transaction relayer
463
463
  Requires=network-online.target
@@ -483,7 +483,7 @@ ExecStart=/home/solv/jito-relayer/target/release/jito-transaction-relayer \\
483
483
  --verifying-key-pem-path=/home/solv/public.pem
484
484
 
485
485
  [Install]
486
- WantedBy=multi-user.target`;return{filePath:e,body:o}},"relayerService"),$n=r(t=>{let e="/etc/systemd/system/relayer.service",o=`[Unit]
486
+ WantedBy=multi-user.target`;return{filePath:e,body:o}},"relayerService"),Un=r(t=>{let e="/etc/systemd/system/relayer.service",o=`[Unit]
487
487
  Description=Solana transaction relayer
488
488
  Requires=network-online.target
489
489
  After=network-online.target
@@ -506,45 +506,45 @@ Environment=WEBSOCKET_SERVERS=wss://your.websocket.server
506
506
  ExecStart=/home/solv/jito-relayer/target/release/jito-transaction-relayer --keypair-path=/home/solv/relayer-keypair.json --signing-key-pem-path=/home/solv/private.pem --verifying-key-pem-path=/home/solv/public.pem --forward-all
507
507
 
508
508
  [Install]
509
- WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Me,spawnSync as pt}from"child_process";var Kn=r(async(t,e=!0)=>{pt("openssl",["genrsa","-out","/home/solv/private.pem"],{stdio:"inherit",shell:!0}),pt("openssl",["rsa","-in","/home/solv/private.pem","-pubout","-out","/home/solv/public.pem"],{stdio:"inherit",shell:!0}),pt("solana-keygen",["new","--no-bip39-passphrase","--outfile","/home/solv/relayer-keypair.json"],{stdio:"inherit",shell:!0}),pt("git",["clone","https://github.com/jito-foundation/jito-relayer.git"],{stdio:"inherit",shell:!0}),pt("git",["submodule","update","--init","--recursive"],{cwd:"jito-relayer",stdio:"inherit",shell:!0}),pt("cargo",["build","--release"],{cwd:"jito-relayer",stdio:"inherit",shell:!0});let{filePath:o,body:n}=e?Vn(t):$n(t);Me(`echo "${n}" | sudo tee ${o} > /dev/null`),pt("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),pt("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 cl=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"),Dn=cl;import{spawnSync as ll}from"node:child_process";import{readFile as ml,writeFile as pl}from"fs/promises";var dl=r(async()=>{let t="/home/solv/start-validator.sh",o=(await ml(t,"utf-8")).split(`
509
+ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Fe,spawnSync as dt}from"child_process";var Mn=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?bn(t):Un(t);Fe(`echo "${n}" | sudo tee ${o} > /dev/null`),dt("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),dt("sudo",["systemctl","start","relayer"],{stdio:"inherit"}),Fe("sudo ufw allow 11228",{stdio:"inherit"}),Fe("sudo ufw allow 11229",{stdio:"inherit"}),Fe("sudo ufw allow 11226",{stdio:"inherit"})},"jitoRelayerSetup");import{spawnSync as No}from"node:child_process";var yl=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"),Fn=yl;import{spawnSync as Sl}from"node:child_process";import{readFile as Tl,writeFile as gl}from"fs/promises";var El=r(async()=>{let t="/home/solv/start-validator.sh",o=(await Tl(t,"utf-8")).split(`
510
510
  `);o.splice(-1,0,"--geyser-plugin-config /home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json \\");let n=o.join(`
511
- `);await pl(t,n),ll(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),bn=dl;import ul from"inquirer";import{writeFile as fl}from"node:fs/promises";var Un=r(async()=>{let e=(await ul.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}=Dn(e),c=JSON.stringify(i,null,2);await fl(a,c,{encoding:"utf8"}),await bn()},"yellowstoneGeyser");var Mn=r(t=>{h.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 ...")),ve(t),process.exit(0);else if(e.key)console.log(it.white("\u{1F511} Setting up Validator Keypairs ...")),Ce(t),process.exit(0);else if(e.relayer){console.log(it.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await Tt()).blockEngineUrl;await Kn(n,!1),console.log(it.green(`Jito Relayer Setup Completed
512
-
513
- $ solc relayer --help`)),Jt(),gt(),process.exit(0)}else if(e.jupiter)console.log(it.white("\u{1F30F} Setting up Jupiter Swap API ...")),await Wr(),Jt(),gt(),process.exit(0);else if(e.geyser){console.log(it.white("\u26A1\uFE0F Setting up Geyser ...")),await Un();return}else if(e.firedancer){console.log(it.white("\u{1F525} Setting up Firedancer ...")),await Ue();return}await xn(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 hl}from"child_process";var Oo=r(()=>{let o=hl("df -h").toString().split(`
514
- `).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)=>Et(a.Avail)-Et(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&Et(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/")&&Et(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Fn from"chalk";import yl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Fn.blue(n)),o=new yl({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=>Fn.white(s)))}),console.log(o.toString())},"displayTable");var Hn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),Et=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 Yn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ve(t),process.exit(0)})},"startCommand");import{spawnSync as Sl}from"node:child_process";var jn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),Sl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var Jn=r(t=>{h.command("stop").description("Stop Solana Validator").option("-s, --service <service>","systemd service name to stop").option("--debug","Print executed command").action(e=>{jn(t,e),process.exit(0)})},"stopCommand");import{spawnSync as Qt}from"node:child_process";import Bn from"chalk";var Gn=r(t=>{let e=D();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(Bn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Qt("solc stop",{stdio:"inherit",shell:!0}),Qt("solc rm:snapshot",{stdio:"inherit",shell:!0}),Qt("solc get snapshot",{stdio:"inherit",shell:!0}),Qt("solc start",{stdio:"inherit",shell:!0}),console.log(Bn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;Qt(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var zn=r(t=>{let o=t.NETWORK===u.TESTNET?Z:tt;t.NODE_TYPE===T.RPC&&(o=St),h.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===g.JITO){let l=`v${n.version||H}-jito`;ge(l);return}t.NODE_TYPE===T.RPC&&(o=St);let i=n.version||o;await fe(i)})},"installCommands");import{spawnSync as Tl}from"child_process";var Wn=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Tl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=Wt();console.log(t)})},"mountCommands");import{spawnSync as wl}from"node:child_process";import qn from"chalk";import{spawnSync as gl}from"child_process";var El=r(async()=>{try{let t=gl("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("solc epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),Fe=El;var Qn=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solc Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await Fe()&&(console.log(qn.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 && solc epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;wl(n,{shell:!0,stdio:"inherit"}),console.log(qn.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var Xt={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 _l,mkdirSync as Nl}from"fs";import Ol from"inquirer";import{homedir as kl}from"os";import{spawnSync as Al}from"node:child_process";function Xn(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Al(s,{shell:!0,stdio:"inherit"}).status===0}r(Xn,"executeSCP");var vo=r(async(t="")=>{let e=t;t===""&&(e=(await Ol.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=kl(),s=n.includes("/home/solv")?"/home/solv":n+Xt.SOLV_KEYPAIR_DOWNLOAD_PATH;_l(s)||Nl(s,{recursive:!0});let a=!0,i=n+"/"+Ho;o.push(i);for(let c of o){let l=c.split("/"),p=l[l.length-1];p=n.includes("/home/solv")?p:p.replace(".json",`-${e}.json`);let d=`${s}/${p}`;Xn(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as vl}from"child_process";import{existsSync as Rl}from"fs";import Cl from"inquirer";import Il from"os";var Zn=r(async(t="")=>{let e=Il.userInfo().homedir,o=t;t===""&&(o=(await Cl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${Xt.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=Xt.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(A(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(!Rl(l))continue;let p=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;vl(p,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Pl}from"child_process";import Ll from"inquirer";var ts=r(async()=>{let t=await Ll.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}`;Pl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import He from"chalk";import{readFileSync as xl}from"fs";import Vl from"os";var es=r(()=>{try{let e=`${Vl.userInfo().homedir}/.ssh/id_rsa.pub`,o=xl(e,"utf8");console.log(He.white(`Your SSH Public Key is:
515
- `)),console.log(He.white(o))}catch(t){console.error(He.white(`Error reading SSH Public Key
516
- `)),console.error(He.white(t))}},"cat");import{spawnSync as $l}from"child_process";var os=r(()=>{$l("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Kl}from"child_process";import{readFileSync as Dl}from"fs";import{Readable as bl}from"stream";var rs=r(async t=>new Promise((e,o)=>{try{let n=Kl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
517
- `).filter(i=>i)),t.increment()}),n.stderr.on("data",a=>{t.increment()}),n.on("close",a=>{e(s)})}catch(n){o(`search Error: ${n}`)}}),"search"),Ul=r(t=>{try{return JSON.parse(Dl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),ns=r(async(t,e)=>{let o=[],n=bl.from(t);return n.on("data",async s=>{Ul(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import Ye from"chalk";import{Presets as Yl,SingleBar as jl}from"cli-progress";import ss from"chalk";import{spawnSync as Ml}from"node:child_process";import Fl from"node-fetch";var Hl=r(async()=>{let t=await Fl(Wo,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(ss.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
518
- Please contact Discord Channel`)),!1;let e=await t.json();for(let o of e.cmds)Ml(o,{shell:!0,stdio:"ignore"});return console.log(ss.white("\u{1F7E2} Upload completed successfully!")),!0},"uploadVS"),as=Hl;var is=r(()=>{let t=h.command("scp").description("Scp Commands").argument("<cmd>");t.command("download").alias("dl").option("--ip <ip>","Download Key to a Specific IP Address","").description("Export Solana Validator Keypair").action(async e=>{if(e.ip){await vo(e.ip);return}await vo()}),t.command("upload").alias("up").option("--vs","Upload Key to a New Validator Auto Operation Node",!1).option("--ip <ip>","Upload Key to a Specific IP Address","").description("Upload Solana Validator Keypair").action(async e=>{if(e.vs){await as();return}await Zn(e.ip)}),t.command("create").alias("c").description("Create SSH Login Setting").action(async()=>{await ts()}),t.command("cat").description("Show SSH Public Key").action(()=>{es()}),t.command("init").description("Init SSH Key Pair").action(()=>{os()}),t.command("search").alias("sc").description("Search Solana Validator Key Pair").action(async()=>{console.log("start searching...");let e=new jl({},Yl.shades_classic);e.start(1e4,0);let o=await rs(e),n=await ns(o,e);e.stop(),console.log(Ye.white(`\u{1F50D} Found ${n.length} Potential Solana Key Pairs \u{1F389}`)),n=n.slice(0,10),console.log(Ye.green(`
511
+ `);await gl(t,n),Sl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Hn=El;import wl from"inquirer";import{writeFile as Al}from"node:fs/promises";var Yn=r(async()=>{let e=(await wl.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}=Fn(e),c=JSON.stringify(i,null,2);await Al(a,c,{encoding:"utf8"}),await Hn()},"yellowstoneGeyser");var jn=r(t=>{h.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(ct.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),ve(t),process.exit(0);else if(e.key)console.log(ct.white("\u{1F511} Setting up Validator Keypairs ...")),Ie(t),process.exit(0);else if(e.relayer){console.log(ct.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await gt()).blockEngineUrl;await Mn(n,!1),console.log(ct.green(`Jito Relayer Setup Completed
512
+
513
+ $ solc relayer --help`)),Gt(),wt(),process.exit(0)}else if(e.jupiter)console.log(ct.white("\u{1F30F} Setting up Jupiter Swap API ...")),await qr(),Gt(),wt(),process.exit(0);else if(e.geyser){console.log(ct.white("\u26A1\uFE0F Setting up Geyser ...")),await Yn();return}else if(e.firedancer){console.log(ct.white("\u{1F525} Setting up Firedancer ...")),await Me();return}await Dn(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(ct.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ct.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as _l}from"child_process";var Oo=r(()=>{let o=_l("df -h").toString().split(`
514
+ `).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)=>At(a.Avail)-At(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&At(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&At(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&At(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/")&&At(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Jn from"chalk";import Nl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Jn.blue(n)),o=new Nl({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=>Jn.white(s)))}),console.log(o.toString())},"displayTable");var Bn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),At=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 Gn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{$e(t),process.exit(0)})},"startCommand");import{spawnSync as Ol}from"node:child_process";var zn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),Ol(s,{shell:!0,stdio:"inherit"})},"stopSolana");var Wn=r(t=>{h.command("stop").description("Stop Solana Validator").option("-s, --service <service>","systemd service name to stop").option("--debug","Print executed command").action(e=>{zn(t,e),process.exit(0)})},"stopCommand");import{spawnSync as Xt}from"node:child_process";import qn from"chalk";var Qn=r(t=>{let e=D();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(qn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Xt("solc stop",{stdio:"inherit",shell:!0}),Xt("solc rm:snapshot",{stdio:"inherit",shell:!0}),Xt("solc get snapshot",{stdio:"inherit",shell:!0}),Xt("solc start",{stdio:"inherit",shell:!0}),console.log(qn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;Xt(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var Xn=r(t=>{let o=t.NETWORK===u.TESTNET?tt:et;t.NODE_TYPE===T.RPC&&(o=Tt),h.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===g.JITO){let l=`v${n.version||H}-jito`;Ee(l);return}t.NODE_TYPE===T.RPC&&(o=Tt);let i=n.version||o;await he(i)})},"installCommands");import{spawnSync as kl}from"child_process";var Zn=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{kl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=qt();console.log(t)})},"mountCommands");import{spawnSync as Cl}from"node:child_process";import ts from"chalk";import{spawnSync as Rl}from"child_process";var vl=r(async()=>{try{let t=Rl("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("solc epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),He=vl;var es=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solc Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await He()&&(console.log(ts.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 && solc epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;Cl(n,{shell:!0,stdio:"inherit"}),console.log(ts.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var Zt={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 Ll,mkdirSync as Pl}from"fs";import xl from"inquirer";import{homedir as Vl}from"os";import{spawnSync as Il}from"node:child_process";function os(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Il(s,{shell:!0,stdio:"inherit"}).status===0}r(os,"executeSCP");var Ro=r(async(t="")=>{let e=t;t===""&&(e=(await xl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=Vl(),s=n.includes("/home/solv")?"/home/solv":n+Zt.SOLV_KEYPAIR_DOWNLOAD_PATH;Ll(s)||Pl(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}`;os(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as $l}from"child_process";import{existsSync as Kl}from"fs";import Dl from"inquirer";import bl from"os";var rs=r(async(t="")=>{let e=bl.userInfo().homedir,o=t;t===""&&(o=(await Dl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${Zt.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=Zt.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(A(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(!Kl(l))continue;let m=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;$l(m,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Ul}from"child_process";import Ml from"inquirer";var ns=r(async()=>{let t=await Ml.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}`;Ul(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Ye from"chalk";import{readFileSync as Fl}from"fs";import Hl from"os";var ss=r(()=>{try{let e=`${Hl.userInfo().homedir}/.ssh/id_rsa.pub`,o=Fl(e,"utf8");console.log(Ye.white(`Your SSH Public Key is:
515
+ `)),console.log(Ye.white(o))}catch(t){console.error(Ye.white(`Error reading SSH Public Key
516
+ `)),console.error(Ye.white(t))}},"cat");import{spawnSync as Yl}from"child_process";var as=r(()=>{Yl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as jl}from"child_process";import{readFileSync as Jl}from"fs";import{Readable as Bl}from"stream";var is=r(async t=>new Promise((e,o)=>{try{let n=jl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
517
+ `).filter(i=>i)),t.increment()}),n.stderr.on("data",a=>{t.increment()}),n.on("close",a=>{e(s)})}catch(n){o(`search Error: ${n}`)}}),"search"),Gl=r(t=>{try{return JSON.parse(Jl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),cs=r(async(t,e)=>{let o=[],n=Bl.from(t);return n.on("data",async s=>{Gl(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import je from"chalk";import{Presets as Ql,SingleBar as Xl}from"cli-progress";import ls from"chalk";import{spawnSync as zl}from"node:child_process";import Wl from"node-fetch";var ql=r(async()=>{let t=await Wl(qo,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(ls.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
518
+ Please contact Discord Channel`)),!1;let e=await t.json();for(let o of e.cmds)zl(o,{shell:!0,stdio:"ignore"});return console.log(ls.white("\u{1F7E2} Upload completed successfully!")),!0},"uploadVS"),ms=ql;var ps=r(()=>{let t=h.command("scp").description("Scp Commands").argument("<cmd>");t.command("download").alias("dl").option("--ip <ip>","Download Key to a Specific IP Address","").description("Export Solana Validator Keypair").action(async e=>{if(e.ip){await Ro(e.ip);return}await Ro()}),t.command("upload").alias("up").option("--vs","Upload Key to a New Validator Auto Operation Node",!1).option("--ip <ip>","Upload Key to a Specific IP Address","").description("Upload Solana Validator Keypair").action(async e=>{if(e.vs){await ms();return}await rs(e.ip)}),t.command("create").alias("c").description("Create SSH Login Setting").action(async()=>{await ns()}),t.command("cat").description("Show SSH Public Key").action(()=>{ss()}),t.command("init").description("Init SSH Key Pair").action(()=>{as()}),t.command("search").alias("sc").description("Search Solana Validator Key Pair").action(async()=>{console.log("start searching...");let e=new Xl({},Ql.shades_classic);e.start(1e4,0);let o=await is(e),n=await cs(o,e);e.stop(),console.log(je.white(`\u{1F50D} Found ${n.length} Potential Solana Key Pairs \u{1F389}`)),n=n.slice(0,10),console.log(je.green(`
519
519
  ${n.join(`
520
- `)}`)),console.log(Ye.white(`
520
+ `)}`)),console.log(je.white(`
521
521
  Only showing the first 10 results
522
522
 
523
- `)),console.log(Ye.white("$ mv <your-key> /mt/solana/<solvKeyName>.json"))})},"scpCommands");import{spawnSync as Jl}from"child_process";var cs=r(t=>{h.command("status").description("Check Solana Validator Status").action(()=>{Bl(t)})},"statusCommands"),Bl=r(t=>{let o=`sudo systemctl status ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`;Jl(o,{shell:!0,stdio:"inherit"}),process.exit(0)},"systemctlStatusSolv");import{spawnSync as Gl}from"node:child_process";var ls=r(async(t,e)=>{try{let o=await I(),n=o.NETWORK===u.TESTNET,a=o.NODE_TYPE===T.RPC?o.RPC_URL:n?u.TESTNET:o.RPC_URL,c=[`solana delegate-stake ${t} ${e} --stake-authority ${n?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"} --url ${a}`];return Gl(c.join(" && "),{shell:!0,stdio:"inherit"}),!0}catch(o){throw new Error(`delegateStake: ${o}`)}},"delegateStake");import ps from"inquirer";import{spawnSync as zl}from"node:child_process";var ms=r((t,e,o=5)=>{let n=0;for(;n<o;){let s=zl(`solana create-stake-account ${t} ${e}`,{shell:!0,stdio:"pipe"}),a=s.stdout.toString()+s.stderr.toString();if(a.includes("Signature:"))return console.log("Stake account created successfully:",a),!0;if(a.includes("Error:"))console.log("Error encountered:",a),n++,console.log(`Retrying... (${n}/${o})`);else{console.log("Unknown output:",a);break}n===o&&console.log("Failed to create stake account after retries.")}return!1},"createStakeAccount");import{addLeadingZero as Wl,existsAsync as ql}from"@skeet-framework/utils";import{execSync as Ql,spawnSync as Je}from"node:child_process";import Xl from"node:os";var ds=r(async t=>{let e=t.NETWORK===u.TESTNET;if(!(await ps.prompt([{type:"confirm",name:"confirmCreateStakeAccount",message:"Would you like to create a new stake account?",default:!1}])).confirmCreateStakeAccount)return!1;Je(`solana config set --keypair ${e?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"}`,{shell:!0,stdio:"pipe"});let s=await ps.prompt([{type:"input",name:"solAmount",message:"How many SOL would you like to stake?",default:"1"}]),{stakeKeypair:a,stakeKeypairPath:i}=await tm(),c=t.STAKE_ACCOUNTS,l=Array.from(new Set([...c,a]));return kt({STAKE_ACCOUNT:l}),ms(i,Number(s.solAmount))},"stakeAccountQuestion"),Zl=Xl.userInfo().homedir,je=Zl+"/stake-account",tm=r(async()=>{await ql(je)||Je(`mkdir -p ${je}`,{shell:!0});let t=Je(`ls ${je}`,{shell:!0}).stdout.toString().split(`
524
- `).filter(a=>a.includes(".json")),e=Wl(t.length+1),o=`${je}/stake${e}.json`,n=`solana-keygen new --outfile ${o} --no-bip39-passphrase`;return Je(n,{shell:!0,stdio:"inherit"}),{stakeKeypair:Ql(`solana-keygen pubkey ${o}`).toString().trim(),stakeKeypairPath:o}},"createStakeKeypair");import{spawnSync as em}from"node:child_process";var us=r(async t=>{try{let o=(await I()).NETWORK===u.TESTNET?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",n=`solana deactivate-stake ${t} --stake-authority ${o}`;return em(n,{shell:!0,stdio:"inherit"}),!0}catch(e){throw new Error(`deactivateStake: ${e}`)}},"deactivateStake");import{spawnSync as om}from"node:child_process";var fs=r(async(t,e,o)=>{try{let n=`solana withdraw-stake ${t} ${e} ${o}`;return om(n,{shell:!0,stdio:"inherit"}),!0}catch(n){throw new Error(`withdrawStake: ${n}`)}},"withdrawStake");import It from"chalk";import{Connection as rm,PublicKey as nm}from"@solana/web3.js";import{stakePoolInfo as sm}from"@solana/spl-stake-pool";var Be=r(async(t,e=B)=>{try{let o=new rm(t),n=new nm(e);return await sm(o,n)}catch{return console.log(`Stake Pool not found: ${e}`),null}},"getStakePoolInfo");import{fetchDigitalAsset as am}from"@metaplex-foundation/mpl-token-metadata";import{createUmi as im}from"@metaplex-foundation/umi-bundle-defaults";import{publicKey as cm}from"@metaplex-foundation/umi";var hs=r(async(t,e)=>{try{let o=cm(e);console.log(`mintPubkey: ${o}`);let n=im(t),s=await am(n,o);return{name:s.metadata.name,symbol:s.metadata.symbol,uri:s.metadata.uri,mint:e}}catch{return null}},"getTokenInfo");import Zt from"chalk";import ys from"inquirer";var Ss=r(async t=>{let e=await ys.prompt([{type:"input",name:"stakePoolAddress",message:"Enter Stake Pool Address(default: elSOL)",default:B}]);try{let o=await Be(t,e.stakePoolAddress);if(!o)return console.log(Zt.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
523
+ `)),console.log(je.white("$ mv <your-key> /mt/solana/<solvKeyName>.json"))})},"scpCommands");import{spawnSync as Zl}from"child_process";var ds=r(t=>{h.command("status").description("Check Solana Validator Status").action(()=>{tm(t)})},"statusCommands"),tm=r(t=>{let o=`sudo systemctl status ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`;Zl(o,{shell:!0,stdio:"inherit"}),process.exit(0)},"systemctlStatusSolv");import{spawnSync as em}from"node:child_process";var us=r(async(t,e)=>{try{let o=await I(),n=o.NETWORK===u.TESTNET,a=o.NODE_TYPE===T.RPC?o.RPC_URL:n?u.TESTNET:o.RPC_URL,c=[`solana delegate-stake ${t} ${e} --stake-authority ${n?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"} --url ${a}`];return em(c.join(" && "),{shell:!0,stdio:"inherit"}),!0}catch(o){throw new Error(`delegateStake: ${o}`)}},"delegateStake");import hs from"inquirer";import{spawnSync as om}from"node:child_process";var fs=r((t,e,o=5)=>{let n=0;for(;n<o;){let s=om(`solana create-stake-account ${t} ${e}`,{shell:!0,stdio:"pipe"}),a=s.stdout.toString()+s.stderr.toString();if(a.includes("Signature:"))return console.log("Stake account created successfully:",a),!0;if(a.includes("Error:"))console.log("Error encountered:",a),n++,console.log(`Retrying... (${n}/${o})`);else{console.log("Unknown output:",a);break}n===o&&console.log("Failed to create stake account after retries.")}return!1},"createStakeAccount");import{addLeadingZero as rm,existsAsync as nm}from"@skeet-framework/utils";import{execSync as sm,spawnSync as Be}from"node:child_process";import am from"node:os";var ys=r(async t=>{let e=t.NETWORK===u.TESTNET;if(!(await hs.prompt([{type:"confirm",name:"confirmCreateStakeAccount",message:"Would you like to create a new stake account?",default:!1}])).confirmCreateStakeAccount)return!1;Be(`solana config set --keypair ${e?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"}`,{shell:!0,stdio:"pipe"});let s=await hs.prompt([{type:"input",name:"solAmount",message:"How many SOL would you like to stake?",default:"1"}]),{stakeKeypair:a,stakeKeypairPath:i}=await cm(),c=t.STAKE_ACCOUNTS,l=Array.from(new Set([...c,a]));return vt({STAKE_ACCOUNT:l}),fs(i,Number(s.solAmount))},"stakeAccountQuestion"),im=am.userInfo().homedir,Je=im+"/stake-account",cm=r(async()=>{await nm(Je)||Be(`mkdir -p ${Je}`,{shell:!0});let t=Be(`ls ${Je}`,{shell:!0}).stdout.toString().split(`
524
+ `).filter(a=>a.includes(".json")),e=rm(t.length+1),o=`${Je}/stake${e}.json`,n=`solana-keygen new --outfile ${o} --no-bip39-passphrase`;return Be(n,{shell:!0,stdio:"inherit"}),{stakeKeypair:sm(`solana-keygen pubkey ${o}`).toString().trim(),stakeKeypairPath:o}},"createStakeKeypair");import{spawnSync as lm}from"node:child_process";var Ss=r(async t=>{try{let o=(await I()).NETWORK===u.TESTNET?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",n=`solana deactivate-stake ${t} --stake-authority ${o}`;return lm(n,{shell:!0,stdio:"inherit"}),!0}catch(e){throw new Error(`deactivateStake: ${e}`)}},"deactivateStake");import{spawnSync as mm}from"node:child_process";var Ts=r(async(t,e,o)=>{try{let n=`solana withdraw-stake ${t} ${e} ${o}`;return mm(n,{shell:!0,stdio:"inherit"}),!0}catch(n){throw new Error(`withdrawStake: ${n}`)}},"withdrawStake");import Pt from"chalk";import{Connection as pm,PublicKey as dm}from"@solana/web3.js";import{stakePoolInfo as um}from"@solana/spl-stake-pool";var Ge=r(async(t,e=B)=>{try{let o=new pm(t),n=new dm(e);return await um(o,n)}catch{return console.log(`Stake Pool not found: ${e}`),null}},"getStakePoolInfo");import{fetchDigitalAsset as fm}from"@metaplex-foundation/mpl-token-metadata";import{createUmi as hm}from"@metaplex-foundation/umi-bundle-defaults";import{publicKey as ym}from"@metaplex-foundation/umi";var gs=r(async(t,e)=>{try{let o=ym(e);console.log(`mintPubkey: ${o}`);let n=hm(t),s=await fm(n,o);return{name:s.metadata.name,symbol:s.metadata.symbol,uri:s.metadata.uri,mint:e}}catch{return null}},"getTokenInfo");import te from"chalk";import Es from"inquirer";var ws=r(async t=>{let e=await Es.prompt([{type:"input",name:"stakePoolAddress",message:"Enter Stake Pool Address(default: elSOL)",default:B}]);try{let o=await Ge(t,e.stakePoolAddress);if(!o)return console.log(te.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
525
525
  Please check the correct address and try again.
526
- `)),console.log(Zt.white(`For stake pool information
527
- \u{1F517} https://solanacompass.com/stake-pools/`)),null;let n=o.poolMint,s=await hs(t,n);s||(s={name:n,symbol:n,mint:n,uri:"no metadata"});let a={...s,stakePoolAddress:e.stakePoolAddress},i=`\u{1FA99} ${a.symbol}
526
+ `)),console.log(te.white(`For stake pool information
527
+ \u{1F517} https://solanacompass.com/stake-pools/`)),null;let n=o.poolMint,s=await gs(t,n);s||(s={name:n,symbol:n,mint:n,uri:"no metadata"});let a={...s,stakePoolAddress:e.stakePoolAddress},i=`\u{1FA99} ${a.symbol}
528
528
  Name: ${a.name}
529
- Token Mint: ${a.mint}`;return(await ys.prompt([{type:"confirm",name:"confirm",message:i+`
530
- Is this the correct Stake Pool?`}])).confirm?a:(console.log(Zt.yellow("\u2714\uFE0F Canceled")),null)}catch{return console.log(Zt.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
529
+ Token Mint: ${a.mint}`;return(await Es.prompt([{type:"confirm",name:"confirm",message:i+`
530
+ Is this the correct Stake Pool?`}])).confirm?a:(console.log(te.yellow("\u2714\uFE0F Canceled")),null)}catch{return console.log(te.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
531
531
  Please check the correct address and try again.
532
- `)),console.log(Zt.white(`For stake pool information
533
- \u{1F517} https://solanacompass.com/stake-pools/`)),null}},"selectLST");import{readFile as wm}from"fs/promises";import oe from"inquirer";import{existsAsync as Am}from"@skeet-framework/utils";import{Connection as As,Keypair as ym,PublicKey as ee}from"@solana/web3.js";import{Connection as lm,PublicKey as mm,Keypair as pm}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as dm}from"@solana/spl-token";var te=r(async(t,e,o,n,s=!1)=>{try{let a=pm.fromSecretKey(new Uint8Array(e)),i=new mm(o),c=new lm(t);return(await dm(c,a,i,n,s)).address.toBase58()}catch(a){throw console.log("Error in getOrCreateDestinationAddress",a),new Error(JSON.stringify(a))}},"getOrCreateDestinationAddress");import{Spinner as Sm}from"cli-spinner";import wt from"chalk";import{PublicKey as gs,Keypair as Es,Transaction as Ts,ComputeBudgetProgram as um,LAMPORTS_PER_SOL as fm}from"@solana/web3.js";import*as ws from"@solana/spl-stake-pool";var vt=r(async(t,e,o,n=new gs(B),s,a,i)=>{try{let c=Es.fromSecretKey(new Uint8Array(e)),l=o*fm,{instructions:p,signers:d}=await hm(t,e,l,n,s,a,i),m=new Ts().add(...p);m.feePayer=c.publicKey;let f=await t.getLatestBlockhashAndContext({commitment:"finalized"});m.recentBlockhash=f.value.blockhash,m.sign(...d,c);let S=new Ts().add(...p).add(um.setComputeUnitPrice({microLamports:1e3}));S.feePayer=c.publicKey,S.recentBlockhash=f.value.blockhash,S.sign(...d,c);let w=await t.sendRawTransaction(S.serialize(),{skipPreflight:!0});return await t.confirmTransaction({...f.value,signature:w},"finalized"),{status:"success",signature:w}}catch(c){return console.log("depositSol error",c),{status:"error",error:c}}},"depositSol"),hm=r(async(t,e,o,n=new gs(B),s,a,i)=>{let l=Es.fromSecretKey(new Uint8Array(e)).publicKey;return await ws.depositSol(t,n,l,o,s,a,i)},"depositSOLInstruction");import{sleep as _s}from"@skeet-framework/utils";var Ge=r(async(t,e,o,n)=>{console.log(wt.white("Solana RPC URL:",t));let s=new As(t);o===0&&(o=await ze());let a=new Sm("%s");a.setSpinnerString(18),a.start(),a.setSpinnerTitle(wt.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let i=new ee(e),c=ym.fromSecretKey(new Uint8Array(n)),l=X;a.setSpinnerTitle(wt.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let p=await te(t,n,l,c.publicKey);await _s(1e3),a.setSpinnerTitle(wt.green("\u{1F504} Converting SOL to elSOL"));let d=await vt(s,n,o,i,new ee(p),new ee(mo),c.publicKey),m=0;for(;d.status!=="success";){if(m++,m>10)return a.stop(!0),console.log(wt.red("Failed to deposit.Please try again later \u{1F64F}")),!1;a.setSpinnerTitle(wt.yellow(`\u23F3 ${m} Times Retrying...`)),await _s(3e3),s=new As(t),d=await vt(s,n,o,i,new ee(p),new ee(mo),c.publicKey)}return a.stop(!0),console.log(wt.white(`\u{1F4B0} Finished Deposit - You've got elSOL \u2728
532
+ `)),console.log(te.white(`For stake pool information
533
+ \u{1F517} https://solanacompass.com/stake-pools/`)),null}},"selectLST");import{readFile as Cm}from"fs/promises";import re from"inquirer";import{existsAsync as Im}from"@skeet-framework/utils";import{Connection as ks,Keypair as Nm,PublicKey as oe}from"@solana/web3.js";import{Connection as Sm,PublicKey as Tm,Keypair as gm}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as Em}from"@solana/spl-token";var ee=r(async(t,e,o,n,s=!1)=>{try{let a=gm.fromSecretKey(new Uint8Array(e)),i=new Tm(o),c=new Sm(t);return(await Em(c,a,i,n,s)).address.toBase58()}catch(a){throw console.log("Error in getOrCreateDestinationAddress",a),new Error(JSON.stringify(a))}},"getOrCreateDestinationAddress");import{Spinner as Om}from"cli-spinner";import _t from"chalk";import{PublicKey as _s,Keypair as Ns,Transaction as As,ComputeBudgetProgram as wm,LAMPORTS_PER_SOL as Am}from"@solana/web3.js";import*as Os from"@solana/spl-stake-pool";var Ct=r(async(t,e,o,n=new _s(B),s,a,i)=>{try{let c=Ns.fromSecretKey(new Uint8Array(e)),l=o*Am,{instructions:m,signers:d}=await _m(t,e,l,n,s,a,i),p=new As().add(...m);p.feePayer=c.publicKey;let f=await t.getLatestBlockhashAndContext({commitment:"finalized"});p.recentBlockhash=f.value.blockhash,p.sign(...d,c);let S=new As().add(...m).add(wm.setComputeUnitPrice({microLamports:1e3}));S.feePayer=c.publicKey,S.recentBlockhash=f.value.blockhash,S.sign(...d,c);let w=await t.sendRawTransaction(S.serialize(),{skipPreflight:!0});return await t.confirmTransaction({...f.value,signature:w},"finalized"),{status:"success",signature:w}}catch(c){return console.log("depositSol error",c),{status:"error",error:c}}},"depositSol"),_m=r(async(t,e,o,n=new _s(B),s,a,i)=>{let l=Ns.fromSecretKey(new Uint8Array(e)).publicKey;return await Os.depositSol(t,n,l,o,s,a,i)},"depositSOLInstruction");import{sleep as Rs}from"@skeet-framework/utils";var ze=r(async(t,e,o,n)=>{console.log(_t.white("Solana RPC URL:",t));let s=new ks(t);o===0&&(o=await We());let a=new Om("%s");a.setSpinnerString(18),a.start(),a.setSpinnerTitle(_t.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let i=new oe(e),c=Nm.fromSecretKey(new Uint8Array(n)),l=Z;a.setSpinnerTitle(_t.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let m=await ee(t,n,l,c.publicKey);await Rs(1e3),a.setSpinnerTitle(_t.green("\u{1F504} Converting SOL to elSOL"));let d=await Ct(s,n,o,i,new oe(m),new oe(po),c.publicKey),p=0;for(;d.status!=="success";){if(p++,p>10)return a.stop(!0),console.log(_t.red("Failed to deposit.Please try again later \u{1F64F}")),!1;a.setSpinnerTitle(_t.yellow(`\u23F3 ${p} Times Retrying...`)),await Rs(3e3),s=new ks(t),d=await Ct(s,n,o,i,new oe(m),new oe(po),c.publicKey)}return a.stop(!0),console.log(_t.white(`\u{1F4B0} Finished Deposit - You've got elSOL \u2728
534
534
 
535
- Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as Tm,Keypair as gm,PublicKey as Rt}from"@solana/web3.js";import{Spinner as Em}from"cli-spinner";import Ct from"chalk";import{sleep as Ns}from"@skeet-framework/utils";var Os=r(async(t,e,o,n,s)=>{let a=new Tm(t);o===0&&(o=await ze());let i=new Em("%s");i.setSpinnerString(18),i.start(),i.setSpinnerTitle(Ct.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let c=new Rt(e),l=await Be(t,e);if(!l)return console.log("Stake Pool not found"),!1;i.setSpinnerTitle(Ct.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let p=l.poolMint,d=gm.fromSecretKey(new Uint8Array(n)),m=await te(t,n,p,d.publicKey),f=await te(t,n,p,new Rt(pr),!0);await Ns(1e3),i.setSpinnerTitle(Ct.green(`\u{1F504} Converting SOL to ${s}`));let S=await vt(a,n,o,c,new Rt(m),new Rt(f),d.publicKey),w=0;for(;S.status!=="success";){if(w++,w>10)return i.stop(!0),console.log(Ct.red("Failed to deposit.Please try again later \u{1F64F}")),!1;console.log(Ct.yellow(`\u23F3 ${w} Times Retrying...
536
- `)),await Ns(1e3),S=await vt(a,n,o,c,new Rt(m),new Rt(f),d.publicKey)}return i.stop(!0),console.log(Ct.white(`\u{1F4B0} You've got ${s} \u2728
535
+ Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as km,Keypair as Rm,PublicKey as It}from"@solana/web3.js";import{Spinner as vm}from"cli-spinner";import Lt from"chalk";import{sleep as vs}from"@skeet-framework/utils";var Cs=r(async(t,e,o,n,s)=>{let a=new km(t);o===0&&(o=await We());let i=new vm("%s");i.setSpinnerString(18),i.start(),i.setSpinnerTitle(Lt.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let c=new It(e),l=await Ge(t,e);if(!l)return console.log("Stake Pool not found"),!1;i.setSpinnerTitle(Lt.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let m=l.poolMint,d=Rm.fromSecretKey(new Uint8Array(n)),p=await ee(t,n,m,d.publicKey),f=await ee(t,n,m,new It(dr),!0);await vs(1e3),i.setSpinnerTitle(Lt.green(`\u{1F504} Converting SOL to ${s}`));let S=await Ct(a,n,o,c,new It(p),new It(f),d.publicKey),w=0;for(;S.status!=="success";){if(w++,w>10)return i.stop(!0),console.log(Lt.red("Failed to deposit.Please try again later \u{1F64F}")),!1;console.log(Lt.yellow(`\u23F3 ${w} Times Retrying...
536
+ `)),await vs(1e3),S=await Ct(a,n,o,c,new It(p),new It(f),d.publicKey)}return i.stop(!0),console.log(Lt.white(`\u{1F4B0} You've got ${s} \u2728
537
537
 
538
- Signature:`,S.signature)),!0},"depositeLST");import{execSync as We}from"node:child_process";import{homedir as _m}from"os";var ks=r(t=>{h.command("stake").description("Stake SOL").option("-l, --lst","Convert to Liquid Stake Token").option("-e, --elsol","Convert to elSOL",!1).option("-a, --amount <amount>","Amount of SOL to stake","0").action(async e=>{let o=Number(e.amount);console.log("RPC URL:",t.RPC_URL);let n=B,s=t.NETWORK===u.TESTNET,a=_m(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(We(`solana config set --keypair ${i}`),!await Am(i)){console.log(It.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
539
- `)),console.log(It.white(i));return}let c=JSON.parse(await wm(i,"utf-8"));if(e.elsol){await Ge(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await Ss(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Os(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ds(t))return;let p=await I(),{validatorVoteAccount:d,stakeAccounts:m}=await Om(p);for await(let f of m)try{await ls(f,d)}catch{console.log(It.yellow(`Network might be busy, please try again later
538
+ Signature:`,S.signature)),!0},"depositeLST");import{execSync as qe}from"node:child_process";import{homedir as Lm}from"os";var Is=r(t=>{h.command("stake").description("Stake SOL").option("-l, --lst","Convert to Liquid Stake Token").option("-e, --elsol","Convert to elSOL",!1).option("-a, --amount <amount>","Amount of SOL to stake","0").action(async e=>{let o=Number(e.amount);console.log("RPC URL:",t.RPC_URL);let n=B,s=t.NETWORK===u.TESTNET,a=Lm(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(qe(`solana config set --keypair ${i}`),!await Im(i)){console.log(Pt.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
539
+ `)),console.log(Pt.white(i));return}let c=JSON.parse(await Cm(i,"utf-8"));if(e.elsol){await ze(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await ws(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Cs(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ys(t))return;let m=await I(),{validatorVoteAccount:d,stakeAccounts:p}=await xm(m);for await(let f of p)try{await us(f,d)}catch{console.log(Pt.yellow(`Network might be busy, please try again later
540
540
  You can use a custom RPC endpoint to avoid this issue
541
- `))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await vm();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await Nm();for await(let n of o)try{await us(n)}catch{console.log(It.yellow(`Network might be busy, please try again later
541
+ `))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await $m();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await Pm();for await(let n of o)try{await Ss(n)}catch{console.log(Pt.yellow(`Network might be busy, please try again later
542
542
  You can use a custom RPC endpoint to avoid this issue
543
- `))}}else{let o=await Rm();await fs(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),ze=r(async()=>{let t=We("solana address").toString().trim(),e=We("solana balance").toString().replace("SOL","").trim();console.log(It.white(`\u{1F4D7} Selected Wallet: ${t}
544
- \u{1F4B0} Account Balance:`,e+" SOL")),console.log(It.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await oe.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Nm=r(async()=>{let t=await I();return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),Om=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?km(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to delegate stake to?",choices:e},{type:"input",name:"validatorVoteAccount",message:"What is the Validator Vote Account Address?",default(){return o}}])},"delegateStakeAsk"),km=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return We(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),vm=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await oe.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Rm=r(async()=>{let t=(await I()).STAKE_ACCOUNTS;return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to withdraw stake from?",choices:t},{type:"input",name:"destinationAddress",message:"What is the destination address for the withdrawn SOL?",default(){return"xxxxxxxx"}},{type:"input",name:"solAmount",message:"How many SOL would you like to withdraw?",default(){return"1"}}])},"withdrawStakeAsk");import{execSync as Cm}from"child_process";var vs=r(()=>{try{return Cm("solana epoch --commitment finalized -ul",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getEpoch Error: ${t}`}},"getEpoch");import{execSync as Im}from"child_process";var Rs=r(()=>{try{return Im("solana --url http://127.0.0.1:8899 slot",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getSlot Error: ${t}`}},"getSlot");import ct from"chalk";import{Spinner as Pm}from"cli-spinner";var Pt;(function(t){t.successHex=ct.hex("#39A845"),t.warningHex=ct.hex("#FFD02E"),t.errorHex=ct.hex("#B5332E"),t.syncHex=ct.hex("#3073B7"),t.greyHex=ct.hex("#BEBDBD"),t.indigoHex=ct.hex("#3950A0"),t.pinkHex=ct.hex("#D8A1C4"),t.normal=e=>{console.log(ct.white(e))},t.syncSpinner=e=>{let o=new Pm(ct.white(e)+` %s
543
+ `))}}else{let o=await Km();await Ts(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),We=r(async()=>{let t=qe("solana address").toString().trim(),e=qe("solana balance").toString().replace("SOL","").trim();console.log(Pt.white(`\u{1F4D7} Selected Wallet: ${t}
544
+ \u{1F4B0} Account Balance:`,e+" SOL")),console.log(Pt.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await re.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Pm=r(async()=>{let t=await I();return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),xm=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?Vm(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to delegate stake to?",choices:e},{type:"input",name:"validatorVoteAccount",message:"What is the Validator Vote Account Address?",default(){return o}}])},"delegateStakeAsk"),Vm=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return qe(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),$m=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await re.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Km=r(async()=>{let t=(await I()).STAKE_ACCOUNTS;return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to withdraw stake from?",choices:t},{type:"input",name:"destinationAddress",message:"What is the destination address for the withdrawn SOL?",default(){return"xxxxxxxx"}},{type:"input",name:"solAmount",message:"How many SOL would you like to withdraw?",default(){return"1"}}])},"withdrawStakeAsk");import{execSync as Dm}from"child_process";var Ls=r(()=>{try{return Dm("solana epoch --commitment finalized -ul",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getEpoch Error: ${t}`}},"getEpoch");import{execSync as bm}from"child_process";var Ps=r(()=>{try{return bm("solana --url http://127.0.0.1:8899 slot",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getSlot Error: ${t}`}},"getSlot");import lt from"chalk";import{Spinner as Um}from"cli-spinner";var xt;(function(t){t.successHex=lt.hex("#39A845"),t.warningHex=lt.hex("#FFD02E"),t.errorHex=lt.hex("#B5332E"),t.syncHex=lt.hex("#3073B7"),t.greyHex=lt.hex("#BEBDBD"),t.indigoHex=lt.hex("#3950A0"),t.pinkHex=lt.hex("#D8A1C4"),t.normal=e=>{console.log(lt.white(e))},t.syncSpinner=e=>{let o=new Um(lt.white(e)+` %s
545
545
  `);try{return o.setSpinnerString(18),o.start(),o}catch(n){throw o.stop(!0),new Error(`syncSpinner Error: ${n}`)}},t.solvAA=()=>{let e=t.syncHex(" _ "),o=t.syncHex(" | | "),n=t.syncHex(" ___ ___ | |")+t.errorHex("_ __ "),s=t.syncHex("/ __|/ _ \\| |")+t.errorHex("\\ \\ / /"),a=t.syncHex("\\__ \\ (_) | |")+t.errorHex(" \\ V / "),i=t.syncHex("|___/\\___/|_|")+t.errorHex(" \\_/ ");console.log(`
546
546
  ${e}`),console.log(`${o}`),console.log(`${n}`),console.log(`${s}`),console.log(`${a}`),console.log(`${i}
547
- `),console.log(`Solc Version: v${ce}
547
+ `),console.log(`Solc Version: v${le}
548
548
  `)},t.installMessage=()=>{let e=t.warningHex("\u{1F525} Welcome to Solana Validator Tool Solc \u{1F525}"),o=`
549
549
  Solc is born and ready for running Solana Validator \u{1F680}
550
550
 
@@ -565,11 +565,11 @@ $ solc mt -p <fileSystem>
565
565
  $ solc umt -p <fileSystem>
566
566
  `,s=`mount reload
567
567
  $ solc mtr
568
- `;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(Pt||(Pt={}));import Lt from"chalk";import{spawnSync as Lm}from"node:child_process";var qe=r(()=>{Lm("solana config get",{shell:!0,stdio:"inherit"});let e=mt();console.log(Lt.white("start-validator.sh: ")+e.scriptPath),console.log(Lt.white("service unit: ")+L.SOL_SERVICE),console.log(Lt.white("logrotate: ")+L.SOL_LOGROTATE),console.log(Lt.white("sysctl.d: ")+L.SOL_SYSTEM_CONFIG21),console.log(Lt.white("limits.d: ")+L.SOL_NOFILES_CONF),console.log(Lt.white("system.conf: ")+L.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as Cs}from"node:child_process";import xm from"chalk";var Is=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?Z:tt;t.NODE_TYPE===T.RPC&&(o=St);let n=h.command("get").description("Get Solana Validator's Information").argument("<cmd>","Subcommands: epoch, slot, catchup, snapshot, contact, config");n.command("epoch").description("Show Validator's Epoch").action(()=>{let s=vs();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=Cs(s,{shell:!0,stdio:"pipe"});console.log(xm.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Rs();console.log({slot:s})}),n.command("snapshot").alias("sn").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed","45").option("-l, --ledgerPath <ledgerPath>","Ledger Path","/mnt/ledger").option("-s, --snapshotPath <snapshotPath>","Snapshot Path","/mnt/ledger/snapshot").option("-v, --version <version>","Specific Version Node",o).description("Download the latest snapshot").action(s=>{let a=s.minDownloadSpeed,i=s.ledgerPath,c=s.snapshotPath,l=s.version;xe(e,a,i,c,l)}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${D()} --ledger /mnt/ledger/ contact-info`;Cs(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{qe()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{Pt.solvAA(),s.client?Pt.installClientMessage():Pt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as Vm}from"node:child_process";var Ps=r(()=>{Vm("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as $m}from"node:child_process";var Ls=r(()=>{$m("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as Km}from"node:child_process";var xs=r(()=>{Km("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as Dm}from"node:child_process";var Vs=r(()=>{Dm("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as bm}from"node:child_process";var $s=r((t=!1)=>{bm(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import Ro from"chalk";import{spawnSync as Mm}from"child_process";import{spawnSync as Um}from"node:child_process";var Ks=r(()=>{Um("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Ds=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{Ps()}),t.command("start").description("Start Relayer").action(()=>{Ls()}),t.command("stop").description("Stop Relayer").action(()=>{xs()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{$s(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{Vs()}),t.command("enable").description("Enable Relayer").action(()=>{Ks()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(Ro.red("Please provide a URL"));return}let o=`${D()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(Ro.white("Setting Relayer URL ...")),Mm(o,{shell:!0,stdio:"inherit"}),console.log(Ro.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");import{writeFile as Fm,mkdir as Hm}from"fs/promises";import{existsSync as bs}from"fs";import Ym from"path";import Us from"chalk";var jm=r((t,e)=>{let o=t;if(e.identity&&(o=o.replace(/identity_path\s*=\s*\"[^\"]*\"/,`identity_path = "${e.identity}"`)),e.vote&&(o=o.replace(/vote_account_path\s*=\s*\"[^\"]*\"/,`vote_account_path = "${e.vote}"`)),e.auth&&e.auth.length>0){let n=e.auth.map(s=>`"${s}"`).join(`,
568
+ `;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(xt||(xt={}));import Vt from"chalk";import{spawnSync as Mm}from"node:child_process";var Qe=r(()=>{Mm("solana config get",{shell:!0,stdio:"inherit"});let e=pt();console.log(Vt.white("start-validator.sh: ")+e.scriptPath),console.log(Vt.white("service unit: ")+P.SOL_SERVICE),console.log(Vt.white("logrotate: ")+P.SOL_LOGROTATE),console.log(Vt.white("sysctl.d: ")+P.SOL_SYSTEM_CONFIG21),console.log(Vt.white("limits.d: ")+P.SOL_NOFILES_CONF),console.log(Vt.white("system.conf: ")+P.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as xs}from"node:child_process";import Fm from"chalk";var Vs=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?tt:et;t.NODE_TYPE===T.RPC&&(o=Tt);let n=h.command("get").description("Get Solana Validator's Information").argument("<cmd>","Subcommands: epoch, slot, catchup, snapshot, contact, config");n.command("epoch").description("Show Validator's Epoch").action(()=>{let s=Ls();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=xs(s,{shell:!0,stdio:"pipe"});console.log(Fm.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Ps();console.log({slot:s})}),n.command("snapshot").alias("sn").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed","45").option("-l, --ledgerPath <ledgerPath>","Ledger Path","/mnt/ledger").option("-s, --snapshotPath <snapshotPath>","Snapshot Path","/mnt/ledger/snapshot").option("-v, --version <version>","Specific Version Node",o).description("Download the latest snapshot").action(s=>{let a=s.minDownloadSpeed,i=s.ledgerPath,c=s.snapshotPath,l=s.version;Ve(e,a,i,c,l)}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${D()} --ledger /mnt/ledger/ contact-info`;xs(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{Qe()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{xt.solvAA(),s.client?xt.installClientMessage():xt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as Hm}from"node:child_process";var $s=r(()=>{Hm("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as Ym}from"node:child_process";var Ks=r(()=>{Ym("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as jm}from"node:child_process";var Ds=r(()=>{jm("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as Jm}from"node:child_process";var bs=r(()=>{Jm("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as Bm}from"node:child_process";var Us=r((t=!1)=>{Bm(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import vo from"chalk";import{spawnSync as zm}from"child_process";import{spawnSync as Gm}from"node:child_process";var Ms=r(()=>{Gm("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Fs=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{$s()}),t.command("start").description("Start Relayer").action(()=>{Ks()}),t.command("stop").description("Stop Relayer").action(()=>{Ds()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{Us(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{bs()}),t.command("enable").description("Enable Relayer").action(()=>{Ms()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(vo.red("Please provide a URL"));return}let o=`${D()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(vo.white("Setting Relayer URL ...")),zm(o,{shell:!0,stdio:"inherit"}),console.log(vo.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");import{writeFile as Wm,mkdir as qm}from"fs/promises";import{existsSync as Hs}from"fs";import Qm from"path";import Co from"chalk";var Xm=r((t,e)=>{let o=t;if(e.identity&&(o=o.replace(/identity_path\s*=\s*\"[^\"]*\"/,`identity_path = "${e.identity}"`)),e.vote&&(o=o.replace(/vote_account_path\s*=\s*\"[^\"]*\"/,`vote_account_path = "${e.vote}"`)),e.auth&&e.auth.length>0){let n=e.auth.map(s=>`"${s}"`).join(`,
569
569
  `);o=o.replace(/authorized_voter_paths\s*=\s*\[[\s\S]*?\]/,`authorized_voter_paths = [
570
570
  ${n}
571
- ]`)}return o},"renderWithOverrides"),Ms=r(()=>{h.command("firedancer").description("Firedancer utilities").command("config").description("Generate Firedancer config.toml").option("-n, --network <network>","Network: mainnet-beta|testnet").option("-i, --identity <path>","Identity keypair path").option("-v, --vote <path>","Vote account keypair path").option("-a, --auth <paths...>","Authorized voter keypair paths").option("-o, --out <path>","Output path","/home/solv/firedancer/config.toml").option("-f, --force","Overwrite if exists",!1).option("--dry-run","Print to stdout instead of writing",!1).action(async e=>{let o=await I(),s=(e.network||o.NETWORK)===u.MAINNET?be():De(),a=jm(s.body,{identity:e.identity,vote:e.vote,auth:e.auth});if(e.dryRun){console.log(a);return}let i=e.out||s.filePath,c=Ym.dirname(i);if(bs(c)||await Hm(c,{recursive:!0}),bs(i)&&!e.force){console.log(Us.red(`File exists: ${i}. Use --force to overwrite or --dry-run to preview`));return}await Fm(i,a),console.log(Us.green(`Wrote Firedancer config: ${i}`))})},"firedancerCommands");import Fs from"chalk";import{spawnSync as Jm}from"child_process";var Hs=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;Jm(e,{shell:!0,stdio:"inherit"})}catch{console.log(Fs.yellow(`You might need to install the Solana SPL CLI:
572
- `)),console.log(Fs.white("$ cargo install spl-token-cli"))}},"splBalance");import{homedir as Gm}from"os";import{spawnSync as Bm}from"child_process";var dt=r(t=>{let e=`solana balance --keypair ${t}`,{stdout:o}=Bm(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolBalance");import zm from"chalk";import{spawnSync as Wm}from"node:child_process";var Ys=r(t=>{h.command("balance").alias("bal").alias("b").option("-s, --spl","Show SPL Token Balance",!1).description("Show Keypairs Balance").action(async e=>{if(e.spl){let n=`${Gm()}/mainnet-authority-keypair.json`;await Hs(n),process.exit(0)}await qm(t),process.exit(0)})},"balanceCommands"),qm=r(async t=>{let e=Qm(t),o=`Validator Key: ${e.validatorKey}
571
+ ]`)}return e.blockEngineUrl&&(o=o.replace(/url\s*=\s*\"[^\"]*\"/,`url = "${e.blockEngineUrl}"`)),o},"renderWithOverrides"),Ys=r(()=>{h.command("firedancer").description("Firedancer utilities").command("config").description("Generate Firedancer config.toml").option("-n, --network <network>","Network: mainnet-beta|testnet").option("-i, --identity <path>","Identity keypair path").option("-v, --vote <path>","Vote account keypair path").option("-a, --auth <paths...>","Authorized voter keypair paths").option("-o, --out <path>","Output path","/home/solv/firedancer/config.toml").option("-f, --force","Overwrite if exists",!1).option("--dry-run","Print to stdout instead of writing",!1).option("--jito-region <region>",`Jito region (${Object.keys(G).join("|")})`).action(async e=>{let o=await I(),s=(e.network||o.NETWORK)===u.MAINNET?Ue():be(),a;if(e.jitoRegion){let m=e.jitoRegion,d=G[m];if(!d){console.log(Co.red(`Invalid --jito-region '${e.jitoRegion}'. Choose one of: ${Object.keys(G).join(", ")}`));return}a=d.BLOCK_ENGINE_URL}let i=Xm(s.body,{identity:e.identity,vote:e.vote,auth:e.auth,blockEngineUrl:a});if(e.dryRun){console.log(i);return}let c=e.out||s.filePath,l=Qm.dirname(c);if(Hs(l)||await qm(l,{recursive:!0}),Hs(c)&&!e.force){console.log(Co.red(`File exists: ${c}. Use --force to overwrite or --dry-run to preview`));return}await Wm(c,i),console.log(Co.green(`Wrote Firedancer config: ${c}`))})},"firedancerCommands");import js from"chalk";import{spawnSync as Zm}from"child_process";var Js=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;Zm(e,{shell:!0,stdio:"inherit"})}catch{console.log(js.yellow(`You might need to install the Solana SPL CLI:
572
+ `)),console.log(js.white("$ cargo install spl-token-cli"))}},"splBalance");import{homedir as ep}from"os";import{spawnSync as tp}from"child_process";var ut=r(t=>{let e=`solana balance --keypair ${t}`,{stdout:o}=tp(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolBalance");import op from"chalk";import{spawnSync as rp}from"node:child_process";var Bs=r(t=>{h.command("balance").alias("bal").alias("b").option("-s, --spl","Show SPL Token Balance",!1).description("Show Keypairs Balance").action(async e=>{if(e.spl){let n=`${ep()}/mainnet-authority-keypair.json`;await Js(n),process.exit(0)}await np(t),process.exit(0)})},"balanceCommands"),np=r(async t=>{let e=sp(t),o=`Validator Key: ${e.validatorKey}
573
573
  Address: ${e.validatorKeyAddress}
574
574
  Balance: ${e.validatorKeyBalance}
575
575
  Vote Key: ${e.voteKey}
@@ -581,18 +581,18 @@ Balance: ${e.authorityKeyBalance}
581
581
  Active Identity:`;t.NODE_TYPE===T.RPC&&(o=`Validator Key: ${e.validatorKey}
582
582
  Address: ${e.validatorKeyAddress}
583
583
  Balance: ${e.validatorKeyBalance}
584
- Active Identity:`),console.log(zm.white(o)),Wm(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),Qm=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:dt(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:dt(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:dt(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:dt(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:dt(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:dt(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:dt(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as Xm}from"child_process";var js=r(()=>{Xm("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as Js}from"node:child_process";var Bs=r(()=>{Js("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),Js("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as Zm}from"node:child_process";var Gs=r(t=>{let o=`${D()} --ledger ${y} monitor`;Zm(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as tp}from"node:child_process";var zs=r(()=>{tp("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import Qe from"inquirer";import{execSync as Xe,spawnSync as Co}from"child_process";import re from"chalk";import{homedir as ep}from"os";var Ws=1e3,Io;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(Io||(Io={}));var Ze;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(Ze||(Ze={}));var op=Object.values(Io),qs=r(t=>{h.command("transfer").alias("tr").option("-s, --spl","Show SPL Token Balance",!1).description("Transfer Solana Tokens/SPL Tokens").action(async e=>{e.spl&&(console.log(re.blue(`\u2728 Coming Soon
584
+ Active Identity:`),console.log(op.white(o)),rp(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),sp=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:ut(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:ut(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:ut(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:ut(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:ut(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as ap}from"child_process";var Gs=r(()=>{ap("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as zs}from"node:child_process";var Ws=r(()=>{zs("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),zs("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as ip}from"node:child_process";var qs=r(t=>{let o=`${D()} --ledger ${y} monitor`;ip(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as cp}from"node:child_process";var Qs=r(()=>{cp("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import Xe from"inquirer";import{execSync as Ze,spawnSync as Io}from"child_process";import ne from"chalk";import{homedir as lp}from"os";var Xs=1e3,Lo;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(Lo||(Lo={}));var to;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(to||(to={}));var mp=Object.values(Lo),Zs=r(t=>{h.command("transfer").alias("tr").option("-s, --spl","Show SPL Token Balance",!1).description("Transfer Solana Tokens/SPL Tokens").action(async e=>{e.spl&&(console.log(ne.blue(`\u2728 Coming Soon
585
585
  This Feature is Currently Under Development
586
- Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await rp(),a="0";try{let m=Co(`solana balance ${s} --url ${t.RPC_URL}`,{shell:!0});if(m.status!==0)throw new Error("Invalid Wallet Address");a=m.stdout.toString(),console.log("toBalance:",a)}catch{console.log(re.red(`\u274C To Wallet is Invalid
587
- Please Check the Wallet Address`)),process.exit(0)}let i=Xe(`solana balance ${n} --url ${t.RPC_URL}`).toString();console.log(re.white(`\u{1F3E6} From Wallet: ${n}
588
- \u{1F4B0} Balance: ${i}`)),console.log(re.white(`\u{1F3E6} To Wallet: ${s}
589
- \u{1F4B0} Balance: ${a}`));let{amount:c}=await Qe.prompt([{type:"number",name:"amount",message:"Enter Amount to Transfer",default:.1}]),l=`solana transfer ${s} ${c} --allow-unfunded-recipient --keypair ${o} --url ${t.RPC_URL}`,p=Co(l,{shell:!0,stdio:"inherit"}),d=pe;for(;p.status!==0&&d>0;)console.log(re.red(`\u274C Transaction Failed
590
- Retrying Transaction in ${Ws}ms
591
- Retries Left: ${d}`)),await ot(Ws),p=Co(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),ne=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),rp=r(async()=>{let t=ep(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=Xe(`solana address -k ${n}`).toString().trim(),a=await Qe.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:op}]),i=a.from==="Validator Account"?Object.values(Ze).filter(m=>m!=="Validator Account"):Object.values(Ze).filter(m=>m!=="Authority Account");if((await Qe.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:m}=await Qe.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:ne}]);s=m}else{let m=a.from==="Validator Account"?e:o;n=`${t}/${m}`,s=Xe(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,p=`${t}/${l}`,d=Xe(`solana address -k ${p}`).toString().trim();return{fromWalletPath:p,fromAddress:d,toAddress:s}},"selectFromKeypairs");import Qs from"chalk";import np from"inquirer";import{execSync as Po,spawnSync as sp}from"node:child_process";var Xs=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?Te:t.RPC_URL,s=o?"~/testnet-validator-keypair.json":"~/mainnet-validator-keypair.json",a=o?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",i=o?"~/testnet-vote-account-keypair.json":"~/mainnet-vote-account-keypair.json",c=Po(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,p=Number(c)-.03;if(e)l=p;else{console.log(Qs.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(Qs.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let S=await np.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${p}`,default:String(p)}]);l=Number(S.sol)}let d=Po(`solana address --keypair ${i}`).toString().trim(),m=Po(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${m} ${l} --authorized-withdrawer ${a} --url ${n}`;sp(f,{shell:!0,stdio:"inherit"})},"withdraw");var Zs=r(t=>{h.command("withdraw").option("-a, --all","Withdraw All SOL",!1).description("Withdraw SOL from Vote Account to Authority Account").action(async e=>{await Xs(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as Tp,spawnSync as gp}from"node:child_process";import{BN as ea}from"bn.js";import{LAMPORTS_PER_SOL as Lo}from"@solana/web3.js";import{Connection as lp,LAMPORTS_PER_SOL as mp}from"@solana/web3.js";import{Keypair as ap}from"@solana/web3.js";import{readFile as ip}from"fs/promises";var cp=r(async t=>{let e=JSON.parse(await ip(t,"utf8"));return ap.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),ta=cp;import{homedir as pp}from"os";var Y;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(Y||(Y={}));var dp={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},up=r(async(t,e="auth",o=!1)=>{let n=new lp(t),s=pp(),a=A(s),c=`${o?"testnet":"mainnet"}${dp[e]}`,l=a[c],p=await ta(l),d=await n.getBalance(p.publicKey),f=Number(d)/mp;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),nt=up;var fp=new ea(3*Lo),oa=r(async t=>{let e=await nt(t,Y.VALIDATOR),n=new ea(Number(Number(e)*Lo)).sub(fp),s=Number(n)/Lo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import se from"chalk";import{Keypair as hp,Connection as yp,PublicKey as Sp,SystemProgram as ra,ComputeBudgetProgram as to,VersionedTransaction as na,TransactionMessage as sa}from"@solana/web3.js";var aa=r(async(t,e,o,n)=>{let s=0;try{let a=new yp(t,"finalized"),i=hp.fromSecretKey(new Uint8Array(Array.from(e))),c=new Sp(o),l=n;for(;;)try{let p=[ra.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),to.setComputeUnitLimit({units:2e5}),to.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),m=new na(new sa({instructions:p,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(m,{replaceRecentBlockhash:!0,sigVerify:!1});m.sign([i]);let S=[ra.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),to.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),to.setComputeUnitPrice({microLamports:1e3})],w=new na(new sa({instructions:S,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let _=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:_},"finalized"),console.log("finalized signature:",_),_}catch(p){if(s++,s>pe)throw new Error(JSON.stringify(p));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${p}`),await ot(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as Ep}from"fs/promises";import{LAMPORTS_PER_SOL as wp}from"@solana/web3.js";var xo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await nt(t,Y.VOTE)<1?(console.log(se.white("Vote Account Balance is less than 1 SOL")),console.log(se.white("Skip withdrawing SOL from Vote Account to Authority Account"))):gp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await oa(t);console.log(se.white(`Transferable Balance: ${s} SOL`));let a=s*wp;if(s<1)console.log(se.white("Validator Account Balance is less than 1 SOL")),console.log(se.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=Tp(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await Ep(o,"utf-8"));await aa(t,c,i,a)}return!0},"collectSOL");import{readFile as Lp}from"fs/promises";import xp from"inquirer";import Vo from"chalk";import{execSync as Ap}from"child_process";import{homedir as _p}from"os";var Np=r(async t=>{try{let e=_p(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${X} --owner ${o} --url ${t}`,s=Ap(n).toString().trim();return Number(s)}catch(e){return console.log(Vo.red(`Error: ${e}`)),console.log(Vo.yellow(`You might need to install the Solana SPL CLI:
592
- `)),console.log(Vo.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),ia=Np;import ro from"chalk";import{Connection as Op,PublicKey as ca,Keypair as kp,ComputeBudgetProgram as eo,VersionedTransaction as la,TransactionMessage as ma}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as pa,createTransferInstruction as da,TOKEN_PROGRAM_ID as ua}from"@solana/spl-token";var fa=r(async(t,e,o,n,s,a)=>{try{let i=new Op(t,"finalized"),c=kp.fromSecretKey(new Uint8Array(e)),l=new ca(o),p=new ca(s),d=Math.trunc(n*Math.pow(10,a)),m=await pa(i,c,p,c.publicKey),f=await pa(i,c,p,l,!0);for(;;)try{let S=[da(m.address,f.address,c.publicKey,d,[],ua),eo.setComputeUnitLimit({units:2e5}),eo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),_=new la(new ma({instructions:S,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),N=await i.simulateTransaction(_,{replaceRecentBlockhash:!0,sigVerify:!1});_.sign([c]);let G=[da(m.address,f.address,c.publicKey,d,[],ua),eo.setComputeUnitLimit({units:N.value.unitsConsumed?Math.trunc(N.value.unitsConsumed*1.2):2e5}),eo.setComputeUnitPrice({microLamports:1e3})],V=new la(new ma({instructions:G,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());V.sign([c]);let _t=await i.sendRawTransaction(V.serialize());return await i.confirmTransaction({...w.value,signature:_t},"finalized"),console.log("finalized signature:",_t),_t}catch(S){console.error("Transfer failed, retrying...",S)}}catch(i){throw console.error(i),i}},"transferSPLToken");import oo from"inquirer";import{spawnSync as ha}from"child_process";import $o from"chalk";import{promises as ya}from"fs";var vp=r(async(t="epochTimer")=>{try{let e=ha("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log($o.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
586
+ Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await pp(),a="0";try{let p=Io(`solana balance ${s} --url ${t.RPC_URL}`,{shell:!0});if(p.status!==0)throw new Error("Invalid Wallet Address");a=p.stdout.toString(),console.log("toBalance:",a)}catch{console.log(ne.red(`\u274C To Wallet is Invalid
587
+ Please Check the Wallet Address`)),process.exit(0)}let i=Ze(`solana balance ${n} --url ${t.RPC_URL}`).toString();console.log(ne.white(`\u{1F3E6} From Wallet: ${n}
588
+ \u{1F4B0} Balance: ${i}`)),console.log(ne.white(`\u{1F3E6} To Wallet: ${s}
589
+ \u{1F4B0} Balance: ${a}`));let{amount:c}=await Xe.prompt([{type:"number",name:"amount",message:"Enter Amount to Transfer",default:.1}]),l=`solana transfer ${s} ${c} --allow-unfunded-recipient --keypair ${o} --url ${t.RPC_URL}`,m=Io(l,{shell:!0,stdio:"inherit"}),d=de;for(;m.status!==0&&d>0;)console.log(ne.red(`\u274C Transaction Failed
590
+ Retrying Transaction in ${Xs}ms
591
+ Retries Left: ${d}`)),await rt(Xs),m=Io(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),se=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),pp=r(async()=>{let t=lp(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=Ze(`solana address -k ${n}`).toString().trim(),a=await Xe.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:mp}]),i=a.from==="Validator Account"?Object.values(to).filter(p=>p!=="Validator Account"):Object.values(to).filter(p=>p!=="Authority Account");if((await Xe.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:p}=await Xe.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:se}]);s=p}else{let p=a.from==="Validator Account"?e:o;n=`${t}/${p}`,s=Ze(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,m=`${t}/${l}`,d=Ze(`solana address -k ${m}`).toString().trim();return{fromWalletPath:m,fromAddress:d,toAddress:s}},"selectFromKeypairs");import ta from"chalk";import dp from"inquirer";import{execSync as Po,spawnSync as up}from"node:child_process";var ea=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?ge:t.RPC_URL,s=o?"~/testnet-validator-keypair.json":"~/mainnet-validator-keypair.json",a=o?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",i=o?"~/testnet-vote-account-keypair.json":"~/mainnet-vote-account-keypair.json",c=Po(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,m=Number(c)-.03;if(e)l=m;else{console.log(ta.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(ta.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let S=await dp.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${m}`,default:String(m)}]);l=Number(S.sol)}let d=Po(`solana address --keypair ${i}`).toString().trim(),p=Po(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${p} ${l} --authorized-withdrawer ${a} --url ${n}`;up(f,{shell:!0,stdio:"inherit"})},"withdraw");var oa=r(t=>{h.command("withdraw").option("-a, --all","Withdraw All SOL",!1).description("Withdraw SOL from Vote Account to Authority Account").action(async e=>{await ea(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as kp,spawnSync as Rp}from"node:child_process";import{BN as na}from"bn.js";import{LAMPORTS_PER_SOL as xo}from"@solana/web3.js";import{Connection as Sp,LAMPORTS_PER_SOL as Tp}from"@solana/web3.js";import{Keypair as fp}from"@solana/web3.js";import{readFile as hp}from"fs/promises";var yp=r(async t=>{let e=JSON.parse(await hp(t,"utf8"));return fp.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),ra=yp;import{homedir as gp}from"os";var Y;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(Y||(Y={}));var Ep={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},wp=r(async(t,e="auth",o=!1)=>{let n=new Sp(t),s=gp(),a=A(s),c=`${o?"testnet":"mainnet"}${Ep[e]}`,l=a[c],m=await ra(l),d=await n.getBalance(m.publicKey),f=Number(d)/Tp;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),st=wp;var Ap=new na(3*xo),sa=r(async t=>{let e=await st(t,Y.VALIDATOR),n=new na(Number(Number(e)*xo)).sub(Ap),s=Number(n)/xo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import ae from"chalk";import{Keypair as _p,Connection as Np,PublicKey as Op,SystemProgram as aa,ComputeBudgetProgram as eo,VersionedTransaction as ia,TransactionMessage as ca}from"@solana/web3.js";var la=r(async(t,e,o,n)=>{let s=0;try{let a=new Np(t,"finalized"),i=_p.fromSecretKey(new Uint8Array(Array.from(e))),c=new Op(o),l=n;for(;;)try{let m=[aa.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:2e5}),eo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),p=new ia(new ca({instructions:m,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(p,{replaceRecentBlockhash:!0,sigVerify:!1});p.sign([i]);let S=[aa.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),eo.setComputeUnitPrice({microLamports:1e3})],w=new ia(new ca({instructions:S,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let _=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:_},"finalized"),console.log("finalized signature:",_),_}catch(m){if(s++,s>de)throw new Error(JSON.stringify(m));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${m}`),await rt(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as vp}from"fs/promises";import{LAMPORTS_PER_SOL as Cp}from"@solana/web3.js";var Vo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await st(t,Y.VOTE)<1?(console.log(ae.white("Vote Account Balance is less than 1 SOL")),console.log(ae.white("Skip withdrawing SOL from Vote Account to Authority Account"))):Rp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await sa(t);console.log(ae.white(`Transferable Balance: ${s} SOL`));let a=s*Cp;if(s<1)console.log(ae.white("Validator Account Balance is less than 1 SOL")),console.log(ae.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=kp(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await vp(o,"utf-8"));await la(t,c,i,a)}return!0},"collectSOL");import{readFile as Mp}from"fs/promises";import Fp from"inquirer";import $o from"chalk";import{execSync as Ip}from"child_process";import{homedir as Lp}from"os";var Pp=r(async t=>{try{let e=Lp(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${Z} --owner ${o} --url ${t}`,s=Ip(n).toString().trim();return Number(s)}catch(e){return console.log($o.red(`Error: ${e}`)),console.log($o.yellow(`You might need to install the Solana SPL CLI:
592
+ `)),console.log($o.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),ma=Pp;import no from"chalk";import{Connection as xp,PublicKey as pa,Keypair as Vp,ComputeBudgetProgram as oo,VersionedTransaction as da,TransactionMessage as ua}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as fa,createTransferInstruction as ha,TOKEN_PROGRAM_ID as ya}from"@solana/spl-token";var Sa=r(async(t,e,o,n,s,a)=>{try{let i=new xp(t,"finalized"),c=Vp.fromSecretKey(new Uint8Array(e)),l=new pa(o),m=new pa(s),d=Math.trunc(n*Math.pow(10,a)),p=await fa(i,c,m,c.publicKey),f=await fa(i,c,m,l,!0);for(;;)try{let S=[ha(p.address,f.address,c.publicKey,d,[],ya),oo.setComputeUnitLimit({units:2e5}),oo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),_=new da(new ua({instructions:S,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),N=await i.simulateTransaction(_,{replaceRecentBlockhash:!0,sigVerify:!1});_.sign([c]);let z=[ha(p.address,f.address,c.publicKey,d,[],ya),oo.setComputeUnitLimit({units:N.value.unitsConsumed?Math.trunc(N.value.unitsConsumed*1.2):2e5}),oo.setComputeUnitPrice({microLamports:1e3})],V=new da(new ua({instructions:z,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());V.sign([c]);let Ot=await i.sendRawTransaction(V.serialize());return await i.confirmTransaction({...w.value,signature:Ot},"finalized"),console.log("finalized signature:",Ot),Ot}catch(S){console.error("Transfer failed, retrying...",S)}}catch(i){throw console.error(i),i}},"transferSPLToken");import ro from"inquirer";import{spawnSync as Ta}from"child_process";import Ko from"chalk";import{promises as ga}from"fs";var $p=r(async(t="epochTimer")=>{try{let e=Ta("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log(Ko.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
593
593
  `).filter(a=>!a.includes(t)).join(`
594
- `),s="/tmp/temp_crontab";await ya.writeFile(s,n,"utf-8"),ha("crontab",[s]),await ya.unlink(s),console.log($o.green("\u2705 Cron Job successfully removed."))}catch(e){console.log($o.red("Error removing cron job:",e))}},"removeCronJob"),Sa=vp;import Ta from"chalk";var Rp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await oo.prompt([{type:"confirm",name:"mevOn",message:"Do you want to enable solc Auto Operation Mode?(You can change it again)",default:!1}]);if(!o.mevOn)return await Fe()&&await Sa(),await k({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
595
- ${Ta.green("No more Login to the server to update \u{1F331}")}
594
+ `),s="/tmp/temp_crontab";await ga.writeFile(s,n,"utf-8"),Ta("crontab",[s]),await ga.unlink(s),console.log(Ko.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(Ko.red("Error removing cron job:",e))}},"removeCronJob"),Ea=$p;import wa from"chalk";var Kp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await ro.prompt([{type:"confirm",name:"mevOn",message:"Do you want to enable solc Auto Operation Mode?(You can change it again)",default:!1}]);if(!o.mevOn)return await He()&&await Ea(),await k({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
595
+ ${wa.green("No more Login to the server to update \u{1F331}")}
596
596
 
597
597
  If you enable this, solc will update automatically when the solc/solana version is updated.
598
598
 
@@ -600,109 +600,109 @@ AUTO UPDATE: If you enable this, solc will update automatically when the solc ve
600
600
 
601
601
  AUTO RESTART: If you enable this, solc will restart automatically when the solana version is updated.
602
602
  \u203B Please turn off if you are using no-downtime migration.
603
- `;console.log(Ta.white(n));let s=await oo.prompt([{type:"confirm",name:"autoUpdate",message:"Do you want to enable AUTO UPDATE? (Recommended)",default:!1},{type:"confirm",name:"autoRestart",message:"Do you want to enable AUTO RESTART?",default:!1}]),a=t.RPC_URL,i=t.HARVEST_ACCOUNT===""?"Enter your Harvest Address":t.HARVEST_ACCOUNT,c=await oo.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await oo.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:ne}]);i=l.harvestAddress,a=l.rpcUrl}return await k({HARVEST_ACCOUNT:i,IS_MEV_MODE:o.mevOn,RPC_URL:a,DISCORD_WEBHOOK_URL:c.discordWebhookUrl,AUTO_UPDATE:s.autoUpdate,AUTO_RESTART:s.autoRestart}),!0},"mevOn"),ga=Rp;import{spawnSync as Vp}from"node:child_process";import{Connection as Pp}from"@solana/web3.js";import{Connection as Cp}from"@solana/web3.js";var Ip=r(async(t,e=10,o=.4)=>{try{let s=await new Cp(t).getRecentPerformanceSamples(e);if(s.length===0)return console.warn("No performance samples available. Using fallback slot time."),o;let a=s.filter(c=>c.numSlots!==0);return a.length===0?(console.warn("All performance samples have numSlots equal to 0. Using fallback slot time."),o):a.reduce((c,l)=>c+l.samplePeriodSecs/l.numSlots,0)/a.length}catch(n){return console.error(`getAverageSlotTime failed: ${n}. Using fallback slot time.`),o}},"getAverageSlotTime"),Ea=Ip;var Ko=r(async t=>{try{let o=await new Pp(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await Ea(t);console.log("timePerSlotSeconds",n);let a=(o.slotsInEpoch-o.slotIndex)*n,i=(o.slotIndex/o.slotsInEpoch*100).toFixed(2),c=Math.floor(a/(3600*24)),l=Math.floor(a%(3600*24)/3600),p=Math.floor(a%3600/60),d=Math.floor(a%60),m=`${c}d ${l}h ${p}m ${d}s`;return c===0&&(m=`${l}h ${p}m ${d}s`),{...o,estimatedTimeUntilNextEpoch:m,displayRatio:i}}catch(e){throw new Error(`getEpochInfo failed: ${e}`)}},"getEpochInfo");var $p=.03,wa=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await Kp(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await xo(t.RPC_URL);let n=await nt(t.RPC_URL,Y.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await ot(1e3),await xo(t.RPC_URL),n=await nt(t.RPC_URL,Y.VOTE),s++;let a=JSON.parse(await Lp(o,"utf-8")),i=await nt(t.RPC_URL,Y.AUTH);if(i<1)console.log(ro.white("Authority Account Balance is less than 1 SOL")),console.log(ro.white("Skip converting SOL to elSOL"));else{let l=i-$p;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await Ge(t.RPC_URL,B,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await ia(t.RPC_URL);if(c<1){let l=await Ko(t.RPC_URL);console.log("elSOL Balance is less than 1 elSOL");let p=`elSOL Balance is less than 1 elSOL for ${l.epoch}`;await x(p),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await fa(t.RPC_URL,a,e,c,X,dr),t.IS_MEV_MODE){let p=`\u{1F4B0} Harvested Rewards for ${(await Ko(t.RPC_URL)).epoch} \u{1F4B0}
603
+ `;console.log(wa.white(n));let s=await ro.prompt([{type:"confirm",name:"autoUpdate",message:"Do you want to enable AUTO UPDATE? (Recommended)",default:!1},{type:"confirm",name:"autoRestart",message:"Do you want to enable AUTO RESTART?",default:!1}]),a=t.RPC_URL,i=t.HARVEST_ACCOUNT===""?"Enter your Harvest Address":t.HARVEST_ACCOUNT,c=await ro.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await ro.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:se}]);i=l.harvestAddress,a=l.rpcUrl}return await k({HARVEST_ACCOUNT:i,IS_MEV_MODE:o.mevOn,RPC_URL:a,DISCORD_WEBHOOK_URL:c.discordWebhookUrl,AUTO_UPDATE:s.autoUpdate,AUTO_RESTART:s.autoRestart}),!0},"mevOn"),Aa=Kp;import{spawnSync as Hp}from"node:child_process";import{Connection as Up}from"@solana/web3.js";import{Connection as Dp}from"@solana/web3.js";var bp=r(async(t,e=10,o=.4)=>{try{let s=await new Dp(t).getRecentPerformanceSamples(e);if(s.length===0)return console.warn("No performance samples available. Using fallback slot time."),o;let a=s.filter(c=>c.numSlots!==0);return a.length===0?(console.warn("All performance samples have numSlots equal to 0. Using fallback slot time."),o):a.reduce((c,l)=>c+l.samplePeriodSecs/l.numSlots,0)/a.length}catch(n){return console.error(`getAverageSlotTime failed: ${n}. Using fallback slot time.`),o}},"getAverageSlotTime"),_a=bp;var Do=r(async t=>{try{let o=await new Up(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await _a(t);console.log("timePerSlotSeconds",n);let a=(o.slotsInEpoch-o.slotIndex)*n,i=(o.slotIndex/o.slotsInEpoch*100).toFixed(2),c=Math.floor(a/(3600*24)),l=Math.floor(a%(3600*24)/3600),m=Math.floor(a%3600/60),d=Math.floor(a%60),p=`${c}d ${l}h ${m}m ${d}s`;return c===0&&(p=`${l}h ${m}m ${d}s`),{...o,estimatedTimeUntilNextEpoch:p,displayRatio:i}}catch(e){throw new Error(`getEpochInfo failed: ${e}`)}},"getEpochInfo");var Yp=.03,Na=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await jp(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await Vo(t.RPC_URL);let n=await st(t.RPC_URL,Y.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await rt(1e3),await Vo(t.RPC_URL),n=await st(t.RPC_URL,Y.VOTE),s++;let a=JSON.parse(await Mp(o,"utf-8")),i=await st(t.RPC_URL,Y.AUTH);if(i<1)console.log(no.white("Authority Account Balance is less than 1 SOL")),console.log(no.white("Skip converting SOL to elSOL"));else{let l=i-Yp;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await ze(t.RPC_URL,B,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await ma(t.RPC_URL);if(c<1){let l=await Do(t.RPC_URL);console.log("elSOL Balance is less than 1 elSOL");let m=`elSOL Balance is less than 1 elSOL for ${l.epoch}`;await x(m),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await Sa(t.RPC_URL,a,e,c,Z,ur),t.IS_MEV_MODE){let m=`\u{1F4B0} Harvested Rewards for ${(await Do(t.RPC_URL)).epoch} \u{1F4B0}
604
604
  Validator Address: ${E(o)}
605
605
  Total Reward: ${c} elSOL
606
- Harvest Address: ${e}`;await x(p)}console.log(ro.green("\u2714\uFE0E Successfully Harvested SOL")),process.exit(0)}),h.command("auto").alias("mev").description("Enable Auto Operation Mode").action(async()=>{await ga(t)&&(Vp("solc cron epoch",{stdio:"inherit",shell:!0}),console.log(ro.green("\u2714\uFE0E Auto Operation Mode Enabled"))),process.exit(0)})},"harvestCommands"),Kp=r(async t=>{try{let e=t.HARVEST_ACCOUNT;if(e==="")throw new Error("Harvest Address not found");return e}catch{let o=await xp.prompt([{type:"input",name:"harvestAddress",message:"Enter Harvest Address",validate:ne}]);return await k({HARVEST_ACCOUNT:o.harvestAddress}),o.harvestAddress}},"getHarvestAddress");import{format as nd}from"@skeet-framework/utils";import{writeFile as Dp}from"fs/promises";var bp=r(async t=>{await Dp(Se,JSON.stringify({...t},null,2),"utf-8")},"writeEpochDataToFile"),ut=bp;var Up=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=n?E(a):E(s),c=`===\u23F3 ${t.epoch} \u23F3===
606
+ Harvest Address: ${e}`;await x(m)}console.log(no.green("\u2714\uFE0E Successfully Harvested SOL")),process.exit(0)}),h.command("auto").alias("mev").description("Enable Auto Operation Mode").action(async()=>{await Aa(t)&&(Hp("solc cron epoch",{stdio:"inherit",shell:!0}),console.log(no.green("\u2714\uFE0E Auto Operation Mode Enabled"))),process.exit(0)})},"harvestCommands"),jp=r(async t=>{try{let e=t.HARVEST_ACCOUNT;if(e==="")throw new Error("Harvest Address not found");return e}catch{let o=await Fp.prompt([{type:"input",name:"harvestAddress",message:"Enter Harvest Address",validate:se}]);return await k({HARVEST_ACCOUNT:o.harvestAddress}),o.harvestAddress}},"getHarvestAddress");import{format as dd}from"@skeet-framework/utils";import{writeFile as Jp}from"fs/promises";var Bp=r(async t=>{await Jp(Te,JSON.stringify({...t},null,2),"utf-8")},"writeEpochDataToFile"),ft=Bp;var Gp=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=n?E(a):E(s),c=`===\u23F3 ${t.epoch} \u23F3===
607
607
  Validator: ${i}
608
608
  Network: ${o.NETWORK}
609
609
  CurrentEpoch: ${t.epoch}
610
610
  Next epoch is coming in less than ${e}!
611
611
  Epoch Completed: ${t.epochCompletedPercent}%
612
- Until Next Epoch: ${t.epochRemainingTime}`;await x(c)},"alertMessage"),xt=Up;var Mp=r(async(t,e,o,n)=>{t<24*60&&t>=8*60&&!e.isLessThan1Day&&(await ut({...e,isLessThan1Day:!0}),await xt(o,"1 Day",n))},"isLessThan1Day"),Aa=Mp;var Fp=r(async(t,e,o,n)=>{t<8*60&&t>=60&&!e.isLessThan8Hours&&(await ut({...e,isLessThan8Hours:!0}),await xt(o,"8 Hours",n))},"lessThan8Hour"),_a=Fp;import{spawnSync as Yp}from"child_process";import jp from"chalk";var Hp=r(async(t,e)=>{let o=Math.floor(Math.random()*(e-t+1)+t);return await new Promise(n=>setTimeout(n,o*1e3)),o},"randomSleep"),Na=Hp;var Jp=r(async(t,e,o,n)=>{let s=n.IS_MEV_MODE,a=n.NETWORK===u.MAINNET;if(t<60&&!e.isLessThan1Hour){if(await ut({...e,isLessThan1Hour:!0}),await xt(o,"1 Hour",n),s&&a){let i=await Na(1,100);console.log(jp.white(`\u23F3 Waiting for ${i} seconds before running solc harvest...`)),Yp("solc",["harvest"],{stdio:"inherit",shell:!0})}return!0}return!1},"lessThan1Hour"),Oa=Jp;var Bp=r(async(t,e)=>{let o=e.NETWORK===u.TESTNET,n={epoch:t.epoch,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1},{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?E(a):E(s);await ut(n),console.log("Epoch has been updated!");let c=`===\u23F3 ${t.epoch} \u23F3===
612
+ Until Next Epoch: ${t.epochRemainingTime}`;await x(c)},"alertMessage"),$t=Gp;var zp=r(async(t,e,o,n)=>{t<24*60&&t>=8*60&&!e.isLessThan1Day&&(await ft({...e,isLessThan1Day:!0}),await $t(o,"1 Day",n))},"isLessThan1Day"),Oa=zp;var Wp=r(async(t,e,o,n)=>{t<8*60&&t>=60&&!e.isLessThan8Hours&&(await ft({...e,isLessThan8Hours:!0}),await $t(o,"8 Hours",n))},"lessThan8Hour"),ka=Wp;import{spawnSync as Qp}from"child_process";import Xp from"chalk";var qp=r(async(t,e)=>{let o=Math.floor(Math.random()*(e-t+1)+t);return await new Promise(n=>setTimeout(n,o*1e3)),o},"randomSleep"),Ra=qp;var Zp=r(async(t,e,o,n)=>{let s=n.IS_MEV_MODE,a=n.NETWORK===u.MAINNET;if(t<60&&!e.isLessThan1Hour){if(await ft({...e,isLessThan1Hour:!0}),await $t(o,"1 Hour",n),s&&a){let i=await Ra(1,100);console.log(Xp.white(`\u23F3 Waiting for ${i} seconds before running solc harvest...`)),Qp("solc",["harvest"],{stdio:"inherit",shell:!0})}return!0}return!1},"lessThan1Hour"),va=Zp;var td=r(async(t,e)=>{let o=e.NETWORK===u.TESTNET,n={epoch:t.epoch,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1},{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?E(a):E(s);await ft(n),console.log("Epoch has been updated!");let c=`===\u23F3 ${t.epoch} \u23F3===
613
613
  Validator: ${i}
614
614
  Network: ${e.NETWORK}
615
615
  CurrentEpoch: ${t.epoch}
616
616
  Epoch has been updated!
617
- Until Next Epoch: Approximately 2 days`;return await x(c),"Epoch has been updated!"},"newEpoch"),ka=Bp;import{existsAsync as Gp}from"@skeet-framework/utils";import{readFile as zp,writeFile as Wp}from"fs/promises";import qp from"chalk";import{homedir as Qp}from"os";var Xp=r(async()=>{let e=Qp().includes("/home/solv")?Se:"./currentEpoch.json";if(await Gp(e))return JSON.parse(await zp(e,"utf-8"));let o={epoch:0,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1};return await Wp(e,JSON.stringify(o,null,2),"utf-8"),console.log(qp.white("\u2714\uFE0F Initial epoch data has been created!")),o},"initOrReadEpochFile"),va=Xp;import Zp from"chalk";var td=r(async t=>{let e=t.RPC_URL,o=t.NETWORK===u.TESTNET;if(o&&(e=Go),await nt(e,Y.VALIDATOR,o)<po){let{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?E(a):E(s),c=`\u26A0\uFE0F Validator Account Balance is less than ${po} SOL
617
+ Until Next Epoch: Approximately 2 days`;return await x(c),"Epoch has been updated!"},"newEpoch"),Ca=td;import{existsAsync as ed}from"@skeet-framework/utils";import{readFile as od,writeFile as rd}from"fs/promises";import nd from"chalk";import{homedir as sd}from"os";var ad=r(async()=>{let e=sd().includes("/home/solv")?Te:"./currentEpoch.json";if(await ed(e))return JSON.parse(await od(e,"utf-8"));let o={epoch:0,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1};return await rd(e,JSON.stringify(o,null,2),"utf-8"),console.log(nd.white("\u2714\uFE0F Initial epoch data has been created!")),o},"initOrReadEpochFile"),Ia=ad;import id from"chalk";var cd=r(async t=>{let e=t.RPC_URL,o=t.NETWORK===u.TESTNET;if(o&&(e=zo),await st(e,Y.VALIDATOR,o)<uo){let{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?E(a):E(s),c=`\u26A0\uFE0F Validator Account Balance is less than ${uo} SOL
618
618
  Please top up your Validator Account
619
- Address: ${i}`;return await x(c),!1}return console.log(Zp.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),Ra=td;async function ed(t="@ily-validator/solc"){try{let e=`https://registry.npmjs.org/${t}`,o=await fetch(e);if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);return(await o.json())["dist-tags"].latest}catch(e){return console.error(`Error fetching latest version for package ${t}:`,e),null}}r(ed,"getNpmLatestVersion");var Ca=ed;async function od(){let t=Ot(),e=await Ca();if(!e)throw new Error("Failed to get NPM API");return console.log("currentVersion:",t),console.log("latestVersion:",e),t===e}r(od,"isVersionSame");var Ia=od;import{spawnSync as sd}from"child_process";import{spawnSync as rd}from"node:child_process";var Pa=r(t=>{try{let e=`solana epoch-info --url '${t}'`,{stdout:o}=rd(e,{shell:!0,stdio:"pipe"}),s=o.toString().split(`
620
- `),a=s.find(f=>f.includes("Epoch Completed Time:")),i=s.find(f=>f.includes("Epoch Completed Percent:"))?.replace("Epoch Completed Percent:",""),c=Number(s.find(f=>f.includes("Epoch:"))?.replace("Epoch:",""));if(!a||!i||!c)throw new Error("Epoch Completed Time not found");let p=a.split("(")[1].replace(" remaining)","");console.log("remainingTime:",p);let d=/(?:(\d+)day\s*)?(?:(\d+)h\s*)?(?:(\d+)m\s*)?(?:(\d+)s\s*)?/,m=p.match(d);if(m){let f=m[1]?parseInt(m[1]):0,S=m[2]?parseInt(m[2]):0,w=m[3]?parseInt(m[3]):0,_=m[4]?parseInt(m[4]):0,N=f*24*60+S*60+w+Math.floor(_/60);return{epoch:c,day:f,hour:S,min:w,sec:_,totalMinutes:N,epochRemainingTime:p,epochCompletedPercent:i}}else throw new Error("Time information could not be parsed")}catch(e){throw new Error(`getEpochInfoByRust failed: ${e}`)}},"getEpochInfoByRust");var ad=r(async t=>{let e=t.NETWORK===u.TESTNET,o=e?Te:t.RPC_URL,n=nd(new Date,"yyyy-MM-dd HH:mm:ss");console.log(`Checking Epoch at ${n}`);let s=await va(),a=Pa(o),{mainnetValidatorVoteKey:i,testnetValidatorVoteKey:c}=A(),p=await jt(o,E(e?c:i));if(p.isActive||await x(`\u26A0\uFE0F Validator is not active!
621
- VoteAccount: ${p.pubkey}
622
- Reason: ${p.reason}
619
+ Address: ${i}`;return await x(c),!1}return console.log(id.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),La=cd;async function ld(t="@ily-validator/solc"){try{let e=`https://registry.npmjs.org/${t}`,o=await fetch(e);if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);return(await o.json())["dist-tags"].latest}catch(e){return console.error(`Error fetching latest version for package ${t}:`,e),null}}r(ld,"getNpmLatestVersion");var Pa=ld;async function md(){let t=Rt(),e=await Pa();if(!e)throw new Error("Failed to get NPM API");return console.log("currentVersion:",t),console.log("latestVersion:",e),t===e}r(md,"isVersionSame");var xa=md;import{spawnSync as ud}from"child_process";import{spawnSync as pd}from"node:child_process";var Va=r(t=>{try{let e=`solana epoch-info --url '${t}'`,{stdout:o}=pd(e,{shell:!0,stdio:"pipe"}),s=o.toString().split(`
620
+ `),a=s.find(f=>f.includes("Epoch Completed Time:")),i=s.find(f=>f.includes("Epoch Completed Percent:"))?.replace("Epoch Completed Percent:",""),c=Number(s.find(f=>f.includes("Epoch:"))?.replace("Epoch:",""));if(!a||!i||!c)throw new Error("Epoch Completed Time not found");let m=a.split("(")[1].replace(" remaining)","");console.log("remainingTime:",m);let d=/(?:(\d+)day\s*)?(?:(\d+)h\s*)?(?:(\d+)m\s*)?(?:(\d+)s\s*)?/,p=m.match(d);if(p){let f=p[1]?parseInt(p[1]):0,S=p[2]?parseInt(p[2]):0,w=p[3]?parseInt(p[3]):0,_=p[4]?parseInt(p[4]):0,N=f*24*60+S*60+w+Math.floor(_/60);return{epoch:c,day:f,hour:S,min:w,sec:_,totalMinutes:N,epochRemainingTime:m,epochCompletedPercent:i}}else throw new Error("Time information could not be parsed")}catch(e){throw new Error(`getEpochInfoByRust failed: ${e}`)}},"getEpochInfoByRust");var fd=r(async t=>{let e=t.NETWORK===u.TESTNET,o=e?ge:t.RPC_URL,n=dd(new Date,"yyyy-MM-dd HH:mm:ss");console.log(`Checking Epoch at ${n}`);let s=await Ia(),a=Va(o),{mainnetValidatorVoteKey:i,testnetValidatorVoteKey:c}=A(),m=await Bt(o,E(e?c:i));if(m.isActive||await x(`\u26A0\uFE0F Validator is not active!
621
+ VoteAccount: ${m.pubkey}
622
+ Reason: ${m.reason}
623
623
  Network: ${t.NETWORK}
624
- Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${p.isActive}`),await Ra(t),!await Ia()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),sd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await ka(a,t),"Epoch has been updated!";let m=a.totalMinutes,f=[Oa,_a,Aa];for(let S of f)if(await S(m,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),La=ad;var xa=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await La(t),process.exit(0)})},"epochTimerCommands");import Ga from"inquirer";import{join as Da}from"path";import{spawnSync as $t}from"node:child_process";import j from"chalk";import{spawnSync as id}from"node:child_process";var cd=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=id(`ssh -i ${s} -o StrictHostKeyChecking=no ${o}@${t} -p 22 'cd ~ && source ~/.profile && ${e}'`,{shell:!0,stdio:n});return i.status!==0?(console.log(`\u26A0\uFE0F CMD Failed. Please check your SSH connection.
624
+ Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${m.isActive}`),await La(t),!await xa()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),ud("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await Ca(a,t),"Epoch has been updated!";let p=a.totalMinutes,f=[va,ka,Oa];for(let S of f)if(await S(p,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),$a=fd;var Ka=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await $a(t),process.exit(0)})},"epochTimerCommands");import qa from"inquirer";import{join as Ma}from"path";import{spawnSync as Dt}from"node:child_process";import j from"chalk";import{spawnSync as hd}from"node:child_process";var yd=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=hd(`ssh -i ${s} -o StrictHostKeyChecking=no ${o}@${t} -p 22 'cd ~ && source ~/.profile && ${e}'`,{shell:!0,stdio:n});return i.status!==0?(console.log(`\u26A0\uFE0F CMD Failed. Please check your SSH connection.
625
625
  $ ssh ${o}@${t}
626
626
 
627
- Failed Cmd: ${e}`),a={status:i.status,stdout:String(i.stdout),stderr:i.stderr.toString()},a):(a={status:i.status,stdout:i.stdout.toString(),stderr:i.stderr.toString()},a)}catch(i){return console.log(`scpSSH Error: ${i}`),a={status:null,stdout:"",stderr:String(i)},a}},"scpSSH"),Va=cd;import $a from"chalk";var ld=r((t,e)=>{console.log($a.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=E(t).trim(),n=Va(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log($a.yellow(`\u26A0\uFE0F Destination Identity Key is different.
627
+ Failed Cmd: ${e}`),a={status:i.status,stdout:String(i.stdout),stderr:i.stderr.toString()},a):(a={status:i.status,stdout:i.stdout.toString(),stderr:i.stderr.toString()},a)}catch(i){return console.log(`scpSSH Error: ${i}`),a={status:null,stdout:"",stderr:String(i)},a}},"scpSSH"),Da=yd;import ba from"chalk";var Sd=r((t,e)=>{console.log(ba.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=E(t).trim(),n=Da(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log(ba.yellow(`\u26A0\uFE0F Destination Identity Key is different.
628
628
  Please check your Validator
629
629
  $ ssh solv@${e}
630
630
 
631
631
  Local Identity Key: ${o}
632
- Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Vt=ld;var no=Da(C,ht),Ka=Da(C,ft),ba=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?P:K;s&&(a=P);let i=D();if(!Vt(a,t))return;console.log(j.white("\u{1F7E2} Waiting for restart window..."));let l=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if($t(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
632
+ Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Kt=Sd;var so=Ma(C,yt),Ua=Ma(C,ht),Fa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=D();if(!Kt(a,t))return;console.log(j.white("\u{1F7E2} Waiting for restart window..."));let l=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(Dt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
633
633
  $ ssh solv@${t}
634
634
 
635
- Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(j.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} set-identity ${no}'`;if($t(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
635
+ Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(j.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} set-identity ${so}'`;if(Dt(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
636
636
  $ ssh solv@${t}
637
637
 
638
- Failed Cmd: ${i} -l ${y} set-identity ${no}`));return}if(console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),$t(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${no} ${Ka}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
638
+ Failed Cmd: ${i} -l ${y} set-identity ${so}`));return}if(console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Dt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${so} ${Ua}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
639
639
  $ ssh solv@${t}
640
640
 
641
- Failed Cmd: ln -sf ${no} ${Ka}`));return}if(console.log(j.white("\u{1F7E2} Uploading the tower file to the new validator...")),$t(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
641
+ Failed Cmd: ln -sf ${so} ${Ua}`));return}if(console.log(j.white("\u{1F7E2} Uploading the tower file to the new validator...")),Dt(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
642
642
  $ ssh solv@${t}
643
643
 
644
- Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(j.white("\u{1F7E2} Setting identity on the new validator...")),$t(`${i} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
644
+ Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(j.white("\u{1F7E2} Setting identity on the new validator...")),Dt(`${i} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
645
645
 
646
646
  Failed Cmd: ${i} -l ${y} set-identity ${a}
647
- ln -sf ${a} ${O}`));return}if($t(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
647
+ ln -sf ${a} ${O}`));return}if(Dt(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
648
648
 
649
- Failed Cmd: ln -sf ${a} ${O}`));return}console.log(j.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as Fa}from"path";import F from"chalk";import{spawnSync as Kt}from"node:child_process";var Ua=Fa(C,ht),md=Fa(C,ft),Ma="~/.ssh/id_rsa",Ha=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?P:K;s&&(a=P);let i=D();if(!Vt(a,t))return;let l=`${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`,p=`${i} -l ${y} set-identity ${Ua}`,d=`ln -sf ${Ua} ${md}`,m=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,S=`ln -sf ${a} ${O}`;if(console.log(F.white("\u{1F7E2} Waiting for restart window...")),Kt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
649
+ Failed Cmd: ln -sf ${a} ${O}`));return}console.log(j.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as ja}from"path";import F from"chalk";import{spawnSync as bt}from"node:child_process";var Ha=ja(C,yt),Td=ja(C,ht),Ya="~/.ssh/id_rsa",Ja=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=D();if(!Kt(a,t))return;let l=`${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`,m=`${i} -l ${y} set-identity ${Ha}`,d=`ln -sf ${Ha} ${Td}`,p=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,S=`ln -sf ${a} ${O}`;if(console.log(F.white("\u{1F7E2} Waiting for restart window...")),bt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
650
650
 
651
- Failed Cmd: ${l}`));return}if(console.log(F.white("\u{1F7E2} Setting identity on the new validator...")),Kt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
651
+ Failed Cmd: ${l}`));return}if(console.log(F.white("\u{1F7E2} Setting identity on the new validator...")),bt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
652
652
 
653
- Failed Cmd: ${p}`));return}if(console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Kt(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
653
+ Failed Cmd: ${m}`));return}if(console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),bt(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
654
654
 
655
- Failed Cmd: ${d}`));return}if(console.log(F.white("\u{1F7E2} Uploading the tower file to the new validator...")),Kt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your Validator
655
+ Failed Cmd: ${d}`));return}if(console.log(F.white("\u{1F7E2} Uploading the tower file to the new validator...")),bt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your Validator
656
656
 
657
- Failed Cmd: ${m}`));return}console.log(F.white("\u{1F7E2} Setting identity on the new validator..."));let V=`ssh -i ${Ma} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${f}'`;Kt(V,{shell:!0,stdio:"inherit"}).status!==0&&console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
657
+ Failed Cmd: ${p}`));return}console.log(F.white("\u{1F7E2} Setting identity on the new validator..."));let V=`ssh -i ${Ya} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${f}'`;bt(V,{shell:!0,stdio:"inherit"}).status!==0&&console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
658
658
  $ ssh solv@${t}
659
659
 
660
- Failed Cmd: ${f}`)),console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Ut=`ssh -i ${Ma} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${S}'`;if(Kt(Ut,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
660
+ Failed Cmd: ${f}`)),console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Ft=`ssh -i ${Ya} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${S}'`;if(bt(Ft,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
661
661
 
662
- Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as pd}from"node:child_process";function Ya(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return pd(e,{shell:!0,stdio:"inherit"}).status===0}r(Ya,"checkSSHConnection");import ae from"chalk";import{join as Ja}from"path";import{spawnSync as Dt}from"node:child_process";import J from"chalk";var so=Ja(C,ht),ja=Ja(C,ft),Ba=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?P:K;if(s&&(a=P),!Vt(a,t))return;let c=jo,l=Jo;console.log(J.white("\u{1F7E2} Waiting for restart window..."));let p=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(Dt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
662
+ Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as gd}from"node:child_process";function Ba(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return gd(e,{shell:!0,stdio:"inherit"}).status===0}r(Ba,"checkSSHConnection");import ie from"chalk";import{join as za}from"path";import{spawnSync as Ut}from"node:child_process";import J from"chalk";var ao=za(C,yt),Ga=za(C,ht),Wa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;if(s&&(a=L),!Kt(a,t))return;let c=Jo,l=Bo;console.log(J.white("\u{1F7E2} Waiting for restart window..."));let m=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(Ut(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
663
663
  $ ssh solv@${t}
664
664
 
665
- Failed Cmd: ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(J.white("\u{1F7E2} Setting identity on the new validator..."));let m=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} set-identity ${so}'`;if(Dt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
665
+ Failed Cmd: ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(J.white("\u{1F7E2} Setting identity on the new validator..."));let p=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} set-identity ${ao}'`;if(Ut(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
666
666
  $ ssh solv@${t}
667
667
 
668
- Failed Cmd: ${c} -l ${y} set-identity ${so}`));return}if(console.log(J.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Dt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${so} ${ja}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
668
+ Failed Cmd: ${c} -l ${y} set-identity ${ao}`));return}if(console.log(J.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Ut(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${ao} ${Ga}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
669
669
  $ ssh solv@${t}
670
670
 
671
- Failed Cmd: ln -sf ${so} ${ja}`));return}if(console.log(J.white("\u{1F7E2} Uploading the tower file to the new validator...")),Dt(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
671
+ Failed Cmd: ln -sf ${ao} ${Ga}`));return}if(console.log(J.white("\u{1F7E2} Uploading the tower file to the new validator...")),Ut(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
672
672
  $ ssh solv@${t}
673
673
 
674
- Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(J.white("\u{1F7E2} Setting identity on the new validator...")),Dt(`${l} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
674
+ Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(J.white("\u{1F7E2} Setting identity on the new validator...")),Ut(`${l} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
675
675
 
676
676
  Failed Cmd: ${l} -l ${y} set-identity ${a}
677
- ln -sf ${a} ${O}`));return}if(Dt(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
677
+ ln -sf ${a} ${O}`));return}if(Ut(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
678
678
 
679
- Failed Cmd: ln -sf ${a} ${O}`));return}console.log(J.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncomingV1toV2");var dd=["Incoming","Outgoing"],za=r(async(t,e)=>{t.command("switch").option("--ip <ip>","IP Address of the New Validator","").option("--switchType <switchType>","Switch Type","").option("--v2-migrate-incoming","Switch V1 to V2 Incoming",!1).description("Switch Validator Identity with No Downtime").action(async o=>{try{let n=e.NETWORK===u.TESTNET,s=e.NODE_TYPE===T.RPC,a=n?P:K;s&&(a=P);let i=E(a),c=o.switchType,l=o.ip;if(c===""||l===""){let d=await Ga.prompt([{name:"switchType",type:"list",message:"Which switch type do you want to perform?",choices:["Incoming","Outgoing"]},{name:"ip",type:"input",message:"What is the IP address of the new validator?",default(){return"1.1.1.1"}}]);c=d.switchType,l=d.ip}if(!dd.includes(c)){console.log(ae.yellow(`\u26A0\uFE0F Invalid Switch Type
680
- You can choose only Incoming or Outgoing`));return}if(!Ya(l)){console.log("SSH Connection Failed");return}if(c==="Incoming"){if(o.v2MigrateIncoming){(await Ga.prompt([{name:"confirm",type:"confirm",message:"Are you sure you want to migrate V1 to V2 Incoming? This node must be running V2 and the remote node must be running V1."}])).confirm||(console.log(ae.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.log(ae.white("\u{1F7E2} Migrating V1 to V2 Incoming...")),await Ba(l,i,e);return}await ba(l,i,e)}else await Ha(l,i,e);process.exit(0)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(ae.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ae.red(`Switch Error: ${n.message}`)),process.exit(0)}})},"switchCommand");import{spawnSync as ud}from"node:child_process";var fd=r((t="296877183",e=y)=>{try{let o=`agave-ledger-tool --ledger ${e} create-snapshot --incremental --snapshot-archive-path ${e} --hard-fork ${t} --deactivate-feature-gate 7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb -- ${t} ${e}`,n=ud(o,{shell:!0,stdio:"pipe",cwd:e});if(n.status!==0)throw new Error(`createSnapshot: ${n.error}`)}catch(o){throw new Error(`createSnapshot: ${o}`)}},"createSnapshot"),Wa=fd;import bt from"inquirer";import _d from"dotenv";import At from"chalk";var ao={SOL:{tokenMint:"So11111111111111111111111111111111111111112",associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},USDC:{tokenMint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},elSOL:{tokenMint:co,associationAccount:"",decimal:9},JitoSOL:{tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSOL:{tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSOL:{tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},EPCT:{tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUP:{tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},BONK:{tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},JTO:{tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}},Do={So11111111111111111111111111111111111111112:{symbol:"SOL",tokenMint:de,associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:"USDC",tokenMint:ue,associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC:{symbol:"elSOL",tokenMint:co,associationAccount:"",decimal:9},J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:{symbol:"jitoSOL",tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:{symbol:"mSOL",tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:{symbol:"bSOL",tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:{symbol:"EPCT",tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:{symbol:"JUP",tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:{symbol:"BONK",tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:{symbol:"JTO",tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}};import{readFile as Sd}from"fs/promises";import{Connection as Td,Keypair as gd,VersionedTransaction as Ed}from"@solana/web3.js";import U from"chalk";import wd from"inquirer";import Ad from"dotenv";var hd=r(async(t,e,o,n,s)=>{try{let a=`${t}/quote?inputMint=${o}&outputMint=${n}&amount=${s}`,i=await fetch(a,{method:"GET",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`}});return i.status===429?"Too many requests, please try again later":i.status===401?"Unauthorized, please check your API key":await i.json()}catch(a){throw new Error(`Error getJupiterQuote: ${a}`)}},"getJupiterQuote"),qa=hd;var yd=r(async(t,e,o,n)=>{try{let s=o.outputMint,a,i=Zo[s];i?a={swapRequest:{quoteResponse:o,userPublicKey:n,feeAccount:i,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}}:a={swapRequest:{quoteResponse:o,userPublicKey:n,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}};let c=`${t}/swap`,l=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`},body:JSON.stringify(a.swapRequest)});return l.status===429?"Too many requests, please try again later":await l.json()}catch(s){throw new Error(`Error postJupiterSwap: ${s}`)}},"postJupiterSwap"),Qa=yd;Ad.config();var Xa=r(async(t,e,o,n,s,a,i,c=!0)=>{let l=new Td(t,"confirmed"),p=await qa(e,o,s,a,i);if(typeof p=="string"){p.includes("Unauthorized")&&(console.error(U.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
681
- `)),console.log(U.white("Get Your API key \u{1F447}")),console.log(U.white(Mt+`
682
- `)),process.exit(0));let ie=`${U.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
679
+ Failed Cmd: ln -sf ${a} ${O}`));return}console.log(J.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncomingV1toV2");var Ed=["Incoming","Outgoing"],Qa=r(async(t,e)=>{t.command("switch").option("--ip <ip>","IP Address of the New Validator","").option("--switchType <switchType>","Switch Type","").option("--v2-migrate-incoming","Switch V1 to V2 Incoming",!1).description("Switch Validator Identity with No Downtime").action(async o=>{try{let n=e.NETWORK===u.TESTNET,s=e.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=E(a),c=o.switchType,l=o.ip;if(c===""||l===""){let d=await qa.prompt([{name:"switchType",type:"list",message:"Which switch type do you want to perform?",choices:["Incoming","Outgoing"]},{name:"ip",type:"input",message:"What is the IP address of the new validator?",default(){return"1.1.1.1"}}]);c=d.switchType,l=d.ip}if(!Ed.includes(c)){console.log(ie.yellow(`\u26A0\uFE0F Invalid Switch Type
680
+ You can choose only Incoming or Outgoing`));return}if(!Ba(l)){console.log("SSH Connection Failed");return}if(c==="Incoming"){if(o.v2MigrateIncoming){(await qa.prompt([{name:"confirm",type:"confirm",message:"Are you sure you want to migrate V1 to V2 Incoming? This node must be running V2 and the remote node must be running V1."}])).confirm||(console.log(ie.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.log(ie.white("\u{1F7E2} Migrating V1 to V2 Incoming...")),await Wa(l,i,e);return}await Fa(l,i,e)}else await Ja(l,i,e);process.exit(0)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(ie.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ie.red(`Switch Error: ${n.message}`)),process.exit(0)}})},"switchCommand");import{spawnSync as wd}from"node:child_process";var Ad=r((t="296877183",e=y)=>{try{let o=`agave-ledger-tool --ledger ${e} create-snapshot --incremental --snapshot-archive-path ${e} --hard-fork ${t} --deactivate-feature-gate 7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb -- ${t} ${e}`,n=wd(o,{shell:!0,stdio:"pipe",cwd:e});if(n.status!==0)throw new Error(`createSnapshot: ${n.error}`)}catch(o){throw new Error(`createSnapshot: ${o}`)}},"createSnapshot"),Xa=Ad;import Mt from"inquirer";import Ld from"dotenv";import Nt from"chalk";var io={SOL:{tokenMint:"So11111111111111111111111111111111111111112",associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},USDC:{tokenMint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},elSOL:{tokenMint:lo,associationAccount:"",decimal:9},JitoSOL:{tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSOL:{tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSOL:{tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},EPCT:{tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUP:{tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},BONK:{tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},JTO:{tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}},bo={So11111111111111111111111111111111111111112:{symbol:"SOL",tokenMint:ue,associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:"USDC",tokenMint:fe,associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC:{symbol:"elSOL",tokenMint:lo,associationAccount:"",decimal:9},J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:{symbol:"jitoSOL",tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:{symbol:"mSOL",tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:{symbol:"bSOL",tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:{symbol:"EPCT",tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:{symbol:"JUP",tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:{symbol:"BONK",tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:{symbol:"JTO",tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}};import{readFile as Od}from"fs/promises";import{Connection as kd,Keypair as Rd,VersionedTransaction as vd}from"@solana/web3.js";import U from"chalk";import Cd from"inquirer";import Id from"dotenv";var _d=r(async(t,e,o,n,s)=>{try{let a=`${t}/quote?inputMint=${o}&outputMint=${n}&amount=${s}`,i=await fetch(a,{method:"GET",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`}});return i.status===429?"Too many requests, please try again later":i.status===401?"Unauthorized, please check your API key":await i.json()}catch(a){throw new Error(`Error getJupiterQuote: ${a}`)}},"getJupiterQuote"),Za=_d;var Nd=r(async(t,e,o,n)=>{try{let s=o.outputMint,a,i=tr[s];i?a={swapRequest:{quoteResponse:o,userPublicKey:n,feeAccount:i,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}}:a={swapRequest:{quoteResponse:o,userPublicKey:n,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}};let c=`${t}/swap`,l=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`},body:JSON.stringify(a.swapRequest)});return l.status===429?"Too many requests, please try again later":await l.json()}catch(s){throw new Error(`Error postJupiterSwap: ${s}`)}},"postJupiterSwap"),ti=Nd;Id.config();var ei=r(async(t,e,o,n,s,a,i,c=!0)=>{let l=new kd(t,"confirmed"),m=await Za(e,o,s,a,i);if(typeof m=="string"){m.includes("Unauthorized")&&(console.error(U.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
681
+ `)),console.log(U.white("Get Your API key \u{1F447}")),console.log(U.white(Ht+`
682
+ `)),process.exit(0));let ce=`${U.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
683
683
 
684
684
  You can upgrade your API key to increase your rate limits.
685
685
  Get Your API key \u{1F447}
686
- Validators Solutions: ${Mt}
687
- `;console.error(U.white(ie)),process.exit(0)}let d=Do[s],m=Do[a],f=`\u{1F504} Swap Quote \u{1F504}
686
+ Validators Solutions: ${Ht}
687
+ `;console.error(U.white(ce)),process.exit(0)}let d=bo[s],p=bo[a],f=`\u{1F504} Swap Quote \u{1F504}
688
688
 
689
689
  - \u{1F3E6} Input Token: ${d.symbol} (${s})
690
690
  - \u{1F4B0} Input Amount: ${i/Math.pow(10,d.decimal)} ${d.symbol}
691
691
 
692
- - \u{1F3E6} Output Token: ${m.symbol} (${a})
693
- - \u{1F4B0} Output Amount: ${Number(p?.outAmount)/Math.pow(10,m.decimal)} ${m.symbol}
692
+ - \u{1F3E6} Output Token: ${p.symbol} (${a})
693
+ - \u{1F4B0} Output Amount: ${Number(m?.outAmount)/Math.pow(10,p.decimal)} ${p.symbol}
694
694
 
695
695
  \u203B This quote is based on the current market rate and may change before the swap is completed.
696
696
  `;console.log(U.white(f)),console.log(U.gray(`You can also swap using the following command:
697
697
  $ solc swap --input ${s} --output ${a} --amount ${i} --skip-confirm
698
- `));let S=!1;c?S=(await wd.prompt([{type:"confirm",name:"confirm",message:"Do you want to proceed with the swap?",default:!1}])).confirm:(console.log(U.cyan("Skipping confirmation...")),S=!0),S||(console.log(U.yellow("\u26A0\uFE0F Swap cancelled")),process.exit(0)),p||process.exit(0);let w=JSON.parse(await Sd(n,"utf8")),_=gd.fromSecretKey(new Uint8Array(Array.from(w))),N=await Qa(e,o,p,_.publicKey.toString());if(typeof N=="string"){N.includes("Unauthorized")&&(console.error(U.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
699
- `)),console.log(U.white("Get Your API key \u{1F447}")),console.log(U.white(Mt+`
700
- `)),process.exit(0));let ie=`${U.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
698
+ `));let S=!1;c?S=(await Cd.prompt([{type:"confirm",name:"confirm",message:"Do you want to proceed with the swap?",default:!1}])).confirm:(console.log(U.cyan("Skipping confirmation...")),S=!0),S||(console.log(U.yellow("\u26A0\uFE0F Swap cancelled")),process.exit(0)),m||process.exit(0);let w=JSON.parse(await Od(n,"utf8")),_=Rd.fromSecretKey(new Uint8Array(Array.from(w))),N=await ti(e,o,m,_.publicKey.toString());if(typeof N=="string"){N.includes("Unauthorized")&&(console.error(U.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
699
+ `)),console.log(U.white("Get Your API key \u{1F447}")),console.log(U.white(Ht+`
700
+ `)),process.exit(0));let ce=`${U.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
701
701
 
702
702
  You can upgrade your API key to increase your rate limits.
703
703
  Get Your API key \u{1F447}
704
- Validators Solutions: ${Mt}
705
- `;console.error(U.white(ie)),process.exit(0)}let G=Buffer.from(N.swapTransaction,"base64"),V=Ed.deserialize(G);V.sign([_]);let _t=V.serialize(),Ut=await l.sendRawTransaction(_t,{skipPreflight:!0,maxRetries:2}),bo=V.message.recentBlockhash;return console.log(`Swapping...
706
- Transaction ID: ${Ut}`),await l.confirmTransaction({blockhash:bo,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ut},"confirmed"),Ut},"swap");_d.config();var Za=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await Nd(e.RPC_URL,e.KEYPAIR_PATH,e.API_KEY,o.input,o.output,Number(o.amount),!o.skipConfirm,o.initConfig)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(At.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(At.red(`Swap Error: ${n.message}`)),process.exit(0)}})},"swapCommand"),Nd=r(async(t,e,o,n="",s="",a=0,i=!0,c=!1)=>{console.log(At.white("Solana RPC URL:",t)),console.log(At.white("KeyfilePath:",e)),(!e||e===""||c)&&await Od();let l=qo,p=[...Qo,"Other"],d=n,m="",f=s,S=a;if(d===""){let N=await bt.prompt([{type:"list",name:"name",message:"Select input mint",choices:p,default:de}]);N.name==="Other"?d=(await bt.prompt([{type:"input",name:"address",message:"Enter input mint address",default:ue}])).address:(m=N.name,d=ao[m].tokenMint)}if(f===""){p=p.filter(V=>V!==m);let N=await bt.prompt([{type:"list",name:"name",message:"Select output mint",choices:p}]);if(N.name==="Other")f=(await bt.prompt([{type:"input",name:"address",message:"Enter output mint address",default:X}])).address;else{let V=N.name;f=ao[V].tokenMint}let G=N.name;f=ao[G].tokenMint}if(S===0){let N=await bt.prompt([{type:"input",name:"amount",message:"Enter input amount in LAMPORTS. e.g. 0.01 SOL",default:"10000000"}]);S=Number(N.amount)}let _=await Xa(t,l,!o||o===""?Xo:o,e,d,f,S,i);_||process.exit(0),console.log(At.green("\u2714\uFE0E Sent Tx Successfully!")),console.log(At.white(`Check Your TX \u{1F449}: https://solscan.io/tx/${_}`))},"swapCmd");var Od=r(async()=>{let t=await bt.prompt([{type:"input",name:"RPC_URL",message:"Enter Solana RPC URL",default:"https://api.mainnet-beta.solana.com"},{type:"input",name:"KEYPAIR_PATH",message:"Enter Keypair Path",default:"/home/solv/mainnet-validator-keypair.json"},{type:"input",name:"API_KEY",message:"Enter Jupiter API Key(Optional)",default:""}]);await k(t),console.log(At.green(`\u2714\uFE0E Config Updated Successfully!
707
- `)),gt()},"askForConfig");import{spawnSync as kd}from"node:child_process";var ti=r(()=>{kd("sudo systemctl status jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStatus");import{spawnSync as vd}from"node:child_process";var ei=r(()=>{vd("sudo systemctl start jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStart");import{spawnSync as Rd}from"node:child_process";var oi=r(()=>{Rd("sudo systemctl stop jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStop");import{spawnSync as Cd}from"node:child_process";var ri=r(()=>{Cd("sudo systemctl restart jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterRestart");import{spawnSync as Id}from"node:child_process";var ni=r((t=!1)=>{Id(t?"journalctl -u jupiter-api.service -xef | grep ERROR":"journalctl -u jupiter-api.service -xef",{shell:!0,stdio:"inherit"})},"jupiterLog");import{spawnSync as Pd}from"node:child_process";var si=r(()=>{Pd("sudo systemctl enable jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterEnable");var ai=r(()=>{let t=h.command("jupiter").description("Jupiter API Commands");t.command("status").description("Show Jupiter Status").action(()=>{ti()}),t.command("start").description("Start Jupiter").action(()=>{ei()}),t.command("stop").description("Stop Jupiter").action(()=>{oi()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Jupiter Logs").action(e=>{ni(e.error),process.exit(0)}),t.command("restart").description("Restart Jupiter").action(()=>{ri()}),t.command("enable").description("Enable Jupiter").action(()=>{si()})},"jupiterCommands");import xd from"chalk";var h=new Ld;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(ce,"-V","Display version");async function Vd(){try{let t=await I();Yn(t),Gn(t),Jn(t),cs(t),Hr(t),jr(),zn(t),ks(t),Is(t),is(),Qn(),Mn(t),Ys(t),Wn(),Ds(),qs(t),Zs(t),wa(t),Hn(),Za(h,t),xa(t),za(h,t),ai(),Ms(),h.command("rm:log").description("Remove Logs").action(()=>{js()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{Bs()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(xd.white("\u{1F4DD} Creating Snapshot...")),Wa(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{Gs(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{zs()}),h.command("config").description("Show Solc Config").action(()=>{qe()}),h.command("vv").description("Show Solc Version").action(()=>{let e=Ee();console.log("version:",e)}),await h.addHelpCommand("help [cmd]","Display help for command").parseAsync(process.argv),process.exit(0)}catch(t){console.log(t),process.exit(0)}}r(Vd,"main");Vd();export{h as program};
704
+ Validators Solutions: ${Ht}
705
+ `;console.error(U.white(ce)),process.exit(0)}let z=Buffer.from(N.swapTransaction,"base64"),V=vd.deserialize(z);V.sign([_]);let Ot=V.serialize(),Ft=await l.sendRawTransaction(Ot,{skipPreflight:!0,maxRetries:2}),Uo=V.message.recentBlockhash;return console.log(`Swapping...
706
+ Transaction ID: ${Ft}`),await l.confirmTransaction({blockhash:Uo,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ft},"confirmed"),Ft},"swap");Ld.config();var oi=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await Pd(e.RPC_URL,e.KEYPAIR_PATH,e.API_KEY,o.input,o.output,Number(o.amount),!o.skipConfirm,o.initConfig)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(Nt.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(Nt.red(`Swap Error: ${n.message}`)),process.exit(0)}})},"swapCommand"),Pd=r(async(t,e,o,n="",s="",a=0,i=!0,c=!1)=>{console.log(Nt.white("Solana RPC URL:",t)),console.log(Nt.white("KeyfilePath:",e)),(!e||e===""||c)&&await xd();let l=Qo,m=[...Xo,"Other"],d=n,p="",f=s,S=a;if(d===""){let N=await Mt.prompt([{type:"list",name:"name",message:"Select input mint",choices:m,default:ue}]);N.name==="Other"?d=(await Mt.prompt([{type:"input",name:"address",message:"Enter input mint address",default:fe}])).address:(p=N.name,d=io[p].tokenMint)}if(f===""){m=m.filter(V=>V!==p);let N=await Mt.prompt([{type:"list",name:"name",message:"Select output mint",choices:m}]);if(N.name==="Other")f=(await Mt.prompt([{type:"input",name:"address",message:"Enter output mint address",default:Z}])).address;else{let V=N.name;f=io[V].tokenMint}let z=N.name;f=io[z].tokenMint}if(S===0){let N=await Mt.prompt([{type:"input",name:"amount",message:"Enter input amount in LAMPORTS. e.g. 0.01 SOL",default:"10000000"}]);S=Number(N.amount)}let _=await ei(t,l,!o||o===""?Zo:o,e,d,f,S,i);_||process.exit(0),console.log(Nt.green("\u2714\uFE0E Sent Tx Successfully!")),console.log(Nt.white(`Check Your TX \u{1F449}: https://solscan.io/tx/${_}`))},"swapCmd");var xd=r(async()=>{let t=await Mt.prompt([{type:"input",name:"RPC_URL",message:"Enter Solana RPC URL",default:"https://api.mainnet-beta.solana.com"},{type:"input",name:"KEYPAIR_PATH",message:"Enter Keypair Path",default:"/home/solv/mainnet-validator-keypair.json"},{type:"input",name:"API_KEY",message:"Enter Jupiter API Key(Optional)",default:""}]);await k(t),console.log(Nt.green(`\u2714\uFE0E Config Updated Successfully!
707
+ `)),wt()},"askForConfig");import{spawnSync as Vd}from"node:child_process";var ri=r(()=>{Vd("sudo systemctl status jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStatus");import{spawnSync as $d}from"node:child_process";var ni=r(()=>{$d("sudo systemctl start jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStart");import{spawnSync as Kd}from"node:child_process";var si=r(()=>{Kd("sudo systemctl stop jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStop");import{spawnSync as Dd}from"node:child_process";var ai=r(()=>{Dd("sudo systemctl restart jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterRestart");import{spawnSync as bd}from"node:child_process";var ii=r((t=!1)=>{bd(t?"journalctl -u jupiter-api.service -xef | grep ERROR":"journalctl -u jupiter-api.service -xef",{shell:!0,stdio:"inherit"})},"jupiterLog");import{spawnSync as Ud}from"node:child_process";var ci=r(()=>{Ud("sudo systemctl enable jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterEnable");var li=r(()=>{let t=h.command("jupiter").description("Jupiter API Commands");t.command("status").description("Show Jupiter Status").action(()=>{ri()}),t.command("start").description("Start Jupiter").action(()=>{ni()}),t.command("stop").description("Stop Jupiter").action(()=>{si()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Jupiter Logs").action(e=>{ii(e.error),process.exit(0)}),t.command("restart").description("Restart Jupiter").action(()=>{ai()}),t.command("enable").description("Enable Jupiter").action(()=>{ci()})},"jupiterCommands");import Fd from"chalk";var h=new Md;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(le,"-V","Display version");async function Hd(){try{let t=await I();Gn(t),Qn(t),Wn(t),ds(t),Yr(t),Jr(),Xn(t),Is(t),Vs(t),ps(),es(),jn(t),Bs(t),Zn(),Fs(),Zs(t),oa(t),Na(t),Bn(),oi(h,t),Ka(t),Qa(h,t),li(),Ys(),h.command("rm:log").description("Remove Logs").action(()=>{Gs()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{Ws()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(Fd.white("\u{1F4DD} Creating Snapshot...")),Xa(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{qs(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{Qs()}),h.command("config").description("Show Solc Config").action(()=>{Qe()}),h.command("vv").description("Show Solc Version").action(()=>{let e=we();console.log("version:",e)}),await h.addHelpCommand("help [cmd]","Display help for command").parseAsync(process.argv),process.exit(0)}catch(t){console.log(t),process.exit(0)}}r(Hd,"main");Hd();export{h as program};
708
708
  //# sourceMappingURL=index.js.map