@ily-validator/solc 5.1.3 → 5.1.5

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,10 +1,10 @@
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.3";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}`,W=`${C}/solana-validator.log`,q=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"},X={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}/${X.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${b.ROOT}/${X.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,Z="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",ur="So11111111111111111111111111111111111111112",fr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",hr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ir;(function(t){t[t.ELSOL=Z]="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,[Z]: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 tt="3.0.1",et="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()}/${X.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"),ot;(function(t){t.SINGLE="single",t.DOUBLE="double"})(ot||(ot={}));var Ri={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: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"),rt=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 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!
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 rt(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 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 ===
8
8
  Validator Address: ${c}
9
9
  solc Version: ${Ot()}
10
10
  Solana Version: ${a}
@@ -19,10 +19,10 @@ 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 rt(180*1e3);let m=await Cr(t);if(m){let f=`== \u{1F7E2} Your Node has caught up! ==
22
+ `;await x(d),await ot(180*1e3);let m=await Cr(t);if(m){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()}/${X.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()}/${X.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?tt:et;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?ot.DOUBLE:ot.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:tt,MAINNET_SOLANA_VERSION:et}),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:tt,MAINNET_SOLANA_VERSION:et}),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 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]
26
26
  Description=Jupiter API Service Instance
27
27
  After=network.target
28
28
 
@@ -43,11 +43,11 @@ unzip jupiter-swap-api-x86_64-unknown-linux-gnu.zip
43
43
  chmod +x jupiter-swap-api
44
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
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,X.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"),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
47
47
  exec agave-validator \\
48
48
  --identity ${O} \\
49
- --log ${W} \\
50
- --accounts ${Q} \\
49
+ --log ${z} \\
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 ${q}`;_c(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),zt=Nc;var tn=r(()=>`#!/bin/bash
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
85
85
  exec agave-validator \\
86
86
  --identity ${O} \\
