@ily-validator/solc 5.2.3 → 5.2.4

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