@ily-validator/solc 5.2.15 → 5.2.17

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,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var Si=Object.defineProperty;var r=(t,e)=>Si(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as ru}from"commander";var Go="5.2.15";var zo={name:"@ily-validator/solc",version:Go,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 ue=zo.version;var Jt="https://validators.solutions";var vt="solc4.config.json";var St="identity.json",Tt="unstaked-identity.json",Wo="relayer-keypair.json",gi="mainnet-validator-keypair.json",Ei="mainnet-vote-account-keypair.json",wi="mainnet-authority-keypair.json",Ai="testnet-validator-keypair.json",_i="testnet-vote-account-keypair.json",Ni="testnet-authority-keypair.json",I="/home/solv",k=`${I}/${St}`,lu=`${I}/${Tt}`,K=`${I}/${gi}`,fe=`${I}/${Ei}`,mu=`${I}/${wi}`,P=`${I}/${Ai}`,qo=`${I}/${_i}`,pu=`${I}/${Ni}`,q=`${I}/solana-validator.log`,Q=I+"/start-validator.sh",y="/mnt/ledger",X="/mnt/accounts",Ct="solana-validator",It="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Xo="https://api.testnet.solana.com",Zo="https://api.mainnet-beta.solana.com",tr="https://verify.validators.solutions/solc-migrate",er="https://jup.validators.solutions/v1/jup",ye="https://amsterdam.mainnet.block-engine.jito.wtf",fo;(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"})(fo||(fo={}));var or=Object.values(fo),Se="So11111111111111111111111111111111111111112",Te="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var rr="SOLV420",nr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as xi}from"child_process";import{spawnSync as Oi}from"node:child_process";var ki=r(t=>{Oi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Lt=ki;var yo;(function(t){t.EN="en",t.JA="ja"})(yo||(yo={}));var yu=Object.values(yo),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var sr=Object.values(u),g;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(g||(g={}));var ar=Object.values(g),S;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(S||(S={}));var Su=Object.values(S).filter(t=>t!=="none"),L;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(L||(L={}));var ir=Object.values(L).filter(t=>t!=="none"),Z;(function(t){t.SINGLE="single",t.DOUBLE="double"})(Z||(Z={}));var tt="2.3.13",et="2.3.13",Gt="2.3.13",j="2.3.13",cr="2.3.13",gt="2.3.13";var lr="20.19.5";var mr="0.804.30008";var vi={NETWORK:u.TESTNET,NODE_TYPE:g.RPC,VALIDATOR_TYPE:S.NONE,RPC_TYPE:L.AGAVE,MNT_DISK_TYPE:Z.SINGLE,TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et,NODE_VERSION:lr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Qo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",FRANKENDANCER_BLOCK_ENGINE_URL:ye},b=vi;import*as pt from"node:fs";import*as ur from"node:os";import go from"node:path";var pr="SOLC_SOLANA_CLI",dr=r(t=>{try{return pt.accessSync(t,pt.constants.X_OK),!0}catch{return!1}},"isExecutable"),Ci=r(t=>t?(process.env.PATH??"").split(go.delimiter).some(o=>{if(!o)return!1;let n=go.join(o,t);return dr(n)?!0:process.platform==="win32"?dr(`${n}.exe`):!1}):!1,"isCommandAvailable"),Ii=r(()=>{try{let t=go.join(ur.homedir(),vt);if(!pt.existsSync(t))return b;let e=pt.readFileSync(t,"utf-8"),o=JSON.parse(e);return{...b,...o}}catch{return b}},"readConfigFromDisk"),Li=r(()=>{let t=Ii(),e=[];return t.VALIDATOR_TYPE===S.SOLANA&&e.push(Ct),(t.VALIDATOR_TYPE===S.AGAVE||t.VALIDATOR_TYPE===S.JITO||t.RPC_TYPE===L.AGAVE||t.RPC_TYPE===L.JITO)&&e.push(It),[...e,It,Ct].filter((o,n,s)=>o&&s.indexOf(o)===n)},"getPreferredBinaries"),Pi=r(()=>{let t=process.env[pr]?.trim(),e=[...t?[t]:[],...Li()];for(let o of e)if(Ci(o))return o;throw new Error(`Unable to locate a Solana validator binary. Install either "${It}" or "${Ct}" (or set ${pr}) and ensure it is on PATH.`)},"getSolanaCLI"),D=Pi;var ge=r(async t=>{Lt(t)},"updateVersion"),Eo=r(async(t,e=!1)=>{let o=D(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),xi(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import zr from"chalk";var Et;(function(t){t.EN="en",t.JA="ja"})(Et||(Et={}));var fr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(fr||(fr={}));var hr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(hr||(hr={}));var dt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(dt||(dt={}));var yr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(yr||(yr={}));var Sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(Sr||(Sr={}));var Tr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(Tr||(Tr={}));var gr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(gr||(gr={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var we;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(we||(we={}));var Ar=!1,_r=!0,F={ID:"solc",LANG:Et.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},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},C={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},ot={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},x={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},R={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),ut=r((t=!0)=>{let e=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${ot.LOG}`,s=C.ACCOUNTS,a=C.LEDGER,i=`${U.ROOT}/${ot.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var G="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",wo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Nr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Or=9,rt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",kr="So11111111111111111111111111111111111111112",Rr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",vr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Er;(function(t){t[t.ELSOL=rt]="ELSOL",t[t.SOL=kr]="SOL",t[t.USDC=Rr]="USDC",t[t.EPCT=vr]="EPCT"})(Er||(Er={}));var wr;(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"})(wr||(wr={}));var Du={[kr]:9,[rt]:9,[Rr]:6,[vr]:6},Ae="/home/solv/currentEpoch.json",Ao=.5,_e="https://api.testnet.solana.com";import{spawnSync as _o}from"child_process";var Cr=r(()=>{_o("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=F.NODE_VERSION;_o(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),_o("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var ct={version:j,tag:`v${j}-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"},z={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 Ne=r((t=ct.tag)=>{Vi(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as $i,writeFile as Ki}from"fs/promises";import{homedir as bi}from"os";var zt=r(async t=>{let o=`${bi()}/${ot.JITO_CONFIG}`,s={...JSON.parse(await $i(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ki(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Ir}from"child_process";import Di from"inquirer";var Lr=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";Ir(`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}`;Ir(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Pr=r(async()=>await Di.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Wt}from"@skeet-framework/utils";import Ui from"chalk";import Mi from"inquirer";var xr=r(async()=>{let t=await Mi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Wt("sudo ufw delete allow 8899/udp"),await Wt("sudo ufw delete allow 8899/tcp"),await Wt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Wt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Wt("sudo ufw reload"),console.log(Ui.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Fi=r(()=>Go,"getSolvVersion"),Pt=Fi;import{readFile as Hi,writeFile as ji}from"fs/promises";import{existsAsync as Yi}from"@skeet-framework/utils";import{homedir as Bi}from"os";var Ji=r(async()=>{let e=`${Bi()}/${vt}`;if(!await Yi(e))return console.log("Creating default config file at",e),await ji(e,JSON.stringify(b,null,2)),b;let o=JSON.parse(await Hi(e,"utf-8"));return{...b,...o}},"readConfig"),v=Ji;import Gi from"node-fetch";var V=r(async t=>{try{let e=await v();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
2
+ var Si=Object.defineProperty;var r=(t,e)=>Si(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as ru}from"commander";var Go="5.2.17";var zo={name:"@ily-validator/solc",version:Go,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 ue=zo.version;var Jt="https://validators.solutions";var vt="solc4.config.json";var St="identity.json",Tt="unstaked-identity.json",Wo="relayer-keypair.json",gi="mainnet-validator-keypair.json",Ei="mainnet-vote-account-keypair.json",wi="mainnet-authority-keypair.json",Ai="testnet-validator-keypair.json",_i="testnet-vote-account-keypair.json",Ni="testnet-authority-keypair.json",I="/home/solv",k=`${I}/${St}`,lu=`${I}/${Tt}`,K=`${I}/${gi}`,fe=`${I}/${Ei}`,mu=`${I}/${wi}`,P=`${I}/${Ai}`,qo=`${I}/${_i}`,pu=`${I}/${Ni}`,q=`${I}/solana-validator.log`,Q=I+"/start-validator.sh",y="/mnt/ledger",X="/mnt/accounts",Ct="solana-validator",It="agave-validator",Qo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Xo="https://api.testnet.solana.com",Zo="https://api.mainnet-beta.solana.com",tr="https://verify.validators.solutions/solc-migrate",er="https://jup.validators.solutions/v1/jup",ye="https://amsterdam.mainnet.block-engine.jito.wtf",fo;(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"})(fo||(fo={}));var or=Object.values(fo),Se="So11111111111111111111111111111111111111112",Te="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var rr="SOLV420",nr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as xi}from"child_process";import{spawnSync as Oi}from"node:child_process";var ki=r(t=>{Oi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Lt=ki;var yo;(function(t){t.EN="en",t.JA="ja"})(yo||(yo={}));var yu=Object.values(yo),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var sr=Object.values(u),g;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(g||(g={}));var ar=Object.values(g),S;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(S||(S={}));var Su=Object.values(S).filter(t=>t!=="none"),L;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(L||(L={}));var ir=Object.values(L).filter(t=>t!=="none"),Z;(function(t){t.SINGLE="single",t.DOUBLE="double"})(Z||(Z={}));var tt="2.3.13",et="2.3.13",Gt="2.3.13",H="2.3.13",cr="2.3.13",gt="2.3.13";var lr="20.19.5";var mr="0.804.30008";var vi={NETWORK:u.TESTNET,NODE_TYPE:g.RPC,VALIDATOR_TYPE:S.NONE,RPC_TYPE:L.AGAVE,MNT_DISK_TYPE:Z.SINGLE,TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et,NODE_VERSION:lr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Qo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",FRANKENDANCER_BLOCK_ENGINE_URL:ye},D=vi;import*as pt from"node:fs";import*as ur from"node:os";import go from"node:path";var pr="SOLC_SOLANA_CLI",dr=r(t=>{try{return pt.accessSync(t,pt.constants.X_OK),!0}catch{return!1}},"isExecutable"),Ci=r(t=>t?(process.env.PATH??"").split(go.delimiter).some(o=>{if(!o)return!1;let n=go.join(o,t);return dr(n)?!0:process.platform==="win32"?dr(`${n}.exe`):!1}):!1,"isCommandAvailable"),Ii=r(()=>{try{let t=go.join(ur.homedir(),vt);if(!pt.existsSync(t))return D;let e=pt.readFileSync(t,"utf-8"),o=JSON.parse(e);return{...D,...o}}catch{return D}},"readConfigFromDisk"),Li=r(()=>{let t=Ii(),e=[];return t.VALIDATOR_TYPE===S.SOLANA&&e.push(Ct),(t.VALIDATOR_TYPE===S.AGAVE||t.VALIDATOR_TYPE===S.JITO||t.RPC_TYPE===L.AGAVE||t.RPC_TYPE===L.JITO)&&e.push(It),[...e,It,Ct].filter((o,n,s)=>o&&s.indexOf(o)===n)},"getPreferredBinaries"),Pi=r(()=>{let t=process.env[pr]?.trim(),e=[...t?[t]:[],...Li()];for(let o of e)if(Ci(o))return o;throw new Error(`Unable to locate a Solana validator binary. Install either "${It}" or "${Ct}" (or set ${pr}) and ensure it is on PATH.`)},"getSolanaCLI"),b=Pi;var ge=r(async t=>{Lt(t)},"updateVersion"),Eo=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}`),xi(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import zr from"chalk";var Et;(function(t){t.EN="en",t.JA="ja"})(Et||(Et={}));var fr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(fr||(fr={}));var hr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(hr||(hr={}));var dt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(dt||(dt={}));var yr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(yr||(yr={}));var Sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(Sr||(Sr={}));var Tr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(Tr||(Tr={}));var gr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(gr||(gr={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var we;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(we||(we={}));var Ar=!1,_r=!0,F={ID:"solc",LANG:Et.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},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},C={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},ot={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},x={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},R={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${R.MAINNET_VALIDATOR_KEY}`,n=`${e}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${R.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${R.TESTNET_VALIDATOR_KEY}`,i=`${e}/${R.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${R.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),ut=r((t=!0)=>{let e=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${R.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${R.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${ot.LOG}`,s=C.ACCOUNTS,a=C.LEDGER,i=`${U.ROOT}/${ot.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var G="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",wo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Nr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Or=9,rt="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",kr="So11111111111111111111111111111111111111112",Rr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",vr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",Er;(function(t){t[t.ELSOL=rt]="ELSOL",t[t.SOL=kr]="SOL",t[t.USDC=Rr]="USDC",t[t.EPCT=vr]="EPCT"})(Er||(Er={}));var wr;(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"})(wr||(wr={}));var bu={[kr]:9,[rt]:9,[Rr]:6,[vr]:6},Ae="/home/solv/currentEpoch.json",Ao=.5,_e="https://api.testnet.solana.com";import{spawnSync as _o}from"child_process";var Cr=r(()=>{_o("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=F.NODE_VERSION;_o(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),_o("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var ct={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"},z={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 Ne=r((t=ct.tag)=>{Vi(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as $i,writeFile as Ki}from"fs/promises";import{homedir as Di}from"os";var zt=r(async t=>{let o=`${Di()}/${ot.JITO_CONFIG}`,s={...JSON.parse(await $i(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ki(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Ir}from"child_process";import bi from"inquirer";var Lr=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";Ir(`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}`;Ir(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Pr=r(async()=>await bi.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Wt}from"@skeet-framework/utils";import Ui from"chalk";import Mi from"inquirer";var xr=r(async()=>{let t=await Mi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Wt("sudo ufw delete allow 8899/udp"),await Wt("sudo ufw delete allow 8899/tcp"),await Wt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Wt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Wt("sudo ufw reload"),console.log(Ui.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Fi=r(()=>Go,"getSolvVersion"),Pt=Fi;import{readFile as ji,writeFile as Hi}from"fs/promises";import{existsAsync as Yi}from"@skeet-framework/utils";import{homedir as Bi}from"os";var Ji=r(async()=>{let e=`${Bi()}/${vt}`;if(!await Yi(e))return console.log("Creating default config file at",e),await Hi(e,JSON.stringify(D,null,2)),D;let o=JSON.parse(await ji(e,"utf-8"));return{...D,...o}},"readConfig"),v=Ji;import Gi from"node-fetch";var V=r(async t=>{try{let e=await v();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
3
3
  Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solc Notifier"};return(await Gi(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 tc}from"child_process";import{Connection as Vr}from"@solana/web3.js";var qt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Vr("https://api.testnet.solana.com"):new Vr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e);if(!c)return i.delinquent.find(f=>f.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as zi}from"child_process";var E=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=zi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Wi=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),nt=Wi;import{sendDiscord as qi}from"@skeet-framework/utils";var $r=60,Qi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=E(e?n:o),i=await qt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=$r){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${$r} minutes!
4
4
  Account: ${i.pubkey}
5
5
  Reason: ${i.reason}
@@ -22,7 +22,7 @@ Now Catching up... \u{1F69B}\u{1F4A8}
22
22
  `;await V(d),await nt(180*1e3);let p=await Kr(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 V(f)}return p}return!0},"autoUpdate"),br=ec;import{homedir as oc}from"os";import{readFile as rc,writeFile as Dr}from"fs/promises";import{existsAsync as nc}from"@skeet-framework/utils";var _=r(async t=>{let o=`${oc()}/${vt}`;await nc(o)||(console.log("Creating default config file at",o),await Dr(o,JSON.stringify(b,null,2)));let s={...JSON.parse(await rc(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Dr(o,a)},"updateDefaultConfig");var sc={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"},ke=sc;var ac={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:"},Ur=ac;var ic={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}"}},Re=ic;var cc={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"}},Mr=cc;var ve=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Ce=[[],[") 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 Fr=[") \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"],Hr=[[],[") \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 lc={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"}},Ie=lc;var mc={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"}},jr=mc;var Le=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Yr=[") \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 pc=r(t=>{let e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le};switch(t){case Et.EN:e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le};break;case Et.JA:e={cmds:Ur,subCmds:jr,logs:Mr,installer:Fr,installerSub:Hr,clientCmds:Yr};break;default:e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le}}return e},"readLocale"),Br=pc;import{existsSync as hc,readFileSync as yc,writeFileSync as Jr}from"fs";import{readFileSync as dc,writeFileSync as uc}from"fs";import{homedir as fc}from"os";var xt=r(t=>{let o=`${fc()}/${ot.CONFIG}`,s={...JSON.parse(dc(o,"utf8")),...t},a=JSON.stringify(s,null,2);uc(o,a)},"updateSolvConfig");import{homedir as Sc}from"os";var Gr=r(()=>{let e=`${Sc()}/${ot.CONFIG}`;hc(e)||(Jr(e,JSON.stringify(F,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(yc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Jr(e,JSON.stringify(F,null,2)),o=F}let n=Br(o.LANG);return o.RPC_URL||(o.RPC_URL=F.RPC_URL,xt({RPC_URL:F.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,xt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",xt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Wr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===g.RPC,n=t.VALIDATOR_TYPE===S.JITO,s=e?tt:et;n&&(s=j,e&&(s=Gt)),o&&(s=gt,n&&(s=cr)),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=Pt(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(zr.white(`Current solc version: ${i}`)),a.auto){await br(t);return}if(a.migrateConfig){let l=Gr().config,m=l.SOLANA_NETWORK===dt.TESTNET,d=l.SOLV_TYPE===Ee.RPC_NODE,p=l.MAINNET_TYPE===we.JITO_MEV,f={NETWORK:m?u.TESTNET:u.MAINNET,NODE_TYPE:d?g.RPC:g.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?Z.DOUBLE:Z.SINGLE,RPC_TYPE:d?L.JITO:L.NONE,VALIDATOR_TYPE:p?S.JITO:m?S.AGAVE:S.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 _(f)}if(a.config){if(await _({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){let l=e?Gt:j;await zt({version:l,tag:`v${l}-jito`})}console.log(zr.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 xr();return}if(a.background){let l=a.version;if(await _({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){Ne(),await zt({version:l,tag:`v${l}-jito`}),await Eo(c,!0);return}await ge(l),await Eo(e?5:5,!0);return}else if(a.commission){let l=await Pr();Lr(l.commission,e)}else Cr()})},"updateCommands");import{spawnSync as Tc}from"node:child_process";var qr=r(t=>{try{let{log:e}=ut(),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=Tc(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 Qr=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=>{qr(t)})},"logCommands");import lt from"chalk";import{spawnSync as gc}from"child_process";import{homedir as Ec}from"os";var Pe=r(t=>{let e=Ec(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=dt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=dt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=dt.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;gc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as xe}from"child_process";import{existsSync as Xr,readdirSync as wc,rmSync as Ac}from"fs";import{homedir as _c}from"os";import Zr from"path";var Ve=r(t=>{let e=[],o=0;t.NODE_TYPE===g.RPC&&(e=[R.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[R.TESTNET_VALIDATOR_KEY,R.TESTNET_VALITATOR_AUTHORITY_KEY,R.TESTNET_VALIDATOR_VOTE_KEY,R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;xe(n,{shell:!0,stdio:"ignore"});let s=wc("./").filter(l=>l.endsWith("SV.json")),a=_c(),i=Zr.join(a,"unstaked-identity.json");Xr(i)&&xe(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=Zr.join(a,e[c]);if(c++,Xr(m)){console.log(`${m} is already exist!`),Ac(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;xe(d,{shell:!0,stdio:"inherit"})}xe("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 en}from"child_process";var Nc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
25
+ `;await V(f)}return p}return!0},"autoUpdate"),Dr=ec;import{homedir as oc}from"os";import{readFile as rc,writeFile as br}from"fs/promises";import{existsAsync as nc}from"@skeet-framework/utils";var _=r(async t=>{let o=`${oc()}/${vt}`;await nc(o)||(console.log("Creating default config file at",o),await br(o,JSON.stringify(D,null,2)));let s={...JSON.parse(await rc(o,"utf8")),...t},a=JSON.stringify(s,null,2);await br(o,a)},"updateDefaultConfig");var sc={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"},ke=sc;var ac={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:"},Ur=ac;var ic={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}"}},Re=ic;var cc={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"}},Mr=cc;var ve=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Ce=[[],[") 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 Fr=[") \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"],jr=[[],[") \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 lc={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"}},Ie=lc;var mc={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"}},Hr=mc;var Le=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Yr=[") \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 pc=r(t=>{let e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le};switch(t){case Et.EN:e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le};break;case Et.JA:e={cmds:Ur,subCmds:Hr,logs:Mr,installer:Fr,installerSub:jr,clientCmds:Yr};break;default:e={cmds:ke,subCmds:Ie,logs:Re,installer:ve,installerSub:Ce,clientCmds:Le}}return e},"readLocale"),Br=pc;import{existsSync as hc,readFileSync as yc,writeFileSync as Jr}from"fs";import{readFileSync as dc,writeFileSync as uc}from"fs";import{homedir as fc}from"os";var xt=r(t=>{let o=`${fc()}/${ot.CONFIG}`,s={...JSON.parse(dc(o,"utf8")),...t},a=JSON.stringify(s,null,2);uc(o,a)},"updateSolvConfig");import{homedir as Sc}from"os";var Gr=r(()=>{let e=`${Sc()}/${ot.CONFIG}`;hc(e)||(Jr(e,JSON.stringify(F,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(yc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Jr(e,JSON.stringify(F,null,2)),o=F}let n=Br(o.LANG);return o.RPC_URL||(o.RPC_URL=F.RPC_URL,xt({RPC_URL:F.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,xt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",xt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Wr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===g.RPC,n=t.VALIDATOR_TYPE===S.JITO,s=e?tt:et;n&&(s=H,e&&(s=Gt)),o&&(s=gt,n&&(s=cr)),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=Pt(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(zr.white(`Current solc version: ${i}`)),a.auto){await Dr(t);return}if(a.migrateConfig){let l=Gr().config,m=l.SOLANA_NETWORK===dt.TESTNET,d=l.SOLV_TYPE===Ee.RPC_NODE,p=l.MAINNET_TYPE===we.JITO_MEV,f={NETWORK:m?u.TESTNET:u.MAINNET,NODE_TYPE:d?g.RPC:g.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?Z.DOUBLE:Z.SINGLE,RPC_TYPE:d?L.JITO:L.NONE,VALIDATOR_TYPE:p?S.JITO:m?S.AGAVE:S.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 _(f)}if(a.config){if(await _({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){let l=e?Gt:H;await zt({version:l,tag:`v${l}-jito`})}console.log(zr.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 xr();return}if(a.background){let l=a.version;if(await _({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){Ne(),await zt({version:l,tag:`v${l}-jito`}),await Eo(c,!0);return}await ge(l),await Eo(e?5:5,!0);return}else if(a.commission){let l=await Pr();Lr(l.commission,e)}else Cr()})},"updateCommands");import{spawnSync as Tc}from"node:child_process";var qr=r(t=>{try{let{log:e}=ut(),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=Tc(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 Qr=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=>{qr(t)})},"logCommands");import lt from"chalk";import{spawnSync as gc}from"child_process";import{homedir as Ec}from"os";var Pe=r(t=>{let e=Ec(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=dt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=dt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=dt.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;gc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as xe}from"child_process";import{existsSync as Xr,readdirSync as wc,rmSync as Ac}from"fs";import{homedir as _c}from"os";import Zr from"path";var Ve=r(t=>{let e=[],o=0;t.NODE_TYPE===g.RPC&&(e=[R.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[R.TESTNET_VALIDATOR_KEY,R.TESTNET_VALITATOR_AUTHORITY_KEY,R.TESTNET_VALIDATOR_VOTE_KEY,R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[R.MAINNET_VALIDATOR_KEY,R.MAINNET_VALITATOR_AUTHORITY_KEY,R.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;xe(n,{shell:!0,stdio:"ignore"});let s=wc("./").filter(l=>l.endsWith("SV.json")),a=_c(),i=Zr.join(a,"unstaked-identity.json");Xr(i)&&xe(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=Zr.join(a,e[c]);if(c++,Xr(m)){console.log(`${m} is already exist!`),Ac(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;xe(d,{shell:!0,stdio:"inherit"})}xe("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 en}from"child_process";var Nc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
26
26
  Description=Jupiter API Service Instance
27
27
  After=network.target
28
28
 
@@ -43,7 +43,7 @@ unzip jupiter-swap-api-x86_64-unknown-linux-gnu.zip
43
43
  chmod +x jupiter-swap-api
44
44
  rm jupiter-swap-api-x86_64-unknown-linux-gnu.zip`,{shell:!0,stdio:"inherit"});let{filePath:o,body:n}=tn(t.rpcUrl,t.grpcUrl,t.grpcToken);en(`echo '${n}' | sudo tee ${o}`,{shell:!0,stdio:"inherit"}),console.log(kc.white(`\u{1F7E2} Jupiter Swap API Setup Completed
45
45
 
46
- $ solc jupiter --help`))},"jupiterAPISetup"),on=Rc;import{existsAsync as vc}from"@skeet-framework/utils";import{readFile as Cc,writeFile as rn}from"fs/promises";import{homedir as Ic}from"os";import Lc from"path";var wt=r(async()=>{let t=Ic(),e=Lc.join(t,ot.JITO_CONFIG);await vc(e)||(await rn(e,JSON.stringify(ct,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await Cc(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await rn(e,JSON.stringify(ct,null,2)),o=ct}return o},"readOrCreateJitoConfig");import{spawnSync as Pc}from"child_process";var Qt=r(()=>{Pc("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import At from"chalk";import $e from"inquirer";import xc from"inquirer";var nn=r(async()=>{let e=Object.keys(z),o=await xc.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:e}]),n=o.region,s=z[n];return{version:ct.version,tag:ct.tag,commissionBps:o.commissionBps,blockEngineUrl:s.BLOCK_ENGINE_URL,relayerUrl:s.RELAYER_URL,shredReceiverAddr:s.SHRED_RECEIVER_ADDR}},"askJitoSetting");import Vc from"inquirer";var $c=r(async()=>{let t=Object.keys(z);return(await Vc.prompt([{name:"region",type:"list",message:"Select Jito region for Firedancer",choices:t,default:"Amsterdam"}])).region},"askJitoRegion"),sn=$c;var Kc=r(async(t,e)=>(await v()).FRANKENDANCER_BLOCK_ENGINE_URL===t?!1:(await _({FRANKENDANCER_BLOCK_ENGINE_URL:t}),!0),"updateFiredancerBundleUrl"),an=Kc;var bc=r(async()=>{try{let t=S.NONE,e=L.AGAVE,o=b.COMMISSION,n=!1,s=await $e.prompt([{name:"network",type:"list",message:"Choose Network",choices:sr,default:u.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:ar,default:g.RPC}]);if(s.nodeType===g.VALIDATOR){let c=s.network===u.MAINNET?[S.JITO,S.SOLANA,S.FRANKENDANCER]:[S.AGAVE,S.JITO,S.FRANKENDANCER];t=await $e.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:S.AGAVE}).then(l=>l.validatorType),e=L.NONE}if(s.nodeType===g.RPC&&(e=await $e.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:ir,default:L.AGAVE}).then(c=>c.rpcType)),s.nodeType===g.VALIDATOR){let c=await $e.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${b.COMMISSION}%)'`,default:b.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===S.JITO){await wt();let l=await nn();await zt(l)}else if(t===S.FRANKENDANCER&&s.network===u.MAINNET){let l=await sn(),{BLOCK_ENGINE_URL:m}=z[l],d=await an(m);console.log(d?At.green(`Updated Firedancer mainnet template URL to ${m} (region: ${l})`):At.yellow("No change applied to Firedancer mainnet template (URL already set?)"))}}let{network:a,nodeType:i}=s;return console.log(At.white("Network:",a)),console.log(At.white("Node Type:",i)),console.log(At.white("Validator Type:",t)),console.log(At.white("RPC Type:",e)),i===g.VALIDATOR&&console.log(At.white("Commission:",o)),await _({NETWORK:a,NODE_TYPE:i,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),cn=bc;import{spawnSync as Dc}from"child_process";var Xt=r((t=j)=>{let e=`v${t}-jito`;Dc(`sh -c "$(curl -sSfL https://release.jito.wtf/${e}/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var ln=r(()=>`#!/bin/bash
46
+ $ solc jupiter --help`))},"jupiterAPISetup"),on=Rc;import{existsAsync as vc}from"@skeet-framework/utils";import{readFile as Cc,writeFile as rn}from"fs/promises";import{homedir as Ic}from"os";import Lc from"path";var wt=r(async()=>{let t=Ic(),e=Lc.join(t,ot.JITO_CONFIG);await vc(e)||(await rn(e,JSON.stringify(ct,null,2)),console.log(`Created jito config file at ${e}`));let o;try{o=JSON.parse(await Cc(e,"utf-8"))}catch(n){console.log(`readOrCreateJitoConfig - ${n}`),await rn(e,JSON.stringify(ct,null,2)),o=ct}return o},"readOrCreateJitoConfig");import{spawnSync as Pc}from"child_process";var Qt=r(()=>{Pc("sudo systemctl daemon-reload",{shell:!0,stdio:"inherit"})},"daemonReload");import At from"chalk";import $e from"inquirer";import xc from"inquirer";var nn=r(async()=>{let e=Object.keys(z),o=await xc.prompt([{name:"commissionBps",type:"number",message:"Enter commission bps",default:1e3},{name:"region",type:"list",message:"Select region",choices:e}]),n=o.region,s=z[n];return{version:ct.version,tag:ct.tag,commissionBps:o.commissionBps,blockEngineUrl:s.BLOCK_ENGINE_URL,relayerUrl:s.RELAYER_URL,shredReceiverAddr:s.SHRED_RECEIVER_ADDR}},"askJitoSetting");import Vc from"inquirer";var $c=r(async()=>{let t=Object.keys(z);return(await Vc.prompt([{name:"region",type:"list",message:"Select Jito region for Firedancer",choices:t,default:"Amsterdam"}])).region},"askJitoRegion"),sn=$c;var Kc=r(async(t,e)=>(await v()).FRANKENDANCER_BLOCK_ENGINE_URL===t?!1:(await _({FRANKENDANCER_BLOCK_ENGINE_URL:t}),!0),"updateFiredancerBundleUrl"),an=Kc;var Dc=r(async()=>{try{let t=S.NONE,e=L.AGAVE,o=D.COMMISSION,n=!1,s=await $e.prompt([{name:"network",type:"list",message:"Choose Network",choices:sr,default:u.MAINNET},{name:"nodeType",type:"list",message:"Choose Node Type",choices:ar,default:g.RPC}]);if(s.nodeType===g.VALIDATOR){let c=s.network===u.MAINNET?[S.JITO,S.SOLANA,S.FRANKENDANCER]:[S.AGAVE,S.JITO,S.FRANKENDANCER];t=await $e.prompt({name:"validatorType",type:"list",message:"Choose Validator Type",choices:c,default:S.AGAVE}).then(l=>l.validatorType),e=L.NONE}if(s.nodeType===g.RPC&&(e=await $e.prompt({name:"rpcType",type:"list",message:"Choose RPC Type",choices:ir,default:L.AGAVE}).then(c=>c.rpcType)),s.nodeType===g.VALIDATOR){let c=await $e.prompt([{name:"commission",type:"number",message:`What is your commission rate? You can change it later (default: ${D.COMMISSION}%)'`,default:D.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===S.JITO){await wt();let l=await nn();await zt(l)}else if(t===S.FRANKENDANCER&&s.network===u.MAINNET){let l=await sn(),{BLOCK_ENGINE_URL:m}=z[l],d=await an(m);console.log(d?At.green(`Updated Firedancer mainnet template URL to ${m} (region: ${l})`):At.yellow("No change applied to Firedancer mainnet template (URL already set?)"))}}let{network:a,nodeType:i}=s;return console.log(At.white("Network:",a)),console.log(At.white("Node Type:",i)),console.log(At.white("Validator Type:",t)),console.log(At.white("RPC Type:",e)),i===g.VALIDATOR&&console.log(At.white("Commission:",o)),await _({NETWORK:a,NODE_TYPE:i,VALIDATOR_TYPE:t,RPC_TYPE:e,COMMISSION:o,IS_DUMMY:n}),!0}catch(t){throw new Error(t)}},"initialConfigSetup"),cn=Dc;import{spawnSync as bc}from"child_process";var Xt=r((t=H)=>{let e=`v${t}-jito`;bc(`sh -c "$(curl -sSfL https://release.jito.wtf/${e}/install)"`,{shell:!0,stdio:"inherit"})},"installJito");var ln=r(()=>`#!/bin/bash
47
47
  exec agave-validator \\
48
48
  --identity ${k} \\
49
49
  --log ${q} \\
@@ -81,7 +81,7 @@ exec agave-validator \\
81
81
  --wal-recovery-mode skip_any_corrupted_record \\
82
82
  --use-snapshot-archives-at-startup when-newest \\
83
83
  --limit-ledger-size 400000000 \\
84
- `,"startJitoRPCScript");import{existsAsync as Fc}from"@skeet-framework/utils";import{writeFile as Hc}from"fs/promises";import{spawnSync as Uc}from"node:child_process";var Mc=r(()=>{let t=`sudo chmod +x ${Q}`;Uc(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),Zt=Mc;var mn=r(()=>`#!/bin/bash
84
+ `,"startJitoRPCScript");import{existsAsync as Fc}from"@skeet-framework/utils";import{writeFile as jc}from"fs/promises";import{spawnSync as Uc}from"node:child_process";var Mc=r(()=>{let t=`sudo chmod +x ${Q}`;Uc(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),Zt=Mc;var mn=r(()=>`#!/bin/bash
85
85
  exec agave-validator \\
86
86
  --identity ${k} \\
87
87
  --log ${q} \\
@@ -116,7 +116,7 @@ exec agave-validator \\
116
116
  --wal-recovery-mode skip_any_corrupted_record \\
117
117
  --use-snapshot-archives-at-startup when-newest \\
118
118
  --limit-ledger-size 400000000 \\
119
- `,"startRPCNodeScript");var jc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case L.AGAVE:console.log("Agave RPC Node Setup"),Lt(t.TESTNET_SOLANA_VERSION),o=mn();break;case L.JITO:console.log("JITO RPC Node Setup"),Xt(Gt),o=ln();break;default:console.log("Unknown RPC Node Setup");break}if(await Fc(Q)){console.log("Startup script already exists. Skipping...");return}await Hc(Q,o,"utf-8"),Zt()},"setupRpcNode"),pn=jc;import{spawnSync as Yc}from"node:child_process";var Bc=r(t=>{Yc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),No=Bc;var Oo=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
119
+ `,"startRPCNodeScript");var Hc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case L.AGAVE:console.log("Agave RPC Node Setup"),Lt(t.TESTNET_SOLANA_VERSION),o=mn();break;case L.JITO:console.log("JITO RPC Node Setup"),Xt(Gt),o=ln();break;default:console.log("Unknown RPC Node Setup");break}if(await Fc(Q)){console.log("Startup script already exists. Skipping...");return}await jc(Q,o,"utf-8"),Zt()},"setupRpcNode"),pn=Hc;import{spawnSync as Yc}from"node:child_process";var Bc=r(t=>{Yc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),No=Bc;var Oo=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
120
120
  exec ${s} \\
121
121
  --identity ${k} \\
122
122
  --vote-account ${fe} \\
@@ -137,7 +137,7 @@ exec ${s} \\
137
137
  --expected-shred-version 50093 \\
138
138
  --tip-payment-program-pubkey T1pyyaTNZsKv2WcRAB8oVnk93mLJw2XzjtVYqCsaHqt \\
139
139
  --tip-distribution-program-pubkey 4R3gSG8BpU4t19KYj8CfnbtRpnT8gtk4dvTHxVRwc2r7 \\
140
- --merkle-root-upload-authority GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib \\
140
+ --merkle-root-upload-authority 8F4jGUmxF36vQ6yabnsxX6AQVXdKBhs8kGSUuRKSg8Xt \\
141
141
  --commission-bps ${t} \\
142
142
  --relayer-url ${e} \\
143
143
  --rpc-bind-address 0.0.0.0 \\
@@ -198,13 +198,13 @@ exec agave-validator \\
198
198
  --use-snapshot-archives-at-startup when-newest \\
199
199
  --limit-ledger-size \\
200
200
  --block-production-method central-scheduler \\
201
- `,"startTestnetAgaveValidatorScript");import{existsAsync as un}from"@skeet-framework/utils";import{writeFile as fn}from"fs/promises";var Jc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Gc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await zc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Gc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case S.SOLANA:No(o),n=dn();break;case S.JITO:console.log("JITO Validator Setup for Mainnet");let s=await wt();Xt(o||j),n=Oo(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,n,"utf-8"),Zt()},"setupMainnetValidator"),zc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case S.SOLANA:No(t.TESTNET_SOLANA_VERSION),o=ko();case S.AGAVE:console.log("Agave Validator Setup for Testnet"),Lt(t.TESTNET_SOLANA_VERSION),o=ko();break;case S.JITO:console.log("JITO Validator Setup for Testnet");let n=await wt();Xt(t.TESTNET_SOLANA_VERSION),o=Oo(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,o,"utf-8"),Zt()},"setupTestnetValidator"),hn=Jc;import Fn from"chalk";import{execSync as yn}from"node:child_process";function Sn(t){try{yn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{yn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(Sn,"createDirectoryIfNotExists");var Tn=r(()=>{try{let t=[C.ACCOUNTS,C.LEDGER];for(let e of t)Sn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as Wc}from"child_process";function qc(){let e=Wc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
201
+ `,"startTestnetAgaveValidatorScript");import{existsAsync as un}from"@skeet-framework/utils";import{writeFile as fn}from"fs/promises";var Jc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Gc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await zc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Gc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case S.SOLANA:No(o),n=dn();break;case S.JITO:console.log("JITO Validator Setup for Mainnet");let s=await wt();Xt(o||H),n=Oo(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,n,"utf-8"),Zt()},"setupMainnetValidator"),zc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case S.SOLANA:No(t.TESTNET_SOLANA_VERSION),o=ko();case S.AGAVE:console.log("Agave Validator Setup for Testnet"),Lt(t.TESTNET_SOLANA_VERSION),o=ko();break;case S.JITO:console.log("JITO Validator Setup for Testnet");let n=await wt();Xt(t.TESTNET_SOLANA_VERSION),o=Oo(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,o,"utf-8"),Zt()},"setupTestnetValidator"),hn=Jc;import Fn from"chalk";import{execSync as yn}from"node:child_process";function Sn(t){try{yn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{yn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(Sn,"createDirectoryIfNotExists");var Tn=r(()=>{try{let t=[C.ACCOUNTS,C.LEDGER];for(let e of t)Sn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as Wc}from"child_process";function qc(){let e=Wc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
202
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,T,w]=p.trim().split(/\s+/);if(!f||!T)continue;let N=parseInt(T,10);if(isNaN(N))continue;let O=w!==void 0&&w!=="";w==="/"&&(c=f.replace(/[0-9]*$/,""));let W=n.some($=>$!==f&&$.startsWith(f));N>=400*1024*1024*1024&&o.push({name:f,size:N,mountpoint:w||"",isMounted:O,hasPartition:W})}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(qc,"getPreferredDisks");var te=qc;import{spawnSync as gn}from"child_process";var ee=r(t=>{if(gn(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return gn(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as Ro}from"child_process";var Ke=r((t,e="",o=!1)=>{let n=o?C.LEDGER:C.ROOT,s=`${t} ${n} ext4 auto 0 0`,a=`${t} ${C.LEDGER} ext4 auto 0 0
203
203
  ${e} ${C.ACCOUNTS} ext4 auto 0 0
204
204
  `,c=[e!==""?a:s],m=Ro("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
205
  `)}" | sudo tee -a /etc/fstab`;Ro(p,{shell:!0,encoding:"utf8"}),Ro("sudo mount --all --verbose",{shell:!0,encoding:"utf8"}),console.log(`Added lines to /etc/fstab:
206
206
  ${d.join(`
207
- `)}`)}else console.log("All lines are already present in /etc/fstab")},"ensureFstabEntries");import{spawnSync as Qc}from"child_process";var En=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 Xc=r(async()=>{let t=te(),e=t.disks[0].mountpoint;if(t.has850GB&&t.has400GB){console.log("Setting up DOUBLE DISK..."),await _({MNT_DISK_TYPE:Z.DOUBLE});let o="/dev/"+t.disks[0].name,n="/dev/"+t.disks[1].name,s=ee(o),a=ee(n),i=s?o:"",c=a?n:"",l=!1;i===""&&c&&(i=c,c="",l=!0),Ke(i,c,l)}else if(console.log("Setting up SINGLE DISK..."),await _({MNT_DISK_TYPE:Z.SINGLE}),e.includes("/mnt")){En(e);let o="/dev/"+t.disks[0].name;ee(o),Ke(o)}else{let o="/dev/"+t.disks[0].name;ee(o),Ke(o)}},"mountDirs"),wn=Xc;import{spawnSync as Zc}from"child_process";var An=r(()=>{let t=[`sudo mkdir -p ${C.ROOT}`,`sudo chown -R solc:solc ${C.ROOT}`,`sudo chmod -R 755 ${C.ROOT}`,`sudo mkdir -p ${C.ACCOUNTS}`,`sudo chown -R solc:solc ${C.ACCOUNTS}`,`sudo chmod -R 755 ${C.ACCOUNTS}`,`sudo mkdir -p ${C.LEDGER}`,`sudo chown -R solc:solc ${C.LEDGER}`,`sudo chmod -R 755 ${C.LEDGER}`];for(let e of t)Zc(e,{shell:!0,stdio:"ignore"})},"setupPermissions");import{execSync as be}from"child_process";import{existsSync as tl}from"fs";function _n(){if(!tl(x.SOL_SYSTEM_CONFIG21)){console.log("Creating solana-validator.conf sysctl configuration file");let t=`
207
+ `)}`)}else console.log("All lines are already present in /etc/fstab")},"ensureFstabEntries");import{spawnSync as Qc}from"child_process";var En=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 Xc=r(async()=>{let t=te(),e=t.disks[0].mountpoint;if(t.has850GB&&t.has400GB){console.log("Setting up DOUBLE DISK..."),await _({MNT_DISK_TYPE:Z.DOUBLE});let o="/dev/"+t.disks[0].name,n="/dev/"+t.disks[1].name,s=ee(o),a=ee(n),i=s?o:"",c=a?n:"",l=!1;i===""&&c&&(i=c,c="",l=!0),Ke(i,c,l)}else if(console.log("Setting up SINGLE DISK..."),await _({MNT_DISK_TYPE:Z.SINGLE}),e.includes("/mnt")){En(e);let o="/dev/"+t.disks[0].name;ee(o),Ke(o)}else{let o="/dev/"+t.disks[0].name;ee(o),Ke(o)}},"mountDirs"),wn=Xc;import{spawnSync as Zc}from"child_process";var An=r(()=>{let t=[`sudo mkdir -p ${C.ROOT}`,`sudo chown -R solc:solc ${C.ROOT}`,`sudo chmod -R 755 ${C.ROOT}`,`sudo mkdir -p ${C.ACCOUNTS}`,`sudo chown -R solc:solc ${C.ACCOUNTS}`,`sudo chmod -R 755 ${C.ACCOUNTS}`,`sudo mkdir -p ${C.LEDGER}`,`sudo chown -R solc:solc ${C.LEDGER}`,`sudo chmod -R 755 ${C.LEDGER}`];for(let e of t)Zc(e,{shell:!0,stdio:"ignore"})},"setupPermissions");import{execSync as De}from"child_process";import{existsSync as tl}from"fs";function _n(){if(!tl(x.SOL_SYSTEM_CONFIG21)){console.log("Creating solana-validator.conf sysctl configuration file");let t=`
208
208
  # Increase UDP buffer sizes
209
209
  net.core.rmem_default = 134217728
210
210
  net.core.rmem_max = 134217728
@@ -219,7 +219,7 @@ fs.nr_open = 1000000
219
219
  `,e=`
220
220
  # Increase process file descriptor count limit
221
221
  * - nofile 1000000
222
- `;be(`echo "${t}" | sudo tee ${x.SOL_SYSTEM_CONFIG21} > /dev/null`),be(`sudo sysctl -p ${x.SOL_SYSTEM_CONFIG21}`),be(`echo "DefaultLimitNOFILE=1000000" | sudo tee -a ${x.SOL_SYSTEM_CONF}`),be(`echo "${e}" | sudo tee ${x.SOL_NOFILES_CONF} > /dev/null`)}}r(_n,"setupSystemd");var Nn=r((t=F.USERNAME)=>{let{log:e}=ut();return`${e} {
222
+ `;De(`echo "${t}" | sudo tee ${x.SOL_SYSTEM_CONFIG21} > /dev/null`),De(`sudo sysctl -p ${x.SOL_SYSTEM_CONFIG21}`),De(`echo "DefaultLimitNOFILE=1000000" | sudo tee -a ${x.SOL_SYSTEM_CONF}`),De(`echo "${e}" | sudo tee ${x.SOL_NOFILES_CONF} > /dev/null`)}}r(_n,"setupSystemd");var Nn=r((t=F.USERNAME)=>{let{log:e}=ut();return`${e} {
223
223
  su ${t} ${t}
224
224
  daily
225
225
  rotate 1
@@ -250,7 +250,7 @@ ExecStart=${e}
250
250
 
251
251
 
252
252
  [Install]
253
- WantedBy=multi-user.target`},"solvService");import{execSync as al}from"child_process";function Rn(t=!0){console.log("Creating solvService configuration for solana");let e=kn(t);al(`echo "${e}" | sudo tee ${x.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(Rn,"setupSolvService");var vn=r((t=!0)=>{On(),Rn(t),_n()},"makeServices");import{spawnSync as vo}from"node:child_process";var Cn=r(t=>{try{Ve(t);let e=t.NETWORK;return e===u.TESTNET?(vo(`solana config set --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"}),vo(`solana airdrop 1 --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"})):vo(`solana config set --url ${e} -k ${K}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==g.RPC&&Pe(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as In}from"node:child_process";var De=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(" ");In(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(" ");In(e,{shell:!0,stdio:"inherit"})}catch(e){throw new Error(`getSnapshot Error: ${e}`)}},"getSnapshot");import{spawnSync as il}from"node:child_process";var Ue=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===S.FRANKENDANCER?"frankendancer":"solv"}`;il(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as cl}from"node:child_process";var ll=r(()=>{try{cl('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),Ln=ll;import Co from"fs";import{promisify as xn}from"util";import{execSync as Pn}from"child_process";var ml=xn(Co.readFile),pl=xn(Co.access),Me="/etc/sysctl.conf",dl=`# set default and maximum socket buffer sizes to 128MB
253
+ WantedBy=multi-user.target`},"solvService");import{execSync as al}from"child_process";function Rn(t=!0){console.log("Creating solvService configuration for solana");let e=kn(t);al(`echo "${e}" | sudo tee ${x.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(Rn,"setupSolvService");var vn=r((t=!0)=>{On(),Rn(t),_n()},"makeServices");import{spawnSync as vo}from"node:child_process";var Cn=r(t=>{try{Ve(t);let e=t.NETWORK;return e===u.TESTNET?(vo(`solana config set --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"}),vo(`solana airdrop 1 --url ${e} -k ${P}`,{shell:!0,stdio:"inherit"})):vo(`solana config set --url ${e} -k ${K}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==g.RPC&&Pe(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as In}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(" ");In(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(" ");In(e,{shell:!0,stdio:"inherit"})}catch(e){throw new Error(`getSnapshot Error: ${e}`)}},"getSnapshot");import{spawnSync as il}from"node:child_process";var Ue=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===S.FRANKENDANCER?"frankendancer":"solv"}`;il(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as cl}from"node:child_process";var ll=r(()=>{try{cl('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),Ln=ll;import Co from"fs";import{promisify as xn}from"util";import{execSync as Pn}from"child_process";var ml=xn(Co.readFile),pl=xn(Co.access),Me="/etc/sysctl.conf",dl=`# set default and maximum socket buffer sizes to 128MB
254
254
  net.core.rmem_default=134217728
255
255
  net.core.wmem_default=134217728
256
256
  net.core.rmem_max=134217728
@@ -263,7 +263,7 @@ net.ipv4.tcp_wmem=10240 87380 134217728
263
263
  # Enable TCP westwood for kernels greater than or equal to 2.6.13
264
264
  net.ipv4.tcp_congestion_control=westwood`;async function ul(){try{await pl(Me,Co.constants.F_OK)}catch{return console.log(`Skipping updateSysctlConfig: ${Me} does not exist`)}try{let t=await ml(Me,"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
265
  ${dl}
266
- `,Pn(`echo "${e}" | sudo tee ${Me} > /dev/null`),Pn("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(ul,"updateSysctlConfig");var Vn=ul;import{spawnSync as fl}from"child_process";var $n=r(()=>{fl("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as hl}from"node:child_process";var Kn=r(()=>{hl("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as bn}from"child_process";var Dn=r((t=!1,e=!1)=>{t?Sl():yl(e)},"createSymLink"),yl=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),bn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),Sl=r(()=>{bn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import Fe from"chalk";var Tl=r(()=>{let t=`${Fe.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${Fe.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
266
+ `,Pn(`echo "${e}" | sudo tee ${Me} > /dev/null`),Pn("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(ul,"updateSysctlConfig");var Vn=ul;import{spawnSync as fl}from"child_process";var $n=r(()=>{fl("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as hl}from"node:child_process";var Kn=r(()=>{hl("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as Dn}from"child_process";var bn=r((t=!1,e=!1)=>{t?Sl():yl(e)},"createSymLink"),yl=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),Dn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),Sl=r(()=>{Dn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import Fe from"chalk";var Tl=r(()=>{let t=`${Fe.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${Fe.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
267
267
 
268
268
  We're excited to offer a free API key exclusively for the Validators DAO community \u{1F389}
269
269
  It's our way of supporting the community and empowering you with fast, reliable connections.
@@ -360,12 +360,12 @@ dynamic_port_range = "8900-9000"
360
360
  [tiles.bundle]
361
361
  enabled = true
362
362
  url = "https://testnet.block-engine.jito.wtf"
363
- tip_distribution_program_addr = "F2Zu7QZiTYUhPd7u9ukRVwxh7B71oA3NMJcHuCHc29P2"
363
+ tip_distribution_program_addr = "DzvGET57TAgEDxvm3ERUM4GNcsAJdqjDLCne9sdfY4wf"
364
364
  tip_payment_program_addr = "GJHtFqM9agxPmkeKjHny6qiRKrXZALvvFGiKf11QE7hy"
365
- tip_distribution_authority = "GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib"
365
+ tip_distribution_authority = "7T4inmPmtNBX3MhLwJ9hFsSMnGJYYkKioVABSNTWVRuS"
366
366
  commission_bps = 1000
367
367
 
368
- `}),"configToml"),He=wl;var Al=r((t={})=>{let e="/home/solv/firedancer/config.toml",n=`name = "solv"
368
+ `}),"configToml"),je=wl;var Al=r((t={})=>{let e="/home/solv/firedancer/config.toml",n=`name = "solv"
369
369
  user = "solv"
370
370
  scratch_directory = "/home/solv"
371
371
  dynamic_port_range = "8100-8125"
@@ -459,17 +459,17 @@ dynamic_port_range = "8100-8125"
459
459
  url = "${t.blockEngineUrl||ye}"
460
460
  tip_distribution_program_addr = "4R3gSG8BpU4t19KYj8CfnbtRpnT8gtk4dvTHxVRwc2r7"
461
461
  tip_payment_program_addr = "T1pyyaTNZsKv2WcRAB8oVnk93mLJw2XzjtVYqCsaHqt"
462
- tip_distribution_authority = "GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib"
462
+ tip_distribution_authority = "8F4jGUmxF36vQ6yabnsxX6AQVXdKBhs8kGSUuRKSg8Xt"
463
463
  commission_bps = 1000
464
464
 
465
465
  [net]
466
- provider = "xdp"`;return{filePath:e,body:n}},"configTomlMainnet"),je=Al;var _l=r(async()=>{st("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),st(`git checkout v${mr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Un();st(`sudo tee ${t} > /dev/null << 'EOF'
466
+ provider = "xdp"`;return{filePath:e,body:n}},"configTomlMainnet"),He=Al;var _l=r(async()=>{st("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),st(`git checkout v${mr}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),st("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Un();st(`sudo tee ${t} > /dev/null << 'EOF'
467
467
  ${e}
468
468
  EOF`,{shell:!0,stdio:"inherit"}),st(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=Mn();st(`sudo tee ${o.filePath} > /dev/null << 'EOF'
469
469
  ${o.body}
470
- EOF`,{shell:!0,stdio:"inherit"}),st("sudo systemctl daemon-reload",{shell:!0});let n=await v(),s=n.NETWORK===u.MAINNET?je({blockEngineUrl:n.FRANKENDANCER_BLOCK_ENGINE_URL}):He();st(`sudo tee ${s.filePath} > /dev/null << 'EOF'
470
+ EOF`,{shell:!0,stdio:"inherit"}),st("sudo systemctl daemon-reload",{shell:!0});let n=await v(),s=n.NETWORK===u.MAINNET?He({blockEngineUrl:n.FRANKENDANCER_BLOCK_ENGINE_URL}):je();st(`sudo tee ${s.filePath} > /dev/null << 'EOF'
471
471
  ${s.body}
472
- EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Ye=_l;var Hn=r(async(t=!1,e=!1)=>{try{t||(console.log(Fn.white("\u{1F7E2} Initializing Setup")),await v(),await cn());let o=await v(),n=o.NETWORK===u.TESTNET;switch(Tn(),e||wn(),vn(n),$n(),Ln(),await Vn(),Cn(o),Dn(o.IS_DUMMY,n),o.NODE_TYPE){case g.RPC:await pn(o);break;case g.VALIDATOR:await hn(o),o.VALIDATOR_TYPE===S.FRANKENDANCER&&await Ye();break;default:throw new Error("Unknown Node Type")}An(),Qt(),o.VALIDATOR_TYPE!==S.FRANKENDANCER&&(Kn(),De(n)),Ue(o),console.log(Fn.white("\u{1F7E2} Setup Completed")),_t()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var jn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
472
+ EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Ye=_l;var jn=r(async(t=!1,e=!1)=>{try{t||(console.log(Fn.white("\u{1F7E2} Initializing Setup")),await v(),await cn());let o=await v(),n=o.NETWORK===u.TESTNET;switch(Tn(),e||wn(),vn(n),$n(),Ln(),await Vn(),Cn(o),bn(o.IS_DUMMY,n),o.NODE_TYPE){case g.RPC:await pn(o);break;case g.VALIDATOR:await hn(o),o.VALIDATOR_TYPE===S.FRANKENDANCER&&await Ye();break;default:throw new Error("Unknown Node Type")}An(),Qt(),o.VALIDATOR_TYPE!==S.FRANKENDANCER&&(Kn(),be(n)),Ue(o),console.log(Fn.white("\u{1F7E2} Setup Completed")),_t()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var Hn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
473
473
  [Unit]
474
474
  Description=Solana transaction relayer
475
475
  Requires=network-online.target
@@ -518,12 +518,12 @@ Environment=WEBSOCKET_SERVERS=wss://your.websocket.server
518
518
  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
519
 
520
520
  [Install]
521
- WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Be,spawnSync as ft}from"child_process";var Bn=r(async(t,e=!0)=>{ft("openssl",["genrsa","-out","/home/solv/private.pem"],{stdio:"inherit",shell:!0}),ft("openssl",["rsa","-in","/home/solv/private.pem","-pubout","-out","/home/solv/public.pem"],{stdio:"inherit",shell:!0}),ft("solana-keygen",["new","--no-bip39-passphrase","--outfile","/home/solv/relayer-keypair.json"],{stdio:"inherit",shell:!0}),ft("git",["clone","https://github.com/jito-foundation/jito-relayer.git"],{stdio:"inherit",shell:!0}),ft("git",["submodule","update","--init","--recursive"],{cwd:"jito-relayer",stdio:"inherit",shell:!0}),ft("cargo",["build","--release"],{cwd:"jito-relayer",stdio:"inherit",shell:!0});let{filePath:o,body:n}=e?jn(t):Yn(t);Be(`echo "${n}" | sudo tee ${o} > /dev/null`),ft("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),ft("sudo",["systemctl","start","relayer"],{stdio:"inherit"}),Be("sudo ufw allow 11228",{stdio:"inherit"}),Be("sudo ufw allow 11229",{stdio:"inherit"}),Be("sudo ufw allow 11226",{stdio:"inherit"})},"jitoRelayerSetup");import{spawnSync as Io}from"node:child_process";var Nl=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"),Jn=Nl;import{spawnSync as Ol}from"node:child_process";import{readFile as kl,writeFile as Rl}from"fs/promises";var vl=r(async()=>{let t="/home/solv/start-validator.sh",o=(await kl(t,"utf-8")).split(`
521
+ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Be,spawnSync as ft}from"child_process";var Bn=r(async(t,e=!0)=>{ft("openssl",["genrsa","-out","/home/solv/private.pem"],{stdio:"inherit",shell:!0}),ft("openssl",["rsa","-in","/home/solv/private.pem","-pubout","-out","/home/solv/public.pem"],{stdio:"inherit",shell:!0}),ft("solana-keygen",["new","--no-bip39-passphrase","--outfile","/home/solv/relayer-keypair.json"],{stdio:"inherit",shell:!0}),ft("git",["clone","https://github.com/jito-foundation/jito-relayer.git"],{stdio:"inherit",shell:!0}),ft("git",["submodule","update","--init","--recursive"],{cwd:"jito-relayer",stdio:"inherit",shell:!0}),ft("cargo",["build","--release"],{cwd:"jito-relayer",stdio:"inherit",shell:!0});let{filePath:o,body:n}=e?Hn(t):Yn(t);Be(`echo "${n}" | sudo tee ${o} > /dev/null`),ft("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),ft("sudo",["systemctl","start","relayer"],{stdio:"inherit"}),Be("sudo ufw allow 11228",{stdio:"inherit"}),Be("sudo ufw allow 11229",{stdio:"inherit"}),Be("sudo ufw allow 11226",{stdio:"inherit"})},"jitoRelayerSetup");import{spawnSync as Io}from"node:child_process";var Nl=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"),Jn=Nl;import{spawnSync as Ol}from"node:child_process";import{readFile as kl,writeFile as Rl}from"fs/promises";var vl=r(async()=>{let t="/home/solv/start-validator.sh",o=(await kl(t,"utf-8")).split(`
522
522
  `);o.splice(-1,0,"--geyser-plugin-config /home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json \\");let n=o.join(`
523
523
  `);await Rl(t,n),Ol(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Gn=vl;import Cl from"inquirer";import{writeFile as Il}from"node:fs/promises";var zn=r(async()=>{let e=(await Cl.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";Io(o,{shell:!0,stdio:"inherit"}),Io(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),Io(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Jn(e),c=JSON.stringify(i,null,2);await Il(a,c,{encoding:"utf8"}),await Gn()},"yellowstoneGeyser");var Wn=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(lt.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Pe(t),process.exit(0);else if(e.key)console.log(lt.white("\u{1F511} Setting up Validator Keypairs ...")),Ve(t),process.exit(0);else if(e.relayer){console.log(lt.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await wt()).blockEngineUrl;await Bn(n,!1),console.log(lt.green(`Jito Relayer Setup Completed
524
524
 
525
- $ solc relayer --help`)),Qt(),_t(),process.exit(0)}else if(e.jupiter)console.log(lt.white("\u{1F30F} Setting up Jupiter Swap API ...")),await on(),Qt(),_t(),process.exit(0);else if(e.geyser){console.log(lt.white("\u26A1\uFE0F Setting up Geyser ...")),await zn();return}else if(e.firedancer){console.log(lt.white("\u{1F525} Setting up Firedancer ...")),await Ye();return}await Hn(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(lt.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(lt.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as Ll}from"child_process";var Lo=r(()=>{let o=Ll("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)=>Nt(a.Avail)-Nt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&Nt(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&Nt(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&Nt(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/")&&Nt(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import qn from"chalk";import Pl from"cli-table3";var Po=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>qn.blue(n)),o=new Pl({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=>qn.white(s)))}),console.log(o.toString())},"displayTable");var Qn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Lo();Po(t)})},"dfCommands"),Nt=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 Xn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ue(t),process.exit(0)})},"startCommand");import{spawnSync as xl}from"node:child_process";var Zn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===S.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),xl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var ts=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 oe}from"node:child_process";import es from"chalk";var os=r(t=>{h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async e=>{let o=D();e.rm&&(console.log(es.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),oe("solc stop",{stdio:"inherit",shell:!0}),oe("solc rm:snapshot",{stdio:"inherit",shell:!0}),oe("solc get snapshot",{stdio:"inherit",shell:!0}),oe("solc start",{stdio:"inherit",shell:!0}),console.log(es.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${o} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;oe(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var rs=r(t=>{let o=t.NETWORK===u.TESTNET?tt:et;t.NODE_TYPE===g.RPC&&(o=gt),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===S.JITO){let l=`v${n.version||j}-jito`;Ne(l);return}t.NODE_TYPE===g.RPC&&(o=gt);let i=n.version||o;await ge(i)})},"installCommands");import{spawnSync as Vl}from"child_process";var ns=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Vl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=te();console.log(t)})},"mountCommands");import{spawnSync as bl}from"node:child_process";import ss from"chalk";import{spawnSync as $l}from"child_process";var Kl=r(async()=>{try{let t=$l("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"),Je=Kl;var as=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 Je()&&(console.log(ss.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(ss.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var re={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 Ul,mkdirSync as Ml}from"fs";import Fl from"inquirer";import{homedir as Hl}from"os";import{spawnSync as Dl}from"node:child_process";function is(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Dl(s,{shell:!0,stdio:"inherit"}).status===0}r(is,"executeSCP");var xo=r(async(t="")=>{let e=t;t===""&&(e=(await Fl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=Hl(),s=n.includes("/home/solv")?"/home/solv":n+re.SOLV_KEYPAIR_DOWNLOAD_PATH;Ul(s)||Ml(s,{recursive:!0});let a=!0,i=n+"/"+Wo;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}`;is(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as jl}from"child_process";import{existsSync as Yl}from"fs";import Bl from"inquirer";import Jl from"os";var cs=r(async(t="")=>{let e=Jl.userInfo().homedir,o=t;t===""&&(o=(await Bl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${re.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=re.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(!Yl(l))continue;let m=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;jl(m,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Gl}from"child_process";import zl from"inquirer";var ls=r(async()=>{let t=await zl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${U.ROOT}/.ssh && echo "${t.pubkey}" >> ${U.AUTHORIZED_KEYS}`;Gl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Ge from"chalk";import{readFileSync as Wl}from"fs";import ql from"os";var ms=r(()=>{try{let e=`${ql.userInfo().homedir}/.ssh/id_rsa.pub`,o=Wl(e,"utf8");console.log(Ge.white(`Your SSH Public Key is:
525
+ $ solc relayer --help`)),Qt(),_t(),process.exit(0)}else if(e.jupiter)console.log(lt.white("\u{1F30F} Setting up Jupiter Swap API ...")),await on(),Qt(),_t(),process.exit(0);else if(e.geyser){console.log(lt.white("\u26A1\uFE0F Setting up Geyser ...")),await zn();return}else if(e.firedancer){console.log(lt.white("\u{1F525} Setting up Firedancer ...")),await Ye();return}await jn(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(lt.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(lt.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as Ll}from"child_process";var Lo=r(()=>{let o=Ll("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)=>Nt(a.Avail)-Nt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&Nt(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&Nt(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&Nt(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/")&&Nt(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import qn from"chalk";import Pl from"cli-table3";var Po=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>qn.blue(n)),o=new Pl({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=>qn.white(s)))}),console.log(o.toString())},"displayTable");var Qn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Lo();Po(t)})},"dfCommands"),Nt=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 Xn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ue(t),process.exit(0)})},"startCommand");import{spawnSync as xl}from"node:child_process";var Zn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===S.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),xl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var ts=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 oe}from"node:child_process";import es from"chalk";var os=r(t=>{h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async e=>{let o=b();e.rm&&(console.log(es.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),oe("solc stop",{stdio:"inherit",shell:!0}),oe("solc rm:snapshot",{stdio:"inherit",shell:!0}),oe("solc get snapshot",{stdio:"inherit",shell:!0}),oe("solc start",{stdio:"inherit",shell:!0}),console.log(es.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${o} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;oe(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var rs=r(t=>{let o=t.NETWORK===u.TESTNET?tt:et;t.NODE_TYPE===g.RPC&&(o=gt),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===S.JITO){let l=`v${n.version||H}-jito`;Ne(l);return}t.NODE_TYPE===g.RPC&&(o=gt);let i=n.version||o;await ge(i)})},"installCommands");import{spawnSync as Vl}from"child_process";var ns=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Vl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=te();console.log(t)})},"mountCommands");import{spawnSync as Dl}from"node:child_process";import ss from"chalk";import{spawnSync as $l}from"child_process";var Kl=r(async()=>{try{let t=$l("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"),Je=Kl;var as=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 Je()&&(console.log(ss.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 -`;Dl(n,{shell:!0,stdio:"inherit"}),console.log(ss.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var re={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 Ul,mkdirSync as Ml}from"fs";import Fl from"inquirer";import{homedir as jl}from"os";import{spawnSync as bl}from"node:child_process";function is(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return bl(s,{shell:!0,stdio:"inherit"}).status===0}r(is,"executeSCP");var xo=r(async(t="")=>{let e=t;t===""&&(e=(await Fl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=jl(),s=n.includes("/home/solv")?"/home/solv":n+re.SOLV_KEYPAIR_DOWNLOAD_PATH;Ul(s)||Ml(s,{recursive:!0});let a=!0,i=n+"/"+Wo;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}`;is(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as Hl}from"child_process";import{existsSync as Yl}from"fs";import Bl from"inquirer";import Jl from"os";var cs=r(async(t="")=>{let e=Jl.userInfo().homedir,o=t;t===""&&(o=(await Bl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${re.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=re.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(!Yl(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 Gl}from"child_process";import zl from"inquirer";var ls=r(async()=>{let t=await zl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${U.ROOT}/.ssh && echo "${t.pubkey}" >> ${U.AUTHORIZED_KEYS}`;Gl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Ge from"chalk";import{readFileSync as Wl}from"fs";import ql from"os";var ms=r(()=>{try{let e=`${ql.userInfo().homedir}/.ssh/id_rsa.pub`,o=Wl(e,"utf8");console.log(Ge.white(`Your SSH Public Key is:
527
527
  `)),console.log(Ge.white(o))}catch(t){console.error(Ge.white(`Error reading SSH Public Key
528
528
  `)),console.error(Ge.white(t))}},"cat");import{spawnSync as Ql}from"child_process";var ps=r(()=>{Ql("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Xl}from"child_process";import{readFileSync as Zl}from"fs";import{Readable as tm}from"stream";var ds=r(async t=>new Promise((e,o)=>{try{let n=Xl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
529
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"),em=r(t=>{try{return JSON.parse(Zl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),us=r(async(t,e)=>{let o=[],n=tm.from(t);return n.on("data",async s=>{em(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import ze from"chalk";import{Presets as sm,SingleBar as am}from"cli-progress";import fs from"chalk";import{spawnSync as om}from"node:child_process";import rm from"node-fetch";var nm=r(async()=>{let t=await rm(tr,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(fs.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
@@ -533,7 +533,7 @@ ${n.join(`
533
533
  Only showing the first 10 results
534
534
 
535
535
  `)),console.log(ze.white("$ mv <your-key> /mt/solana/<solvKeyName>.json"))})},"scpCommands");import{spawnSync as im}from"child_process";var Ss=r(t=>{h.command("status").description("Check Solana Validator Status").action(()=>{cm(t)})},"statusCommands"),cm=r(t=>{let o=`sudo systemctl status ${t.VALIDATOR_TYPE===S.FRANKENDANCER?"frankendancer":"solv"}`;im(o,{shell:!0,stdio:"inherit"}),process.exit(0)},"systemctlStatusSolv");import{spawnSync as lm}from"node:child_process";var Ts=r(async(t,e)=>{try{let o=await v(),n=o.NETWORK===u.TESTNET,a=o.NODE_TYPE===g.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 lm(c.join(" && "),{shell:!0,stdio:"inherit"}),!0}catch(o){throw new Error(`delegateStake: ${o}`)}},"delegateStake");import Es from"inquirer";import{spawnSync as mm}from"node:child_process";var gs=r((t,e,o=5)=>{let n=0;for(;n<o;){let s=mm(`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 pm,existsAsync as dm}from"@skeet-framework/utils";import{execSync as um,spawnSync as qe}from"node:child_process";import fm from"node:os";var ws=r(async t=>{let e=t.NETWORK===u.TESTNET;if(!(await Es.prompt([{type:"confirm",name:"confirmCreateStakeAccount",message:"Would you like to create a new stake account?",default:!1}])).confirmCreateStakeAccount)return!1;qe(`solana config set --keypair ${e?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"}`,{shell:!0,stdio:"pipe"});let s=await Es.prompt([{type:"input",name:"solAmount",message:"How many SOL would you like to stake?",default:"1"}]),{stakeKeypair:a,stakeKeypairPath:i}=await ym(),c=t.STAKE_ACCOUNTS,l=Array.from(new Set([...c,a]));return xt({STAKE_ACCOUNT:l}),gs(i,Number(s.solAmount))},"stakeAccountQuestion"),hm=fm.userInfo().homedir,We=hm+"/stake-account",ym=r(async()=>{await dm(We)||qe(`mkdir -p ${We}`,{shell:!0});let t=qe(`ls ${We}`,{shell:!0}).stdout.toString().split(`
536
- `).filter(a=>a.includes(".json")),e=pm(t.length+1),o=`${We}/stake${e}.json`,n=`solana-keygen new --outfile ${o} --no-bip39-passphrase`;return qe(n,{shell:!0,stdio:"inherit"}),{stakeKeypair:um(`solana-keygen pubkey ${o}`).toString().trim(),stakeKeypairPath:o}},"createStakeKeypair");import{spawnSync as Sm}from"node:child_process";var As=r(async t=>{try{let o=(await v()).NETWORK===u.TESTNET?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",n=`solana deactivate-stake ${t} --stake-authority ${o}`;return Sm(n,{shell:!0,stdio:"inherit"}),!0}catch(e){throw new Error(`deactivateStake: ${e}`)}},"deactivateStake");import{spawnSync as Tm}from"node:child_process";var _s=r(async(t,e,o)=>{try{let n=`solana withdraw-stake ${t} ${e} ${o}`;return Tm(n,{shell:!0,stdio:"inherit"}),!0}catch(n){throw new Error(`withdrawStake: ${n}`)}},"withdrawStake");import bt from"chalk";import{Connection as gm,PublicKey as Em}from"@solana/web3.js";import{stakePoolInfo as wm}from"@solana/spl-stake-pool";var Qe=r(async(t,e=G)=>{try{let o=new gm(t),n=new Em(e);return await wm(o,n)}catch{return console.log(`Stake Pool not found: ${e}`),null}},"getStakePoolInfo");import{fetchDigitalAsset as Am}from"@metaplex-foundation/mpl-token-metadata";import{createUmi as _m}from"@metaplex-foundation/umi-bundle-defaults";import{publicKey as Nm}from"@metaplex-foundation/umi";var Ns=r(async(t,e)=>{try{let o=Nm(e);console.log(`mintPubkey: ${o}`);let n=_m(t),s=await Am(n,o);return{name:s.metadata.name,symbol:s.metadata.symbol,uri:s.metadata.uri,mint:e}}catch{return null}},"getTokenInfo");import ne from"chalk";import Os from"inquirer";var ks=r(async t=>{let e=await Os.prompt([{type:"input",name:"stakePoolAddress",message:"Enter Stake Pool Address(default: elSOL)",default:G}]);try{let o=await Qe(t,e.stakePoolAddress);if(!o)return console.log(ne.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
536
+ `).filter(a=>a.includes(".json")),e=pm(t.length+1),o=`${We}/stake${e}.json`,n=`solana-keygen new --outfile ${o} --no-bip39-passphrase`;return qe(n,{shell:!0,stdio:"inherit"}),{stakeKeypair:um(`solana-keygen pubkey ${o}`).toString().trim(),stakeKeypairPath:o}},"createStakeKeypair");import{spawnSync as Sm}from"node:child_process";var As=r(async t=>{try{let o=(await v()).NETWORK===u.TESTNET?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",n=`solana deactivate-stake ${t} --stake-authority ${o}`;return Sm(n,{shell:!0,stdio:"inherit"}),!0}catch(e){throw new Error(`deactivateStake: ${e}`)}},"deactivateStake");import{spawnSync as Tm}from"node:child_process";var _s=r(async(t,e,o)=>{try{let n=`solana withdraw-stake ${t} ${e} ${o}`;return Tm(n,{shell:!0,stdio:"inherit"}),!0}catch(n){throw new Error(`withdrawStake: ${n}`)}},"withdrawStake");import Dt from"chalk";import{Connection as gm,PublicKey as Em}from"@solana/web3.js";import{stakePoolInfo as wm}from"@solana/spl-stake-pool";var Qe=r(async(t,e=G)=>{try{let o=new gm(t),n=new Em(e);return await wm(o,n)}catch{return console.log(`Stake Pool not found: ${e}`),null}},"getStakePoolInfo");import{fetchDigitalAsset as Am}from"@metaplex-foundation/mpl-token-metadata";import{createUmi as _m}from"@metaplex-foundation/umi-bundle-defaults";import{publicKey as Nm}from"@metaplex-foundation/umi";var Ns=r(async(t,e)=>{try{let o=Nm(e);console.log(`mintPubkey: ${o}`);let n=_m(t),s=await Am(n,o);return{name:s.metadata.name,symbol:s.metadata.symbol,uri:s.metadata.uri,mint:e}}catch{return null}},"getTokenInfo");import ne from"chalk";import Os from"inquirer";var ks=r(async t=>{let e=await Os.prompt([{type:"input",name:"stakePoolAddress",message:"Enter Stake Pool Address(default: elSOL)",default:G}]);try{let o=await Qe(t,e.stakePoolAddress);if(!o)return console.log(ne.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
537
537
  Please check the correct address and try again.
538
538
  `)),console.log(ne.white(`For stake pool information
539
539
  \u{1F517} https://solanacompass.com/stake-pools/`)),null;let n=o.poolMint,s=await Ns(t,n);s||(s={name:n,symbol:n,mint:n,uri:"no metadata"});let a={...s,stakePoolAddress:e.stakePoolAddress},i=`\u{1FA99} ${a.symbol}
@@ -542,18 +542,18 @@ Token Mint: ${a.mint}`;return(await Os.prompt([{type:"confirm",name:"confirm",me
542
542
  Is this the correct Stake Pool?`}])).confirm?a:(console.log(ne.yellow("\u2714\uFE0F Canceled")),null)}catch{return console.log(ne.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
543
543
  Please check the correct address and try again.
544
544
  `)),console.log(ne.white(`For stake pool information
545
- \u{1F517} https://solanacompass.com/stake-pools/`)),null}},"selectLST");import{readFile as bm}from"fs/promises";import ie from"inquirer";import{existsAsync as Dm}from"@skeet-framework/utils";import{Connection as Ls,Keypair as Pm,PublicKey as ae}from"@solana/web3.js";import{Connection as Om,PublicKey as km,Keypair as Rm}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as vm}from"@solana/spl-token";var se=r(async(t,e,o,n,s=!1)=>{try{let a=Rm.fromSecretKey(new Uint8Array(e)),i=new km(o),c=new Om(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 xm}from"cli-spinner";import Ot from"chalk";import{PublicKey as vs,Keypair as Cs,Transaction as Rs,ComputeBudgetProgram as Cm,LAMPORTS_PER_SOL as Im}from"@solana/web3.js";import*as Is from"@solana/spl-stake-pool";var Vt=r(async(t,e,o,n=new vs(G),s,a,i)=>{try{let c=Cs.fromSecretKey(new Uint8Array(e)),l=o*Im,{instructions:m,signers:d}=await Lm(t,e,l,n,s,a,i),p=new Rs().add(...m);p.feePayer=c.publicKey;let f=await t.getLatestBlockhashAndContext({commitment:"finalized"});p.recentBlockhash=f.value.blockhash,p.sign(...d,c);let T=new Rs().add(...m).add(Cm.setComputeUnitPrice({microLamports:1e3}));T.feePayer=c.publicKey,T.recentBlockhash=f.value.blockhash,T.sign(...d,c);let w=await t.sendRawTransaction(T.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"),Lm=r(async(t,e,o,n=new vs(G),s,a,i)=>{let l=Cs.fromSecretKey(new Uint8Array(e)).publicKey;return await Is.depositSol(t,n,l,o,s,a,i)},"depositSOLInstruction");import{sleep as Ps}from"@skeet-framework/utils";var Xe=r(async(t,e,o,n)=>{console.log(Ot.white("Solana RPC URL:",t));let s=new Ls(t);o===0&&(o=await Ze());let a=new xm("%s");a.setSpinnerString(18),a.start(),a.setSpinnerTitle(Ot.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let i=new ae(e),c=Pm.fromSecretKey(new Uint8Array(n)),l=rt;a.setSpinnerTitle(Ot.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let m=await se(t,n,l,c.publicKey);await Ps(1e3),a.setSpinnerTitle(Ot.green("\u{1F504} Converting SOL to elSOL"));let d=await Vt(s,n,o,i,new ae(m),new ae(wo),c.publicKey),p=0;for(;d.status!=="success";){if(p++,p>10)return a.stop(!0),console.log(Ot.red("Failed to deposit.Please try again later \u{1F64F}")),!1;a.setSpinnerTitle(Ot.yellow(`\u23F3 ${p} Times Retrying...`)),await Ps(3e3),s=new Ls(t),d=await Vt(s,n,o,i,new ae(m),new ae(wo),c.publicKey)}return a.stop(!0),console.log(Ot.white(`\u{1F4B0} Finished Deposit - You've got elSOL \u2728
545
+ \u{1F517} https://solanacompass.com/stake-pools/`)),null}},"selectLST");import{readFile as Dm}from"fs/promises";import ie from"inquirer";import{existsAsync as bm}from"@skeet-framework/utils";import{Connection as Ls,Keypair as Pm,PublicKey as ae}from"@solana/web3.js";import{Connection as Om,PublicKey as km,Keypair as Rm}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as vm}from"@solana/spl-token";var se=r(async(t,e,o,n,s=!1)=>{try{let a=Rm.fromSecretKey(new Uint8Array(e)),i=new km(o),c=new Om(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 xm}from"cli-spinner";import Ot from"chalk";import{PublicKey as vs,Keypair as Cs,Transaction as Rs,ComputeBudgetProgram as Cm,LAMPORTS_PER_SOL as Im}from"@solana/web3.js";import*as Is from"@solana/spl-stake-pool";var Vt=r(async(t,e,o,n=new vs(G),s,a,i)=>{try{let c=Cs.fromSecretKey(new Uint8Array(e)),l=o*Im,{instructions:m,signers:d}=await Lm(t,e,l,n,s,a,i),p=new Rs().add(...m);p.feePayer=c.publicKey;let f=await t.getLatestBlockhashAndContext({commitment:"finalized"});p.recentBlockhash=f.value.blockhash,p.sign(...d,c);let T=new Rs().add(...m).add(Cm.setComputeUnitPrice({microLamports:1e3}));T.feePayer=c.publicKey,T.recentBlockhash=f.value.blockhash,T.sign(...d,c);let w=await t.sendRawTransaction(T.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"),Lm=r(async(t,e,o,n=new vs(G),s,a,i)=>{let l=Cs.fromSecretKey(new Uint8Array(e)).publicKey;return await Is.depositSol(t,n,l,o,s,a,i)},"depositSOLInstruction");import{sleep as Ps}from"@skeet-framework/utils";var Xe=r(async(t,e,o,n)=>{console.log(Ot.white("Solana RPC URL:",t));let s=new Ls(t);o===0&&(o=await Ze());let a=new xm("%s");a.setSpinnerString(18),a.start(),a.setSpinnerTitle(Ot.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let i=new ae(e),c=Pm.fromSecretKey(new Uint8Array(n)),l=rt;a.setSpinnerTitle(Ot.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let m=await se(t,n,l,c.publicKey);await Ps(1e3),a.setSpinnerTitle(Ot.green("\u{1F504} Converting SOL to elSOL"));let d=await Vt(s,n,o,i,new ae(m),new ae(wo),c.publicKey),p=0;for(;d.status!=="success";){if(p++,p>10)return a.stop(!0),console.log(Ot.red("Failed to deposit.Please try again later \u{1F64F}")),!1;a.setSpinnerTitle(Ot.yellow(`\u23F3 ${p} Times Retrying...`)),await Ps(3e3),s=new Ls(t),d=await Vt(s,n,o,i,new ae(m),new ae(wo),c.publicKey)}return a.stop(!0),console.log(Ot.white(`\u{1F4B0} Finished Deposit - You've got elSOL \u2728
546
546
 
547
547
  Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as Vm,Keypair as $m,PublicKey as $t}from"@solana/web3.js";import{Spinner as Km}from"cli-spinner";import Kt from"chalk";import{sleep as xs}from"@skeet-framework/utils";var Vs=r(async(t,e,o,n,s)=>{let a=new Vm(t);o===0&&(o=await Ze());let i=new Km("%s");i.setSpinnerString(18),i.start(),i.setSpinnerTitle(Kt.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let c=new $t(e),l=await Qe(t,e);if(!l)return console.log("Stake Pool not found"),!1;i.setSpinnerTitle(Kt.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let m=l.poolMint,d=$m.fromSecretKey(new Uint8Array(n)),p=await se(t,n,m,d.publicKey),f=await se(t,n,m,new $t(Nr),!0);await xs(1e3),i.setSpinnerTitle(Kt.green(`\u{1F504} Converting SOL to ${s}`));let T=await Vt(a,n,o,c,new $t(p),new $t(f),d.publicKey),w=0;for(;T.status!=="success";){if(w++,w>10)return i.stop(!0),console.log(Kt.red("Failed to deposit.Please try again later \u{1F64F}")),!1;console.log(Kt.yellow(`\u23F3 ${w} Times Retrying...
548
548
  `)),await xs(1e3),T=await Vt(a,n,o,c,new $t(p),new $t(f),d.publicKey)}return i.stop(!0),console.log(Kt.white(`\u{1F4B0} You've got ${s} \u2728
549
549
 
550
- Signature:`,T.signature)),!0},"depositeLST");import{execSync as to}from"node:child_process";import{homedir as Um}from"os";var $s=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=G,s=t.NETWORK===u.TESTNET,a=Um(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(to(`solana config set --keypair ${i}`),!await Dm(i)){console.log(bt.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
551
- `)),console.log(bt.white(i));return}let c=JSON.parse(await bm(i,"utf-8"));if(e.elsol){await Xe(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await ks(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Vs(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ws(t))return;let m=await v(),{validatorVoteAccount:d,stakeAccounts:p}=await Fm(m);for await(let f of p)try{await Ts(f,d)}catch{console.log(bt.yellow(`Network might be busy, please try again later
550
+ Signature:`,T.signature)),!0},"depositeLST");import{execSync as to}from"node:child_process";import{homedir as Um}from"os";var $s=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=G,s=t.NETWORK===u.TESTNET,a=Um(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(to(`solana config set --keypair ${i}`),!await bm(i)){console.log(Dt.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
551
+ `)),console.log(Dt.white(i));return}let c=JSON.parse(await Dm(i,"utf-8"));if(e.elsol){await Xe(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await ks(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Vs(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ws(t))return;let m=await v(),{validatorVoteAccount:d,stakeAccounts:p}=await Fm(m);for await(let f of p)try{await Ts(f,d)}catch{console.log(Dt.yellow(`Network might be busy, please try again later
552
552
  You can use a custom RPC endpoint to avoid this issue
553
- `))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await jm();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await Mm();for await(let n of o)try{await As(n)}catch{console.log(bt.yellow(`Network might be busy, please try again later
553
+ `))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await Hm();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await Mm();for await(let n of o)try{await As(n)}catch{console.log(Dt.yellow(`Network might be busy, please try again later
554
554
  You can use a custom RPC endpoint to avoid this issue
555
- `))}}else{let o=await Ym();await _s(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),Ze=r(async()=>{let t=to("solana address").toString().trim(),e=to("solana balance").toString().replace("SOL","").trim();console.log(bt.white(`\u{1F4D7} Selected Wallet: ${t}
556
- \u{1F4B0} Account Balance:`,e+" SOL")),console.log(bt.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await ie.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Mm=r(async()=>{let t=await v();return await ie.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),Fm=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?Hm(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await ie.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"),Hm=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return to(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),jm=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await ie.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Ym=r(async()=>{let t=(await v()).STAKE_ACCOUNTS;return await ie.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 Bm}from"child_process";var Ks=r(()=>{try{return Bm("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 bs=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 mt from"chalk";import{Spinner as Gm}from"cli-spinner";var Dt;(function(t){t.successHex=mt.hex("#39A845"),t.warningHex=mt.hex("#FFD02E"),t.errorHex=mt.hex("#B5332E"),t.syncHex=mt.hex("#3073B7"),t.greyHex=mt.hex("#BEBDBD"),t.indigoHex=mt.hex("#3950A0"),t.pinkHex=mt.hex("#D8A1C4"),t.normal=e=>{console.log(mt.white(e))},t.syncSpinner=e=>{let o=new Gm(mt.white(e)+` %s
555
+ `))}}else{let o=await Ym();await _s(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),Ze=r(async()=>{let t=to("solana address").toString().trim(),e=to("solana balance").toString().replace("SOL","").trim();console.log(Dt.white(`\u{1F4D7} Selected Wallet: ${t}
556
+ \u{1F4B0} Account Balance:`,e+" SOL")),console.log(Dt.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await ie.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Mm=r(async()=>{let t=await v();return await ie.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),Fm=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?jm(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await ie.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"),jm=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return to(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),Hm=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await ie.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Ym=r(async()=>{let t=(await v()).STAKE_ACCOUNTS;return await ie.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 Bm}from"child_process";var Ks=r(()=>{try{return Bm("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 Ds=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 mt from"chalk";import{Spinner as Gm}from"cli-spinner";var bt;(function(t){t.successHex=mt.hex("#39A845"),t.warningHex=mt.hex("#FFD02E"),t.errorHex=mt.hex("#B5332E"),t.syncHex=mt.hex("#3073B7"),t.greyHex=mt.hex("#BEBDBD"),t.indigoHex=mt.hex("#3950A0"),t.pinkHex=mt.hex("#D8A1C4"),t.normal=e=>{console.log(mt.white(e))},t.syncSpinner=e=>{let o=new Gm(mt.white(e)+` %s
557
557
  `);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
558
  ${e}`),console.log(`${o}`),console.log(`${n}`),console.log(`${s}`),console.log(`${a}`),console.log(`${i}
559
559
  `),console.log(`Solc Version: v${ue}
@@ -577,10 +577,10 @@ $ solc mt -p <fileSystem>
577
577
  $ solc umt -p <fileSystem>
578
578
  `,s=`mount reload
579
579
  $ solc mtr
580
- `;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(Dt||(Dt={}));import at from"chalk";import{spawnSync as zm}from"node:child_process";import{existsSync as Wm,readFileSync as qm}from"node:fs";import{homedir as Qm}from"node:os";import Xm from"node:path";var eo=Xm.join(Qm(),".config","solana","cli","config.yml"),Zm=r(()=>{let t=zm("solana config get",{shell:!0,stdio:"pipe",encoding:"utf-8"});if(!t.error&&t.status===0)return t.stdout&&process.stdout.write(t.stdout),t.stderr&&process.stderr.write(t.stderr),!0;let e=t.error?.message||t.stderr?.toString().trim()||t.stdout?.toString().trim(),o=e?`Unable to run 'solana config get' (${e}). Falling back to the config file on disk.`:"Unable to run 'solana config get'. Falling back to the config file on disk.";return console.log(at.yellow(o)),!1},"showSolanaCliConfig"),tp=r(()=>{if(!Wm(eo)){console.log(at.yellow(`Solana CLI config file not found at ${eo}.`));return}console.log(at.white(`Solana CLI config (${eo}):`));let t=qm(eo,"utf-8").trim();console.log(t.length>0?t:at.gray("(empty)"))},"showSolanaCliConfigFromDisk"),oo=r(()=>{Zm()||tp();let t=ut();console.log(at.white("start-validator.sh: ")+t.scriptPath),console.log(at.white("service unit: ")+x.SOL_SERVICE),console.log(at.white("logrotate: ")+x.SOL_LOGROTATE),console.log(at.white("sysctl.d: ")+x.SOL_SYSTEM_CONFIG21),console.log(at.white("limits.d: ")+x.SOL_NOFILES_CONF),console.log(at.white("system.conf: ")+x.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as ep}from"node:child_process";import op from"chalk";var Ds=r(t=>{let{minDownloadSpeed:e,maxLatency:o,snapshotPath:n}=t;try{console.log(op.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(" && ");ep(s,{shell:!0,stdio:"inherit"})}catch(s){throw new Error(`runSnapshotFinder Error: ${s}`)}},"runSnapshotFinder");import{spawnSync as Us}from"node:child_process";import rp from"chalk";var Ms=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?tt:et;t.NODE_TYPE===g.RPC&&(o=gt);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=Ks();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=Us(s,{shell:!0,stdio:"pipe"});console.log(rp.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=bs();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;De(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=>{Ds({minDownloadSpeed:s.minDownloadSpeed,maxLatency:s.maxLatency,snapshotPath:s.snapshotPath})}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${D()} --ledger /mnt/ledger/ contact-info`;Us(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{oo()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{Dt.solvAA(),s.client?Dt.installClientMessage():Dt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as np}from"node:child_process";var Fs=r(()=>{np("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as sp}from"node:child_process";var Hs=r(()=>{sp("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as ap}from"node:child_process";var js=r(()=>{ap("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as ip}from"node:child_process";var Ys=r(()=>{ip("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as cp}from"node:child_process";var Bs=r((t=!1)=>{cp(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import Vo from"chalk";import{spawnSync as mp}from"child_process";import{spawnSync as lp}from"node:child_process";var Js=r(()=>{lp("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Gs=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{Fs()}),t.command("start").description("Start Relayer").action(()=>{Hs()}),t.command("stop").description("Stop Relayer").action(()=>{js()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{Bs(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{Ys()}),t.command("enable").description("Enable Relayer").action(()=>{Js()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(Vo.red("Please provide a URL"));return}let o=`${D()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(Vo.white("Setting Relayer URL ...")),mp(o,{shell:!0,stdio:"inherit"}),console.log(Vo.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");import{writeFile as pp,mkdir as dp}from"fs/promises";import{existsSync as zs}from"fs";import up from"path";import $o from"chalk";var fp=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(`,
580
+ `;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(bt||(bt={}));import at from"chalk";import{spawnSync as zm}from"node:child_process";import{existsSync as Wm,readFileSync as qm}from"node:fs";import{homedir as Qm}from"node:os";import Xm from"node:path";var eo=Xm.join(Qm(),".config","solana","cli","config.yml"),Zm=r(()=>{let t=zm("solana config get",{shell:!0,stdio:"pipe",encoding:"utf-8"});if(!t.error&&t.status===0)return t.stdout&&process.stdout.write(t.stdout),t.stderr&&process.stderr.write(t.stderr),!0;let e=t.error?.message||t.stderr?.toString().trim()||t.stdout?.toString().trim(),o=e?`Unable to run 'solana config get' (${e}). Falling back to the config file on disk.`:"Unable to run 'solana config get'. Falling back to the config file on disk.";return console.log(at.yellow(o)),!1},"showSolanaCliConfig"),tp=r(()=>{if(!Wm(eo)){console.log(at.yellow(`Solana CLI config file not found at ${eo}.`));return}console.log(at.white(`Solana CLI config (${eo}):`));let t=qm(eo,"utf-8").trim();console.log(t.length>0?t:at.gray("(empty)"))},"showSolanaCliConfigFromDisk"),oo=r(()=>{Zm()||tp();let t=ut();console.log(at.white("start-validator.sh: ")+t.scriptPath),console.log(at.white("service unit: ")+x.SOL_SERVICE),console.log(at.white("logrotate: ")+x.SOL_LOGROTATE),console.log(at.white("sysctl.d: ")+x.SOL_SYSTEM_CONFIG21),console.log(at.white("limits.d: ")+x.SOL_NOFILES_CONF),console.log(at.white("system.conf: ")+x.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as ep}from"node:child_process";import op from"chalk";var bs=r(t=>{let{minDownloadSpeed:e,maxLatency:o,snapshotPath:n}=t;try{console.log(op.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(" && ");ep(s,{shell:!0,stdio:"inherit"})}catch(s){throw new Error(`runSnapshotFinder Error: ${s}`)}},"runSnapshotFinder");import{spawnSync as Us}from"node:child_process";import rp from"chalk";var Ms=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?tt:et;t.NODE_TYPE===g.RPC&&(o=gt);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=Ks();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=Us(s,{shell:!0,stdio:"pipe"});console.log(rp.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Ds();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=`${b()} --ledger /mnt/ledger/ contact-info`;Us(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{oo()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{bt.solvAA(),s.client?bt.installClientMessage():bt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as np}from"node:child_process";var Fs=r(()=>{np("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as sp}from"node:child_process";var js=r(()=>{sp("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as ap}from"node:child_process";var Hs=r(()=>{ap("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as ip}from"node:child_process";var Ys=r(()=>{ip("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as cp}from"node:child_process";var Bs=r((t=!1)=>{cp(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import Vo from"chalk";import{spawnSync as mp}from"child_process";import{spawnSync as lp}from"node:child_process";var Js=r(()=>{lp("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Gs=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{Fs()}),t.command("start").description("Start Relayer").action(()=>{js()}),t.command("stop").description("Stop Relayer").action(()=>{Hs()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{Bs(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{Ys()}),t.command("enable").description("Enable Relayer").action(()=>{Js()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(Vo.red("Please provide a URL"));return}let o=`${b()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(Vo.white("Setting Relayer URL ...")),mp(o,{shell:!0,stdio:"inherit"}),console.log(Vo.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");import{writeFile as pp,mkdir as dp}from"fs/promises";import{existsSync as zs}from"fs";import up from"path";import $o from"chalk";var fp=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
581
  `);o=o.replace(/authorized_voter_paths\s*=\s*\[[\s\S]*?\]/,`authorized_voter_paths = [
582
582
  ${n}
583
- ]`)}return e.blockEngineUrl&&(o=o.replace(/url\s*=\s*\"[^\"]*\"/,`url = "${e.blockEngineUrl}"`)),o},"renderWithOverrides"),Ws=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(z).join("|")})`).action(async e=>{let o=await v(),n=e.network||o.NETWORK,s=o.FRANKENDANCER_BLOCK_ENGINE_URL,a=n===u.MAINNET?je({blockEngineUrl:s}):He(),i;if(e.jitoRegion){let d=e.jitoRegion,p=z[d];if(!p){console.log($o.red(`Invalid --jito-region '${e.jitoRegion}'. Choose one of: ${Object.keys(z).join(", ")}`));return}i=p.BLOCK_ENGINE_URL}let c=fp(a.body,{identity:e.identity,vote:e.vote,auth:e.auth,blockEngineUrl:i});if(e.dryRun){console.log(c);return}let l=e.out||a.filePath,m=up.dirname(l);if(zs(m)||await dp(m,{recursive:!0}),zs(l)&&!e.force){console.log($o.red(`File exists: ${l}. Use --force to overwrite or --dry-run to preview`));return}await pp(l,c),console.log($o.green(`Wrote Firedancer config: ${l}`))})},"firedancerCommands");import qs from"chalk";import{spawnSync as hp}from"child_process";var Qs=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;hp(e,{shell:!0,stdio:"inherit"})}catch{console.log(qs.yellow(`You might need to install the Solana SPL CLI:
583
+ ]`)}return e.blockEngineUrl&&(o=o.replace(/url\s*=\s*\"[^\"]*\"/,`url = "${e.blockEngineUrl}"`)),o},"renderWithOverrides"),Ws=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(z).join("|")})`).action(async e=>{let o=await v(),n=e.network||o.NETWORK,s=o.FRANKENDANCER_BLOCK_ENGINE_URL,a=n===u.MAINNET?He({blockEngineUrl:s}):je(),i;if(e.jitoRegion){let d=e.jitoRegion,p=z[d];if(!p){console.log($o.red(`Invalid --jito-region '${e.jitoRegion}'. Choose one of: ${Object.keys(z).join(", ")}`));return}i=p.BLOCK_ENGINE_URL}let c=fp(a.body,{identity:e.identity,vote:e.vote,auth:e.auth,blockEngineUrl:i});if(e.dryRun){console.log(c);return}let l=e.out||a.filePath,m=up.dirname(l);if(zs(m)||await dp(m,{recursive:!0}),zs(l)&&!e.force){console.log($o.red(`File exists: ${l}. Use --force to overwrite or --dry-run to preview`));return}await pp(l,c),console.log($o.green(`Wrote Firedancer config: ${l}`))})},"firedancerCommands");import qs from"chalk";import{spawnSync as hp}from"child_process";var Qs=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;hp(e,{shell:!0,stdio:"inherit"})}catch{console.log(qs.yellow(`You might need to install the Solana SPL CLI:
584
584
  `)),console.log(qs.white("$ cargo install spl-token-cli"))}},"splBalance");import{homedir as Sp}from"os";import{spawnSync as yp}from"child_process";var ht=r(t=>{let e=`solana balance --keypair ${t}`,{stdout:o}=yp(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolBalance");import Tp from"chalk";import{spawnSync as gp}from"node:child_process";var Xs=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 Qs(n),process.exit(0)}await Ep(t),process.exit(0)})},"balanceCommands"),Ep=r(async t=>{let e=wp(t),o=`Validator Key: ${e.validatorKey}
585
585
  Address: ${e.validatorKeyAddress}
586
586
  Balance: ${e.validatorKeyBalance}
@@ -593,17 +593,17 @@ Balance: ${e.authorityKeyBalance}
593
593
  Active Identity:`;t.NODE_TYPE===g.RPC&&(o=`Validator Key: ${e.validatorKey}
594
594
  Address: ${e.validatorKeyAddress}
595
595
  Balance: ${e.validatorKeyBalance}
596
- Active Identity:`),console.log(Tp.white(o)),gp(`solana-keygen pubkey ${k}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),wp=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===g.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ht(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:ht(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:ht(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:ht(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ht(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:ht(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:ht(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as Ap}from"child_process";var Zs=r(()=>{Ap("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as ta}from"node:child_process";var ea=r(()=>{ta("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),ta("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as _p}from"node:child_process";var oa=r(t=>{let o=`${D()} --ledger ${y} monitor`;_p(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as Np}from"node:child_process";var ra=r(()=>{Np("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import ro from"inquirer";import{execSync as no,spawnSync as Ko}from"child_process";import ce from"chalk";import{homedir as Op}from"os";var na=1e3,bo;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(bo||(bo={}));var so;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(so||(so={}));var kp=Object.values(bo),sa=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(ce.blue(`\u2728 Coming Soon
596
+ Active Identity:`),console.log(Tp.white(o)),gp(`solana-keygen pubkey ${k}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),wp=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===g.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ht(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:ht(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:ht(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:ht(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ht(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:ht(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:ht(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as Ap}from"child_process";var Zs=r(()=>{Ap("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as ta}from"node:child_process";var ea=r(()=>{ta("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),ta("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as _p}from"node:child_process";var oa=r(t=>{let o=`${b()} --ledger ${y} monitor`;_p(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as Np}from"node:child_process";var ra=r(()=>{Np("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import ro from"inquirer";import{execSync as no,spawnSync as Ko}from"child_process";import ce from"chalk";import{homedir as Op}from"os";var na=1e3,Do;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(Do||(Do={}));var so;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(so||(so={}));var kp=Object.values(Do),sa=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(ce.blue(`\u2728 Coming Soon
597
597
  This Feature is Currently Under Development
598
598
  Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await Rp(),a="0";try{let p=Ko(`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(ce.red(`\u274C To Wallet is Invalid
599
599
  Please Check the Wallet Address`)),process.exit(0)}let i=no(`solana balance ${n} --url ${t.RPC_URL}`).toString();console.log(ce.white(`\u{1F3E6} From Wallet: ${n}
600
600
  \u{1F4B0} Balance: ${i}`)),console.log(ce.white(`\u{1F3E6} To Wallet: ${s}
601
601
  \u{1F4B0} Balance: ${a}`));let{amount:c}=await ro.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=Ko(l,{shell:!0,stdio:"inherit"}),d=he;for(;m.status!==0&&d>0;)console.log(ce.red(`\u274C Transaction Failed
602
602
  Retrying Transaction in ${na}ms
603
- Retries Left: ${d}`)),await nt(na),m=Ko(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),le=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),Rp=r(async()=>{let t=Op(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=no(`solana address -k ${n}`).toString().trim(),a=await ro.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:kp}]),i=a.from==="Validator Account"?Object.values(so).filter(p=>p!=="Validator Account"):Object.values(so).filter(p=>p!=="Authority Account");if((await ro.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:p}=await ro.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:le}]);s=p}else{let p=a.from==="Validator Account"?e:o;n=`${t}/${p}`,s=no(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,m=`${t}/${l}`,d=no(`solana address -k ${m}`).toString().trim();return{fromWalletPath:m,fromAddress:d,toAddress:s}},"selectFromKeypairs");import aa from"chalk";import vp from"inquirer";import{execSync as Do,spawnSync as Cp}from"node:child_process";var ia=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?_e: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=Do(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,m=Number(c)-.03;if(e)l=m;else{console.log(aa.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(aa.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let T=await vp.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${m}`,default:String(m)}]);l=Number(T.sol)}let d=Do(`solana address --keypair ${i}`).toString().trim(),p=Do(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${p} ${l} --authorized-withdrawer ${a} --url ${n}`;Cp(f,{shell:!0,stdio:"inherit"})},"withdraw");var ca=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 ia(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as Hp,spawnSync as jp}from"node:child_process";import{BN as ma}from"bn.js";import{LAMPORTS_PER_SOL as Uo}from"@solana/web3.js";import{Connection as xp,LAMPORTS_PER_SOL as Vp}from"@solana/web3.js";import{Keypair as Ip}from"@solana/web3.js";import{readFile as Lp}from"fs/promises";var Pp=r(async t=>{let e=JSON.parse(await Lp(t,"utf8"));return Ip.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),la=Pp;import{homedir as $p}from"os";var Y;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(Y||(Y={}));var Kp={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},bp=r(async(t,e="auth",o=!1)=>{let n=new xp(t),s=$p(),a=A(s),c=`${o?"testnet":"mainnet"}${Kp[e]}`,l=a[c],m=await la(l),d=await n.getBalance(m.publicKey),f=Number(d)/Vp;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),it=bp;var Dp=new ma(3*Uo),pa=r(async t=>{let e=await it(t,Y.VALIDATOR),n=new ma(Number(Number(e)*Uo)).sub(Dp),s=Number(n)/Uo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import me from"chalk";import{Keypair as Up,Connection as Mp,PublicKey as Fp,SystemProgram as da,ComputeBudgetProgram as ao,VersionedTransaction as ua,TransactionMessage as fa}from"@solana/web3.js";var ha=r(async(t,e,o,n)=>{let s=0;try{let a=new Mp(t,"finalized"),i=Up.fromSecretKey(new Uint8Array(Array.from(e))),c=new Fp(o),l=n;for(;;)try{let m=[da.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),ao.setComputeUnitLimit({units:2e5}),ao.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),p=new ua(new fa({instructions:m,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(p,{replaceRecentBlockhash:!0,sigVerify:!1});p.sign([i]);let T=[da.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),ao.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),ao.setComputeUnitPrice({microLamports:1e3})],w=new ua(new fa({instructions:T,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let N=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:N},"finalized"),console.log("finalized signature:",N),N}catch(m){if(s++,s>he)throw new Error(JSON.stringify(m));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${m}`),await nt(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as Yp}from"fs/promises";import{LAMPORTS_PER_SOL as Bp}from"@solana/web3.js";var Mo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await it(t,Y.VOTE)<1?(console.log(me.white("Vote Account Balance is less than 1 SOL")),console.log(me.white("Skip withdrawing SOL from Vote Account to Authority Account"))):jp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await pa(t);console.log(me.white(`Transferable Balance: ${s} SOL`));let a=s*Bp;if(s<1)console.log(me.white("Validator Account Balance is less than 1 SOL")),console.log(me.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=Hp(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await Yp(o,"utf-8"));await ha(t,c,i,a)}return!0},"collectSOL");import{readFile as od}from"fs/promises";import rd from"inquirer";import Fo from"chalk";import{execSync as Jp}from"child_process";import{homedir as Gp}from"os";var zp=r(async t=>{try{let e=Gp(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${rt} --owner ${o} --url ${t}`,s=Jp(n).toString().trim();return Number(s)}catch(e){return console.log(Fo.red(`Error: ${e}`)),console.log(Fo.yellow(`You might need to install the Solana SPL CLI:
604
- `)),console.log(Fo.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),ya=zp;import lo from"chalk";import{Connection as Wp,PublicKey as Sa,Keypair as qp,ComputeBudgetProgram as io,VersionedTransaction as Ta,TransactionMessage as ga}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as Ea,createTransferInstruction as wa,TOKEN_PROGRAM_ID as Aa}from"@solana/spl-token";var _a=r(async(t,e,o,n,s,a)=>{try{let i=new Wp(t,"finalized"),c=qp.fromSecretKey(new Uint8Array(e)),l=new Sa(o),m=new Sa(s),d=Math.trunc(n*Math.pow(10,a)),p=await Ea(i,c,m,c.publicKey),f=await Ea(i,c,m,l,!0);for(;;)try{let T=[wa(p.address,f.address,c.publicKey,d,[],Aa),io.setComputeUnitLimit({units:2e5}),io.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),N=new Ta(new ga({instructions:T,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),O=await i.simulateTransaction(N,{replaceRecentBlockhash:!0,sigVerify:!1});N.sign([c]);let W=[wa(p.address,f.address,c.publicKey,d,[],Aa),io.setComputeUnitLimit({units:O.value.unitsConsumed?Math.trunc(O.value.unitsConsumed*1.2):2e5}),io.setComputeUnitPrice({microLamports:1e3})],$=new Ta(new ga({instructions:W,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());$.sign([c]);let Rt=await i.sendRawTransaction($.serialize());return await i.confirmTransaction({...w.value,signature:Rt},"finalized"),console.log("finalized signature:",Rt),Rt}catch(T){console.error("Transfer failed, retrying...",T)}}catch(i){throw console.error(i),i}},"transferSPLToken");import co from"inquirer";import{spawnSync as Na}from"child_process";import Ho from"chalk";import{promises as Oa}from"fs";var Qp=r(async(t="epochTimer")=>{try{let e=Na("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log(Ho.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
603
+ Retries Left: ${d}`)),await nt(na),m=Ko(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),le=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),Rp=r(async()=>{let t=Op(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=no(`solana address -k ${n}`).toString().trim(),a=await ro.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:kp}]),i=a.from==="Validator Account"?Object.values(so).filter(p=>p!=="Validator Account"):Object.values(so).filter(p=>p!=="Authority Account");if((await ro.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:p}=await ro.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:le}]);s=p}else{let p=a.from==="Validator Account"?e:o;n=`${t}/${p}`,s=no(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,m=`${t}/${l}`,d=no(`solana address -k ${m}`).toString().trim();return{fromWalletPath:m,fromAddress:d,toAddress:s}},"selectFromKeypairs");import aa from"chalk";import vp from"inquirer";import{execSync as bo,spawnSync as Cp}from"node:child_process";var ia=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?_e: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=bo(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,m=Number(c)-.03;if(e)l=m;else{console.log(aa.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(aa.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let T=await vp.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${m}`,default:String(m)}]);l=Number(T.sol)}let d=bo(`solana address --keypair ${i}`).toString().trim(),p=bo(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${p} ${l} --authorized-withdrawer ${a} --url ${n}`;Cp(f,{shell:!0,stdio:"inherit"})},"withdraw");var ca=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 ia(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as jp,spawnSync as Hp}from"node:child_process";import{BN as ma}from"bn.js";import{LAMPORTS_PER_SOL as Uo}from"@solana/web3.js";import{Connection as xp,LAMPORTS_PER_SOL as Vp}from"@solana/web3.js";import{Keypair as Ip}from"@solana/web3.js";import{readFile as Lp}from"fs/promises";var Pp=r(async t=>{let e=JSON.parse(await Lp(t,"utf8"));return Ip.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),la=Pp;import{homedir as $p}from"os";var Y;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(Y||(Y={}));var Kp={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},Dp=r(async(t,e="auth",o=!1)=>{let n=new xp(t),s=$p(),a=A(s),c=`${o?"testnet":"mainnet"}${Kp[e]}`,l=a[c],m=await la(l),d=await n.getBalance(m.publicKey),f=Number(d)/Vp;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),it=Dp;var bp=new ma(3*Uo),pa=r(async t=>{let e=await it(t,Y.VALIDATOR),n=new ma(Number(Number(e)*Uo)).sub(bp),s=Number(n)/Uo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import me from"chalk";import{Keypair as Up,Connection as Mp,PublicKey as Fp,SystemProgram as da,ComputeBudgetProgram as ao,VersionedTransaction as ua,TransactionMessage as fa}from"@solana/web3.js";var ha=r(async(t,e,o,n)=>{let s=0;try{let a=new Mp(t,"finalized"),i=Up.fromSecretKey(new Uint8Array(Array.from(e))),c=new Fp(o),l=n;for(;;)try{let m=[da.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),ao.setComputeUnitLimit({units:2e5}),ao.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),p=new ua(new fa({instructions:m,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(p,{replaceRecentBlockhash:!0,sigVerify:!1});p.sign([i]);let T=[da.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),ao.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),ao.setComputeUnitPrice({microLamports:1e3})],w=new ua(new fa({instructions:T,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let N=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:N},"finalized"),console.log("finalized signature:",N),N}catch(m){if(s++,s>he)throw new Error(JSON.stringify(m));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${m}`),await nt(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as Yp}from"fs/promises";import{LAMPORTS_PER_SOL as Bp}from"@solana/web3.js";var Mo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await it(t,Y.VOTE)<1?(console.log(me.white("Vote Account Balance is less than 1 SOL")),console.log(me.white("Skip withdrawing SOL from Vote Account to Authority Account"))):Hp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await pa(t);console.log(me.white(`Transferable Balance: ${s} SOL`));let a=s*Bp;if(s<1)console.log(me.white("Validator Account Balance is less than 1 SOL")),console.log(me.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=jp(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await Yp(o,"utf-8"));await ha(t,c,i,a)}return!0},"collectSOL");import{readFile as od}from"fs/promises";import rd from"inquirer";import Fo from"chalk";import{execSync as Jp}from"child_process";import{homedir as Gp}from"os";var zp=r(async t=>{try{let e=Gp(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${rt} --owner ${o} --url ${t}`,s=Jp(n).toString().trim();return Number(s)}catch(e){return console.log(Fo.red(`Error: ${e}`)),console.log(Fo.yellow(`You might need to install the Solana SPL CLI:
604
+ `)),console.log(Fo.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),ya=zp;import lo from"chalk";import{Connection as Wp,PublicKey as Sa,Keypair as qp,ComputeBudgetProgram as io,VersionedTransaction as Ta,TransactionMessage as ga}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as Ea,createTransferInstruction as wa,TOKEN_PROGRAM_ID as Aa}from"@solana/spl-token";var _a=r(async(t,e,o,n,s,a)=>{try{let i=new Wp(t,"finalized"),c=qp.fromSecretKey(new Uint8Array(e)),l=new Sa(o),m=new Sa(s),d=Math.trunc(n*Math.pow(10,a)),p=await Ea(i,c,m,c.publicKey),f=await Ea(i,c,m,l,!0);for(;;)try{let T=[wa(p.address,f.address,c.publicKey,d,[],Aa),io.setComputeUnitLimit({units:2e5}),io.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),N=new Ta(new ga({instructions:T,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),O=await i.simulateTransaction(N,{replaceRecentBlockhash:!0,sigVerify:!1});N.sign([c]);let W=[wa(p.address,f.address,c.publicKey,d,[],Aa),io.setComputeUnitLimit({units:O.value.unitsConsumed?Math.trunc(O.value.unitsConsumed*1.2):2e5}),io.setComputeUnitPrice({microLamports:1e3})],$=new Ta(new ga({instructions:W,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());$.sign([c]);let Rt=await i.sendRawTransaction($.serialize());return await i.confirmTransaction({...w.value,signature:Rt},"finalized"),console.log("finalized signature:",Rt),Rt}catch(T){console.error("Transfer failed, retrying...",T)}}catch(i){throw console.error(i),i}},"transferSPLToken");import co from"inquirer";import{spawnSync as Na}from"child_process";import jo from"chalk";import{promises as Oa}from"fs";var Qp=r(async(t="epochTimer")=>{try{let e=Na("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log(jo.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
605
605
  `).filter(a=>!a.includes(t)).join(`
606
- `),s="/tmp/temp_crontab";await Oa.writeFile(s,n,"utf-8"),Na("crontab",[s]),await Oa.unlink(s),console.log(Ho.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(Ho.red("Error removing cron job:",e))}},"removeCronJob"),ka=Qp;import Ra from"chalk";var Xp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await co.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 Je()&&await ka(),await _({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
606
+ `),s="/tmp/temp_crontab";await Oa.writeFile(s,n,"utf-8"),Na("crontab",[s]),await Oa.unlink(s),console.log(jo.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(jo.red("Error removing cron job:",e))}},"removeCronJob"),ka=Qp;import Ra from"chalk";var Xp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await co.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 Je()&&await ka(),await _({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
607
607
  ${Ra.green("No more Login to the server to update \u{1F331}")}
608
608
 
609
609
  If you enable this, solc will update automatically when the solc/solana version is updated.
@@ -612,7 +612,7 @@ AUTO UPDATE: If you enable this, solc will update automatically when the solc ve
612
612
 
613
613
  AUTO RESTART: If you enable this, solc will restart automatically when the solana version is updated.
614
614
  \u203B Please turn off if you are using no-downtime migration.
615
- `;console.log(Ra.white(n));let s=await co.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 co.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await co.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:le}]);i=l.harvestAddress,a=l.rpcUrl}return await _({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"),va=Xp;import{spawnSync as nd}from"node:child_process";import{Connection as ed}from"@solana/web3.js";import{Connection as Zp}from"@solana/web3.js";var td=r(async(t,e=10,o=.4)=>{try{let s=await new Zp(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"),Ca=td;var jo=r(async t=>{try{let o=await new ed(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await Ca(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 sd=.03,Ia=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await ad(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await Mo(t.RPC_URL);let n=await it(t.RPC_URL,Y.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await nt(1e3),await Mo(t.RPC_URL),n=await it(t.RPC_URL,Y.VOTE),s++;let a=JSON.parse(await od(o,"utf-8")),i=await it(t.RPC_URL,Y.AUTH);if(i<1)console.log(lo.white("Authority Account Balance is less than 1 SOL")),console.log(lo.white("Skip converting SOL to elSOL"));else{let l=i-sd;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await Xe(t.RPC_URL,G,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await ya(t.RPC_URL);if(c<1){let l=await jo(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 V(m),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await _a(t.RPC_URL,a,e,c,rt,Or),t.IS_MEV_MODE){let m=`\u{1F4B0} Harvested Rewards for ${(await jo(t.RPC_URL)).epoch} \u{1F4B0}
615
+ `;console.log(Ra.white(n));let s=await co.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 co.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await co.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:le}]);i=l.harvestAddress,a=l.rpcUrl}return await _({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"),va=Xp;import{spawnSync as nd}from"node:child_process";import{Connection as ed}from"@solana/web3.js";import{Connection as Zp}from"@solana/web3.js";var td=r(async(t,e=10,o=.4)=>{try{let s=await new Zp(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"),Ca=td;var Ho=r(async t=>{try{let o=await new ed(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await Ca(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 sd=.03,Ia=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await ad(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await Mo(t.RPC_URL);let n=await it(t.RPC_URL,Y.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await nt(1e3),await Mo(t.RPC_URL),n=await it(t.RPC_URL,Y.VOTE),s++;let a=JSON.parse(await od(o,"utf-8")),i=await it(t.RPC_URL,Y.AUTH);if(i<1)console.log(lo.white("Authority Account Balance is less than 1 SOL")),console.log(lo.white("Skip converting SOL to elSOL"));else{let l=i-sd;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await Xe(t.RPC_URL,G,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await ya(t.RPC_URL);if(c<1){let l=await Ho(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 V(m),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await _a(t.RPC_URL,a,e,c,rt,Or),t.IS_MEV_MODE){let m=`\u{1F4B0} Harvested Rewards for ${(await Ho(t.RPC_URL)).epoch} \u{1F4B0}
616
616
  Validator Address: ${E(o)}
617
617
  Total Reward: ${c} elSOL
618
618
  Harvest Address: ${e}`;await V(m)}console.log(lo.green("\u2714\uFE0E Successfully Harvested SOL")),process.exit(0)}),h.command("auto").alias("mev").description("Enable Auto Operation Mode").action(async()=>{await va(t)&&(nd("solc cron epoch",{stdio:"inherit",shell:!0}),console.log(lo.green("\u2714\uFE0E Auto Operation Mode Enabled"))),process.exit(0)})},"harvestCommands"),ad=r(async t=>{try{let e=t.HARVEST_ACCOUNT;if(e==="")throw new Error("Harvest Address not found");return e}catch{let o=await rd.prompt([{type:"input",name:"harvestAddress",message:"Enter Harvest Address",validate:le}]);return await _({HARVEST_ACCOUNT:o.harvestAddress}),o.harvestAddress}},"getHarvestAddress");import{format as vd}from"@skeet-framework/utils";import{writeFile as id}from"fs/promises";var cd=r(async t=>{await id(Ae,JSON.stringify({...t},null,2),"utf-8")},"writeEpochDataToFile"),yt=cd;var ld=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===
@@ -628,20 +628,20 @@ CurrentEpoch: ${t.epoch}
628
628
  Epoch has been updated!
629
629
  Until Next Epoch: Approximately 2 days`;return await V(c),"Epoch has been updated!"},"newEpoch"),$a=yd;import{existsAsync as Sd}from"@skeet-framework/utils";import{readFile as Td,writeFile as gd}from"fs/promises";import Ed from"chalk";import{homedir as wd}from"os";var Ad=r(async()=>{let e=wd().includes("/home/solv")?Ae:"./currentEpoch.json";if(await Sd(e))return JSON.parse(await Td(e,"utf-8"));let o={epoch:0,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1};return await gd(e,JSON.stringify(o,null,2),"utf-8"),console.log(Ed.white("\u2714\uFE0F Initial epoch data has been created!")),o},"initOrReadEpochFile"),Ka=Ad;import _d from"chalk";var Nd=r(async t=>{let e=t.RPC_URL,o=t.NETWORK===u.TESTNET;if(o&&(e=Xo),await it(e,Y.VALIDATOR,o)<Ao){let{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?E(a):E(s),c=`\u26A0\uFE0F Validator Account Balance is less than ${Ao} SOL
630
630
  Please top up your Validator Account
631
- Address: ${i}`;return await V(c),!1}return console.log(_d.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),ba=Nd;async function Od(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(Od,"getNpmLatestVersion");var Da=Od;async function kd(){let t=Pt(),e=await Da();if(!e)throw new Error("Failed to get NPM API");return console.log("currentVersion:",t),console.log("latestVersion:",e),t===e}r(kd,"isVersionSame");var Ua=kd;import{spawnSync as Cd}from"child_process";import{spawnSync as Rd}from"node:child_process";var Ma=r(t=>{try{let e=`solana epoch-info --url '${t}'`,{stdout:o}=Rd(e,{shell:!0,stdio:"pipe"}),s=o.toString().split(`
631
+ Address: ${i}`;return await V(c),!1}return console.log(_d.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),Da=Nd;async function Od(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(Od,"getNpmLatestVersion");var ba=Od;async function kd(){let t=Pt(),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(kd,"isVersionSame");var Ua=kd;import{spawnSync as Cd}from"child_process";import{spawnSync as Rd}from"node:child_process";var Ma=r(t=>{try{let e=`solana epoch-info --url '${t}'`,{stdout:o}=Rd(e,{shell:!0,stdio:"pipe"}),s=o.toString().split(`
632
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,T=p[2]?parseInt(p[2]):0,w=p[3]?parseInt(p[3]):0,N=p[4]?parseInt(p[4]):0,O=f*24*60+T*60+w+Math.floor(N/60);return{epoch:c,day:f,hour:T,min:w,sec:N,totalMinutes:O,epochRemainingTime:m,epochCompletedPercent:i}}else throw new Error("Time information could not be parsed")}catch(e){throw new Error(`getEpochInfoByRust failed: ${e}`)}},"getEpochInfoByRust");var Id=r(async t=>{let e=t.NETWORK===u.TESTNET,o=e?_e:t.RPC_URL,n=vd(new Date,"yyyy-MM-dd HH:mm:ss");console.log(`Checking Epoch at ${n}`);let s=await Ka(),a=Ma(o),{mainnetValidatorVoteKey:i,testnetValidatorVoteKey:c}=A(),m=await qt(o,E(e?c:i));if(m.isActive||await V(`\u26A0\uFE0F Validator is not active!
633
633
  VoteAccount: ${m.pubkey}
634
634
  Reason: ${m.reason}
635
635
  Network: ${t.NETWORK}
636
- Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${m.isActive}`),await ba(t),!await Ua()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),Cd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await $a(a,t),"Epoch has been updated!";let p=a.totalMinutes,f=[Va,Pa,La];for(let T of f)if(await T(p,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),Fa=Id;var Ha=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await Fa(t),process.exit(0)})},"epochTimerCommands");import oi from"inquirer";import{join as Ja}from"path";import{spawnSync as Ft}from"node:child_process";import B from"chalk";import{spawnSync as Ld}from"node:child_process";var Pd=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=Ld(`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.
636
+ Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${m.isActive}`),await Da(t),!await Ua()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),Cd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await $a(a,t),"Epoch has been updated!";let p=a.totalMinutes,f=[Va,Pa,La];for(let T of f)if(await T(p,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),Fa=Id;var ja=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await Fa(t),process.exit(0)})},"epochTimerCommands");import oi from"inquirer";import{join as Ja}from"path";import{spawnSync as Ft}from"node:child_process";import B from"chalk";import{spawnSync as Ld}from"node:child_process";var Pd=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=Ld(`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
637
  $ ssh ${o}@${t}
638
638
 
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"),ja=Pd;import Ya from"chalk";var xd=r((t,e)=>{console.log(Ya.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=E(t).trim(),n=ja(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log(Ya.yellow(`\u26A0\uFE0F Destination Identity Key is different.
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"),Ha=Pd;import Ya from"chalk";var xd=r((t,e)=>{console.log(Ya.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=E(t).trim(),n=Ha(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log(Ya.yellow(`\u26A0\uFE0F Destination Identity Key is different.
640
640
  Please check your Validator
641
641
  $ ssh solv@${e}
642
642
 
643
643
  Local Identity Key: ${o}
644
- Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Mt=xd;var mo=Ja(I,Tt),Ba=Ja(I,St),Ga=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;s&&(a=P);let i=D();if(!Mt(a,t))return;console.log(B.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(Ft(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(B.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
644
+ Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Mt=xd;var mo=Ja(I,Tt),Ba=Ja(I,St),Ga=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;s&&(a=P);let i=b();if(!Mt(a,t))return;console.log(B.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(Ft(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(B.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
645
645
  $ ssh solv@${t}
646
646
 
647
647
  Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(B.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 ${mo}'`;if(Ft(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(B.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
@@ -658,38 +658,38 @@ Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(
658
658
  Failed Cmd: ${i} -l ${y} set-identity ${a}
659
659
  ln -sf ${a} ${k}`));return}if(Ft(`ln -sf ${a} ${k}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(B.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
660
660
 
661
- Failed Cmd: ln -sf ${a} ${k}`));return}console.log(B.white("\u{1F7E2} Identity changed successfully!")),await _({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as qa}from"path";import H from"chalk";import{spawnSync as Ht}from"node:child_process";var za=qa(I,Tt),Vd=qa(I,St),Wa="~/.ssh/id_rsa",Qa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;s&&(a=P);let i=D();if(!Mt(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 ${za}`,d=`ln -sf ${za} ${Vd}`,p=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,T=`ln -sf ${a} ${k}`;if(console.log(H.white("\u{1F7E2} Waiting for restart window...")),Ht(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(H.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
661
+ Failed Cmd: ln -sf ${a} ${k}`));return}console.log(B.white("\u{1F7E2} Identity changed successfully!")),await _({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as qa}from"path";import j from"chalk";import{spawnSync as jt}from"node:child_process";var za=qa(I,Tt),Vd=qa(I,St),Wa="~/.ssh/id_rsa",Qa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;s&&(a=P);let i=b();if(!Mt(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 ${za}`,d=`ln -sf ${za} ${Vd}`,p=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,T=`ln -sf ${a} ${k}`;if(console.log(j.white("\u{1F7E2} Waiting for restart window...")),jt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
662
662
 
663
- Failed Cmd: ${l}`));return}if(console.log(H.white("\u{1F7E2} Setting identity on the new validator...")),Ht(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(H.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
663
+ Failed Cmd: ${l}`));return}if(console.log(j.white("\u{1F7E2} Setting identity on the new validator...")),jt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
664
664
 
665
- Failed Cmd: ${m}`));return}if(console.log(H.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Ht(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(H.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
665
+ Failed Cmd: ${m}`));return}if(console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),jt(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
666
666
 
667
- Failed Cmd: ${d}`));return}if(console.log(H.white("\u{1F7E2} Uploading the tower file to the new validator...")),Ht(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(H.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your Validator
667
+ Failed Cmd: ${d}`));return}if(console.log(j.white("\u{1F7E2} Uploading the tower file to the new validator...")),jt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your Validator
668
668
 
669
- Failed Cmd: ${p}`));return}console.log(H.white("\u{1F7E2} Setting identity on the new validator..."));let $=`ssh -i ${Wa} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${f}'`;Ht($,{shell:!0,stdio:"inherit"}).status!==0&&console.log(H.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
669
+ Failed Cmd: ${p}`));return}console.log(j.white("\u{1F7E2} Setting identity on the new validator..."));let $=`ssh -i ${Wa} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${f}'`;jt($,{shell:!0,stdio:"inherit"}).status!==0&&console.log(j.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
670
670
  $ ssh solv@${t}
671
671
 
672
- Failed Cmd: ${f}`)),console.log(H.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Bt=`ssh -i ${Wa} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${T}'`;if(Ht(Bt,{shell:!0,stdio:"inherit"}).status!==0){console.log(H.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
672
+ Failed Cmd: ${f}`)),console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Bt=`ssh -i ${Wa} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${T}'`;if(jt(Bt,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
673
673
 
674
- Failed Cmd: ${T}`));return}console.log(H.white("\u{1F7E2} Identity changed successfully!")),await _({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as $d}from"node:child_process";function Xa(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return $d(e,{shell:!0,stdio:"inherit"}).status===0}r(Xa,"checkSSHConnection");import pe from"chalk";import{join as ti}from"path";import{spawnSync as jt}from"node:child_process";import J from"chalk";var po=ti(I,Tt),Za=ti(I,St),ei=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;if(s&&(a=P),!Mt(a,t))return;let c=Ct,l=It;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(jt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
674
+ Failed Cmd: ${T}`));return}console.log(j.white("\u{1F7E2} Identity changed successfully!")),await _({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as $d}from"node:child_process";function Xa(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return $d(e,{shell:!0,stdio:"inherit"}).status===0}r(Xa,"checkSSHConnection");import pe from"chalk";import{join as ti}from"path";import{spawnSync as Ht}from"node:child_process";import J from"chalk";var po=ti(I,Tt),Za=ti(I,St),ei=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===g.RPC,a=n?P:K;if(s&&(a=P),!Mt(a,t))return;let c=Ct,l=It;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(Ht(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
675
675
  $ ssh solv@${t}
676
676
 
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 ${po}'`;if(jt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
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 ${po}'`;if(Ht(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
678
678
  $ ssh solv@${t}
679
679
 
680
- Failed Cmd: ${c} -l ${y} set-identity ${po}`));return}if(console.log(J.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),jt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${po} ${Za}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
680
+ Failed Cmd: ${c} -l ${y} set-identity ${po}`));return}if(console.log(J.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Ht(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${po} ${Za}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
681
681
  $ ssh solv@${t}
682
682
 
683
- Failed Cmd: ln -sf ${po} ${Za}`));return}if(console.log(J.white("\u{1F7E2} Uploading the tower file to the new validator...")),jt(`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
683
+ Failed Cmd: ln -sf ${po} ${Za}`));return}if(console.log(J.white("\u{1F7E2} Uploading the tower file to the new validator...")),Ht(`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
684
  $ ssh solv@${t}
685
685
 
686
- 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...")),jt(`${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
686
+ 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...")),Ht(`${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
687
687
 
688
688
  Failed Cmd: ${l} -l ${y} set-identity ${a}
689
- ln -sf ${a} ${k}`));return}if(jt(`ln -sf ${a} ${k}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
689
+ ln -sf ${a} ${k}`));return}if(Ht(`ln -sf ${a} ${k}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
690
690
 
691
691
  Failed Cmd: ln -sf ${a} ${k}`));return}console.log(J.white("\u{1F7E2} Identity changed successfully!")),await _({IS_DUMMY:!1})},"changeIdentityIncomingV1toV2");var Kd=["Incoming","Outgoing"],ri=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===g.RPC,a=n?P:K;s&&(a=P);let i=E(a),c=o.switchType,l=o.ip;if(c===""||l===""){let d=await oi.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(!Kd.includes(c)){console.log(pe.yellow(`\u26A0\uFE0F Invalid Switch Type
692
- You can choose only Incoming or Outgoing`));return}if(!Xa(l)){console.log("SSH Connection Failed");return}if(c==="Incoming"){if(o.v2MigrateIncoming){(await oi.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(pe.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.log(pe.white("\u{1F7E2} Migrating V1 to V2 Incoming...")),await ei(l,i,e);return}await Ga(l,i,e)}else await Qa(l,i,e);process.exit(0)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(pe.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(pe.red(`Switch Error: ${n.message}`)),process.exit(0)}})},"switchCommand");import{spawnSync as bd}from"node:child_process";var Dd=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=bd(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"),ni=Dd;import Yt from"inquirer";import Gd from"dotenv";import kt from"chalk";var uo={SOL:{tokenMint:"So11111111111111111111111111111111111111112",associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},USDC:{tokenMint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},elSOL:{tokenMint:ho,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}},Yo={So11111111111111111111111111111111111111112:{symbol:"SOL",tokenMint:Se,associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:"USDC",tokenMint:Te,associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC:{symbol:"elSOL",tokenMint:ho,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 Fd}from"fs/promises";import{Connection as Hd,Keypair as jd,VersionedTransaction as Yd}from"@solana/web3.js";import M from"chalk";import Bd from"inquirer";import Jd from"dotenv";var Ud=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"),si=Ud;var Md=r(async(t,e,o,n)=>{try{let s=o.outputMint,a,i=nr[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"),ai=Md;Jd.config();var ii=r(async(t,e,o,n,s,a,i,c=!0)=>{let l=new Hd(t,"confirmed"),m=await si(e,o,s,a,i);if(typeof m=="string"){m.includes("Unauthorized")&&(console.error(M.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
692
+ You can choose only Incoming or Outgoing`));return}if(!Xa(l)){console.log("SSH Connection Failed");return}if(c==="Incoming"){if(o.v2MigrateIncoming){(await oi.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(pe.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.log(pe.white("\u{1F7E2} Migrating V1 to V2 Incoming...")),await ei(l,i,e);return}await Ga(l,i,e)}else await Qa(l,i,e);process.exit(0)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(pe.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(pe.red(`Switch Error: ${n.message}`)),process.exit(0)}})},"switchCommand");import{spawnSync as Dd}from"node:child_process";var bd=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=Dd(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"),ni=bd;import Yt from"inquirer";import Gd from"dotenv";import kt from"chalk";var uo={SOL:{tokenMint:"So11111111111111111111111111111111111111112",associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},USDC:{tokenMint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},elSOL:{tokenMint:ho,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}},Yo={So11111111111111111111111111111111111111112:{symbol:"SOL",tokenMint:Se,associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:"USDC",tokenMint:Te,associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC:{symbol:"elSOL",tokenMint:ho,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 Fd}from"fs/promises";import{Connection as jd,Keypair as Hd,VersionedTransaction as Yd}from"@solana/web3.js";import M from"chalk";import Bd from"inquirer";import Jd from"dotenv";var Ud=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"),si=Ud;var Md=r(async(t,e,o,n)=>{try{let s=o.outputMint,a,i=nr[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"),ai=Md;Jd.config();var ii=r(async(t,e,o,n,s,a,i,c=!0)=>{let l=new jd(t,"confirmed"),m=await si(e,o,s,a,i);if(typeof m=="string"){m.includes("Unauthorized")&&(console.error(M.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
693
693
  `)),console.log(M.white("Get Your API key \u{1F447}")),console.log(M.white(Jt+`
694
694
  `)),process.exit(0));let de=`${M.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
695
695
 
@@ -707,7 +707,7 @@ Validators Solutions: ${Jt}
707
707
  \u203B This quote is based on the current market rate and may change before the swap is completed.
708
708
  `;console.log(M.white(f)),console.log(M.gray(`You can also swap using the following command:
709
709
  $ solc swap --input ${s} --output ${a} --amount ${i} --skip-confirm
710
- `));let T=!1;c?T=(await Bd.prompt([{type:"confirm",name:"confirm",message:"Do you want to proceed with the swap?",default:!1}])).confirm:(console.log(M.cyan("Skipping confirmation...")),T=!0),T||(console.log(M.yellow("\u26A0\uFE0F Swap cancelled")),process.exit(0)),m||process.exit(0);let w=JSON.parse(await Fd(n,"utf8")),N=jd.fromSecretKey(new Uint8Array(Array.from(w))),O=await ai(e,o,m,N.publicKey.toString());if(typeof O=="string"){O.includes("Unauthorized")&&(console.error(M.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
710
+ `));let T=!1;c?T=(await Bd.prompt([{type:"confirm",name:"confirm",message:"Do you want to proceed with the swap?",default:!1}])).confirm:(console.log(M.cyan("Skipping confirmation...")),T=!0),T||(console.log(M.yellow("\u26A0\uFE0F Swap cancelled")),process.exit(0)),m||process.exit(0);let w=JSON.parse(await Fd(n,"utf8")),N=Hd.fromSecretKey(new Uint8Array(Array.from(w))),O=await ai(e,o,m,N.publicKey.toString());if(typeof O=="string"){O.includes("Unauthorized")&&(console.error(M.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
711
711
  `)),console.log(M.white("Get Your API key \u{1F447}")),console.log(M.white(Jt+`
712
712
  `)),process.exit(0));let de=`${M.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
713
713
 
@@ -724,5 +724,5 @@ Examples:
724
724
 
725
725
  Notes:
726
726
  - 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=ou(o,{shell:!0,stdio:"inherit"});process.exit(n.status??0)})},"pubkeyCommand");var h=new ru;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(ue,"-V","Display version");async function su(){try{let t=await v();Xn(t),os(t),ts(t),Ss(t),Wr(t),Qr(),rs(t),$s(t),Ms(t),ys(),as(),Wn(t),Xs(t),ns(),Gs(),sa(t),ca(t),Ia(t),Qn(),ci(h,t),Ha(t),ri(h,t),hi(),Ws(),yi(),h.command("rm:log").description("Remove Logs").action(()=>{Zs()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{ea()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(nu.white("\u{1F4DD} Creating Snapshot...")),ni(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{oa(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{ra()}),h.command("config").description("Show Solc Config").action(()=>{oo()}),h.command("vv").description("Show Solc Version").action(()=>{let e=Oe();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(su,"main");su();export{h as program};
727
+ - Defaults to "identity.json" in the current directory`).action(t=>{let o=`solana-keygen pubkey ${t.file||"identity.json"}`,n=ou(o,{shell:!0,stdio:"inherit"});process.exit(n.status??0)})},"pubkeyCommand");var h=new ru;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(ue,"-V","Display version");async function su(){try{let t=await v();Xn(t),os(t),ts(t),Ss(t),Wr(t),Qr(),rs(t),$s(t),Ms(t),ys(),as(),Wn(t),Xs(t),ns(),Gs(),sa(t),ca(t),Ia(t),Qn(),ci(h,t),ja(t),ri(h,t),hi(),Ws(),yi(),h.command("rm:log").description("Remove Logs").action(()=>{Zs()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{ea()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(nu.white("\u{1F4DD} Creating Snapshot...")),ni(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{oa(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{ra()}),h.command("config").description("Show Solc Config").action(()=>{oo()}),h.command("vv").description("Show Solc Version").action(()=>{let e=Oe();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(su,"main");su();export{h as program};
728
728
  //# sourceMappingURL=index.js.map