87
- --log ${W} \\
88
- --accounts ${Q} \\
87
+ --log ${z} \\
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(q)){console.log("Startup script already exists. Skipping...");return}await kc(q,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 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
120
120
  exec ${s} \\
121
121
  --identity ${O} \\
122
122
  --vote-account ${me} \\
123
123
  --authorized-voter ${K} \\
124
- --log ${W} \\
125
- --accounts ${Q} \\
124
+ --log ${z} \\
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 \\
@@ -154,8 +154,8 @@ exec ${t} \\
154
154
  --identity ${O} \\
155
155
  --vote-account ${me} \\
156
156
  --authorized-voter ${K} \\
157
- --log ${W} \\
158
- --accounts ${Q} \\
157
+ --log ${z} \\
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 \\
@@ -180,8 +180,8 @@ exec agave-validator \\
180
180
  --identity ${O} \\
181
181
  --vote-account ${Yo} \\
182
182
  --authorized-voter ${P} \\
183
- --log ${W} \\
184
- --accounts ${Q} \\
183
+ --log ${z} \\
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(q)){console.log("Startup script already exists. Skipping...");return}await nn(q,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(q)){console.log("Startup script already exists. Skipping...");return}await nn(q,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 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(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
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
203
  ${e} ${R.ACCOUNTS} ext4 auto 0 0
204
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
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:
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: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")){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 $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=`
208
208
  # Increase UDP buffer sizes
209
209
  net.core.rmem_default = 134217728
210
210
  net.core.rmem_max = 134217728
@@ -271,7 +271,7 @@ To get your free API key, simply join us through the link below:
271
271
  Validators DAO: ${Ke.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 G}from"child_process";var rl=r(()=>({filePath:"/home/solv/start-firedancer.sh",body:`#!/usr/bin/env bash
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
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
@@ -451,9 +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()=>{G("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),G(`git checkout v${gr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),G("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),G("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),G("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();G(`echo "${e}" | sudo tee ${t} > /dev/null`,{shell:!0,stdio:"inherit"}),G(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"}),G(`[ -s ${t} ] || sudo tee ${t} > /dev/null << 'EOF'
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'
455
455
  ${e}
456
- EOF`,{shell:!0,stdio:"inherit"});let o=Pn();G(`echo "${o.body}" | sudo tee ${o.filePath} > /dev/null`,{shell:!0,stdio:"inherit"}),G("sudo systemctl daemon-reload",{shell:!0});let s=(await I()).NETWORK===u.MAINNET?be():De();G(`echo "${s.body}" | sudo tee ${s.filePath} > /dev/null`,{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
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'
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'
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
457
461
  [Unit]
458
462
  Description=Solana transaction relayer
459
463
  Requires=network-online.target
@@ -507,7 +511,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateServi
507
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
508
512
 
509
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(`
510
- `).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?tt:et;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:
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:
511
515
  `)),console.log(He.white(o))}catch(t){console.error(He.white(`Error reading SSH Public Key
512
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(`
513
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.
@@ -526,7 +530,7 @@ Token Mint: ${a.mint}`;return(await ys.prompt([{type:"confirm",name:"confirm",me
526
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
527
531
  Please check the correct address and try again.
528
532
  `)),console.log(Zt.white(`For stake pool information
529
- \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=Z;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
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
530
534
 
531
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...
532
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
@@ -561,7 +565,7 @@ $ solc mt -p <fileSystem>
561
565
  $ solc umt -p <fileSystem>
562
566
  `,s=`mount reload
563
567
  $ solc mtr
564
- `;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?tt:et;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))}})(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(`,
565
569
  `);o=o.replace(/authorized_voter_paths\s*=\s*\[[\s\S]*?\]/,`authorized_voter_paths = [
566
570
  ${n}
567
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:
@@ -584,8 +588,8 @@ Please Check the Wallet Address`)),process.exit(0)}let i=Xe(`solana balance ${n}
584
588
  \u{1F4B0} Balance: ${i}`)),console.log(re.white(`\u{1F3E6} To Wallet: ${s}
585
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
586
590
  Retrying Transaction in ${Ws}ms
587
- Retries Left: ${d}`)),await rt(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 rt(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 ${Z} --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:
588
- `)),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 z=[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:z,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(`
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(`
589
593
  `).filter(a=>!a.includes(t)).join(`
590
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
591
595
  ${Ta.green("No more Login to the server to update \u{1F331}")}
@@ -596,7 +600,7 @@ AUTO UPDATE: If you enable this, solc will update automatically when the solc ve
596
600
 
597
601
  AUTO RESTART: If you enable this, solc will restart automatically when the solana version is updated.
598
602
  \u203B Please turn off if you are using no-downtime migration.
599
- `;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 rt(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,Z,dr),t.IS_MEV_MODE){let p=`\u{1F4B0} Harvested Rewards for ${(await Ko(t.RPC_URL)).epoch} \u{1F4B0}
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}
600
604
  Validator Address: ${E(o)}
601
605
  Total Reward: ${c} elSOL
602
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===
@@ -698,7 +702,7 @@ $ solc swap --input ${s} --output ${a} --amount ${i} --skip-confirm
698
702
  You can upgrade your API key to increase your rate limits.
699
703
  Get Your API key \u{1F447}
700
704
  Validators Solutions: ${Mt}
701
- `;console.error(U.white(ie)),process.exit(0)}let z=Buffer.from(N.swapTransaction,"base64"),V=Ed.deserialize(z);V.sign([_]);let _t=V.serialize(),Ut=await l.sendRawTransaction(_t,{skipPreflight:!0,maxRetries:2}),bo=V.message.recentBlockhash;return console.log(`Swapping...
702
- 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:Z}])).address;else{let V=N.name;f=ao[V].tokenMint}let z=N.name;f=ao[z].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!
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!
703
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
708
  //# sourceMappingURL=index.js.map