@ily-validator/solc 5.0.0 → 5.0.2
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/README.md +4 -4
- package/dist/index.js +88 -88
- package/dist/index.js.map +1 -1
- package/package.json +11 -4
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ii=Object.defineProperty;var r=(t,e)=>ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Ld}from"commander";var Uo="5.0.0";var Mo={name:"@ily-validator/solc",version:Uo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:"https://github.com/ikaika1/solc",keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var ce=Mo.version;var Mt="https://validators.solutions";var le="solc4.config.json";var ut="identity.json",ft="unstaked-identity.json",Fo="relayer-keypair.json",li="mainnet-validator-keypair.json",mi="mainnet-vote-account-keypair.json",pi="mainnet-authority-keypair.json",di="testnet-validator-keypair.json",ui="testnet-vote-account-keypair.json",fi="testnet-authority-keypair.json",v="/home/solc",O=`${v}/${ut}`,bd=`${v}/${ft}`,D=`${v}/${li}`,me=`${v}/${mi}`,Ud=`${v}/${pi}`,I=`${v}/${di}`,Ho=`${v}/${ui}`,Md=`${v}/${fi}`,G=`${v}/solana-validator.log`,z=v+"/start-validator.sh",y="/mnt/ledger",W="/mnt/accounts",Yo="solana-validator",jo="agave-validator",Bo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var pe=3,Jo="https://api.testnet.solana.com",Go="https://api.mainnet-beta.solana.com",zo="https://verify.validators.solutions/solc-migrate",Wo="https://jup.validators.solutions/v1/jup",ao;(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"})(ao||(ao={}));var qo=Object.values(ao),de="So11111111111111111111111111111111111111112",ue="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",io="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Qo="SOLV420",Xo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ti}from"child_process";import{spawnSync as hi}from"node:child_process";var yi=r(t=>{hi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Nt=yi;var Zo="agave-validator",Si=r(()=>{try{return Zo}catch(t){return console.error(t),Zo}},"getSolanaCLI"),K=Si;var fe=r(async t=>{Nt(t)},"updateVersion"),co=r(async(t,e=!1)=>{let o=K(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),Ti(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Mr from"chalk";var ht;(function(t){t.EN="en",t.JA="ja"})(ht||(ht={}));var tr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(tr||(tr={}));var er;(function(t){t.SINGLE="single",t.DOUBLE="double"})(er||(er={}));var ct;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(ct||(ct={}));var or;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(or||(or={}));var rr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(rr||(rr={}));var nr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(nr||(nr={}));var sr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(sr||(sr={}));var he;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(he||(he={}));var ye;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ye||(ye={}));var cr=!1,lr=!0,M={ID:"solc",LANG:ht.EN,USERNAME:"solc",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/solc/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},b={ROOT:"/home/solc",AUTHORIZED_KEYS:"/home/solc/.ssh/authorized_keys"},k={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},q={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},P={SOL_SERVICE:"/etc/systemd/system/solc.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/solc/.local/share/solana/install"},C={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${C.MAINNET_VALIDATOR_KEY}`,n=`${e}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${C.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${C.TESTNET_VALIDATOR_KEY}`,i=`${e}/${C.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${C.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),lt=r((t=!0)=>{let e=t?`${b.ROOT}/${C.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${C.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${C.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${C.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${q.LOG}`,s=k.ACCOUNTS,a=k.LEDGER,i=`${b.ROOT}/${q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",lo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",mr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",pr=9,Q="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",dr="So11111111111111111111111111111111111111112",ur="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",fr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ar;(function(t){t[t.ELSOL=Q]="ELSOL",t[t.SOL=dr]="SOL",t[t.USDC=ur]="USDC",t[t.EPCT=fr]="EPCT"})(ar||(ar={}));var ir;(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"})(ir||(ir={}));var eu={[dr]:9,[Q]:9,[ur]:6,[fr]:6},Se="/home/solc/currentEpoch.json",mo=.5,Te="https://api.testnet.solana.com";import{spawnSync as po}from"child_process";var hr=r(()=>{po("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;po(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),po("pnpm add -g @ily-validatro/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var nt={version:"1.18.23",tag:"v1.18.23-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"},uo={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 Ei}from"child_process";var Ee=r((t=nt.tag)=>{Ei(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as gi,writeFile as wi}from"fs/promises";import{homedir as Ai}from"os";var Ft=r(async t=>{let o=`${Ai()}/${q.JITO_CONFIG}`,s={...JSON.parse(await gi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await wi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as yr}from"child_process";import _i from"inquirer";var Sr=r((t,e=!0)=>{let o=e?"/home/solc/testnet-validator-keypair.json":"/home/solc/mainnet-validator-keypair.json",n=e?"/home/solc/testnet-vote-account-keypair.json":"/home/solc/mainnet-vote-account-keypair.json";yr(`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}`;yr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Tr=r(async()=>await _i.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ht}from"@skeet-framework/utils";import Ni from"chalk";import Oi from"inquirer";var Er=r(async()=>{let t=await Oi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ht("sudo ufw delete allow 8899/udp"),await Ht("sudo ufw delete allow 8899/tcp"),await Ht(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Ht(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Ht("sudo ufw reload"),console.log(Ni.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ki=r(()=>Uo,"getSolvVersion"),Ot=ki;import{readFile as vi,writeFile as Ii}from"fs/promises";import{existsAsync as Pi}from"@skeet-framework/utils";var fo;(function(t){t.EN="en",t.JA="ja"})(fo||(fo={}));var vu=Object.values(fo),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var gr=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var wr=Object.values(T),E;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(E||(E={}));var Iu=Object.values(E).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Ar=Object.values($).filter(t=>t!=="none"),X;(function(t){t.SINGLE="single",t.DOUBLE="double"})(X||(X={}));var Z="3.0.0",tt="3.0.0",yt="3.0.0",Yt="3.0.0",_r="3.0.0",St="3.0.0";var Nr="20.19.5";var Or="0.707.20306";var Ci={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:E.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:X.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:Nr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Bo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Go,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},st=Ci;import{homedir as Li}from"os";var xi=r(async()=>{let e=`${Li()}/${le}`;return await Pi(e)?JSON.parse(await vi(e,"utf-8")):(console.log("Creating default config file at",e),await Ii(e,JSON.stringify(st,null,2)),st)},"readConfig"),L=xi;import Vi from"node-fetch";var x=r(async t=>{try{let e=await L();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var ii=Object.defineProperty;var r=(t,e)=>ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Ld}from"commander";var Uo="5.0.2";var Mo={name:"@ily-validator/solc",version:Uo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var ce=Mo.version;var Mt="https://validators.solutions";var le="solc4.config.json";var ut="identity.json",ft="unstaked-identity.json",Fo="relayer-keypair.json",li="mainnet-validator-keypair.json",mi="mainnet-vote-account-keypair.json",pi="mainnet-authority-keypair.json",di="testnet-validator-keypair.json",ui="testnet-vote-account-keypair.json",fi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ut}`,bd=`${C}/${ft}`,D=`${C}/${li}`,me=`${C}/${mi}`,Ud=`${C}/${pi}`,I=`${C}/${di}`,Ho=`${C}/${ui}`,Md=`${C}/${fi}`,G=`${C}/solana-validator.log`,z=C+"/start-validator.sh",y="/mnt/ledger",W="/mnt/accounts",Yo="solana-validator",jo="agave-validator",Bo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var pe=3,Jo="https://api.testnet.solana.com",Go="https://api.mainnet-beta.solana.com",zo="https://verify.validators.solutions/solc-migrate",Wo="https://jup.validators.solutions/v1/jup",ao;(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"})(ao||(ao={}));var qo=Object.values(ao),de="So11111111111111111111111111111111111111112",ue="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",io="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Qo="SOLV420",Xo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ti}from"child_process";import{spawnSync as hi}from"node:child_process";var yi=r(t=>{hi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Nt=yi;var Zo="agave-validator",Si=r(()=>{try{return Zo}catch(t){return console.error(t),Zo}},"getSolanaCLI"),K=Si;var fe=r(async t=>{Nt(t)},"updateVersion"),co=r(async(t,e=!1)=>{let o=K(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),Ti(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Mr from"chalk";var ht;(function(t){t.EN="en",t.JA="ja"})(ht||(ht={}));var tr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(tr||(tr={}));var er;(function(t){t.SINGLE="single",t.DOUBLE="double"})(er||(er={}));var ct;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(ct||(ct={}));var or;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(or||(or={}));var rr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(rr||(rr={}));var nr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(nr||(nr={}));var sr;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(sr||(sr={}));var he;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(he||(he={}));var ye;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ye||(ye={}));var cr=!1,lr=!0,M={ID:"solc",LANG:ht.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},b={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},k={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},q={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},P={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},v={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),lt=r((t=!0)=>{let e=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${q.LOG}`,s=k.ACCOUNTS,a=k.LEDGER,i=`${b.ROOT}/${q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",lo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",mr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",pr=9,Q="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",dr="So11111111111111111111111111111111111111112",ur="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",fr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ar;(function(t){t[t.ELSOL=Q]="ELSOL",t[t.SOL=dr]="SOL",t[t.USDC=ur]="USDC",t[t.EPCT=fr]="EPCT"})(ar||(ar={}));var ir;(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"})(ir||(ir={}));var eu={[dr]:9,[Q]:9,[ur]:6,[fr]:6},Se="/home/solv/currentEpoch.json",mo=.5,Te="https://api.testnet.solana.com";import{spawnSync as po}from"child_process";var hr=r(()=>{po("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;po(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),po("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var nt={version:"1.18.23",tag:"v1.18.23-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"},uo={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 Ei}from"child_process";var Ee=r((t=nt.tag)=>{Ei(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as gi,writeFile as wi}from"fs/promises";import{homedir as Ai}from"os";var Ft=r(async t=>{let o=`${Ai()}/${q.JITO_CONFIG}`,s={...JSON.parse(await gi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await wi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as yr}from"child_process";import _i from"inquirer";var Sr=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";yr(`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}`;yr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Tr=r(async()=>await _i.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Ht}from"@skeet-framework/utils";import Ni from"chalk";import Oi from"inquirer";var Er=r(async()=>{let t=await Oi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Ht("sudo ufw delete allow 8899/udp"),await Ht("sudo ufw delete allow 8899/tcp"),await Ht(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Ht(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Ht("sudo ufw reload"),console.log(Ni.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ki=r(()=>Uo,"getSolvVersion"),Ot=ki;import{readFile as Ci,writeFile as Ii}from"fs/promises";import{existsAsync as Pi}from"@skeet-framework/utils";var fo;(function(t){t.EN="en",t.JA="ja"})(fo||(fo={}));var Cu=Object.values(fo),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var gr=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var wr=Object.values(T),E;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(E||(E={}));var Iu=Object.values(E).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var Ar=Object.values($).filter(t=>t!=="none"),X;(function(t){t.SINGLE="single",t.DOUBLE="double"})(X||(X={}));var Z="3.0.0",tt="2.3.8",yt="3.0.0",Yt="2.3.8",_r="2.3.8",St="2.3.8";var Nr="20.19.5";var Or="0.708.20306";var vi={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:E.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:X.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:Nr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Bo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Go,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},st=vi;import{homedir as Li}from"os";var xi=r(async()=>{let e=`${Li()}/${le}`;return await Pi(e)?JSON.parse(await Ci(e,"utf-8")):(console.log("Creating default config file at",e),await Ii(e,JSON.stringify(st,null,2)),st)},"readConfig"),L=xi;import Vi from"node-fetch";var x=r(async t=>{try{let e=await L();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 Vi(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${t}`}),!1}},"sendDiscord");import{spawnSync as Fi}from"child_process";import{Connection as kr}from"@solana/web3.js";var jt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new kr("https://api.testnet.solana.com"):new kr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(m=>m.votePubkey===e);if(!c)return i.delinquent.find(f=>f.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),c=i.current.find(m=>m.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as $i}from"child_process";var g=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=$i(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Di=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),et=Di;import{sendDiscord as Ki}from"@skeet-framework/utils";var Rr=60,bi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=g(e?n:o),i=await jt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Rr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Rr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
6
6
|
Message: Max retries reached, exiting catchup check...
|
|
7
|
-
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await Ki(l),!1}console.log("Waiting for validator to catch up..."),await et(60*1e3),i=await jt(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),
|
|
7
|
+
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`;return await Ki(l),!1}console.log("Waiting for validator to catch up..."),await et(60*1e3),i=await jt(t.RPC_URL,a,e),c++}return!0}catch(e){return console.log("Error in waitCatchup:",e),!1}},"waitCatchup"),vr=bi;import{spawnSync as Ui}from"node:child_process";var Mi=r(()=>{let{stdout:t}=Ui("solana --version",{shell:!0});return(t?String(t):"Unknown").trim()},"getSolanaVersion"),ge=Mi;var Hi=r(async t=>{let e=t.NETWORK===u.MAINNET,{mainnetValidatorKey:o,testnetValidatorKey:n}=A(),s=e?o:n,a=ge(),i=e?cr:lr;i=i&&t.AUTO_RESTART;let c=g(s),l=`=== \u2728 solc updated to the latest version \u2728 ===
|
|
8
8
|
Validator Address: ${c}
|
|
9
9
|
solc Version: ${Ot()}
|
|
10
10
|
Solana Version: ${a}
|
|
@@ -19,22 +19,22 @@ Address: ${c}
|
|
|
19
19
|
Error: ${f}`;return await x(S),!1}let d=`== \u{1F646} Your Node has been restarted! ==
|
|
20
20
|
Address: ${c}
|
|
21
21
|
Now Catching up... \u{1F69B}\u{1F4A8}
|
|
22
|
-
`;await x(d),await et(180*1e3);let m=await
|
|
22
|
+
`;await x(d),await et(180*1e3);let m=await vr(t);if(m){let f=`== \u{1F7E2} Your Node has caught up! ==
|
|
23
23
|
Address: ${c}
|
|
24
24
|
\u2728 Auto Update Completed \u2728
|
|
25
|
-
`;await x(f)}return m}return!0},"autoUpdate"),vr=Hi;import{homedir as Yi}from"os";import{readFile as ji,writeFile as Ir}from"fs/promises";import{existsAsync as Bi}from"@skeet-framework/utils";var R=r(async t=>{let o=`${Yi()}/${le}`;await Bi(o)||(console.log("Creating default config file at",o),await Ir(o,JSON.stringify(st,null,2)));let s={...JSON.parse(await ji(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ir(o,a)},"updateDefaultConfig");var Ji={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},we=Ji;var Gi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},Pr=Gi;var zi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},Ae=zi;var Wi={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Lr=Wi;var _e=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Ne=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var xr=[") \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"],Vr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Oe=qi;var Qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},$r=Qi;var ke=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Dr=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var Xi=r(t=>{let e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};switch(t){case ht.EN:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};break;case ht.JA:e={cmds:Pr,subCmds:$r,logs:Lr,installer:xr,installerSub:Vr,clientCmds:Dr};break;default:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke}}return e},"readLocale"),Kr=Xi;import{existsSync as oc,readFileSync as rc,writeFileSync as br}from"fs";import{readFileSync as Zi,writeFileSync as tc}from"fs";import{homedir as ec}from"os";var kt=r(t=>{let o=`${ec()}/${q.CONFIG}`,s={...JSON.parse(Zi(o,"utf8")),...t},a=JSON.stringify(s,null,2);tc(o,a)},"updateSolvConfig");import{homedir as nc}from"os";var Ur=r(()=>{let e=`${nc()}/${q.CONFIG}`;oc(e)||(br(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(rc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),br(e,JSON.stringify(M,null,2)),o=M}let n=Kr(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,kt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,kt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",kt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Fr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===E.JITO,s=e?Z:tt;n&&(s=Yt,e&&(s=yt)),o&&(s=St,n&&(s=_r)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=Ot(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Mr.white(`Current solc version: ${i}`)),a.auto){await vr(t);return}if(a.migrateConfig){let l=Ur().config,p=l.SOLANA_NETWORK===ct.TESTNET,d=l.SOLV_TYPE===he.RPC_NODE,m=l.MAINNET_TYPE===ye.JITO_MEV,f={NETWORK:p?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?X.DOUBLE:X.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:m?E.JITO:p?E.AGAVE:E.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 R(f)}if(a.config){if(await R({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){let l=e?yt:Yt;await Ft({version:l,tag:`v${l}-jito`})}console.log(Mr.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 Er();return}if(a.background){let l=a.version;if(await R({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){Ee(),await Ft({version:l,tag:`v${l}-jito`}),await co(c,!0);return}await fe(l),await co(e?5:5,!0);return}else if(a.commission){let l=await Tr();Sr(l.commission,e)}else hr()})},"updateCommands");import{spawnSync as sc}from"node:child_process";var Hr=r(t=>{try{let{log:e}=lt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=sc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Yr=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=>{Hr(t)})},"logCommands");import at from"chalk";import{spawnSync as ac}from"child_process";import{homedir as ic}from"os";var Re=r(t=>{let e=ic(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=ct.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=ct.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=ct.TESTNET);let p=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;ac(p,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ce}from"child_process";import{existsSync as jr,readdirSync as cc,rmSync as lc}from"fs";import{homedir as mc}from"os";import Br from"path";var ve=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[C.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[C.TESTNET_VALIDATOR_KEY,C.TESTNET_VALITATOR_AUTHORITY_KEY,C.TESTNET_VALIDATOR_VOTE_KEY,C.MAINNET_VALIDATOR_KEY,C.MAINNET_VALITATOR_AUTHORITY_KEY,C.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[C.MAINNET_VALIDATOR_KEY,C.MAINNET_VALITATOR_AUTHORITY_KEY,C.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Ce(n,{shell:!0,stdio:"ignore"});let s=cc("./").filter(l=>l.endsWith("SV.json")),a=mc(),i=Br.join(a,"unstaked-identity.json");jr(i)&&Ce(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let p=Br.join(a,e[c]);if(c++,jr(p)){console.log(`${p} is already exist!`),lc(l,{recursive:!0});continue}let d=`mv ${l} ${p}`;Ce(d,{shell:!0,stdio:"inherit"})}Ce("solana-keygen new -s --no-bip39-passphrase -o /home/solc/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as Gr}from"child_process";var pc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
|
|
25
|
+
`;await x(f)}return m}return!0},"autoUpdate"),Cr=Hi;import{homedir as Yi}from"os";import{readFile as ji,writeFile as Ir}from"fs/promises";import{existsAsync as Bi}from"@skeet-framework/utils";var R=r(async t=>{let o=`${Yi()}/${le}`;await Bi(o)||(console.log("Creating default config file at",o),await Ir(o,JSON.stringify(st,null,2)));let s={...JSON.parse(await ji(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ir(o,a)},"updateDefaultConfig");var Ji={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},we=Ji;var Gi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},Pr=Gi;var zi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},Ae=zi;var Wi={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Lr=Wi;var _e=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Ne=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var xr=[") \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"],Vr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Oe=qi;var Qi={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},$r=Qi;var ke=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Dr=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var Xi=r(t=>{let e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};switch(t){case ht.EN:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke};break;case ht.JA:e={cmds:Pr,subCmds:$r,logs:Lr,installer:xr,installerSub:Vr,clientCmds:Dr};break;default:e={cmds:we,subCmds:Oe,logs:Ae,installer:_e,installerSub:Ne,clientCmds:ke}}return e},"readLocale"),Kr=Xi;import{existsSync as oc,readFileSync as rc,writeFileSync as br}from"fs";import{readFileSync as Zi,writeFileSync as tc}from"fs";import{homedir as ec}from"os";var kt=r(t=>{let o=`${ec()}/${q.CONFIG}`,s={...JSON.parse(Zi(o,"utf8")),...t},a=JSON.stringify(s,null,2);tc(o,a)},"updateSolvConfig");import{homedir as nc}from"os";var Ur=r(()=>{let e=`${nc()}/${q.CONFIG}`;oc(e)||(br(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(rc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),br(e,JSON.stringify(M,null,2)),o=M}let n=Kr(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,kt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,kt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",kt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var Fr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===E.JITO,s=e?Z:tt;n&&(s=Yt,e&&(s=yt)),o&&(s=St,n&&(s=_r)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=Ot(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Mr.white(`Current solc version: ${i}`)),a.auto){await Cr(t);return}if(a.migrateConfig){let l=Ur().config,p=l.SOLANA_NETWORK===ct.TESTNET,d=l.SOLV_TYPE===he.RPC_NODE,m=l.MAINNET_TYPE===ye.JITO_MEV,f={NETWORK:p?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?X.DOUBLE:X.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:m?E.JITO:p?E.AGAVE:E.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 R(f)}if(a.config){if(await R({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){let l=e?yt:Yt;await Ft({version:l,tag:`v${l}-jito`})}console.log(Mr.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 Er();return}if(a.background){let l=a.version;if(await R({TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt}),n){Ee(),await Ft({version:l,tag:`v${l}-jito`}),await co(c,!0);return}await fe(l),await co(e?5:5,!0);return}else if(a.commission){let l=await Tr();Sr(l.commission,e)}else hr()})},"updateCommands");import{spawnSync as sc}from"node:child_process";var Hr=r(t=>{try{let{log:e}=lt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=sc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Yr=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=>{Hr(t)})},"logCommands");import at from"chalk";import{spawnSync as ac}from"child_process";import{homedir as ic}from"os";var Re=r(t=>{let e=ic(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=ct.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=ct.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=ct.TESTNET);let p=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;ac(p,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as ve}from"child_process";import{existsSync as jr,readdirSync as cc,rmSync as lc}from"fs";import{homedir as mc}from"os";import Br from"path";var Ce=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[v.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[v.TESTNET_VALIDATOR_KEY,v.TESTNET_VALITATOR_AUTHORITY_KEY,v.TESTNET_VALIDATOR_VOTE_KEY,v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;ve(n,{shell:!0,stdio:"ignore"});let s=cc("./").filter(l=>l.endsWith("SV.json")),a=mc(),i=Br.join(a,"unstaked-identity.json");jr(i)&&ve(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let p=Br.join(a,e[c]);if(c++,jr(p)){console.log(`${p} is already exist!`),lc(l,{recursive:!0});continue}let d=`mv ${l} ${p}`;ve(d,{shell:!0,stdio:"inherit"})}ve("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 Gr}from"child_process";var pc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
|
|
26
26
|
Description=Jupiter API Service Instance
|
|
27
27
|
After=network.target
|
|
28
28
|
|
|
29
29
|
[Service]
|
|
30
30
|
Type=simple
|
|
31
|
-
ExecStart=/home/
|
|
32
|
-
WorkingDirectory=/home/
|
|
31
|
+
ExecStart=/home/solv/jupiter-swap-api --rpc-url ${t} --yellowstone-grpc-endpoint ${e} --yellowstone-grpc-x-token "${o}" --port ${n}
|
|
32
|
+
WorkingDirectory=/home/solv
|
|
33
33
|
Restart=always
|
|
34
|
-
User=
|
|
34
|
+
User=solv
|
|
35
35
|
Environment=NODE_ENV=production
|
|
36
36
|
Environment=RUST_LOG=info
|
|
37
|
-
Environment=PATH=/home/
|
|
37
|
+
Environment=PATH=/home/solv/.local/share/solana/install/active_release/bin:/home/solv/.local/share/pnpm:/home/solv/.cargo/env:/home/solv/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/solv/.local/share/pnpm/npx
|
|
38
38
|
|
|
39
39
|
[Install]
|
|
40
40
|
WantedBy=multi-user.target`;return{filePath:s,body:a}},"jupiterAPIService"),Jr=pc;import dc from"inquirer";import uc from"chalk";var fc=r(async()=>{let t=await dc.prompt([{name:"rpcUrl",message:"Enter RPC URL",type:"input",default:"http://localhost:8899"},{name:"grpcUrl",message:"Enter GRPC URL",type:"input",default:"http://localhost:10000"},{name:"grpcToken",message:"Enter GRPC Token",type:"input",default:"token"}]);Gr(`sudo apt-get install unzip wget -y
|
|
@@ -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 Rc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case $.AGAVE:console.log("Agave RPC Node Setup"),Nt(t.TESTNET_SOLANA_VERSION),o=Zr();break;case $.JITO:console.log("JITO RPC Node Setup"),Gt(yt),o=Xr();break;default:console.log("Unknown RPC Node Setup");break}if(await Oc(z)){console.log("Startup script already exists. Skipping...");return}await kc(z,o,"utf-8"),zt()},"setupRpcNode"),tn=Rc;import{spawnSync as
|
|
119
|
+
`,"startRPCNodeScript");var Rc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case $.AGAVE:console.log("Agave RPC Node Setup"),Nt(t.TESTNET_SOLANA_VERSION),o=Zr();break;case $.JITO:console.log("JITO RPC Node Setup"),Gt(yt),o=Xr();break;default:console.log("Unknown RPC Node Setup");break}if(await Oc(z)){console.log("Startup script already exists. Skipping...");return}await kc(z,o,"utf-8"),zt()},"setupRpcNode"),tn=Rc;import{spawnSync as vc}from"node:child_process";var Cc=r(t=>{vc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),So=Cc;var To=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
|
|
120
120
|
exec ${s} \\
|
|
121
121
|
--identity ${O} \\
|
|
122
122
|
--vote-account ${me} \\
|
|
@@ -227,7 +227,7 @@ fs.nr_open = 1000000
|
|
|
227
227
|
missingok
|
|
228
228
|
compress
|
|
229
229
|
postrotate
|
|
230
|
-
systemctl kill -s USR1
|
|
230
|
+
systemctl kill -s USR1 solv.service
|
|
231
231
|
endscript
|
|
232
232
|
}
|
|
233
233
|
`},"logRotates");import{existsSync as Uc}from"fs";import{execSync as Mc}from"child_process";function hn(){if(console.log("Creating logrotate configuration for solana"),Uc(P.SOL_LOGROTATE))console.log("SOL_LOGROTATE_PATH already exists. Skipping logrotate configuration.");else{let t=fn();Mc(`echo "${t}" | sudo tee ${P.SOL_LOGROTATE} > /dev/null`),console.log("Logrotate configuration created.")}}r(hn,"setupLogrotate");var Fc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password",Hc="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea",Yc=`/home/${M.USERNAME}/.local/share/solana/install/active_release/bin`,yn=r((t=!0)=>{let{scriptPath:e}=lt(t),o=t?Hc:Fc,n=Yc;return`[Unit]
|
|
@@ -248,7 +248,7 @@ Environment="${o}"
|
|
|
248
248
|
ExecStart=${e}
|
|
249
249
|
|
|
250
250
|
[Install]
|
|
251
|
-
WantedBy=multi-user.target`},"solvService");import{execSync as jc}from"child_process";function Sn(t=!0){console.log("Creating solvService configuration for solana");let e=yn(t);jc(`echo "${e}" | sudo tee ${P.SOL_SERVICE} > /dev/null`),console.log("
|
|
251
|
+
WantedBy=multi-user.target`},"solvService");import{execSync as jc}from"child_process";function Sn(t=!0){console.log("Creating solvService configuration for solana");let e=yn(t);jc(`echo "${e}" | sudo tee ${P.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(Sn,"setupSolvService");var Tn=r((t=!0)=>{hn(),Sn(t),un()},"makeServices");import{spawnSync as wo}from"node:child_process";var En=r(t=>{try{Ce(t);let e=t.NETWORK;return e===u.TESTNET?(wo(`solana config set --url ${e} -k ${I}`,{shell:!0,stdio:"inherit"}),wo(`solana airdrop 1 --url ${e} -k ${I}`,{shell:!0,stdio:"inherit"})):wo(`solana config set --url ${e} -k ${D}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==T.RPC&&Re(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as gn}from"node:child_process";var xe=r((t=!1,e="45",o=k.LEDGER,n=`${o}/snapshot`,s)=>{try{let a=`docker run -it --rm -v ${o}:${n} --user $(id -u):$(id -g) c29r3/solana-snapshot-finder:latest --snapshot_path ${n} --min_download_speed ${e} --version ${s}`;if(t){gn("wget --trust-server-names https://snapshots.avorio.network/testnet/snapshot.tar.bz2 https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2",{shell:!0,stdio:"inherit",cwd:"/mnt/ledger"});return}gn(a,{shell:!0,stdio:"inherit"})}catch(a){throw new Error(`getSnapshot Error: ${a}`)}},"getSnapshot");import{spawnSync as Bc}from"node:child_process";var Ve=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===E.FRANKENDANCER?"frankendancer":"solv"}`;Bc(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as Jc}from"node:child_process";var Gc=r(()=>{try{Jc('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),wn=Gc;import Ao from"fs";import{promisify as _n}from"util";import{execSync as An}from"child_process";var zc=_n(Ao.readFile),Wc=_n(Ao.access),$e="/etc/sysctl.conf",qc=`# set default and maximum socket buffer sizes to 128MB
|
|
252
252
|
net.core.rmem_default=134217728
|
|
253
253
|
net.core.wmem_default=134217728
|
|
254
254
|
net.core.rmem_max=134217728
|
|
@@ -261,7 +261,7 @@ net.ipv4.tcp_wmem=10240 87380 134217728
|
|
|
261
261
|
# Enable TCP westwood for kernels greater than or equal to 2.6.13
|
|
262
262
|
net.ipv4.tcp_congestion_control=westwood`;async function Qc(){try{await Wc($e,Ao.constants.F_OK)}catch{return console.log(`Skipping updateSysctlConfig: ${$e} does not exist`)}try{let t=await zc($e,"utf8");if(!t.includes("rmem_default")){console.log("No need to update sysctl.conf");return}let e=t.replace(/net\.core\.(rmem_default|wmem_default|rmem_max|wmem_max)=.*\n/g,"");e=e.replace(/net\.ipv4\.tcp_(rmem|wmem|congestion_control)=.*\n/g,""),e+=`
|
|
263
263
|
${qc}
|
|
264
|
-
`,An(`echo "${e}" | sudo tee ${$e} > /dev/null`),An("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(Qc,"updateSysctlConfig");var Nn=Qc;import{spawnSync as Xc}from"child_process";var On=r(()=>{Xc("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as Zc}from"node:child_process";var kn=r(()=>{Zc("sudo systemctl enable
|
|
264
|
+
`,An(`echo "${e}" | sudo tee ${$e} > /dev/null`),An("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(Qc,"updateSysctlConfig");var Nn=Qc;import{spawnSync as Xc}from"child_process";var On=r(()=>{Xc("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as Zc}from"node:child_process";var kn=r(()=>{Zc("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as Rn}from"child_process";var vn=r((t=!1,e=!1)=>{t?el():tl(e)},"createSymLink"),tl=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),Rn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),el=r(()=>{Rn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import De from"chalk";var ol=r(()=>{let t=`${De.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${De.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
|
|
265
265
|
|
|
266
266
|
We're excited to offer a free API key exclusively for the Validators DAO community \u{1F389}
|
|
267
267
|
It's our way of supporting the community and empowering you with fast, reliable connections.
|
|
@@ -271,11 +271,11 @@ To get your free API key, simply join us through the link below:
|
|
|
271
271
|
Validators DAO: ${De.white("`https://discord.gg/X4BgkBHavp`")}
|
|
272
272
|
|
|
273
273
|
Unlock fast connections and elevate your experience with your very own API key \u{1F680}
|
|
274
|
-
`;console.log(De.cyan(e))},"rpcLog"),Et=ol;import{spawnSync as ot}from"child_process";var rl=r(()=>({filePath:"/home/
|
|
274
|
+
`;console.log(De.cyan(e))},"rpcLog"),Et=ol;import{spawnSync as ot}from"child_process";var rl=r(()=>({filePath:"/home/solv/start-firedancer.sh",body:`#!/usr/bin/env bash
|
|
275
275
|
sudo chmod -R 700 /mnt
|
|
276
|
-
sudo fdctl configure init all --config /home/
|
|
277
|
-
sudo chown -R
|
|
278
|
-
sudo fdctl run --config /home/
|
|
276
|
+
sudo fdctl configure init all --config /home/solv/firedancer/config.toml
|
|
277
|
+
sudo chown -R solv:solv /mnt
|
|
278
|
+
sudo fdctl run --config /home/solv/firedancer/config.toml`}),"startFiredancerScript"),Cn=rl;var nl=r(()=>({filePath:"/etc/systemd/system/frankendancer.service",body:`[Unit]
|
|
279
279
|
Description=Firedancer Solana
|
|
280
280
|
After=network.target
|
|
281
281
|
StartLimitIntervalSec=0
|
|
@@ -284,20 +284,20 @@ StartLimitIntervalSec=0
|
|
|
284
284
|
Type=simple
|
|
285
285
|
Restart=always
|
|
286
286
|
RestartSec=1
|
|
287
|
-
User=
|
|
287
|
+
User=solv
|
|
288
288
|
LimitNOFILE=1000000
|
|
289
289
|
LogRateLimitIntervalSec=0
|
|
290
|
-
ExecStart=/home/
|
|
290
|
+
ExecStart=/home/solv/start-firedancer.sh
|
|
291
291
|
|
|
292
292
|
[Install]
|
|
293
293
|
WantedBy=multi-user.target
|
|
294
|
-
`}),"firedancerService"),In=nl;var sl=r(()=>({filePath:"/home/
|
|
295
|
-
user = "
|
|
294
|
+
`}),"firedancerService"),In=nl;var sl=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solc"
|
|
295
|
+
user = "solv"
|
|
296
296
|
scratch_directory = "/home/{user}"
|
|
297
297
|
dynamic_port_range = "8900-9000"
|
|
298
298
|
|
|
299
299
|
[log]
|
|
300
|
-
path = "/home/
|
|
300
|
+
path = "/home/solv/solana-validator.log"
|
|
301
301
|
colorize = "auto"
|
|
302
302
|
level_logfile = "INFO"
|
|
303
303
|
level_stderr = "NOTICE"
|
|
@@ -334,10 +334,10 @@ dynamic_port_range = "8900-9000"
|
|
|
334
334
|
]
|
|
335
335
|
|
|
336
336
|
[consensus]
|
|
337
|
-
identity_path = "/home/
|
|
338
|
-
vote_account_path = "/home/
|
|
337
|
+
identity_path = "/home/solv/identity.json"
|
|
338
|
+
vote_account_path = "/home/solv/testnet-vote-account-keypair.json"
|
|
339
339
|
authorized_voter_paths = [
|
|
340
|
-
"/home/
|
|
340
|
+
"/home/solv/testnet-validator-keypair.json"
|
|
341
341
|
]
|
|
342
342
|
snapshot_fetch = true
|
|
343
343
|
genesis_fetch = true
|
|
@@ -353,30 +353,30 @@ dynamic_port_range = "8900-9000"
|
|
|
353
353
|
|
|
354
354
|
|
|
355
355
|
[hugetlbfs]
|
|
356
|
-
mount_path = "/mnt"`}),"configToml"),Ke=sl;var al=r(async()=>{ot("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),ot(`git checkout v${Or}`,{shell:!0,stdio:"inherit",cwd:"/home/
|
|
356
|
+
mount_path = "/mnt"`}),"configToml"),Ke=sl;var al=r(async()=>{ot("git clone --recurse-submodules https://github.com/firedancer-io/firedancer.git",{shell:!0,stdio:"inherit"}),ot(`git checkout v${Or}`,{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("./deps.sh",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("make -j fdctl solana",{shell:!0,stdio:"inherit",cwd:"/home/solv/firedancer"}),ot("sudo ln -s /home/solv/firedancer/build/native/gcc/bin/fdctl /usr/local/bin/fdctl",{shell:!0,stdio:"inherit"});let{filePath:t,body:e}=Cn();ot(`echo "${e}" | sudo tee ${t} > /dev/null`,{shell:!0,stdio:"inherit"}),ot(`sudo chmod +x ${t}`,{shell:!0,stdio:"inherit"});let o=In();ot(`echo "${o.body}" | sudo tee ${o.filePath} > /dev/null`,{shell:!0,stdio:"inherit"}),ot("sudo systemctl daemon-reload",{shell:!0});let n=Ke();ot(`echo "${n.body}" | sudo tee ${n.filePath} > /dev/null`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),be=al;var Ln=r(async(t=!1,e=!1)=>{try{t||(console.log(Pn.white("\u{1F7E2} Initializing Setup")),await L(),await Qr());let o=await L(),n=o.NETWORK===u.TESTNET;switch(cn(),e||pn(),Tn(n),On(),wn(),await Nn(),En(o),vn(o.IS_DUMMY,n),o.NODE_TYPE){case T.RPC:await tn(o);break;case T.VALIDATOR:await nn(o),o.VALIDATOR_TYPE===E.FRANKENDANCER&&await be();break;default:throw new Error("Unknown Node Type")}dn(),Bt(),o.VALIDATOR_TYPE!==E.FRANKENDANCER&&(kn(),xe(n)),Ve(o),console.log(Pn.white("\u{1F7E2} Setup Completed")),Et()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var xn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
|
|
357
357
|
[Unit]
|
|
358
358
|
Description=Solana transaction relayer
|
|
359
359
|
Requires=network-online.target
|
|
360
360
|
After=network-online.target
|
|
361
361
|
|
|
362
362
|
# User is required to install a keypair here that's used to auth against the block engine
|
|
363
|
-
ConditionPathExists=/home/
|
|
364
|
-
ConditionPathExists=/home/
|
|
365
|
-
ConditionPathExists=/home/
|
|
363
|
+
ConditionPathExists=/home/solv/relayer-keypair.json
|
|
364
|
+
ConditionPathExists=/home/solv/private.pem
|
|
365
|
+
ConditionPathExists=/home/solv/public.pem
|
|
366
366
|
|
|
367
367
|
[Service]
|
|
368
368
|
Type=exec
|
|
369
|
-
User=
|
|
369
|
+
User=solv
|
|
370
370
|
Restart=on-failure
|
|
371
371
|
Environment=RUST_LOG=info
|
|
372
372
|
Environment=SOLANA_METRICS_CONFIG="host=http://metrics.jito.wtf:8086,db=relayer,u=relayer-operators,p=jito-relayer-write"
|
|
373
373
|
Environment=BLOCK_ENGINE_URL=${t}
|
|
374
374
|
Environment=GRPC_BIND_IP=127.0.0.1
|
|
375
375
|
|
|
376
|
-
ExecStart=/home/
|
|
377
|
-
--keypair-path=/home/
|
|
378
|
-
--signing-key-pem-path=/home/
|
|
379
|
-
--verifying-key-pem-path=/home/
|
|
376
|
+
ExecStart=/home/solv/jito-relayer/target/release/jito-transaction-relayer \\
|
|
377
|
+
--keypair-path=/home/solv/relayer-keypair.json \\
|
|
378
|
+
--signing-key-pem-path=/home/solv/private.pem \\
|
|
379
|
+
--verifying-key-pem-path=/home/solv/public.pem
|
|
380
380
|
|
|
381
381
|
[Install]
|
|
382
382
|
WantedBy=multi-user.target`;return{filePath:e,body:o}},"relayerService"),Vn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`[Unit]
|
|
@@ -385,13 +385,13 @@ Requires=network-online.target
|
|
|
385
385
|
After=network-online.target
|
|
386
386
|
|
|
387
387
|
# User is required to install a keypair here that's used to auth against the block engine
|
|
388
|
-
ConditionPathExists=/home/
|
|
389
|
-
ConditionPathExists=/home/
|
|
390
|
-
ConditionPathExists=/home/
|
|
388
|
+
ConditionPathExists=/home/solv/relayer-keypair.json
|
|
389
|
+
ConditionPathExists=/home/solv/private.pem
|
|
390
|
+
ConditionPathExists=/home/solv/public.pem
|
|
391
391
|
|
|
392
392
|
[Service]
|
|
393
393
|
Type=exec
|
|
394
|
-
User=
|
|
394
|
+
User=solv
|
|
395
395
|
Restart=on-failure
|
|
396
396
|
Environment=RUST_LOG=info
|
|
397
397
|
Environment=SOLANA_METRICS_CONFIG="host=http://metrics.jito.wtf:8086,db=relayer,u=relayer-operators,p=jito-relayer-write"
|
|
@@ -399,15 +399,15 @@ Environment=BLOCK_ENGINE_URL=${t}
|
|
|
399
399
|
Environment=RPC_SERVERS=https://your.rpc.server
|
|
400
400
|
Environment=WEBSOCKET_SERVERS=wss://your.websocket.server
|
|
401
401
|
|
|
402
|
-
ExecStart=/home/
|
|
402
|
+
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
|
|
403
403
|
|
|
404
404
|
[Install]
|
|
405
|
-
WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Ue,spawnSync as mt}from"child_process";var $n=r(async(t,e=!0)=>{mt("openssl",["genrsa","-out","/home/
|
|
406
|
-
`);o.splice(-1,0,"--geyser-plugin-config /home/
|
|
407
|
-
`);await ml(t,n),cl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Kn=pl;import dl from"inquirer";import{writeFile as ul}from"node:fs/promises";var bn=r(async()=>{let e=(await dl.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";_o(o,{shell:!0,stdio:"inherit"}),_o(n,{shell:!0,stdio:"inherit",cwd:"/home/
|
|
405
|
+
WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateService");import{execSync as Ue,spawnSync as mt}from"child_process";var $n=r(async(t,e=!0)=>{mt("openssl",["genrsa","-out","/home/solv/private.pem"],{stdio:"inherit",shell:!0}),mt("openssl",["rsa","-in","/home/solv/private.pem","-pubout","-out","/home/solv/public.pem"],{stdio:"inherit",shell:!0}),mt("solana-keygen",["new","--no-bip39-passphrase","--outfile","/home/solv/relayer-keypair.json"],{stdio:"inherit",shell:!0}),mt("git",["clone","https://github.com/jito-foundation/jito-relayer.git"],{stdio:"inherit",shell:!0}),mt("git",["submodule","update","--init","--recursive"],{cwd:"jito-relayer",stdio:"inherit",shell:!0}),mt("cargo",["build","--release"],{cwd:"jito-relayer",stdio:"inherit",shell:!0});let{filePath:o,body:n}=e?xn(t):Vn(t);Ue(`echo "${n}" | sudo tee ${o} > /dev/null`),mt("sudo",["systemctl","enable","relayer"],{stdio:"inherit"}),mt("sudo",["systemctl","start","relayer"],{stdio:"inherit"}),Ue("sudo ufw allow 11228",{stdio:"inherit"}),Ue("sudo ufw allow 11229",{stdio:"inherit"}),Ue("sudo ufw allow 11226",{stdio:"inherit"})},"jitoRelayerSetup");import{spawnSync as _o}from"node:child_process";var il=r(t=>({filePath:"/home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json",defaultConfig:{libpath:"/home/solv/yellowstone-grpc/target/release/libyellowstone_grpc_geyser.so",log:{level:"info"},grpc:{address:"0.0.0.0:10000",compression:{accept:["gzip"],send:["gzip"]},max_decoding_message_size:"4_194_304",snapshot_plugin_channel_capacity:null,snapshot_client_channel_capacity:"50_000_000",channel_capacity:"100_000",unary_concurrency_limit:100,unary_disabled:!1,x_token:t},prometheus:{address:"0.0.0.0:8999"}}}),"geyserConfig"),Dn=il;import{spawnSync as cl}from"node:child_process";import{readFile as ll,writeFile as ml}from"fs/promises";var pl=r(async()=>{let t="/home/solv/start-validator.sh",o=(await ll(t,"utf-8")).split(`
|
|
406
|
+
`);o.splice(-1,0,"--geyser-plugin-config /home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json \\");let n=o.join(`
|
|
407
|
+
`);await ml(t,n),cl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Kn=pl;import dl from"inquirer";import{writeFile as ul}from"node:fs/promises";var bn=r(async()=>{let e=(await dl.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";_o(o,{shell:!0,stdio:"inherit"}),_o(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),_o(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Dn(e),c=JSON.stringify(i,null,2);await ul(a,c,{encoding:"utf8"}),await Kn()},"yellowstoneGeyser");var Un=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(at.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Re(t),process.exit(0);else if(e.key)console.log(at.white("\u{1F511} Setting up Validator Keypairs ...")),Ce(t),process.exit(0);else if(e.relayer){console.log(at.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await Tt()).blockEngineUrl;await $n(n,!1),console.log(at.green(`Jito Relayer Setup Completed
|
|
408
408
|
|
|
409
409
|
$ solc relayer --help`)),Bt(),Et(),process.exit(0)}else if(e.jupiter)console.log(at.white("\u{1F30F} Setting up Jupiter Swap API ...")),await zr(),Bt(),Et(),process.exit(0);else if(e.geyser){console.log(at.white("\u26A1\uFE0F Setting up Geyser ...")),await bn();return}else if(e.firedancer){console.log(at.white("\u{1F525} Setting up Firedancer ...")),await be();return}await Ln(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(at.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(at.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as fl}from"child_process";var No=r(()=>{let o=fl("df -h").toString().split(`
|
|
410
|
-
`).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)=>gt(a.Avail)-gt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&>(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&>(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&>(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/")&>(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Mn from"chalk";import hl from"cli-table3";var Oo=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Mn.blue(n)),o=new hl({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=>Mn.white(s)))}),console.log(o.toString())},"displayTable");var Fn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=No();Oo(t)})},"dfCommands"),gt=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 Hn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ve(t),process.exit(0)})},"startCommand");import{spawnSync as yl}from"node:child_process";var Yn=r(t=>{let o
|
|
410
|
+
`).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)=>gt(a.Avail)-gt(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&>(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&>(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&>(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/")&>(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Mn from"chalk";import hl from"cli-table3";var Oo=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Mn.blue(n)),o=new hl({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=>Mn.white(s)))}),console.log(o.toString())},"displayTable");var Fn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=No();Oo(t)})},"dfCommands"),gt=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 Hn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ve(t),process.exit(0)})},"startCommand");import{spawnSync as yl}from"node:child_process";var Yn=r(t=>{let o=`sudo systemctl stop ${t.VALIDATOR_TYPE===E.FRANKENDANCER?"frankendancer":"solv"}`;yl(o,{shell:!0,stdio:"inherit"})},"stopSolana");var jn=r(t=>{h.command("stop").description("Stop Solana Validator").action(()=>{Yn(t),process.exit(0)})},"stopCommand");import{spawnSync as Qt}from"node:child_process";import Bn from"chalk";var Jn=r(t=>{let e=K();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(Bn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Qt("solc stop",{stdio:"inherit",shell:!0}),Qt("solc rm:snapshot",{stdio:"inherit",shell:!0}),Qt("solc get snapshot",{stdio:"inherit",shell:!0}),Qt("solc start",{stdio:"inherit",shell:!0}),console.log(Bn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;Qt(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var Gn=r(t=>{let o=t.NETWORK===u.TESTNET?Z:tt;t.NODE_TYPE===T.RPC&&(o=St),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).action(async n=>{if(t.VALIDATOR_TYPE===E.JITO){let l=`v${n.version||Yt}-jito`;Ee(l);return}t.NODE_TYPE===T.RPC&&(o=St);let i=n.version||o;await fe(i)})},"installCommands");import{spawnSync as Sl}from"child_process";var zn=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Sl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=Wt();console.log(t)})},"mountCommands");import{spawnSync as gl}from"node:child_process";import Wn from"chalk";import{spawnSync as Tl}from"child_process";var El=r(async()=>{try{let t=Tl("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"),Me=El;var qn=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solc Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await Me()&&(console.log(Wn.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 -`;gl(n,{shell:!0,stdio:"inherit"}),console.log(Wn.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var Xt={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as Al,mkdirSync as _l}from"fs";import Nl from"inquirer";import{homedir as Ol}from"os";import{spawnSync as wl}from"node:child_process";function Qn(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return wl(s,{shell:!0,stdio:"inherit"}).status===0}r(Qn,"executeSCP");var ko=r(async(t="")=>{let e=t;t===""&&(e=(await Nl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=Ol(),s=n.includes("/home/solv")?"/home/solv":n+Xt.SOLV_KEYPAIR_DOWNLOAD_PATH;Al(s)||_l(s,{recursive:!0});let a=!0,i=n+"/"+Fo;o.push(i);for(let c of o){let l=c.split("/"),p=l[l.length-1];p=n.includes("/home/solv")?p:p.replace(".json",`-${e}.json`);let d=`${s}/${p}`;Qn(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as kl}from"child_process";import{existsSync as Rl}from"fs";import vl from"inquirer";import Cl from"os";var Xn=r(async(t="")=>{let e=Cl.userInfo().homedir,o=t;t===""&&(o=(await vl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${Xt.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=Xt.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(A(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let l=`${n}/${c}`;if(!Rl(l))continue;let p=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;kl(p,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Il}from"child_process";import Pl from"inquirer";var Zn=r(async()=>{let t=await Pl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${b.ROOT}/.ssh && echo "${t.pubkey}" >> ${b.AUTHORIZED_KEYS}`;Il(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import Fe from"chalk";import{readFileSync as Ll}from"fs";import xl from"os";var ts=r(()=>{try{let e=`${xl.userInfo().homedir}/.ssh/id_rsa.pub`,o=Ll(e,"utf8");console.log(Fe.white(`Your SSH Public Key is:
|
|
411
411
|
`)),console.log(Fe.white(o))}catch(t){console.error(Fe.white(`Error reading SSH Public Key
|
|
412
412
|
`)),console.error(Fe.white(t))}},"cat");import{spawnSync as Vl}from"child_process";var es=r(()=>{Vl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as $l}from"child_process";import{readFileSync as Dl}from"fs";import{Readable as Kl}from"stream";var os=r(async t=>new Promise((e,o)=>{try{let n=$l("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
|
|
413
413
|
`).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"),bl=r(t=>{try{return JSON.parse(Dl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),rs=r(async(t,e)=>{let o=[],n=Kl.from(t);return n.on("data",async s=>{bl(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import He from"chalk";import{Presets as Hl,SingleBar as Yl}from"cli-progress";import ns from"chalk";import{spawnSync as Ul}from"node:child_process";import Ml from"node-fetch";var Fl=r(async()=>{let t=await Ml(zo,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(ns.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
|
|
@@ -416,7 +416,7 @@ ${n.join(`
|
|
|
416
416
|
`)}`)),console.log(He.white(`
|
|
417
417
|
Only showing the first 10 results
|
|
418
418
|
|
|
419
|
-
`)),console.log(He.white("$ mv <your-key> /mt/solana/<solvKeyName>.json"))})},"scpCommands");import{spawnSync as jl}from"child_process";var is=r(t=>{h.command("status").description("Check Solana Validator Status").action(()=>{Bl(t)})},"statusCommands"),Bl=r(t=>{let o=`sudo systemctl status ${t.VALIDATOR_TYPE===E.FRANKENDANCER?"frankendancer":"
|
|
419
|
+
`)),console.log(He.white("$ mv <your-key> /mt/solana/<solvKeyName>.json"))})},"scpCommands");import{spawnSync as jl}from"child_process";var is=r(t=>{h.command("status").description("Check Solana Validator Status").action(()=>{Bl(t)})},"statusCommands"),Bl=r(t=>{let o=`sudo systemctl status ${t.VALIDATOR_TYPE===E.FRANKENDANCER?"frankendancer":"solv"}`;jl(o,{shell:!0,stdio:"inherit"}),process.exit(0)},"systemctlStatusSolv");import{spawnSync as Jl}from"node:child_process";var cs=r(async(t,e)=>{try{let o=await L(),n=o.NETWORK===u.TESTNET,a=o.NODE_TYPE===T.RPC?o.RPC_URL:n?u.TESTNET:o.RPC_URL,c=[`solana delegate-stake ${t} ${e} --stake-authority ${n?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"} --url ${a}`];return Jl(c.join(" && "),{shell:!0,stdio:"inherit"}),!0}catch(o){throw new Error(`delegateStake: ${o}`)}},"delegateStake");import ms from"inquirer";import{spawnSync as Gl}from"node:child_process";var ls=r((t,e,o=5)=>{let n=0;for(;n<o;){let s=Gl(`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 zl,existsAsync as Wl}from"@skeet-framework/utils";import{execSync as ql,spawnSync as je}from"node:child_process";import Ql from"node:os";var ps=r(async t=>{let e=t.NETWORK===u.TESTNET;if(!(await ms.prompt([{type:"confirm",name:"confirmCreateStakeAccount",message:"Would you like to create a new stake account?",default:!1}])).confirmCreateStakeAccount)return!1;je(`solana config set --keypair ${e?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json"}`,{shell:!0,stdio:"pipe"});let s=await ms.prompt([{type:"input",name:"solAmount",message:"How many SOL would you like to stake?",default:"1"}]),{stakeKeypair:a,stakeKeypairPath:i}=await Zl(),c=t.STAKE_ACCOUNTS,l=Array.from(new Set([...c,a]));return kt({STAKE_ACCOUNT:l}),ls(i,Number(s.solAmount))},"stakeAccountQuestion"),Xl=Ql.userInfo().homedir,Ye=Xl+"/stake-account",Zl=r(async()=>{await Wl(Ye)||je(`mkdir -p ${Ye}`,{shell:!0});let t=je(`ls ${Ye}`,{shell:!0}).stdout.toString().split(`
|
|
420
420
|
`).filter(a=>a.includes(".json")),e=zl(t.length+1),o=`${Ye}/stake${e}.json`,n=`solana-keygen new --outfile ${o} --no-bip39-passphrase`;return je(n,{shell:!0,stdio:"inherit"}),{stakeKeypair:ql(`solana-keygen pubkey ${o}`).toString().trim(),stakeKeypairPath:o}},"createStakeKeypair");import{spawnSync as tm}from"node:child_process";var ds=r(async t=>{try{let o=(await L()).NETWORK===u.TESTNET?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",n=`solana deactivate-stake ${t} --stake-authority ${o}`;return tm(n,{shell:!0,stdio:"inherit"}),!0}catch(e){throw new Error(`deactivateStake: ${e}`)}},"deactivateStake");import{spawnSync as em}from"node:child_process";var us=r(async(t,e,o)=>{try{let n=`solana withdraw-stake ${t} ${e} ${o}`;return em(n,{shell:!0,stdio:"inherit"}),!0}catch(n){throw new Error(`withdrawStake: ${n}`)}},"withdrawStake");import It from"chalk";import{Connection as om,PublicKey as rm}from"@solana/web3.js";import{stakePoolInfo as nm}from"@solana/spl-stake-pool";var Be=r(async(t,e=B)=>{try{let o=new om(t),n=new rm(e);return await nm(o,n)}catch{return console.log(`Stake Pool not found: ${e}`),null}},"getStakePoolInfo");import{fetchDigitalAsset as sm}from"@metaplex-foundation/mpl-token-metadata";import{createUmi as am}from"@metaplex-foundation/umi-bundle-defaults";import{publicKey as im}from"@metaplex-foundation/umi";var fs=r(async(t,e)=>{try{let o=im(e);console.log(`mintPubkey: ${o}`);let n=am(t),s=await sm(n,o);return{name:s.metadata.name,symbol:s.metadata.symbol,uri:s.metadata.uri,mint:e}}catch{return null}},"getTokenInfo");import Zt from"chalk";import hs from"inquirer";var ys=r(async t=>{let e=await hs.prompt([{type:"input",name:"stakePoolAddress",message:"Enter Stake Pool Address(default: elSOL)",default:B}]);try{let o=await Be(t,e.stakePoolAddress);if(!o)return console.log(Zt.yellow(`\u26A0\uFE0F Invalid Stake Pool Address
|
|
421
421
|
Please check the correct address and try again.
|
|
422
422
|
`)),console.log(Zt.white(`For stake pool information
|
|
@@ -428,8 +428,8 @@ Please check the correct address and try again.
|
|
|
428
428
|
`)),console.log(Zt.white(`For stake pool information
|
|
429
429
|
\u{1F517} https://solanacompass.com/stake-pools/`)),null}},"selectLST");import{readFile as gm}from"fs/promises";import oe from"inquirer";import{existsAsync as wm}from"@skeet-framework/utils";import{Connection as ws,Keypair as hm,PublicKey as ee}from"@solana/web3.js";import{Connection as cm,PublicKey as lm,Keypair as mm}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as pm}from"@solana/spl-token";var te=r(async(t,e,o,n,s=!1)=>{try{let a=mm.fromSecretKey(new Uint8Array(e)),i=new lm(o),c=new cm(t);return(await pm(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 ym}from"cli-spinner";import wt from"chalk";import{PublicKey as Ts,Keypair as Es,Transaction as Ss,ComputeBudgetProgram as dm,LAMPORTS_PER_SOL as um}from"@solana/web3.js";import*as gs from"@solana/spl-stake-pool";var Rt=r(async(t,e,o,n=new Ts(B),s,a,i)=>{try{let c=Es.fromSecretKey(new Uint8Array(e)),l=o*um,{instructions:p,signers:d}=await fm(t,e,l,n,s,a,i),m=new Ss().add(...p);m.feePayer=c.publicKey;let f=await t.getLatestBlockhashAndContext({commitment:"finalized"});m.recentBlockhash=f.value.blockhash,m.sign(...d,c);let S=new Ss().add(...p).add(dm.setComputeUnitPrice({microLamports:1e3}));S.feePayer=c.publicKey,S.recentBlockhash=f.value.blockhash,S.sign(...d,c);let w=await t.sendRawTransaction(S.serialize(),{skipPreflight:!0});return await t.confirmTransaction({...f.value,signature:w},"finalized"),{status:"success",signature:w}}catch(c){return console.log("depositSol error",c),{status:"error",error:c}}},"depositSol"),fm=r(async(t,e,o,n=new Ts(B),s,a,i)=>{let l=Es.fromSecretKey(new Uint8Array(e)).publicKey;return await gs.depositSol(t,n,l,o,s,a,i)},"depositSOLInstruction");import{sleep as As}from"@skeet-framework/utils";var Je=r(async(t,e,o,n)=>{console.log(wt.white("Solana RPC URL:",t));let s=new ws(t);o===0&&(o=await Ge());let a=new ym("%s");a.setSpinnerString(18),a.start(),a.setSpinnerTitle(wt.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let i=new ee(e),c=hm.fromSecretKey(new Uint8Array(n)),l=Q;a.setSpinnerTitle(wt.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let p=await te(t,n,l,c.publicKey);await As(1e3),a.setSpinnerTitle(wt.green("\u{1F504} Converting SOL to elSOL"));let d=await Rt(s,n,o,i,new ee(p),new ee(lo),c.publicKey),m=0;for(;d.status!=="success";){if(m++,m>10)return a.stop(!0),console.log(wt.red("Failed to deposit.Please try again later \u{1F64F}")),!1;a.setSpinnerTitle(wt.yellow(`\u23F3 ${m} Times Retrying...`)),await As(3e3),s=new ws(t),d=await Rt(s,n,o,i,new ee(p),new ee(lo),c.publicKey)}return a.stop(!0),console.log(wt.white(`\u{1F4B0} Finished Deposit - You've got elSOL \u2728
|
|
430
430
|
|
|
431
|
-
Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as Sm,Keypair as Tm,PublicKey as
|
|
432
|
-
`)),await _s(1e3),S=await Rt(a,n,o,c,new
|
|
431
|
+
Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as Sm,Keypair as Tm,PublicKey as vt}from"@solana/web3.js";import{Spinner as Em}from"cli-spinner";import Ct from"chalk";import{sleep as _s}from"@skeet-framework/utils";var Ns=r(async(t,e,o,n,s)=>{let a=new Sm(t);o===0&&(o=await Ge());let i=new Em("%s");i.setSpinnerString(18),i.start(),i.setSpinnerTitle(Ct.green(`\u2714\uFE0E Checking Stake Pool ${e}...`));let c=new vt(e),l=await Be(t,e);if(!l)return console.log("Stake Pool not found"),!1;i.setSpinnerTitle(Ct.green("\u{1F50D} Getting or Creating AssociatedTokenAccount"));let p=l.poolMint,d=Tm.fromSecretKey(new Uint8Array(n)),m=await te(t,n,p,d.publicKey),f=await te(t,n,p,new vt(mr),!0);await _s(1e3),i.setSpinnerTitle(Ct.green(`\u{1F504} Converting SOL to ${s}`));let S=await Rt(a,n,o,c,new vt(m),new vt(f),d.publicKey),w=0;for(;S.status!=="success";){if(w++,w>10)return i.stop(!0),console.log(Ct.red("Failed to deposit.Please try again later \u{1F64F}")),!1;console.log(Ct.yellow(`\u23F3 ${w} Times Retrying...
|
|
432
|
+
`)),await _s(1e3),S=await Rt(a,n,o,c,new vt(m),new vt(f),d.publicKey)}return i.stop(!0),console.log(Ct.white(`\u{1F4B0} You've got ${s} \u2728
|
|
433
433
|
|
|
434
434
|
Signature:`,S.signature)),!0},"depositeLST");import{execSync as ze}from"node:child_process";import{homedir as Am}from"os";var Os=r(t=>{h.command("stake").description("Stake SOL").option("-l, --lst","Convert to Liquid Stake Token").option("-e, --elsol","Convert to elSOL",!1).option("-a, --amount <amount>","Amount of SOL to stake","0").action(async e=>{let o=Number(e.amount);console.log("RPC URL:",t.RPC_URL);let n=B,s=t.NETWORK===u.TESTNET,a=Am(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(ze(`solana config set --keypair ${i}`),!await wm(i)){console.log(It.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
|
|
435
435
|
`)),console.log(It.white(i));return}let c=JSON.parse(await gm(i,"utf-8"));if(e.elsol){await Je(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await ys(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Ns(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ps(t))return;let p=await L(),{validatorVoteAccount:d,stakeAccounts:m}=await Nm(p);for await(let f of m)try{await cs(f,d)}catch{console.log(It.yellow(`Network might be busy, please try again later
|
|
@@ -437,7 +437,7 @@ You can use a custom RPC endpoint to avoid this issue
|
|
|
437
437
|
`))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await km();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await _m();for await(let n of o)try{await ds(n)}catch{console.log(It.yellow(`Network might be busy, please try again later
|
|
438
438
|
You can use a custom RPC endpoint to avoid this issue
|
|
439
439
|
`))}}else{let o=await Rm();await us(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),Ge=r(async()=>{let t=ze("solana address").toString().trim(),e=ze("solana balance").toString().replace("SOL","").trim();console.log(It.white(`\u{1F4D7} Selected Wallet: ${t}
|
|
440
|
-
\u{1F4B0} Account Balance:`,e+" SOL")),console.log(It.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await oe.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),_m=r(async()=>{let t=await L();return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),Nm=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?Om(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to delegate stake to?",choices:e},{type:"input",name:"validatorVoteAccount",message:"What is the Validator Vote Account Address?",default(){return o}}])},"delegateStakeAsk"),Om=r(t=>{let n=`/home/
|
|
440
|
+
\u{1F4B0} Account Balance:`,e+" SOL")),console.log(It.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await oe.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),_m=r(async()=>{let t=await L();return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),Nm=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?Om(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to delegate stake to?",choices:e},{type:"input",name:"validatorVoteAccount",message:"What is the Validator Vote Account Address?",default(){return o}}])},"delegateStakeAsk"),Om=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return ze(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),km=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await oe.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Rm=r(async()=>{let t=(await L()).STAKE_ACCOUNTS;return await oe.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to withdraw stake from?",choices:t},{type:"input",name:"destinationAddress",message:"What is the destination address for the withdrawn SOL?",default(){return"xxxxxxxx"}},{type:"input",name:"solAmount",message:"How many SOL would you like to withdraw?",default(){return"1"}}])},"withdrawStakeAsk");import{execSync as vm}from"child_process";var ks=r(()=>{try{return vm("solana epoch --commitment finalized -ul",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getEpoch Error: ${t}`}},"getEpoch");import{execSync as Cm}from"child_process";var Rs=r(()=>{try{return Cm("solana --url http://127.0.0.1:8899 slot",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getSlot Error: ${t}`}},"getSlot");import it from"chalk";import{Spinner as Im}from"cli-spinner";var Pt;(function(t){t.successHex=it.hex("#39A845"),t.warningHex=it.hex("#FFD02E"),t.errorHex=it.hex("#B5332E"),t.syncHex=it.hex("#3073B7"),t.greyHex=it.hex("#BEBDBD"),t.indigoHex=it.hex("#3950A0"),t.pinkHex=it.hex("#D8A1C4"),t.normal=e=>{console.log(it.white(e))},t.syncSpinner=e=>{let o=new Im(it.white(e)+` %s
|
|
441
441
|
`);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(`
|
|
442
442
|
${e}`),console.log(`${o}`),console.log(`${n}`),console.log(`${s}`),console.log(`${a}`),console.log(`${i}
|
|
443
443
|
`),console.log(`Solc Version: v${ce}
|
|
@@ -461,13 +461,13 @@ $ solc mt -p <fileSystem>
|
|
|
461
461
|
$ solc umt -p <fileSystem>
|
|
462
462
|
`,s=`mount reload
|
|
463
463
|
$ solc mtr
|
|
464
|
-
`;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(Pt||(Pt={}));import Lt from"chalk";import{spawnSync as Pm}from"node:child_process";var We=r(()=>{Pm("solana config get",{shell:!0,stdio:"inherit"});let e=lt();console.log(Lt.white("start-validator.sh: ")+e.scriptPath),console.log(Lt.white("
|
|
465
|
-
user = "
|
|
464
|
+
`;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(Pt||(Pt={}));import Lt from"chalk";import{spawnSync as Pm}from"node:child_process";var We=r(()=>{Pm("solana config get",{shell:!0,stdio:"inherit"});let e=lt();console.log(Lt.white("start-validator.sh: ")+e.scriptPath),console.log(Lt.white("service unit: ")+P.SOL_SERVICE),console.log(Lt.white("logrotate: ")+P.SOL_LOGROTATE),console.log(Lt.white("sysctl.d: ")+P.SOL_SYSTEM_CONFIG21),console.log(Lt.white("limits.d: ")+P.SOL_NOFILES_CONF),console.log(Lt.white("system.conf: ")+P.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as vs}from"node:child_process";import Lm from"chalk";var Cs=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?Z:tt;t.NODE_TYPE===T.RPC&&(o=St);let n=h.command("get").description("Get Solana Validator's Information").argument("<cmd>","Subcommands: epoch, slot, catchup, snapshot, contact, config");n.command("epoch").description("Show Validator's Epoch").action(()=>{let s=ks();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=vs(s,{shell:!0,stdio:"pipe"});console.log(Lm.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Rs();console.log({slot:s})}),n.command("snapshot").alias("sn").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed","45").option("-l, --ledgerPath <ledgerPath>","Ledger Path","/mnt/ledger").option("-s, --snapshotPath <snapshotPath>","Snapshot Path","/mnt/ledger/snapshot").option("-v, --version <version>","Specific Version Node",o).description("Download the latest snapshot").action(s=>{let a=s.minDownloadSpeed,i=s.ledgerPath,c=s.snapshotPath,l=s.version;xe(e,a,i,c,l)}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${K()} --ledger /mnt/ledger/ contact-info`;vs(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{We()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{Pt.solvAA(),s.client?Pt.installClientMessage():Pt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as xm}from"node:child_process";var Is=r(()=>{xm("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as Vm}from"node:child_process";var Ps=r(()=>{Vm("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as $m}from"node:child_process";var Ls=r(()=>{$m("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as Dm}from"node:child_process";var xs=r(()=>{Dm("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as Km}from"node:child_process";var Vs=r((t=!1)=>{Km(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import Ro from"chalk";import{spawnSync as Um}from"child_process";import{spawnSync as bm}from"node:child_process";var $s=r(()=>{bm("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Ds=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{Is()}),t.command("start").description("Start Relayer").action(()=>{Ps()}),t.command("stop").description("Stop Relayer").action(()=>{Ls()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{Vs(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{xs()}),t.command("enable").description("Enable Relayer").action(()=>{$s()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(Ro.red("Please provide a URL"));return}let o=`${K()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(Ro.white("Setting Relayer URL ...")),Um(o,{shell:!0,stdio:"inherit"}),console.log(Ro.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");var Mm=r(()=>({filePath:"/home/solv/firedancer/config.toml",body:`name = "solc"
|
|
465
|
+
user = "solv"
|
|
466
466
|
scratch_directory = "/home/{user}"
|
|
467
467
|
dynamic_port_range = "8900-9000"
|
|
468
468
|
|
|
469
469
|
[log]
|
|
470
|
-
path = "/home/
|
|
470
|
+
path = "/home/solv/solana-validator.log"
|
|
471
471
|
colorize = "auto"
|
|
472
472
|
level_logfile = "INFO"
|
|
473
473
|
level_stderr = "NOTICE"
|
|
@@ -506,10 +506,10 @@ dynamic_port_range = "8900-9000"
|
|
|
506
506
|
]
|
|
507
507
|
|
|
508
508
|
[consensus]
|
|
509
|
-
identity_path = "/home/
|
|
510
|
-
vote_account_path = "/home/
|
|
509
|
+
identity_path = "/home/solv/mainnet-validator-keypair.json"
|
|
510
|
+
vote_account_path = "/home/solv/mainnet-vote-account-keypair.json"
|
|
511
511
|
authorized_voter_paths = [
|
|
512
|
-
"/home/
|
|
512
|
+
"/home/solv/mainnet-validator-keypair.json"
|
|
513
513
|
]
|
|
514
514
|
snapshot_fetch = true
|
|
515
515
|
genesis_fetch = true
|
|
@@ -527,7 +527,7 @@ dynamic_port_range = "8900-9000"
|
|
|
527
527
|
mount_path = "/mnt"`}),"configTomlMainnet"),Ks=Mm;import{writeFile as Fm,mkdir as Hm}from"fs/promises";import{existsSync as bs}from"fs";import Ym from"path";import Us from"chalk";var jm=r((t,e)=>{let o=t;if(e.identity&&(o=o.replace(/identity_path\s*=\s*\"[^\"]*\"/,`identity_path = "${e.identity}"`)),e.vote&&(o=o.replace(/vote_account_path\s*=\s*\"[^\"]*\"/,`vote_account_path = "${e.vote}"`)),e.auth&&e.auth.length>0){let n=e.auth.map(s=>`"${s}"`).join(`,
|
|
528
528
|
`);o=o.replace(/authorized_voter_paths\s*=\s*\[[\s\S]*?\]/,`authorized_voter_paths = [
|
|
529
529
|
${n}
|
|
530
|
-
]`)}return o},"renderWithOverrides"),Ms=r(()=>{h.command("firedancer").description("Firedancer utilities").command("config").description("Generate Firedancer config.toml").option("-n, --network <network>","Network: mainnet-beta|testnet").option("-i, --identity <path>","Identity keypair path").option("-v, --vote <path>","Vote account keypair path").option("-a, --auth <paths...>","Authorized voter keypair paths").option("-o, --out <path>","Output path","/home/
|
|
530
|
+
]`)}return o},"renderWithOverrides"),Ms=r(()=>{h.command("firedancer").description("Firedancer utilities").command("config").description("Generate Firedancer config.toml").option("-n, --network <network>","Network: mainnet-beta|testnet").option("-i, --identity <path>","Identity keypair path").option("-v, --vote <path>","Vote account keypair path").option("-a, --auth <paths...>","Authorized voter keypair paths").option("-o, --out <path>","Output path","/home/solv/firedancer/config.toml").option("-f, --force","Overwrite if exists",!1).option("--dry-run","Print to stdout instead of writing",!1).action(async e=>{let o=await L(),s=(e.network||o.NETWORK)===u.MAINNET?Ks():Ke(),a=jm(s.body,{identity:e.identity,vote:e.vote,auth:e.auth});if(e.dryRun){console.log(a);return}let i=e.out||s.filePath,c=Ym.dirname(i);if(bs(c)||await Hm(c,{recursive:!0}),bs(i)&&!e.force){console.log(Us.red(`File exists: ${i}. Use --force to overwrite or --dry-run to preview`));return}await Fm(i,a),console.log(Us.green(`Wrote Firedancer config: ${i}`))})},"firedancerCommands");import Fs from"chalk";import{spawnSync as Bm}from"child_process";var Hs=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;Bm(e,{shell:!0,stdio:"inherit"})}catch{console.log(Fs.yellow(`You might need to install the Solana SPL CLI:
|
|
531
531
|
`)),console.log(Fs.white("$ cargo install spl-token-cli"))}},"splBalance");import{homedir as Gm}from"os";import{spawnSync as Jm}from"child_process";var pt=r(t=>{let e=`solana balance --keypair ${t}`,{stdout:o}=Jm(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolBalance");import zm from"chalk";import{spawnSync as Wm}from"node:child_process";var Ys=r(t=>{h.command("balance").alias("bal").alias("b").option("-s, --spl","Show SPL Token Balance",!1).description("Show Keypairs Balance").action(async e=>{if(e.spl){let n=`${Gm()}/mainnet-authority-keypair.json`;await Hs(n),process.exit(0)}await qm(t),process.exit(0)})},"balanceCommands"),qm=r(async t=>{let e=Qm(t),o=`Validator Key: ${e.validatorKey}
|
|
532
532
|
Address: ${e.validatorKeyAddress}
|
|
533
533
|
Balance: ${e.validatorKeyBalance}
|
|
@@ -540,17 +540,17 @@ Balance: ${e.authorityKeyBalance}
|
|
|
540
540
|
Active Identity:`;t.NODE_TYPE===T.RPC&&(o=`Validator Key: ${e.validatorKey}
|
|
541
541
|
Address: ${e.validatorKeyAddress}
|
|
542
542
|
Balance: ${e.validatorKeyBalance}
|
|
543
|
-
Active Identity:`),console.log(zm.white(o)),Wm(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),Qm=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:g(e.mainnetValidatorKey),validatorKeyBalance:pt(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:g(e.testnetValidatorKey),validatorKeyBalance:pt(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:g(e.testnetValidatorVoteKey),voteKeyBalance:pt(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:g(e.testnetValidatorAuthorityKey),authorityKeyBalance:pt(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:g(e.mainnetValidatorKey),validatorKeyBalance:pt(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:g(e.mainnetValidatorVoteKey),voteKeyBalance:pt(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:g(e.mainnetValidatorAuthorityKey),authorityKeyBalance:pt(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as Xm}from"child_process";var js=r(()=>{Xm("sudo rm -rf /home/
|
|
543
|
+
Active Identity:`),console.log(zm.white(o)),Wm(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),Qm=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:g(e.mainnetValidatorKey),validatorKeyBalance:pt(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:g(e.testnetValidatorKey),validatorKeyBalance:pt(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:g(e.testnetValidatorVoteKey),voteKeyBalance:pt(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:g(e.testnetValidatorAuthorityKey),authorityKeyBalance:pt(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:g(e.mainnetValidatorKey),validatorKeyBalance:pt(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:g(e.mainnetValidatorVoteKey),voteKeyBalance:pt(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:g(e.mainnetValidatorAuthorityKey),authorityKeyBalance:pt(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as Xm}from"child_process";var js=r(()=>{Xm("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as Bs}from"node:child_process";var Js=r(()=>{Bs("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),Bs("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as Zm}from"node:child_process";var Gs=r(t=>{let o=`${K()} --ledger ${y} monitor`;Zm(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as tp}from"node:child_process";var zs=r(()=>{tp("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import qe from"inquirer";import{execSync as Qe,spawnSync as vo}from"child_process";import re from"chalk";import{homedir as ep}from"os";var Ws=1e3,Co;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(Co||(Co={}));var Xe;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(Xe||(Xe={}));var op=Object.values(Co),qs=r(t=>{h.command("transfer").alias("tr").option("-s, --spl","Show SPL Token Balance",!1).description("Transfer Solana Tokens/SPL Tokens").action(async e=>{e.spl&&(console.log(re.blue(`\u2728 Coming Soon
|
|
544
544
|
This Feature is Currently Under Development
|
|
545
|
-
Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await rp(),a="0";try{let m=
|
|
545
|
+
Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await rp(),a="0";try{let m=vo(`solana balance ${s} --url ${t.RPC_URL}`,{shell:!0});if(m.status!==0)throw new Error("Invalid Wallet Address");a=m.stdout.toString(),console.log("toBalance:",a)}catch{console.log(re.red(`\u274C To Wallet is Invalid
|
|
546
546
|
Please Check the Wallet Address`)),process.exit(0)}let i=Qe(`solana balance ${n} --url ${t.RPC_URL}`).toString();console.log(re.white(`\u{1F3E6} From Wallet: ${n}
|
|
547
547
|
\u{1F4B0} Balance: ${i}`)),console.log(re.white(`\u{1F3E6} To Wallet: ${s}
|
|
548
|
-
\u{1F4B0} Balance: ${a}`));let{amount:c}=await qe.prompt([{type:"number",name:"amount",message:"Enter Amount to Transfer",default:.1}]),l=`solana transfer ${s} ${c} --allow-unfunded-recipient --keypair ${o} --url ${t.RPC_URL}`,p=
|
|
548
|
+
\u{1F4B0} Balance: ${a}`));let{amount:c}=await qe.prompt([{type:"number",name:"amount",message:"Enter Amount to Transfer",default:.1}]),l=`solana transfer ${s} ${c} --allow-unfunded-recipient --keypair ${o} --url ${t.RPC_URL}`,p=vo(l,{shell:!0,stdio:"inherit"}),d=pe;for(;p.status!==0&&d>0;)console.log(re.red(`\u274C Transaction Failed
|
|
549
549
|
Retrying Transaction in ${Ws}ms
|
|
550
|
-
Retries Left: ${d}`)),await et(Ws),p=
|
|
550
|
+
Retries Left: ${d}`)),await et(Ws),p=vo(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),ne=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),rp=r(async()=>{let t=ep(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=Qe(`solana address -k ${n}`).toString().trim(),a=await qe.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:op}]),i=a.from==="Validator Account"?Object.values(Xe).filter(m=>m!=="Validator Account"):Object.values(Xe).filter(m=>m!=="Authority Account");if((await qe.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:m}=await qe.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:ne}]);s=m}else{let m=a.from==="Validator Account"?e:o;n=`${t}/${m}`,s=Qe(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,p=`${t}/${l}`,d=Qe(`solana address -k ${p}`).toString().trim();return{fromWalletPath:p,fromAddress:d,toAddress:s}},"selectFromKeypairs");import Qs from"chalk";import np from"inquirer";import{execSync as Io,spawnSync as sp}from"node:child_process";var Xs=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?Te:t.RPC_URL,s=o?"~/testnet-validator-keypair.json":"~/mainnet-validator-keypair.json",a=o?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",i=o?"~/testnet-vote-account-keypair.json":"~/mainnet-vote-account-keypair.json",c=Io(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,p=Number(c)-.03;if(e)l=p;else{console.log(Qs.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(Qs.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let S=await np.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${p}`,default:String(p)}]);l=Number(S.sol)}let d=Io(`solana address --keypair ${i}`).toString().trim(),m=Io(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${m} ${l} --authorized-withdrawer ${a} --url ${n}`;sp(f,{shell:!0,stdio:"inherit"})},"withdraw");var Zs=r(t=>{h.command("withdraw").option("-a, --all","Withdraw All SOL",!1).description("Withdraw SOL from Vote Account to Authority Account").action(async e=>{await Xs(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as Tp,spawnSync as Ep}from"node:child_process";import{BN as ea}from"bn.js";import{LAMPORTS_PER_SOL as Po}from"@solana/web3.js";import{Connection as lp,LAMPORTS_PER_SOL as mp}from"@solana/web3.js";import{Keypair as ap}from"@solana/web3.js";import{readFile as ip}from"fs/promises";var cp=r(async t=>{let e=JSON.parse(await ip(t,"utf8"));return ap.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),ta=cp;import{homedir as pp}from"os";var H;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(H||(H={}));var dp={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},up=r(async(t,e="auth",o=!1)=>{let n=new lp(t),s=pp(),a=A(s),c=`${o?"testnet":"mainnet"}${dp[e]}`,l=a[c],p=await ta(l),d=await n.getBalance(p.publicKey),f=Number(d)/mp;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),rt=up;var fp=new ea(3*Po),oa=r(async t=>{let e=await rt(t,H.VALIDATOR),n=new ea(Number(Number(e)*Po)).sub(fp),s=Number(n)/Po;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import se from"chalk";import{Keypair as hp,Connection as yp,PublicKey as Sp,SystemProgram as ra,ComputeBudgetProgram as Ze,VersionedTransaction as na,TransactionMessage as sa}from"@solana/web3.js";var aa=r(async(t,e,o,n)=>{let s=0;try{let a=new yp(t,"finalized"),i=hp.fromSecretKey(new Uint8Array(Array.from(e))),c=new Sp(o),l=n;for(;;)try{let p=[ra.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),Ze.setComputeUnitLimit({units:2e5}),Ze.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),m=new na(new sa({instructions:p,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(m,{replaceRecentBlockhash:!0,sigVerify:!1});m.sign([i]);let S=[ra.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),Ze.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),Ze.setComputeUnitPrice({microLamports:1e3})],w=new na(new sa({instructions:S,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let _=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:_},"finalized"),console.log("finalized signature:",_),_}catch(p){if(s++,s>pe)throw new Error(JSON.stringify(p));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${p}`),await et(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as gp}from"fs/promises";import{LAMPORTS_PER_SOL as wp}from"@solana/web3.js";var Lo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await rt(t,H.VOTE)<1?(console.log(se.white("Vote Account Balance is less than 1 SOL")),console.log(se.white("Skip withdrawing SOL from Vote Account to Authority Account"))):Ep("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await oa(t);console.log(se.white(`Transferable Balance: ${s} SOL`));let a=s*wp;if(s<1)console.log(se.white("Validator Account Balance is less than 1 SOL")),console.log(se.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=Tp(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await gp(o,"utf-8"));await aa(t,c,i,a)}return!0},"collectSOL");import{readFile as Lp}from"fs/promises";import xp from"inquirer";import xo from"chalk";import{execSync as Ap}from"child_process";import{homedir as _p}from"os";var Np=r(async t=>{try{let e=_p(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${Q} --owner ${o} --url ${t}`,s=Ap(n).toString().trim();return Number(s)}catch(e){return console.log(xo.red(`Error: ${e}`)),console.log(xo.yellow(`You might need to install the Solana SPL CLI:
|
|
551
551
|
`)),console.log(xo.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),ia=Np;import oo from"chalk";import{Connection as Op,PublicKey as ca,Keypair as kp,ComputeBudgetProgram as to,VersionedTransaction as la,TransactionMessage as ma}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as pa,createTransferInstruction as da,TOKEN_PROGRAM_ID as ua}from"@solana/spl-token";var fa=r(async(t,e,o,n,s,a)=>{try{let i=new Op(t,"finalized"),c=kp.fromSecretKey(new Uint8Array(e)),l=new ca(o),p=new ca(s),d=Math.trunc(n*Math.pow(10,a)),m=await pa(i,c,p,c.publicKey),f=await pa(i,c,p,l,!0);for(;;)try{let S=[da(m.address,f.address,c.publicKey,d,[],ua),to.setComputeUnitLimit({units:2e5}),to.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),_=new la(new ma({instructions:S,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),N=await i.simulateTransaction(_,{replaceRecentBlockhash:!0,sigVerify:!1});_.sign([c]);let J=[da(m.address,f.address,c.publicKey,d,[],ua),to.setComputeUnitLimit({units:N.value.unitsConsumed?Math.trunc(N.value.unitsConsumed*1.2):2e5}),to.setComputeUnitPrice({microLamports:1e3})],V=new la(new ma({instructions:J,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());V.sign([c]);let _t=await i.sendRawTransaction(V.serialize());return await i.confirmTransaction({...w.value,signature:_t},"finalized"),console.log("finalized signature:",_t),_t}catch(S){console.error("Transfer failed, retrying...",S)}}catch(i){throw console.error(i),i}},"transferSPLToken");import eo from"inquirer";import{spawnSync as ha}from"child_process";import Vo from"chalk";import{promises as ya}from"fs";var Rp=r(async(t="epochTimer")=>{try{let e=ha("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log(Vo.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
|
|
552
552
|
`).filter(a=>!a.includes(t)).join(`
|
|
553
|
-
`),s="/tmp/temp_crontab";await ya.writeFile(s,n,"utf-8"),ha("crontab",[s]),await ya.unlink(s),console.log(Vo.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(Vo.red("Error removing cron job:",e))}},"removeCronJob"),Sa=Rp;import Ta from"chalk";var
|
|
553
|
+
`),s="/tmp/temp_crontab";await ya.writeFile(s,n,"utf-8"),ha("crontab",[s]),await ya.unlink(s),console.log(Vo.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(Vo.red("Error removing cron job:",e))}},"removeCronJob"),Sa=Rp;import Ta from"chalk";var vp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await eo.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 Me()&&await Sa(),await R({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
|
|
554
554
|
${Ta.green("No more Login to the server to update \u{1F331}")}
|
|
555
555
|
|
|
556
556
|
If you enable this, solc will update automatically when the solc/solana version is updated.
|
|
@@ -559,7 +559,7 @@ AUTO UPDATE: If you enable this, solc will update automatically when the solc ve
|
|
|
559
559
|
|
|
560
560
|
AUTO RESTART: If you enable this, solc will restart automatically when the solana version is updated.
|
|
561
561
|
\u203B Please turn off if you are using no-downtime migration.
|
|
562
|
-
`;console.log(Ta.white(n));let s=await eo.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 eo.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await eo.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:ne}]);i=l.harvestAddress,a=l.rpcUrl}return await R({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"),Ea=
|
|
562
|
+
`;console.log(Ta.white(n));let s=await eo.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 eo.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await eo.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:ne}]);i=l.harvestAddress,a=l.rpcUrl}return await R({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"),Ea=vp;import{spawnSync as Vp}from"node:child_process";import{Connection as Pp}from"@solana/web3.js";import{Connection as Cp}from"@solana/web3.js";var Ip=r(async(t,e=10,o=.4)=>{try{let s=await new Cp(t).getRecentPerformanceSamples(e);if(s.length===0)return console.warn("No performance samples available. Using fallback slot time."),o;let a=s.filter(c=>c.numSlots!==0);return a.length===0?(console.warn("All performance samples have numSlots equal to 0. Using fallback slot time."),o):a.reduce((c,l)=>c+l.samplePeriodSecs/l.numSlots,0)/a.length}catch(n){return console.error(`getAverageSlotTime failed: ${n}. Using fallback slot time.`),o}},"getAverageSlotTime"),ga=Ip;var $o=r(async t=>{try{let o=await new Pp(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await ga(t);console.log("timePerSlotSeconds",n);let a=(o.slotsInEpoch-o.slotIndex)*n,i=(o.slotIndex/o.slotsInEpoch*100).toFixed(2),c=Math.floor(a/(3600*24)),l=Math.floor(a%(3600*24)/3600),p=Math.floor(a%3600/60),d=Math.floor(a%60),m=`${c}d ${l}h ${p}m ${d}s`;return c===0&&(m=`${l}h ${p}m ${d}s`),{...o,estimatedTimeUntilNextEpoch:m,displayRatio:i}}catch(e){throw new Error(`getEpochInfo failed: ${e}`)}},"getEpochInfo");var $p=.03,wa=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await Dp(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await Lo(t.RPC_URL);let n=await rt(t.RPC_URL,H.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await et(1e3),await Lo(t.RPC_URL),n=await rt(t.RPC_URL,H.VOTE),s++;let a=JSON.parse(await Lp(o,"utf-8")),i=await rt(t.RPC_URL,H.AUTH);if(i<1)console.log(oo.white("Authority Account Balance is less than 1 SOL")),console.log(oo.white("Skip converting SOL to elSOL"));else{let l=i-$p;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await Je(t.RPC_URL,B,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await ia(t.RPC_URL);if(c<1){let l=await $o(t.RPC_URL);console.log("elSOL Balance is less than 1 elSOL");let p=`elSOL Balance is less than 1 elSOL for ${l.epoch}`;await x(p),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await fa(t.RPC_URL,a,e,c,Q,pr),t.IS_MEV_MODE){let p=`\u{1F4B0} Harvested Rewards for ${(await $o(t.RPC_URL)).epoch} \u{1F4B0}
|
|
563
563
|
Validator Address: ${g(o)}
|
|
564
564
|
Total Reward: ${c} elSOL
|
|
565
565
|
Harvest Address: ${e}`;await x(p)}console.log(oo.green("\u2714\uFE0E Successfully Harvested SOL")),process.exit(0)}),h.command("auto").alias("mev").description("Enable Auto Operation Mode").action(async()=>{await Ea(t)&&(Vp("solc cron epoch",{stdio:"inherit",shell:!0}),console.log(oo.green("\u2714\uFE0E Auto Operation Mode Enabled"))),process.exit(0)})},"harvestCommands"),Dp=r(async t=>{try{let e=t.HARVEST_ACCOUNT;if(e==="")throw new Error("Harvest Address not found");return e}catch{let o=await xp.prompt([{type:"input",name:"harvestAddress",message:"Enter Harvest Address",validate:ne}]);return await R({HARVEST_ACCOUNT:o.harvestAddress}),o.harvestAddress}},"getHarvestAddress");import{format as nd}from"@skeet-framework/utils";import{writeFile as Kp}from"fs/promises";var bp=r(async t=>{await Kp(Se,JSON.stringify({...t},null,2),"utf-8")},"writeEpochDataToFile"),dt=bp;var Up=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=n?g(a):g(s),c=`===\u23F3 ${t.epoch} \u23F3===
|
|
@@ -573,39 +573,39 @@ Validator: ${i}
|
|
|
573
573
|
Network: ${e.NETWORK}
|
|
574
574
|
CurrentEpoch: ${t.epoch}
|
|
575
575
|
Epoch has been updated!
|
|
576
|
-
Until Next Epoch: Approximately 2 days`;return await x(c),"Epoch has been updated!"},"newEpoch"),ka=Jp;import{existsAsync as Gp}from"@skeet-framework/utils";import{readFile as zp,writeFile as Wp}from"fs/promises";import qp from"chalk";import{homedir as Qp}from"os";var Xp=r(async()=>{let e=Qp().includes("/home/
|
|
576
|
+
Until Next Epoch: Approximately 2 days`;return await x(c),"Epoch has been updated!"},"newEpoch"),ka=Jp;import{existsAsync as Gp}from"@skeet-framework/utils";import{readFile as zp,writeFile as Wp}from"fs/promises";import qp from"chalk";import{homedir as Qp}from"os";var Xp=r(async()=>{let e=Qp().includes("/home/solv")?Se:"./currentEpoch.json";if(await Gp(e))return JSON.parse(await zp(e,"utf-8"));let o={epoch:0,isLessThan1Hour:!1,isLessThan8Hours:!1,isLessThan1Day:!1};return await Wp(e,JSON.stringify(o,null,2),"utf-8"),console.log(qp.white("\u2714\uFE0F Initial epoch data has been created!")),o},"initOrReadEpochFile"),Ra=Xp;import Zp from"chalk";var td=r(async t=>{let e=t.RPC_URL,o=t.NETWORK===u.TESTNET;if(o&&(e=Jo),await rt(e,H.VALIDATOR,o)<mo){let{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=o?g(a):g(s),c=`\u26A0\uFE0F Validator Account Balance is less than ${mo} SOL
|
|
577
577
|
Please top up your Validator Account
|
|
578
|
-
Address: ${i}`;return await x(c),!1}return console.log(Zp.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),
|
|
578
|
+
Address: ${i}`;return await x(c),!1}return console.log(Zp.green("\u2714\uFE0F Validator Account Balance is sufficient")),!0},"checkBalance"),va=td;async function ed(t="@ily-validator/solc"){try{let e=`https://registry.npmjs.org/${t}`,o=await fetch(e);if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);return(await o.json())["dist-tags"].latest}catch(e){return console.error(`Error fetching latest version for package ${t}:`,e),null}}r(ed,"getNpmLatestVersion");var Ca=ed;async function od(){let t=Ot(),e=await Ca();if(!e)throw new Error("Failed to get NPM API");return console.log("currentVersion:",t),console.log("latestVersion:",e),t===e}r(od,"isVersionSame");var Ia=od;import{spawnSync as sd}from"child_process";import{spawnSync as rd}from"node:child_process";var Pa=r(t=>{try{let e=`solana epoch-info --url '${t}'`,{stdout:o}=rd(e,{shell:!0,stdio:"pipe"}),s=o.toString().split(`
|
|
579
579
|
`),a=s.find(f=>f.includes("Epoch Completed Time:")),i=s.find(f=>f.includes("Epoch Completed Percent:"))?.replace("Epoch Completed Percent:",""),c=Number(s.find(f=>f.includes("Epoch:"))?.replace("Epoch:",""));if(!a||!i||!c)throw new Error("Epoch Completed Time not found");let p=a.split("(")[1].replace(" remaining)","");console.log("remainingTime:",p);let d=/(?:(\d+)day\s*)?(?:(\d+)h\s*)?(?:(\d+)m\s*)?(?:(\d+)s\s*)?/,m=p.match(d);if(m){let f=m[1]?parseInt(m[1]):0,S=m[2]?parseInt(m[2]):0,w=m[3]?parseInt(m[3]):0,_=m[4]?parseInt(m[4]):0,N=f*24*60+S*60+w+Math.floor(_/60);return{epoch:c,day:f,hour:S,min:w,sec:_,totalMinutes:N,epochRemainingTime:p,epochCompletedPercent:i}}else throw new Error("Time information could not be parsed")}catch(e){throw new Error(`getEpochInfoByRust failed: ${e}`)}},"getEpochInfoByRust");var ad=r(async t=>{let e=t.NETWORK===u.TESTNET,o=e?Te:t.RPC_URL,n=nd(new Date,"yyyy-MM-dd HH:mm:ss");console.log(`Checking Epoch at ${n}`);let s=await Ra(),a=Pa(o),{mainnetValidatorVoteKey:i,testnetValidatorVoteKey:c}=A(),p=await jt(o,g(e?c:i));if(p.isActive||await x(`\u26A0\uFE0F Validator is not active!
|
|
580
580
|
VoteAccount: ${p.pubkey}
|
|
581
581
|
Reason: ${p.reason}
|
|
582
582
|
Network: ${t.NETWORK}
|
|
583
|
-
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${p.isActive}`),await
|
|
583
|
+
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${p.isActive}`),await va(t),!await Ia()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),sd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await ka(a,t),"Epoch has been updated!";let m=a.totalMinutes,f=[Oa,_a,Aa];for(let S of f)if(await S(m,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),La=ad;var xa=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await La(t),process.exit(0)})},"epochTimerCommands");import Ga from"inquirer";import{join as Ka}from"path";import{spawnSync as $t}from"node:child_process";import Y from"chalk";import{spawnSync as id}from"node:child_process";var cd=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=id(`ssh -i ${s} -o StrictHostKeyChecking=no ${o}@${t} -p 22 'cd ~ && source ~/.profile && ${e}'`,{shell:!0,stdio:n});return i.status!==0?(console.log(`\u26A0\uFE0F CMD Failed. Please check your SSH connection.
|
|
584
584
|
$ ssh ${o}@${t}
|
|
585
585
|
|
|
586
586
|
Failed Cmd: ${e}`),a={status:i.status,stdout:String(i.stdout),stderr:i.stderr.toString()},a):(a={status:i.status,stdout:i.stdout.toString(),stderr:i.stderr.toString()},a)}catch(i){return console.log(`scpSSH Error: ${i}`),a={status:null,stdout:"",stderr:String(i)},a}},"scpSSH"),Va=cd;import $a from"chalk";var ld=r((t,e)=>{console.log($a.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=g(t).trim(),n=Va(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log($a.yellow(`\u26A0\uFE0F Destination Identity Key is different.
|
|
587
587
|
Please check your Validator
|
|
588
|
-
$ ssh
|
|
588
|
+
$ ssh solv@${e}
|
|
589
589
|
|
|
590
590
|
Local Identity Key: ${o}
|
|
591
|
-
Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Vt=ld;var ro=Ka(
|
|
592
|
-
$ ssh
|
|
591
|
+
Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Vt=ld;var ro=Ka(C,ft),Da=Ka(C,ut),ba=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?I:D;s&&(a=I);let i=K();if(!Vt(a,t))return;console.log(Y.white("\u{1F7E2} Waiting for restart window..."));let l=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if($t(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
592
|
+
$ ssh solv@${t}
|
|
593
593
|
|
|
594
|
-
Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(Y.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no
|
|
595
|
-
$ ssh
|
|
594
|
+
Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(Y.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} set-identity ${ro}'`;if($t(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
595
|
+
$ ssh solv@${t}
|
|
596
596
|
|
|
597
|
-
Failed Cmd: ${i} -l ${y} set-identity ${ro}`));return}if(console.log(Y.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),$t(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no
|
|
598
|
-
$ ssh
|
|
597
|
+
Failed Cmd: ${i} -l ${y} set-identity ${ro}`));return}if(console.log(Y.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),$t(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${ro} ${Da}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
598
|
+
$ ssh solv@${t}
|
|
599
599
|
|
|
600
|
-
Failed Cmd: ln -sf ${ro} ${Da}`));return}if(console.log(Y.white("\u{1F7E2} Uploading the tower file to the new validator...")),$t(`scp
|
|
601
|
-
$ ssh
|
|
600
|
+
Failed Cmd: ln -sf ${ro} ${Da}`));return}if(console.log(Y.white("\u{1F7E2} Uploading the tower file to the new validator...")),$t(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
|
|
601
|
+
$ ssh solv@${t}
|
|
602
602
|
|
|
603
|
-
Failed Cmd: scp
|
|
603
|
+
Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(Y.white("\u{1F7E2} Setting identity on the new validator...")),$t(`${i} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
604
604
|
|
|
605
605
|
Failed Cmd: ${i} -l ${y} set-identity ${a}
|
|
606
606
|
ln -sf ${a} ${O}`));return}if($t(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
607
607
|
|
|
608
|
-
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(Y.white("\u{1F7E2} Identity changed successfully!")),await R({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as Fa}from"path";import F from"chalk";import{spawnSync as Dt}from"node:child_process";var Ua=Fa(
|
|
608
|
+
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(Y.white("\u{1F7E2} Identity changed successfully!")),await R({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as Fa}from"path";import F from"chalk";import{spawnSync as Dt}from"node:child_process";var Ua=Fa(C,ft),md=Fa(C,ut),Ma="~/.ssh/id_rsa",Ha=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?I:D;s&&(a=I);let i=K();if(!Vt(a,t))return;let l=`${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`,p=`${i} -l ${y} set-identity ${Ua}`,d=`ln -sf ${Ua} ${md}`,m=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,S=`ln -sf ${a} ${O}`;if(console.log(F.white("\u{1F7E2} Waiting for restart window...")),Dt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
609
609
|
|
|
610
610
|
Failed Cmd: ${l}`));return}if(console.log(F.white("\u{1F7E2} Setting identity on the new validator...")),Dt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
|
|
611
611
|
|
|
@@ -613,24 +613,24 @@ Failed Cmd: ${p}`));return}if(console.log(F.white("\u{1F7E2} Changing the Symlin
|
|
|
613
613
|
|
|
614
614
|
Failed Cmd: ${d}`));return}if(console.log(F.white("\u{1F7E2} Uploading the tower file to the new validator...")),Dt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your Validator
|
|
615
615
|
|
|
616
|
-
Failed Cmd: ${m}`));return}console.log(F.white("\u{1F7E2} Setting identity on the new validator..."));let V=`ssh -i ${Ma} -o StrictHostKeyChecking=no
|
|
617
|
-
$ ssh
|
|
616
|
+
Failed Cmd: ${m}`));return}console.log(F.white("\u{1F7E2} Setting identity on the new validator..."));let V=`ssh -i ${Ma} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${f}'`;Dt(V,{shell:!0,stdio:"inherit"}).status!==0&&console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
|
|
617
|
+
$ ssh solv@${t}
|
|
618
618
|
|
|
619
|
-
Failed Cmd: ${f}`)),console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Ut=`ssh -i ${Ma} -o StrictHostKeyChecking=no
|
|
619
|
+
Failed Cmd: ${f}`)),console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Ut=`ssh -i ${Ma} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${S}'`;if(Dt(Ut,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
|
|
620
620
|
|
|
621
|
-
Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await R({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as pd}from"node:child_process";function Ya(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5
|
|
622
|
-
$ ssh
|
|
621
|
+
Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await R({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as pd}from"node:child_process";function Ya(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return pd(e,{shell:!0,stdio:"inherit"}).status===0}r(Ya,"checkSSHConnection");import ae from"chalk";import{join as Ba}from"path";import{spawnSync as Kt}from"node:child_process";import j from"chalk";var no=Ba(C,ft),ja=Ba(C,ut),Ja=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?I:D;if(s&&(a=I),!Vt(a,t))return;let c=Yo,l=jo;console.log(j.white("\u{1F7E2} Waiting for restart window..."));let p=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(Kt(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
622
|
+
$ ssh solv@${t}
|
|
623
623
|
|
|
624
|
-
Failed Cmd: ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(j.white("\u{1F7E2} Setting identity on the new validator..."));let m=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no
|
|
625
|
-
$ ssh
|
|
624
|
+
Failed Cmd: ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(j.white("\u{1F7E2} Setting identity on the new validator..."));let m=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} set-identity ${no}'`;if(Kt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
625
|
+
$ ssh solv@${t}
|
|
626
626
|
|
|
627
|
-
Failed Cmd: ${c} -l ${y} set-identity ${no}`));return}if(console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Kt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no
|
|
628
|
-
$ ssh
|
|
627
|
+
Failed Cmd: ${c} -l ${y} set-identity ${no}`));return}if(console.log(j.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),Kt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${no} ${ja}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
628
|
+
$ ssh solv@${t}
|
|
629
629
|
|
|
630
|
-
Failed Cmd: ln -sf ${no} ${ja}`));return}if(console.log(j.white("\u{1F7E2} Uploading the tower file to the new validator...")),Kt(`scp
|
|
631
|
-
$ ssh
|
|
630
|
+
Failed Cmd: ln -sf ${no} ${ja}`));return}if(console.log(j.white("\u{1F7E2} Uploading the tower file to the new validator...")),Kt(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
|
|
631
|
+
$ ssh solv@${t}
|
|
632
632
|
|
|
633
|
-
Failed Cmd: scp
|
|
633
|
+
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...")),Kt(`${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
|
|
634
634
|
|
|
635
635
|
Failed Cmd: ${l} -l ${y} set-identity ${a}
|
|
636
636
|
ln -sf ${a} ${O}`));return}if(Kt(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(j.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
@@ -662,6 +662,6 @@ You can upgrade your API key to increase your rate limits.
|
|
|
662
662
|
Get Your API key \u{1F447}
|
|
663
663
|
Validators Solutions: ${Mt}
|
|
664
664
|
`;console.error(U.white(ie)),process.exit(0)}let J=Buffer.from(N.swapTransaction,"base64"),V=gd.deserialize(J);V.sign([_]);let _t=V.serialize(),Ut=await l.sendRawTransaction(_t,{skipPreflight:!0,maxRetries:2}),Ko=V.message.recentBlockhash;return console.log(`Swapping...
|
|
665
|
-
Transaction ID: ${Ut}`),await l.confirmTransaction({blockhash:Ko,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ut},"confirmed"),Ut},"swap");_d.config();var Za=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await Nd(e.RPC_URL,e.KEYPAIR_PATH,e.API_KEY,o.input,o.output,Number(o.amount),!o.skipConfirm,o.initConfig)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(At.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(At.red(`Swap Error: ${n.message}`)),process.exit(0)}})},"swapCommand"),Nd=r(async(t,e,o,n="",s="",a=0,i=!0,c=!1)=>{console.log(At.white("Solana RPC URL:",t)),console.log(At.white("KeyfilePath:",e)),(!e||e===""||c)&&await Od();let l=Wo,p=[...qo,"Other"],d=n,m="",f=s,S=a;if(d===""){let N=await bt.prompt([{type:"list",name:"name",message:"Select input mint",choices:p,default:de}]);N.name==="Other"?d=(await bt.prompt([{type:"input",name:"address",message:"Enter input mint address",default:ue}])).address:(m=N.name,d=so[m].tokenMint)}if(f===""){p=p.filter(V=>V!==m);let N=await bt.prompt([{type:"list",name:"name",message:"Select output mint",choices:p}]);if(N.name==="Other")f=(await bt.prompt([{type:"input",name:"address",message:"Enter output mint address",default:Q}])).address;else{let V=N.name;f=so[V].tokenMint}let J=N.name;f=so[J].tokenMint}if(S===0){let N=await bt.prompt([{type:"input",name:"amount",message:"Enter input amount in LAMPORTS. e.g. 0.01 SOL",default:"10000000"}]);S=Number(N.amount)}let _=await Xa(t,l,!o||o===""?Qo:o,e,d,f,S,i);_||process.exit(0),console.log(At.green("\u2714\uFE0E Sent Tx Successfully!")),console.log(At.white(`Check Your TX \u{1F449}: https://solscan.io/tx/${_}`))},"swapCmd");var Od=r(async()=>{let t=await bt.prompt([{type:"input",name:"RPC_URL",message:"Enter Solana RPC URL",default:"https://api.mainnet-beta.solana.com"},{type:"input",name:"KEYPAIR_PATH",message:"Enter Keypair Path",default:"/home/
|
|
666
|
-
`)),Et()},"askForConfig");import{spawnSync as kd}from"node:child_process";var ti=r(()=>{kd("sudo systemctl status jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStatus");import{spawnSync as Rd}from"node:child_process";var ei=r(()=>{Rd("sudo systemctl start jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStart");import{spawnSync as
|
|
667
|
-
//# sourceMappingURL=index.js.map
|
|
665
|
+
Transaction ID: ${Ut}`),await l.confirmTransaction({blockhash:Ko,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ut},"confirmed"),Ut},"swap");_d.config();var Za=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await Nd(e.RPC_URL,e.KEYPAIR_PATH,e.API_KEY,o.input,o.output,Number(o.amount),!o.skipConfirm,o.initConfig)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(At.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(At.red(`Swap Error: ${n.message}`)),process.exit(0)}})},"swapCommand"),Nd=r(async(t,e,o,n="",s="",a=0,i=!0,c=!1)=>{console.log(At.white("Solana RPC URL:",t)),console.log(At.white("KeyfilePath:",e)),(!e||e===""||c)&&await Od();let l=Wo,p=[...qo,"Other"],d=n,m="",f=s,S=a;if(d===""){let N=await bt.prompt([{type:"list",name:"name",message:"Select input mint",choices:p,default:de}]);N.name==="Other"?d=(await bt.prompt([{type:"input",name:"address",message:"Enter input mint address",default:ue}])).address:(m=N.name,d=so[m].tokenMint)}if(f===""){p=p.filter(V=>V!==m);let N=await bt.prompt([{type:"list",name:"name",message:"Select output mint",choices:p}]);if(N.name==="Other")f=(await bt.prompt([{type:"input",name:"address",message:"Enter output mint address",default:Q}])).address;else{let V=N.name;f=so[V].tokenMint}let J=N.name;f=so[J].tokenMint}if(S===0){let N=await bt.prompt([{type:"input",name:"amount",message:"Enter input amount in LAMPORTS. e.g. 0.01 SOL",default:"10000000"}]);S=Number(N.amount)}let _=await Xa(t,l,!o||o===""?Qo:o,e,d,f,S,i);_||process.exit(0),console.log(At.green("\u2714\uFE0E Sent Tx Successfully!")),console.log(At.white(`Check Your TX \u{1F449}: https://solscan.io/tx/${_}`))},"swapCmd");var Od=r(async()=>{let t=await bt.prompt([{type:"input",name:"RPC_URL",message:"Enter Solana RPC URL",default:"https://api.mainnet-beta.solana.com"},{type:"input",name:"KEYPAIR_PATH",message:"Enter Keypair Path",default:"/home/solv/mainnet-validator-keypair.json"},{type:"input",name:"API_KEY",message:"Enter Jupiter API Key(Optional)",default:""}]);await R(t),console.log(At.green(`\u2714\uFE0E Config Updated Successfully!
|
|
666
|
+
`)),Et()},"askForConfig");import{spawnSync as kd}from"node:child_process";var ti=r(()=>{kd("sudo systemctl status jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStatus");import{spawnSync as Rd}from"node:child_process";var ei=r(()=>{Rd("sudo systemctl start jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStart");import{spawnSync as vd}from"node:child_process";var oi=r(()=>{vd("sudo systemctl stop jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStop");import{spawnSync as Cd}from"node:child_process";var ri=r(()=>{Cd("sudo systemctl restart jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterRestart");import{spawnSync as Id}from"node:child_process";var ni=r((t=!1)=>{Id(t?"journalctl -u jupiter-api.service -xef | grep ERROR":"journalctl -u jupiter-api.service -xef",{shell:!0,stdio:"inherit"})},"jupiterLog");import{spawnSync as Pd}from"node:child_process";var si=r(()=>{Pd("sudo systemctl enable jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterEnable");var ai=r(()=>{let t=h.command("jupiter").description("Jupiter API Commands");t.command("status").description("Show Jupiter Status").action(()=>{ti()}),t.command("start").description("Start Jupiter").action(()=>{ei()}),t.command("stop").description("Stop Jupiter").action(()=>{oi()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Jupiter Logs").action(e=>{ni(e.error),process.exit(0)}),t.command("restart").description("Restart Jupiter").action(()=>{ri()}),t.command("enable").description("Enable Jupiter").action(()=>{si()})},"jupiterCommands");import xd from"chalk";var h=new Ld;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(ce,"-V","Display version");async function Vd(){try{let t=await L();Hn(t),Jn(t),jn(t),is(t),Fr(t),Yr(),Gn(t),Os(t),Cs(t),as(),qn(),Un(t),Ys(t),zn(),Ds(),qs(t),Zs(t),wa(t),Fn(),Za(h,t),xa(t),za(h,t),ai(),Ms(),h.command("rm:log").description("Remove Logs").action(()=>{js()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{Js()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(xd.white("\u{1F4DD} Creating Snapshot...")),Wa(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{Gs(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{zs()}),h.command("config").description("Show Solc Config").action(()=>{We()}),h.command("vv").description("Show Solc Version").action(()=>{let e=ge();console.log("version:",e)}),await h.addHelpCommand("help [cmd]","Display help for command").parseAsync(process.argv),process.exit(0)}catch(t){console.log(t),process.exit(0)}}r(Vd,"main");Vd();export{h as program};
|
|
667
|
+
//# sourceMappingURL=index.js.map
|