@ily-validator/solc 5.2.1 → 5.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +37 -35
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var di=Object.defineProperty;var r=(t,e)=>di(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Jd}from"commander";var Fo="5.2.1";var Ho={name:"@ily-validator/solc",version:Fo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var le=Ho.version;var Ht="https://validators.solutions";var me="solc4.config.json";var ht="identity.json",yt="unstaked-identity.json",jo="relayer-keypair.json",fi="mainnet-validator-keypair.json",hi="mainnet-vote-account-keypair.json",yi="mainnet-authority-keypair.json",Si="testnet-validator-keypair.json",Ti="testnet-vote-account-keypair.json",gi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ht}`,Qd=`${C}/${yt}`,b=`${C}/${fi}`,pe=`${C}/${hi}`,Xd=`${C}/${yi}`,L=`${C}/${Si}`,Yo=`${C}/${Ti}`,Zd=`${C}/${gi}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",y="/mnt/ledger",Q="/mnt/accounts",Jo="solana-validator",Bo="agave-validator",Go="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var de=3,zo="https://api.testnet.solana.com",Wo="https://api.mainnet-beta.solana.com",qo="https://verify.validators.solutions/solc-migrate",Qo="https://jup.validators.solutions/v1/jup",co;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(co||(co={}));var Xo=Object.values(co),ue="So11111111111111111111111111111111111111112",fe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",lo="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Zo="SOLV420",tr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as _i}from"child_process";import{spawnSync as Ei}from"node:child_process";var wi=r(t=>{Ei(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),kt=wi;var er="agave-validator",Ai=r(()=>{try{return er}catch(t){return console.error(t),er}},"getSolanaCLI"),K=Ai;var he=r(async t=>{kt(t)},"updateVersion"),mo=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}`),_i(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Hr from"chalk";var St;(function(t){t.EN="en",t.JA="ja"})(St||(St={}));var or;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(or||(or={}));var rr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(rr||(rr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var nr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(nr||(nr={}));var sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(sr||(sr={}));var ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ar||(ar={}));var ir;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ir||(ir={}));var ye;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(ye||(ye={}));var Se;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Se||(Se={}));var mr=!1,pr=!0,M={ID:"solc",LANG:St.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},D={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},R={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},X={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},P={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},v={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=D.ROOT)=>{let e=t===D.ROOT?D.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),pt=r((t=!0)=>{let e=t?`${D.ROOT}/${v.TESTNET_VALIDATOR_KEY}`:`${D.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${D.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${D.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${D.ROOT}/${X.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${D.ROOT}/${X.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",po="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",dr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ur=9,Z="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",fr="So11111111111111111111111111111111111111112",hr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",yr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",cr;(function(t){t[t.ELSOL=Z]="ELSOL",t[t.SOL=fr]="SOL",t[t.USDC=hr]="USDC",t[t.EPCT=yr]="EPCT"})(cr||(cr={}));var lr;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(lr||(lr={}));var fu={[fr]:9,[Z]:9,[hr]:6,[yr]:6},Te="/home/solv/currentEpoch.json",uo=.5,ge="https://api.testnet.solana.com";import{spawnSync as fo}from"child_process";var Sr=r(()=>{fo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;fo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),fo("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var tt="3.0.6",et="3.0.6",jt="3.0.6",H="3.0.6",Tr="3.0.4",Tt="3.0.4";var gr="20.19.5";var Er="0.710.30000";var at={version:H,tag:`v${H}-jito`,commissionBps:700,relayerUrl:"http://amsterdam.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://amsterdam.mainnet.block-engine.jito.wtf",shredReceiverAddr:"74.118.140.240:1002"},G={Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"145.40.93.84:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002"}};import{spawnSync as Ni}from"child_process";var Ee=r((t=at.tag)=>{Ni(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Oi,writeFile as ki}from"fs/promises";import{homedir as vi}from"os";var Yt=r(async t=>{let o=`${vi()}/${X.JITO_CONFIG}`,s={...JSON.parse(await Oi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await ki(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as wr}from"child_process";import Ri from"inquirer";var Ar=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";wr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;wr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),_r=r(async()=>await Ri.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ci from"chalk";import Ii from"inquirer";var Nr=r(async()=>{let t=await Ii.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Jt("sudo ufw delete allow 8899/udp"),await Jt("sudo ufw delete allow 8899/tcp"),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Jt("sudo ufw reload"),console.log(Ci.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Li=r(()=>Fo,"getSolvVersion"),vt=Li;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as bi}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Yu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Or=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var kr=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Ju=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var vr=Object.values($).filter(t=>t!=="none"),ot;(function(t){t.SINGLE="single",t.DOUBLE="double"})(ot||(ot={}));var xi={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:ot.SINGLE,TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et,NODE_VERSION:gr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Go,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Wo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},it=xi;import{homedir as Ki}from"os";var Di=r(async()=>{let e=`${Ki()}/${me}`;return await bi(e)?JSON.parse(await Vi(e,"utf-8")):(console.log("Creating default config file at",e),await $i(e,JSON.stringify(it,null,2)),it)},"readConfig"),I=Di;import Ui from"node-fetch";var x=r(async t=>{try{let e=await I();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var di=Object.defineProperty;var r=(t,e)=>di(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Jd}from"commander";var Fo="5.2.3";var Ho={name:"@ily-validator/solc",version:Fo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var le=Ho.version;var Ht="https://validators.solutions";var me="solc4.config.json";var ht="identity.json",yt="unstaked-identity.json",jo="relayer-keypair.json",fi="mainnet-validator-keypair.json",hi="mainnet-vote-account-keypair.json",yi="mainnet-authority-keypair.json",Si="testnet-validator-keypair.json",Ti="testnet-vote-account-keypair.json",gi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ht}`,Qd=`${C}/${yt}`,K=`${C}/${fi}`,pe=`${C}/${hi}`,Xd=`${C}/${yi}`,L=`${C}/${Si}`,Yo=`${C}/${Ti}`,Zd=`${C}/${gi}`,W=`${C}/solana-validator.log`,q=C+"/start-validator.sh",y="/mnt/ledger",Q="/mnt/accounts",Jo="solana-validator",Bo="agave-validator",Go="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var de=3,zo="https://api.testnet.solana.com",Wo="https://api.mainnet-beta.solana.com",qo="https://verify.validators.solutions/solc-migrate",Qo="https://jup.validators.solutions/v1/jup",co;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(co||(co={}));var Xo=Object.values(co),ue="So11111111111111111111111111111111111111112",fe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",lo="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Zo="SOLV420",tr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as _i}from"child_process";import{spawnSync as Ei}from"node:child_process";var wi=r(t=>{Ei(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),kt=wi;var er="agave-validator",Ai=r(()=>{try{return er}catch(t){return console.error(t),er}},"getSolanaCLI"),b=Ai;var he=r(async t=>{kt(t)},"updateVersion"),mo=r(async(t,e=!1)=>{let o=b(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),_i(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Hr from"chalk";var St;(function(t){t.EN="en",t.JA="ja"})(St||(St={}));var or;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(or||(or={}));var rr;(function(t){t.SINGLE="single",t.DOUBLE="double"})(rr||(rr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var nr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(nr||(nr={}));var sr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(sr||(sr={}));var ar;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(ar||(ar={}));var ir;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ir||(ir={}));var ye;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(ye||(ye={}));var Se;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(Se||(Se={}));var mr=!1,pr=!0,M={ID:"solc",LANG:St.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},D={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},R={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},X={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},P={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},v={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=D.ROOT)=>{let e=t===D.ROOT?D.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),pt=r((t=!0)=>{let e=t?`${D.ROOT}/${v.TESTNET_VALIDATOR_KEY}`:`${D.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${D.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${D.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${D.ROOT}/${X.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${D.ROOT}/${X.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",po="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",dr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",ur=9,Z="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",fr="So11111111111111111111111111111111111111112",hr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",yr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",cr;(function(t){t[t.ELSOL=Z]="ELSOL",t[t.SOL=fr]="SOL",t[t.USDC=hr]="USDC",t[t.EPCT=yr]="EPCT"})(cr||(cr={}));var lr;(function(t){t.V6_BASE_URL="https://quote-api.jup.ag/v6",t.V6_QUOTE_URL="https://quote-api.jup.ag/v6/quote",t.V6_SWAP_URL="https://quote-api.jup.ag/v6/swap"})(lr||(lr={}));var fu={[fr]:9,[Z]:9,[hr]:6,[yr]:6},Te="/home/solv/currentEpoch.json",uo=.5,ge="https://api.testnet.solana.com";import{spawnSync as fo}from"child_process";var Sr=r(()=>{fo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;fo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),fo("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var tt="3.0.10",et="3.0.10",jt="3.0.10",H="3.0.10",Tr="3.0.10",Tt="3.0.10";var gr="20.19.5";var Er="0.713.30008";var at={version:H,tag:`v${H}-jito`,commissionBps:700,relayerUrl:"http://amsterdam.mainnet.relayer.jito.wtf:8100",blockEngineUrl:"https://amsterdam.mainnet.block-engine.jito.wtf",shredReceiverAddr:"74.118.140.240:1002"},G={Amsterdam:{BLOCK_ENGINE_URL:"https://amsterdam.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://amsterdam.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"74.118.140.240:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"145.40.93.84:1002"},NewYork:{BLOCK_ENGINE_URL:"https://ny.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://ny.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"141.98.216.96:1002"},Tokyo:{BLOCK_ENGINE_URL:"https://tokyo.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://tokyo.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"202.8.9.160:1002"},SaltLakeCity:{BLOCK_ENGINE_URL:"https://slc.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://slc.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.53.8:1002"}};import{spawnSync as Ni}from"child_process";var Ee=r((t=at.tag)=>{Ni(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Oi,writeFile as ki}from"fs/promises";import{homedir as vi}from"os";var Yt=r(async t=>{let o=`${vi()}/${X.JITO_CONFIG}`,s={...JSON.parse(await Oi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await ki(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as wr}from"child_process";import Ri from"inquirer";var Ar=r((t,e=!0)=>{let o=e?"/home/solv/testnet-validator-keypair.json":"/home/solv/mainnet-validator-keypair.json",n=e?"/home/solv/testnet-vote-account-keypair.json":"/home/solv/mainnet-vote-account-keypair.json";wr(`solana config set --url ${e?"testnet":"mainnet-beta"} --keypair ${o}`,{shell:!0,stdio:"inherit"});let a=`solana vote-update-commission ${n} ${t} ${o} --keypair ${o}`;wr(a,{shell:!0,stdio:"inherit"})},"updateCommission"),_r=r(async()=>await Ri.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ci from"chalk";import Ii from"inquirer";var Nr=r(async()=>{let t=await Ii.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Jt("sudo ufw delete allow 8899/udp"),await Jt("sudo ufw delete allow 8899/tcp"),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Jt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Jt("sudo ufw reload"),console.log(Ci.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Li=r(()=>Fo,"getSolvVersion"),vt=Li;import{readFile as Vi,writeFile as $i}from"fs/promises";import{existsAsync as Ki}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Yu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Or=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var kr=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Ju=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var vr=Object.values($).filter(t=>t!=="none"),ot;(function(t){t.SINGLE="single",t.DOUBLE="double"})(ot||(ot={}));var xi={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:ot.SINGLE,TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et,NODE_VERSION:gr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Go,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:Wo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},it=xi;import{homedir as bi}from"os";var Di=r(async()=>{let e=`${bi()}/${me}`;return await Ki(e)?JSON.parse(await Vi(e,"utf-8")):(console.log("Creating default config file at",e),await $i(e,JSON.stringify(it,null,2)),it)},"readConfig"),I=Di;import Ui from"node-fetch";var x=r(async t=>{try{let e=await I();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
3
3
|
Please set DISCORD_WEBHOOK_URL in .env`);let o={content:t,username:"\u{1FA84} Solc Notifier"};return(await Ui(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${t}`}),!1}},"sendDiscord");import{spawnSync as Bi}from"child_process";import{Connection as Rr}from"@solana/web3.js";var Bt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new Rr("https://api.testnet.solana.com"):new Rr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e);if(!c)return i.delinquent.find(f=>f.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),c=i.current.find(p=>p.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as Mi}from"child_process";var E=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Mi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Fi=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),rt=Fi;import{sendDiscord as Hi}from"@skeet-framework/utils";var Cr=60,ji=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=E(e?n:o),i=await Bt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Cr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Cr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -22,7 +22,7 @@ Now Catching up... \u{1F69B}\u{1F4A8}
|
|
|
22
22
|
`;await x(d),await rt(180*1e3);let p=await Ir(t);if(p){let f=`== \u{1F7E2} Your Node has caught up! ==
|
|
23
23
|
Address: ${c}
|
|
24
24
|
\u2728 Auto Update Completed \u2728
|
|
25
|
-
`;await x(f)}return p}return!0},"autoUpdate"),Lr=Gi;import{homedir as zi}from"os";import{readFile as Wi,writeFile as Pr}from"fs/promises";import{existsAsync as qi}from"@skeet-framework/utils";var k=r(async t=>{let o=`${zi()}/${me}`;await qi(o)||(console.log("Creating default config file at",o),await Pr(o,JSON.stringify(it,null,2)));let s={...JSON.parse(await Wi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Pr(o,a)},"updateDefaultConfig");var Qi={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},Ae=Qi;var Xi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},xr=Xi;var Zi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},_e=Zi;var tc={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Vr=tc;var Ne=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Oe=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var $r=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],br=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var ec={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},ke=ec;var oc={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},Kr=oc;var ve=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Dr=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var rc=r(t=>{let e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve};switch(t){case St.EN:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve};break;case St.JA:e={cmds:xr,subCmds:Kr,logs:Vr,installer:$r,installerSub:br,clientCmds:Dr};break;default:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve}}return e},"readLocale"),Ur=rc;import{existsSync as ic,readFileSync as cc,writeFileSync as Mr}from"fs";import{readFileSync as nc,writeFileSync as sc}from"fs";import{homedir as ac}from"os";var Rt=r(t=>{let o=`${ac()}/${X.CONFIG}`,s={...JSON.parse(nc(o,"utf8")),...t},a=JSON.stringify(s,null,2);sc(o,a)},"updateSolvConfig");import{homedir as lc}from"os";var Fr=r(()=>{let e=`${lc()}/${X.CONFIG}`;ic(e)||(Mr(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(cc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Mr(e,JSON.stringify(M,null,2)),o=M}let n=Ur(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,Rt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,Rt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",Rt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var jr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===g.JITO,s=e?tt:et;n&&(s=H,e&&(s=jt)),o&&(s=Tt,n&&(s=Tr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=vt(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Hr.white(`Current solc version: ${i}`)),a.auto){await Lr(t);return}if(a.migrateConfig){let l=Fr().config,m=l.SOLANA_NETWORK===mt.TESTNET,d=l.SOLV_TYPE===ye.RPC_NODE,p=l.MAINNET_TYPE===Se.JITO_MEV,f={NETWORK:m?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?ot.DOUBLE:ot.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:p?g.JITO:m?g.AGAVE:g.SOLANA,TESTNET_SOLANA_VERSION:l.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:l.MAINNET_SOLANA_VERSION,NODE_VERSION:l.NODE_VERSION,TESTNET_DELINQUENT_STAKE:l.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:l.MAINNET_DELINQUENT_STAKE,COMMISSION:l.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:l.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:l.STAKE_ACCOUNT,HARVEST_ACCOUNT:l.HARVEST_ACCOUNT,IS_MEV_MODE:l.IS_MEV_MODE,RPC_URL:l.RPC_URL,KEYPAIR_PATH:l.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:l.DISCORD_WEBHOOK_URL,AUTO_UPDATE:l.AUTO_UPDATE,AUTO_RESTART:l.AUTO_RESTART,IS_DUMMY:!1,API_KEY:""};await k(f)}if(a.config){if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){let l=e?jt:H;await Yt({version:l,tag:`v${l}-jito`})}console.log(Hr.green("\u2714\uFE0F Updated Solc Config Default Solana Version\n\n You can now run `solc i` to install the latest version"));return}if(a.firewall){await Nr();return}if(a.background){let l=a.version;if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){Ee(),await Yt({version:l,tag:`v${l}-jito`}),await mo(c,!0);return}await he(l),await mo(e?5:5,!0);return}else if(a.commission){let l=await _r();Ar(l.commission,e)}else Sr()})},"updateCommands");import{spawnSync as mc}from"node:child_process";var Yr=r(t=>{try{let{log:e}=pt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=mc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Jr=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{Yr(t)})},"logCommands");import ct from"chalk";import{spawnSync as pc}from"child_process";import{homedir as dc}from"os";var Re=r(t=>{let e=dc(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=mt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=mt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=mt.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;pc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ce}from"child_process";import{existsSync as Br,readdirSync as uc,rmSync as fc}from"fs";import{homedir as hc}from"os";import Gr from"path";var Ie=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[v.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[v.TESTNET_VALIDATOR_KEY,v.TESTNET_VALITATOR_AUTHORITY_KEY,v.TESTNET_VALIDATOR_VOTE_KEY,v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Ce(n,{shell:!0,stdio:"ignore"});let s=uc("./").filter(l=>l.endsWith("SV.json")),a=hc(),i=Gr.join(a,"unstaked-identity.json");Br(i)&&Ce(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=Gr.join(a,e[c]);if(c++,Br(m)){console.log(`${m} is already exist!`),fc(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;Ce(d,{shell:!0,stdio:"inherit"})}Ce("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as Wr}from"child_process";var yc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
|
|
25
|
+
`;await x(f)}return p}return!0},"autoUpdate"),Lr=Gi;import{homedir as zi}from"os";import{readFile as Wi,writeFile as Pr}from"fs/promises";import{existsAsync as qi}from"@skeet-framework/utils";var k=r(async t=>{let o=`${zi()}/${me}`;await qi(o)||(console.log("Creating default config file at",o),await Pr(o,JSON.stringify(it,null,2)));let s={...JSON.parse(await Wi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Pr(o,a)},"updateDefaultConfig");var Qi={description:"\u{1F48E} Solana Validator All-in-One CLI \u{1F48E}",version:"Output the current version",help:"Display help for solc commands",subcmdHelp:"Display help for subcommands",server:"Open solc Dashboard",start:"Start Solana Validator",stop:"Stop Solana Validator",status:"Show Solana Validator Status",restart:"Restart Solana Validator",update:"Update Solana Validator Version",get:"Get Solana Validator Info Commands",log:"Tail Solana Validator Log",catchup:"Catchup Solana Validator",monitor:"Monitor Solana Validator",config:"Show Solana Validator Config",install:"Install/Update Solana Version",stake:"Solana Delegate Stake",check:"Check Solana Validator",scp:"Download/Upload Solana Validator Keypairs",cron:"Run Schedule Tasks",setup:"Setup Solana Validator",epoch:"Show Current Epoch",slot:"Show Current Slot",solv:"Endroll Solc AA",installer:"Please select an option:",unstake:"UnStake"},Ae=Qi;var Xi={description:"\u{1F48E} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30AA\u30FC\u30EB\u30A4\u30F3\u30EF\u30F3 CLI \u30C4\u30FC\u30EB \u{1F48E}",version:"\u73FE\u5728\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B",help:"solc \u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u8A73\u7D30\u3092\u8868\u793A",subcmdHelp:"\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u3092\u8868\u793A",server:"solc \u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3092\u958B\u304F",start:"\u30CE\u30FC\u30C9\u3092\u8D77\u52D5",stop:"\u30CE\u30FC\u30C9\u3092\u505C\u6B62",status:"\u30CE\u30FC\u30C9\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",restart:"\u30CE\u30FC\u30C9\u3092\u518D\u8D77\u52D5",update:"\u30CE\u30FC\u30C9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0",get:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u60C5\u5831\u3092\u53D6\u5F97 \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",log:"\u30CE\u30FC\u30C9\u306E\u30ED\u30B0\u3092\u8868\u793A",catchup:"\u30CE\u30FC\u30C9\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7",monitor:"\u30CE\u30FC\u30C9\u3092\u76E3\u8996",config:"\u30CE\u30FC\u30C9\u306E\u8A2D\u5B9A\u3092\u8868\u793A",install:"\u30BD\u30E9\u30CA\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u66F4\u65B0/\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",stake:"\u30BD\u30E9\u30CA\u306E\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",unstake:"\u30BD\u30E9\u30CA\u306E\u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",check:"\u30CE\u30FC\u30C9\u306E\u72B6\u614B\u3092\u30C1\u30A7\u30C3\u30AF",scp:"scp \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",cron:"\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30BF\u30B9\u30AF \u30B5\u30D6\u30B3\u30DE\u30F3\u30C9",setup:"\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7",epoch:"\u73FE\u5728\u306E\u30A8\u30DD\u30C3\u30AF\u3092\u8868\u793A",slot:"\u73FE\u5728\u306E\u30B9\u30ED\u30C3\u30C8\u3092\u8868\u793A",solv:"Solc\u30A8\u30F3\u30C9\u30ED\u30FC\u30EB AA \u3092\u8868\u793A",installer:"\u4EE5\u4E0B\u304B\u3089\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:"},xr=Xi;var Zi={success:{created:"Created"},error:{failed:"Failed"},installer:{welcomeMsg:"\u{1F525} Welcome to the solc installer \u{1F525}",description:"solc is born and ready for running Solana Validator Nodes \u{1F680}"}},_e=Zi;var tc={success:{created:"\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},error:{failed:"\u5931\u6557\u3057\u307E\u3057\u305F"},installer:{welcomeMsg:"\u{1F525} \u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u30C4\u30FC\u30EB solc \u3078\u3088\u3046\u3053\u305D \u{1F525}",description:"\u3042\u306A\u305F\u306F\u3082\u3046\u3001\u30BD\u30E9\u30CA\u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306B\u306A\u308B\u6E96\u5099\u304C\u3067\u304D\u3066\u3044\u307E\u3059\u3002"}},Vr=tc;var Ne=[") Upgrade - Update/Downgrade Solana Version",") Check Validator Logs/Status or Start/Stop",") Get Validator Config Info",") Backup Validator Keyfiles",") Staking",") Uninstall",") Exit"],Oe=[[],[") Check Validator Status",") Show Validator Logs",") Start Validator",") Stop Validator",") Restart Validator (no fetch snapshot)",") Restart Validator (fetch snapshot)",") Return to Main Menu"],[") Show Validator Config",") Register Validator Info",") Show Validator Keys Path/Address/Balance",") Get Current Epoch/Slot",") Get Solana Validator Catchup Info",") Get Solana Validator Monitor Info",") Return to Main Menu"],[") Backup Validator Keyfiles",") Set Validator Keyfile/Network",") Return to Main Menu"],[") Stake",") Unstake",") Return to Main Menu"],[],[]];var $r=[") \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9 - Solana\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u30C0\u30A6\u30F3\u30B0\u30EC\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B/\u30ED\u30B0\u3092\u78BA\u8A8D\u30FB\u307E\u305F\u306F\u958B\u59CB/\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u60C5\u5831",") \u9375\u306E\u8A2D\u5B9A",") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"],Kr=[[],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30ED\u30B0\u3092\u8868\u793A",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u958B\u59CB",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u505C\u6B62",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u306A\u3057)",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u3092\u518D\u8D77\u52D5 (fetch snapshot \u3042\u308A)",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u8A2D\u5B9A\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u60C5\u5831\u3092\u767B\u9332\u3059\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u9375\u306E \u30D1\u30B9/\u30A2\u30C9\u30EC\u30B9/\u6B8B\u9AD8 \u3092\u898B\u308B",") \u73FE\u5728\u306E \u30A8\u30DD\u30C3\u30AF/\u30B9\u30ED\u30C3\u30C8 \u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E Catchup \u60C5\u5831\u3092\u898B\u308B",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u30E2\u30CB\u30BF\u30FC\u60C5\u5831\u3092\u898B\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[") \u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30A2\u30F3\u30B9\u30C6\u30FC\u30AD\u30F3\u30B0\u3092\u884C\u3046",") \u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B"],[],[]];var ec={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},ke=ec;var oc={server:{description:"Open solc Dashboard"},start:{description:"Start Solana Validator"},stop:{description:"Stop Solana Validator"},status:{description:"Show Solana Validator Status"},restart:{description:"Restart Solana Validator"},update:{description:"Update Solana Validator Version"},get:{description:"Get Solana Validator Info"},log:{description:"Tail Solana Validator Log"},catchup:{description:"Catchup Solana Validator"},monitor:{description:"Monitor Solana Validator"},config:{description:"Show Solana Validator Config"},install:{description:"Install/Update Solana Version"},stake:{description:"Solana Delegate Stake"},unstake:{description:"UnStake"},check:{description:"Check Solana Validator"},scp:{description:"Download/Upload Solana Validator Keypairs"},cron:{description:"Run Schedule Tasks"},setup:{description:"Setup Solana Validator"},epoch:{description:"Show Current Epoch"},slot:{description:"Show Current Slot"},solv:{description:"Endroll Solc AA"}},br=oc;var ve=[") Check Validator Status",") Download Validator Keyfiles",") Generate Validator Keyfiles",") Upload Validator Keyfiles",") Set Validator Keyfile/Network",") Uninstall",") Exit"];var Dr=[") \u30D0\u30EA\u30C7\u30FC\u30BF-\u306E\u72B6\u614B\u3092\u78BA\u8A8D",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u4F5C\u6210",") \u30D0\u30EA\u30C7\u30FC\u30BF\u30FC\u306E\u9375\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",") \u9375/\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3092\u8A2D\u5B9A\u3059\u308B",") \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",") \u7D42\u4E86"];var rc=r(t=>{let e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve};switch(t){case St.EN:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve};break;case St.JA:e={cmds:xr,subCmds:br,logs:Vr,installer:$r,installerSub:Kr,clientCmds:Dr};break;default:e={cmds:Ae,subCmds:ke,logs:_e,installer:Ne,installerSub:Oe,clientCmds:ve}}return e},"readLocale"),Ur=rc;import{existsSync as ic,readFileSync as cc,writeFileSync as Mr}from"fs";import{readFileSync as nc,writeFileSync as sc}from"fs";import{homedir as ac}from"os";var Rt=r(t=>{let o=`${ac()}/${X.CONFIG}`,s={...JSON.parse(nc(o,"utf8")),...t},a=JSON.stringify(s,null,2);sc(o,a)},"updateSolvConfig");import{homedir as lc}from"os";var Fr=r(()=>{let e=`${lc()}/${X.CONFIG}`;ic(e)||(Mr(e,JSON.stringify(M,null,2)),console.log(`Created default config file at ${e}`));let o;try{o=JSON.parse(cc(e,"utf-8"))}catch{console.log("Error parsing config file. Renewing config file."),Mr(e,JSON.stringify(M,null,2)),o=M}let n=Ur(o.LANG);return o.RPC_URL||(o.RPC_URL=M.RPC_URL,Rt({RPC_URL:M.RPC_URL})),o.IS_MEV_MODE===void 0&&(o.IS_MEV_MODE=!1,Rt({IS_MEV_MODE:!1})),o.DISCORD_WEBHOOK_URL||(o.DISCORD_WEBHOOK_URL="",Rt({DISCORD_WEBHOOK_URL:""})),{config:o,locale:n}},"readOrCreateDefaultConfig");var jr=r(t=>{let e=t.NETWORK===u.TESTNET,o=t.NODE_TYPE===T.RPC,n=t.VALIDATOR_TYPE===g.JITO,s=e?tt:et;n&&(s=H,e&&(s=jt)),o&&(s=Tt,n&&(s=Tr)),h.command("update").alias("u").description("Update Command").option("-v, --version <version>",`Solana Version e.g ${s}`,s).option("-b, --background","No Monitor Delinquent Stake Update",!1).option("-c, --commission","Update Commission",!1).option("-f, --firewall","Update Firewall",!1).option("--migrate-config","Migrate Solc Config",!1).option("--config","Update Solc Config Default Solana Version",!1).option("--auto","Auto Update",!1).action(async a=>{let i=vt(),c=e?t.TESTNET_DELINQUENT_STAKE:t.MAINNET_DELINQUENT_STAKE;if(console.log(Hr.white(`Current solc version: ${i}`)),a.auto){await Lr(t);return}if(a.migrateConfig){let l=Fr().config,m=l.SOLANA_NETWORK===mt.TESTNET,d=l.SOLV_TYPE===ye.RPC_NODE,p=l.MAINNET_TYPE===Se.JITO_MEV,f={NETWORK:m?u.TESTNET:u.MAINNET,NODE_TYPE:d?T.RPC:T.VALIDATOR,MNT_DISK_TYPE:l.DISK_TYPES===0?ot.DOUBLE:ot.SINGLE,RPC_TYPE:d?$.JITO:$.NONE,VALIDATOR_TYPE:p?g.JITO:m?g.AGAVE:g.SOLANA,TESTNET_SOLANA_VERSION:l.TESTNET_SOLANA_VERSION,MAINNET_SOLANA_VERSION:l.MAINNET_SOLANA_VERSION,NODE_VERSION:l.NODE_VERSION,TESTNET_DELINQUENT_STAKE:l.TESTNET_DELINQUENT_STAKE,MAINNET_DELINQUENT_STAKE:l.MAINNET_DELINQUENT_STAKE,COMMISSION:l.COMMISSION,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:l.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY,STAKE_ACCOUNTS:l.STAKE_ACCOUNT,HARVEST_ACCOUNT:l.HARVEST_ACCOUNT,IS_MEV_MODE:l.IS_MEV_MODE,RPC_URL:l.RPC_URL,KEYPAIR_PATH:l.KEYPAIR_PATH,DISCORD_WEBHOOK_URL:l.DISCORD_WEBHOOK_URL,AUTO_UPDATE:l.AUTO_UPDATE,AUTO_RESTART:l.AUTO_RESTART,IS_DUMMY:!1,API_KEY:""};await k(f)}if(a.config){if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){let l=e?jt:H;await Yt({version:l,tag:`v${l}-jito`})}console.log(Hr.green("\u2714\uFE0F Updated Solc Config Default Solana Version\n\n You can now run `solc i` to install the latest version"));return}if(a.firewall){await Nr();return}if(a.background){let l=a.version;if(await k({TESTNET_SOLANA_VERSION:tt,MAINNET_SOLANA_VERSION:et}),n){Ee(),await Yt({version:l,tag:`v${l}-jito`}),await mo(c,!0);return}await he(l),await mo(e?5:5,!0);return}else if(a.commission){let l=await _r();Ar(l.commission,e)}else Sr()})},"updateCommands");import{spawnSync as mc}from"node:child_process";var Yr=r(t=>{try{let{log:e}=pt(),o=`tail -f ${e}`;t.error?o+=" | grep '\\(WARN\\|ERR\\)'":t.info?o+=" | grep INFO":t.warning&&(o+=" | grep WARN"),console.log(o);let n=mc(o,{shell:!0,stdio:"inherit"});if(n.error)throw n.error;n.signal==="SIGINT"?(console.log("Child process terminated due to receipt of SIGINT signal"),process.exit(0)):n.status!==0&&(console.error(`Child process exited with code ${n.status}`),process.exit(n.status))}catch(e){console.error(`tail Error: ${e}`),process.exit(1)}},"tail");var Jr=r(()=>{h.command("log").description("tail logs").alias("l").description("tail logs").option("-i, --info","Follow INFO output",!1).option("-w, --warning","Follow WARN output",!1).option("-e, --error","Follow ERR/WARN output",!1).option("-a, --all","Follow All output",!1).action(t=>{Yr(t)})},"logCommands");import ct from"chalk";import{spawnSync as pc}from"child_process";import{homedir as dc}from"os";var Re=r(t=>{let e=dc(),o=A(e),n=o.testnetValidatorVoteKey,s=o.testnetValidatorKey,a=o.testnetValidatorAuthorityKey,i=mt.TESTNET,c=t.COMMISSION;t.NETWORK===u.MAINNET&&(n=o.mainnetValidatorVoteKey,s=o.mainnetValidatorKey,a=o.mainnetValidatorAuthorityKey,i=mt.MAINNET),console.log(`\u231B\uFE0F Creating vote account with commission ${c} - ${i}`);let l=t.RPC_URL||i;t.NETWORK===u.TESTNET&&(l=mt.TESTNET);let m=`solana create-vote-account ${n} ${s} ${a} --commission ${c} --url ${l} --keypair ${s}`;pc(m,{shell:!0,stdio:"inherit"})},"setupVoteAccount");import{spawnSync as Ce}from"child_process";import{existsSync as Br,readdirSync as uc,rmSync as fc}from"fs";import{homedir as hc}from"os";import Gr from"path";var Ie=r(t=>{let e=[],o=0;t.NODE_TYPE===T.RPC&&(e=[v.MAINNET_VALIDATOR_KEY],o=1),t.NETWORK===u.TESTNET?(e=[v.TESTNET_VALIDATOR_KEY,v.TESTNET_VALITATOR_AUTHORITY_KEY,v.TESTNET_VALIDATOR_VOTE_KEY,v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=6):(e=[v.MAINNET_VALIDATOR_KEY,v.MAINNET_VALITATOR_AUTHORITY_KEY,v.MAINNET_VALIDATOR_VOTE_KEY],o=3);let n=`solana-keygen grind --starts-and-ends-with E:SV:${o}`;Ce(n,{shell:!0,stdio:"ignore"});let s=uc("./").filter(l=>l.endsWith("SV.json")),a=hc(),i=Gr.join(a,"unstaked-identity.json");Br(i)&&Ce(`mv ${i} ${a}/unstaked-identity.backup.json`,{shell:!0,stdio:"ignore"});let c=0;for(let l of s){let m=Gr.join(a,e[c]);if(c++,Br(m)){console.log(`${m} is already exist!`),fc(l,{recursive:!0});continue}let d=`mv ${l} ${m}`;Ce(d,{shell:!0,stdio:"inherit"})}Ce("solana-keygen new -s --no-bip39-passphrase -o /home/solv/unstaked-identity.json",{shell:!0,stdio:"ignore"}),console.log(`Generated keypairs - ${a}`)},"createSolvKeyPairs");import{spawnSync as Wr}from"child_process";var yc=r((t,e,o,n=2001)=>{let s="/etc/systemd/system/jupiter-api.service",a=`[Unit]
|
|
26
26
|
Description=Jupiter API Service Instance
|
|
27
27
|
After=network.target
|
|
28
28
|
|
|
@@ -81,7 +81,7 @@ exec agave-validator \\
|
|
|
81
81
|
--wal-recovery-mode skip_any_corrupted_record \\
|
|
82
82
|
--use-snapshot-archives-at-startup when-newest \\
|
|
83
83
|
--limit-ledger-size 400000000 \\
|
|
84
|
-
`,"startJitoRPCScript");import{existsAsync as $c}from"@skeet-framework/utils";import{writeFile as
|
|
84
|
+
`,"startJitoRPCScript");import{existsAsync as $c}from"@skeet-framework/utils";import{writeFile as Kc}from"fs/promises";import{spawnSync as xc}from"node:child_process";var Vc=r(()=>{let t=`sudo chmod +x ${q}`;xc(t,{shell:!0,stdio:"inherit"})},"updateStartupScriptPermission"),Wt=Vc;var nn=r(()=>`#!/bin/bash
|
|
85
85
|
exec agave-validator \\
|
|
86
86
|
--identity ${O} \\
|
|
87
87
|
--log ${W} \\
|
|
@@ -116,11 +116,11 @@ 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
|
|
119
|
+
`,"startRPCNodeScript");var bc=r(async t=>{let e=t.RPC_TYPE,o="";switch(e){case $.AGAVE:console.log("Agave RPC Node Setup"),kt(t.TESTNET_SOLANA_VERSION),o=nn();break;case $.JITO:console.log("JITO RPC Node Setup"),zt(jt),o=rn();break;default:console.log("Unknown RPC Node Setup");break}if(await $c(q)){console.log("Startup script already exists. Skipping...");return}await Kc(q,o,"utf-8"),Wt()},"setupRpcNode"),sn=bc;import{spawnSync as Dc}from"node:child_process";var Uc=r(t=>{Dc(`sh -c "$(curl -sSfL https://release.solana.com/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installSolana"),To=Uc;var go=r((t=1e3,e,o,n,s="agave-validator")=>`#!/bin/bash
|
|
120
120
|
exec ${s} \\
|
|
121
121
|
--identity ${O} \\
|
|
122
122
|
--vote-account ${pe} \\
|
|
123
|
-
--authorized-voter ${
|
|
123
|
+
--authorized-voter ${K} \\
|
|
124
124
|
--log ${W} \\
|
|
125
125
|
--accounts ${Q} \\
|
|
126
126
|
--ledger ${y} \\
|
|
@@ -153,7 +153,7 @@ exec ${s} \\
|
|
|
153
153
|
exec ${t} \\
|
|
154
154
|
--identity ${O} \\
|
|
155
155
|
--vote-account ${pe} \\
|
|
156
|
-
--authorized-voter ${
|
|
156
|
+
--authorized-voter ${K} \\
|
|
157
157
|
--log ${W} \\
|
|
158
158
|
--accounts ${Q} \\
|
|
159
159
|
--ledger ${y} \\
|
|
@@ -198,7 +198,7 @@ exec agave-validator \\
|
|
|
198
198
|
--use-snapshot-archives-at-startup when-newest \\
|
|
199
199
|
--limit-ledger-size \\
|
|
200
200
|
--block-production-method central-scheduler \\
|
|
201
|
-
`,"startTestnetAgaveValidatorScript");import{existsAsync as cn}from"@skeet-framework/utils";import{writeFile as ln}from"fs/promises";var Mc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Fc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Hc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Fc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case g.SOLANA:To(o),n=an();break;case g.JITO:console.log("JITO Validator Setup for Mainnet");let s=await gt();zt(o||H),n=go(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,n,"utf-8"),Wt()},"setupMainnetValidator"),Hc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case g.SOLANA:To(t.TESTNET_SOLANA_VERSION),o=Eo();case g.AGAVE:console.log("Agave Validator Setup for Testnet"),kt(t.TESTNET_SOLANA_VERSION),o=Eo();break;case g.JITO:console.log("JITO Validator Setup for Testnet");let n=await gt();zt(t.TESTNET_SOLANA_VERSION),o=go(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,o,"utf-8"),Wt()},"setupTestnetValidator"),mn=Mc;import
|
|
201
|
+
`,"startTestnetAgaveValidatorScript");import{existsAsync as cn}from"@skeet-framework/utils";import{writeFile as ln}from"fs/promises";var Mc=r(async t=>{let{NETWORK:e}=t;e===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Fc(t)):e===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Hc(t)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Fc=r(async t=>{let{VALIDATOR_TYPE:e,MAINNET_SOLANA_VERSION:o}=t,n="";switch(e){case g.SOLANA:To(o),n=an();break;case g.JITO:console.log("JITO Validator Setup for Mainnet");let s=await gt();zt(o||H),n=go(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,n,"utf-8"),Wt()},"setupMainnetValidator"),Hc=r(async t=>{let{VALIDATOR_TYPE:e}=t,o="";switch(e){case g.SOLANA:To(t.TESTNET_SOLANA_VERSION),o=Eo();case g.AGAVE:console.log("Agave Validator Setup for Testnet"),kt(t.TESTNET_SOLANA_VERSION),o=Eo();break;case g.JITO:console.log("JITO Validator Setup for Testnet");let n=await gt();zt(t.TESTNET_SOLANA_VERSION),o=go(n.commissionBps,n.relayerUrl,n.blockEngineUrl,n.shredReceiverAddr);break;default:console.log("Unknown Validator Type for Testnet");break}if(await cn(q)){console.log("Startup script already exists. Skipping...");return}await ln(q,o,"utf-8"),Wt()},"setupTestnetValidator"),mn=Mc;import Kn from"chalk";import{execSync as pn}from"node:child_process";function dn(t){try{pn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{pn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(dn,"createDirectoryIfNotExists");var un=r(()=>{try{let t=[R.ACCOUNTS,R.LEDGER];for(let e of t)dn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as jc}from"child_process";function Yc(){let e=jc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
|
|
202
202
|
`).slice(1),o=[],n=e.map(p=>p.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c="";for(let p of e){let[f,S,w]=p.trim().split(/\s+/);if(!f||!S)continue;let _=parseInt(S,10);if(isNaN(_))continue;let N=w!==void 0&&w!=="";w==="/"&&(c=f.replace(/[0-9]*$/,""));let z=n.some(V=>V!==f&&V.startsWith(f));_>=400*1024*1024*1024&&o.push({name:f,size:_,mountpoint:w||"",isMounted:N,hasPartition:z})}let l=n.filter(p=>p.startsWith(c)),d=o.filter(p=>!l.includes(p.name)).sort((p,f)=>f.size-p.size);if(d.length>0){let p=d[0];if(p.size>=850*1024*1024*1024&&!p.isMounted&&(s=!0),p.size>=1250*1024*1024*1024&&p.isMounted&&(i=!0),d.length>1){let f=d[1];f.size>=400*1024*1024*1024&&!f.isMounted&&(a=!0)}}return{disks:d,has850GB:s,has400GB:a,hasUsed1250GB:i}}r(Yc,"getPreferredDisks");var qt=Yc;import{spawnSync as fn}from"child_process";var Qt=r(t=>{if(fn(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return fn(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as wo}from"child_process";var Pe=r((t,e="",o=!1)=>{let n=o?R.LEDGER:R.ROOT,s=`${t} ${n} ext4 auto 0 0`,a=`${t} ${R.LEDGER} ext4 auto 0 0
|
|
203
203
|
${e} ${R.ACCOUNTS} ext4 auto 0 0
|
|
204
204
|
`,c=[e!==""?a:s],m=wo("cat /etc/fstab",{shell:!0,encoding:"utf8"}).stdout,d=[];for(let p of c)m.includes(p)||d.push(p);if(d.length){let p=`echo "${d.join(`
|
|
@@ -240,6 +240,7 @@ Type=simple
|
|
|
240
240
|
Restart=always
|
|
241
241
|
RestartSec=1
|
|
242
242
|
LimitNOFILE=1000000
|
|
243
|
+
LimitMEMLOCK=2000000000
|
|
243
244
|
LogRateLimitIntervalSec=0
|
|
244
245
|
User=${M.USERNAME}
|
|
245
246
|
Environment=PATH=${n}
|
|
@@ -247,8 +248,9 @@ WorkingDirectory=${D.ROOT}
|
|
|
247
248
|
Environment="${o}"
|
|
248
249
|
ExecStart=${e}
|
|
249
250
|
|
|
251
|
+
|
|
250
252
|
[Install]
|
|
251
|
-
WantedBy=multi-user.target`},"solvService");import{execSync as tl}from"child_process";function An(t=!0){console.log("Creating solvService configuration for solana");let e=wn(t);tl(`echo "${e}" | sudo tee ${P.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(An,"setupSolvService");var _n=r((t=!0)=>{En(),An(t),Tn()},"makeServices");import{spawnSync as Ao}from"node:child_process";var Nn=r(t=>{try{Ie(t);let e=t.NETWORK;return e===u.TESTNET?(Ao(`solana config set --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"}),Ao(`solana airdrop 1 --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"})):Ao(`solana config set --url ${e} -k ${
|
|
253
|
+
WantedBy=multi-user.target`},"solvService");import{execSync as tl}from"child_process";function An(t=!0){console.log("Creating solvService configuration for solana");let e=wn(t);tl(`echo "${e}" | sudo tee ${P.SOL_SERVICE} > /dev/null`),console.log("solv.service configuration created.")}r(An,"setupSolvService");var _n=r((t=!0)=>{En(),An(t),Tn()},"makeServices");import{spawnSync as Ao}from"node:child_process";var Nn=r(t=>{try{Ie(t);let e=t.NETWORK;return e===u.TESTNET?(Ao(`solana config set --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"}),Ao(`solana airdrop 1 --url ${e} -k ${L}`,{shell:!0,stdio:"inherit"})):Ao(`solana config set --url ${e} -k ${K}`,{shell:!0,stdio:"inherit"}),t.NODE_TYPE!==T.RPC&&Re(t),!0}catch(e){throw new Error(`setupKeys Error: ${e}`)}},"setupKeys");import{spawnSync as On}from"node:child_process";var Ve=r((t=!1)=>{try{if(t){let o=["aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger ","https://snapshots.avorio.network/testnet/snapshot.tar.bz2","https://snapshots.avorio.network/testnet/incremental-snapshot.tar.bz2"].join(" ");On(o,{shell:!0,stdio:"inherit"});return}let e=["sudo apt-get update && sudo apt-get install -y aria2","&&","aria2c -x16 -s16 --force-sequential=true","-d /mnt/ledger","https://snapshots.avorio.network/mainnet-beta/snapshot.tar.bz2","https://snapshots.avorio.network/mainnet-beta/incremental-snapshot.tar.bz2"].join(" ");On(e,{shell:!0,stdio:"inherit"})}catch(e){throw new Error(`getSnapshot Error: ${e}`)}},"getSnapshot");import{spawnSync as el}from"node:child_process";var $e=r(t=>{let o=`sudo systemctl start ${t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer":"solv"}`;el(o,{shell:!0,stdio:"inherit"})},"startSolana");import{execSync as ol}from"node:child_process";var rl=r(()=>{try{ol('echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')}catch{}},"setupCpuGovernor"),kn=rl;import _o from"fs";import{promisify as Rn}from"util";import{execSync as vn}from"child_process";var nl=Rn(_o.readFile),sl=Rn(_o.access),Ke="/etc/sysctl.conf",al=`# set default and maximum socket buffer sizes to 128MB
|
|
252
254
|
net.core.rmem_default=134217728
|
|
253
255
|
net.core.wmem_default=134217728
|
|
254
256
|
net.core.rmem_max=134217728
|
|
@@ -259,19 +261,19 @@ net.ipv4.tcp_rmem=10240 87380 134217728
|
|
|
259
261
|
net.ipv4.tcp_wmem=10240 87380 134217728
|
|
260
262
|
|
|
261
263
|
# Enable TCP westwood for kernels greater than or equal to 2.6.13
|
|
262
|
-
net.ipv4.tcp_congestion_control=westwood`;async function il(){try{await sl(
|
|
264
|
+
net.ipv4.tcp_congestion_control=westwood`;async function il(){try{await sl(Ke,_o.constants.F_OK)}catch{return console.log(`Skipping updateSysctlConfig: ${Ke} does not exist`)}try{let t=await nl(Ke,"utf8");if(!t.includes("rmem_default")){console.log("No need to update sysctl.conf");return}let e=t.replace(/net\.core\.(rmem_default|wmem_default|rmem_max|wmem_max)=.*\n/g,"");e=e.replace(/net\.ipv4\.tcp_(rmem|wmem|congestion_control)=.*\n/g,""),e+=`
|
|
263
265
|
${al}
|
|
264
|
-
`,vn(`echo "${e}" | sudo tee ${
|
|
266
|
+
`,vn(`echo "${e}" | sudo tee ${Ke} > /dev/null`),vn("sudo sysctl -p"),console.log("sysctl.conf updated successfully")}catch(t){console.error(`Error: ${t}`)}}r(il,"updateSysctlConfig");var Cn=il;import{spawnSync as cl}from"child_process";var In=r(()=>{cl("sudo systemctl restart logrotate",{shell:!0,stdio:"inherit"})},"restartLogrotate");import{spawnSync as ll}from"node:child_process";var Ln=r(()=>{ll("sudo systemctl enable solv",{shell:!0,stdio:"inherit"})},"enableSolv");import{spawnSync as Pn}from"child_process";var xn=r((t=!1,e=!1)=>{t?pl():ml(e)},"createSymLink"),ml=r((t=!1)=>{let e="mainnet";t&&(e="testnet"),Pn(`ln -sf /home/solv/${e}-validator-keypair.json /home/solv/identity.json`,{shell:!0,stdio:"inherit"})},"createActiveSymLink"),pl=r(()=>{Pn("ln -sf /home/solv/unstaked-identity.json /home/solv/identity.json",{shell:!0,stdio:"inherit"})},"createInactiveSymLink");import be from"chalk";var dl=r(()=>{let t=`${be.yellow("\u26A1\uFE0F\u26A1\uFE0F\u26A1\uFE0F")}`,e=`${be.blueBright(`${t} Solana Private RPC Connection API Key ${t}`)}
|
|
265
267
|
|
|
266
268
|
We're excited to offer a free API key exclusively for the Validators DAO community \u{1F389}
|
|
267
269
|
It's our way of supporting the community and empowering you with fast, reliable connections.
|
|
268
270
|
|
|
269
271
|
To get your free API key, simply join us through the link below:
|
|
270
272
|
|
|
271
|
-
Validators DAO: ${
|
|
273
|
+
Validators DAO: ${be.white("`https://discord.gg/X4BgkBHavp`")}
|
|
272
274
|
|
|
273
275
|
Unlock fast connections and elevate your experience with your very own API key \u{1F680}
|
|
274
|
-
`;console.log(
|
|
276
|
+
`;console.log(be.cyan(e))},"rpcLog"),wt=dl;import{spawnSync as nt}from"child_process";var ul=r(()=>({filePath:"/home/solv/start-firedancer.sh",body:`#!/usr/bin/env bash
|
|
275
277
|
sudo chmod -R 700 /mnt
|
|
276
278
|
sudo fdctl configure init all --config /home/solv/firedancer/config.toml
|
|
277
279
|
sudo chown -R solv:solv /mnt
|
|
@@ -467,7 +469,7 @@ EOF`,{shell:!0,stdio:"inherit"}),nt(`sudo chmod +x ${t}`,{shell:!0,stdio:"inheri
|
|
|
467
469
|
${o.body}
|
|
468
470
|
EOF`,{shell:!0,stdio:"inherit"}),nt("sudo systemctl daemon-reload",{shell:!0});let s=(await I()).NETWORK===u.MAINNET?Ue():De();nt(`sudo tee ${s.filePath} > /dev/null << 'EOF'
|
|
469
471
|
${s.body}
|
|
470
|
-
EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Me=Sl;var
|
|
472
|
+
EOF`,{shell:!0,stdio:"inherit"})},"setupFiredancer"),Me=Sl;var bn=r(async(t=!1,e=!1)=>{try{t||(console.log(Kn.white("\u{1F7E2} Initializing Setup")),await I(),await on());let o=await I(),n=o.NETWORK===u.TESTNET;switch(un(),e||yn(),_n(n),In(),kn(),await Cn(),Nn(o),xn(o.IS_DUMMY,n),o.NODE_TYPE){case T.RPC:await sn(o);break;case T.VALIDATOR:await mn(o),o.VALIDATOR_TYPE===g.FRANKENDANCER&&await Me();break;default:throw new Error("Unknown Node Type")}Sn(),Gt(),o.VALIDATOR_TYPE!==g.FRANKENDANCER&&(Ln(),Ve(n)),$e(o),console.log(Kn.white("\u{1F7E2} Setup Completed")),wt()}catch(o){throw new Error(`Setup Error: ${o.message}`)}},"setupV2");var Dn=r(t=>{let e="/etc/systemd/system/relayer.service",o=`# Example Systemd File for Co-Hosted Relayer
|
|
471
473
|
[Unit]
|
|
472
474
|
Description=Solana transaction relayer
|
|
473
475
|
Requires=network-online.target
|
|
@@ -520,8 +522,8 @@ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateServi
|
|
|
520
522
|
`);o.splice(-1,0,"--geyser-plugin-config /home/solv/yellowstone-grpc/yellowstone-grpc-geyser/config.json \\");let n=o.join(`
|
|
521
523
|
`);await wl(t,n),gl(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),Hn=Al;import _l from"inquirer";import{writeFile as Nl}from"node:fs/promises";var jn=r(async()=>{let e=(await _l.prompt([{type:"input",name:"xToken",message:"Enter the xToken",default:"xToken"}])).xToken,o="git clone https://github.com/rpcpool/yellowstone-grpc.git",n="cargo build -r",s="cargo-fmt && cargo run --bin config-check -- --config yellowstone-grpc-geyser/config.json";No(o,{shell:!0,stdio:"inherit"}),No(n,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"}),No(s,{shell:!0,stdio:"inherit",cwd:"/home/solv/yellowstone-grpc"});let{filePath:a,defaultConfig:i}=Fn(e),c=JSON.stringify(i,null,2);await Nl(a,c,{encoding:"utf8"}),await Hn()},"yellowstoneGeyser");var Yn=r(t=>{h.command("setup").description("Setup Solana Validator").option("--vote","Setup Vote Account",!1).option("--key","Setup Validator Keypairs",!1).option("--relayer","Setup Jito Relayer",!1).option("--jupiter","Setup Jupiter Swap API",!1).option("--geyser","Setup Geyser",!1).option("--firedancer","Setup Firedancer",!1).option("--skip-init-config","Skip Initial Config",!1).option("--skip-mount","Skip Mount",!1).action(async e=>{try{if(e.vote)console.log(ct.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),Re(t),process.exit(0);else if(e.key)console.log(ct.white("\u{1F511} Setting up Validator Keypairs ...")),Ie(t),process.exit(0);else if(e.relayer){console.log(ct.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await gt()).blockEngineUrl;await Mn(n,!1),console.log(ct.green(`Jito Relayer Setup Completed
|
|
522
524
|
|
|
523
|
-
$ solc relayer --help`)),Gt(),wt(),process.exit(0)}else if(e.jupiter)console.log(ct.white("\u{1F30F} Setting up Jupiter Swap API ...")),await qr(),Gt(),wt(),process.exit(0);else if(e.geyser){console.log(ct.white("\u26A1\uFE0F Setting up Geyser ...")),await jn();return}else if(e.firedancer){console.log(ct.white("\u{1F525} Setting up Firedancer ...")),await Me();return}await
|
|
524
|
-
`).slice(1).filter(s=>s.split(/\s+/)[0]!=="").map(s=>{let a=s.split(/\s+/);return{Filesystem:a[0],Size:a[1],Used:a[2],Avail:a[3],Use:a[4],MountedOn:a[5]}}).sort((s,a)=>At(a.Avail)-At(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&At(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&At(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&At(s.Size)>9e11-1&&console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: red")}),n?console.log("your mount point is correct"):o.filter(a=>a.Filesystem.startsWith("/dev/")&&At(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Jn from"chalk";import kl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Jn.blue(n)),o=new kl({head:e,colWidths:[20,10,10,10,10,20]});t.forEach(n=>{o.push([n.Filesystem,n.Size,n.Used,n.Avail,n.Use,n.MountedOn].map(s=>Jn.white(s)))}),console.log(o.toString())},"displayTable");var Bn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),At=r(t=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},o=t.match(/[A-Za-z]+/)?.[0]||"",n=parseFloat(t);return e[o]?n*e[o]:n},"convertToBytes");var Gn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{$e(t),process.exit(0)})},"startCommand");import{spawnSync as vl}from"node:child_process";var zn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),vl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var Wn=r(t=>{h.command("stop").description("Stop Solana Validator").option("-s, --service <service>","systemd service name to stop").option("--debug","Print executed command").action(e=>{zn(t,e),process.exit(0)})},"stopCommand");import{spawnSync as Xt}from"node:child_process";import qn from"chalk";var Qn=r(t=>{let e=
|
|
525
|
+
$ solc relayer --help`)),Gt(),wt(),process.exit(0)}else if(e.jupiter)console.log(ct.white("\u{1F30F} Setting up Jupiter Swap API ...")),await qr(),Gt(),wt(),process.exit(0);else if(e.geyser){console.log(ct.white("\u26A1\uFE0F Setting up Geyser ...")),await jn();return}else if(e.firedancer){console.log(ct.white("\u{1F525} Setting up Firedancer ...")),await Me();return}await bn(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(ct.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ct.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as Ol}from"child_process";var Oo=r(()=>{let o=Ol("df -h").toString().split(`
|
|
526
|
+
`).slice(1).filter(s=>s.split(/\s+/)[0]!=="").map(s=>{let a=s.split(/\s+/);return{Filesystem:a[0],Size:a[1],Used:a[2],Avail:a[3],Use:a[4],MountedOn:a[5]}}).sort((s,a)=>At(a.Avail)-At(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&At(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&At(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&At(s.Size)>9e11-1&&console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: red")}),n?console.log("your mount point is correct"):o.filter(a=>a.Filesystem.startsWith("/dev/")&&At(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Jn from"chalk";import kl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Jn.blue(n)),o=new kl({head:e,colWidths:[20,10,10,10,10,20]});t.forEach(n=>{o.push([n.Filesystem,n.Size,n.Used,n.Avail,n.Use,n.MountedOn].map(s=>Jn.white(s)))}),console.log(o.toString())},"displayTable");var Bn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),At=r(t=>{let e={K:1e3,KB:1e3,M:1e6,MB:1e6,G:1e9,GB:1e9,T:1e12,TB:1e12},o=t.match(/[A-Za-z]+/)?.[0]||"",n=parseFloat(t);return e[o]?n*e[o]:n},"convertToBytes");var Gn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{$e(t),process.exit(0)})},"startCommand");import{spawnSync as vl}from"node:child_process";var zn=r((t,e={})=>{let o=t.VALIDATOR_TYPE===g.FRANKENDANCER?"frankendancer.service":"solv.service",s=`sudo systemctl stop ${e.service??o}`;e.debug&&console.log(`[solc] stop -> ${s}`),vl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var Wn=r(t=>{h.command("stop").description("Stop Solana Validator").option("-s, --service <service>","systemd service name to stop").option("--debug","Print executed command").action(e=>{zn(t,e),process.exit(0)})},"stopCommand");import{spawnSync as Xt}from"node:child_process";import qn from"chalk";var Qn=r(t=>{let e=b();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(qn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Xt("solc stop",{stdio:"inherit",shell:!0}),Xt("solc rm:snapshot",{stdio:"inherit",shell:!0}),Xt("solc get snapshot",{stdio:"inherit",shell:!0}),Xt("solc start",{stdio:"inherit",shell:!0}),console.log(qn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;Xt(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var Xn=r(t=>{let o=t.NETWORK===u.TESTNET?tt:et;t.NODE_TYPE===T.RPC&&(o=Tt),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).action(async n=>{if(t.VALIDATOR_TYPE===g.JITO){let l=`v${n.version||H}-jito`;Ee(l);return}t.NODE_TYPE===T.RPC&&(o=Tt);let i=n.version||o;await he(i)})},"installCommands");import{spawnSync as Rl}from"child_process";var Zn=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Rl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=qt();console.log(t)})},"mountCommands");import{spawnSync as Ll}from"node:child_process";import ts from"chalk";import{spawnSync as Cl}from"child_process";var Il=r(async()=>{try{let t=Cl("crontab",["-l"],{encoding:"utf-8"});if(t.status!==0)return console.log("No crontab for this user."),!1;let e=t.stdout;return console.log(e),e.includes("solc epochTimer")}catch(t){return console.error("Error reading crontab:",t),!1}},"hasEpochTimer"),He=Il;var es=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solc Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await He()&&(console.log(ts.green("\u26A0\uFE0F Epoch Timer Cron Job already set")),process.exit(1));let n=`(crontab -l 2>/dev/null; echo "${e.cron} . /home/solv/.profile && solc epochTimer >> /home/solv/cron.log 2>&1") | crontab -`;Ll(n,{shell:!0,stdio:"inherit"}),console.log(ts.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var Zt={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as xl,mkdirSync as Vl}from"fs";import $l from"inquirer";import{homedir as Kl}from"os";import{spawnSync as Pl}from"node:child_process";function os(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Pl(s,{shell:!0,stdio:"inherit"}).status===0}r(os,"executeSCP");var vo=r(async(t="")=>{let e=t;t===""&&(e=(await $l.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let o=Object.values(A()),n=Kl(),s=n.includes("/home/solv")?"/home/solv":n+Zt.SOLV_KEYPAIR_DOWNLOAD_PATH;xl(s)||Vl(s,{recursive:!0});let a=!0,i=n+"/"+jo;o.push(i);for(let c of o){let l=c.split("/"),m=l[l.length-1];m=n.includes("/home/solv")?m:m.replace(".json",`-${e}.json`);let d=`${s}/${m}`;os(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as bl}from"child_process";import{existsSync as Dl}from"fs";import Ul from"inquirer";import Ml from"os";var rs=r(async(t="")=>{let e=Ml.userInfo().homedir,o=t;t===""&&(o=(await Ul.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${Zt.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=Zt.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(A(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let l=`${n}/${c}`;if(!Dl(l))continue;let m=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;bl(m,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Fl}from"child_process";import Hl from"inquirer";var ns=r(async()=>{let t=await Hl.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${D.ROOT}/.ssh && echo "${t.pubkey}" >> ${D.AUTHORIZED_KEYS}`;Fl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import je from"chalk";import{readFileSync as jl}from"fs";import Yl from"os";var ss=r(()=>{try{let e=`${Yl.userInfo().homedir}/.ssh/id_rsa.pub`,o=jl(e,"utf8");console.log(je.white(`Your SSH Public Key is:
|
|
525
527
|
`)),console.log(je.white(o))}catch(t){console.error(je.white(`Error reading SSH Public Key
|
|
526
528
|
`)),console.error(je.white(t))}},"cat");import{spawnSync as Jl}from"child_process";var as=r(()=>{Jl("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Bl}from"child_process";import{readFileSync as Gl}from"fs";import{Readable as zl}from"stream";var is=r(async t=>new Promise((e,o)=>{try{let n=Bl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
|
|
527
529
|
`).filter(i=>i)),t.increment()}),n.stderr.on("data",a=>{t.increment()}),n.on("close",a=>{e(s)})}catch(n){o(`search Error: ${n}`)}}),"search"),Wl=r(t=>{try{return JSON.parse(Gl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),cs=r(async(t,e)=>{let o=[],n=zl.from(t);return n.on("data",async s=>{Wl(s)&&o.push(s)}),new Promise((s,a)=>{n.on("end",()=>{s(o)}),n.on("error",i=>{a(i)})})},"processPaths");import Ye from"chalk";import{Presets as Zl,SingleBar as tm}from"cli-progress";import ls from"chalk";import{spawnSync as ql}from"node:child_process";import Ql from"node-fetch";var Xl=r(async()=>{let t=await Ql(qo,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(ls.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
|
|
@@ -548,10 +550,10 @@ Signature:`,d.signature)),!0},"elSOLdeposit");import{Connection as Rm,Keypair as
|
|
|
548
550
|
Signature:`,S.signature)),!0},"depositeLST");import{execSync as qe}from"node:child_process";import{homedir as xm}from"os";var Is=r(t=>{h.command("stake").description("Stake SOL").option("-l, --lst","Convert to Liquid Stake Token").option("-e, --elsol","Convert to elSOL",!1).option("-a, --amount <amount>","Amount of SOL to stake","0").action(async e=>{let o=Number(e.amount);console.log("RPC URL:",t.RPC_URL);let n=B,s=t.NETWORK===u.TESTNET,a=xm(),i=s?`${a}/testnet-authority-keypair.json`:`${a}/mainnet-authority-keypair.json`;if(qe(`solana config set --keypair ${i}`),!await Pm(i)){console.log(Pt.yellow(`\u26A0\uFE0F No keypair found. Please place your keypair in the following path:
|
|
549
551
|
`)),console.log(Pt.white(i));return}let c=JSON.parse(await Lm(i,"utf-8"));if(e.elsol){await ze(t.RPC_URL,n,o,c);return}else if(e.lst){let l=await ws(t.RPC_URL);if(!l)return;n=l.stakePoolAddress,await Cs(t.RPC_URL,n,o,c,l.symbol);return}else{if(!await ys(t))return;let m=await I(),{validatorVoteAccount:d,stakeAccounts:p}=await $m(m);for await(let f of p)try{await us(f,d)}catch{console.log(Pt.yellow(`Network might be busy, please try again later
|
|
550
552
|
You can use a custom RPC endpoint to avoid this issue
|
|
551
|
-
`))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await
|
|
553
|
+
`))}}}),h.command("unstake").description("Unstake SOL").action(async()=>{let{unstakeOption:e}=await bm();if(e==="Deactivate Stake"){let{stakeAccounts:o}=await Vm();for await(let n of o)try{await Ss(n)}catch{console.log(Pt.yellow(`Network might be busy, please try again later
|
|
552
554
|
You can use a custom RPC endpoint to avoid this issue
|
|
553
555
|
`))}}else{let o=await Dm();await Ts(o.stakeAccounts,o.destinationAddress,o.solAmount)}})},"stakeCommands"),We=r(async()=>{let t=qe("solana address").toString().trim(),e=qe("solana balance").toString().replace("SOL","").trim();console.log(Pt.white(`\u{1F4D7} Selected Wallet: ${t}
|
|
554
|
-
\u{1F4B0} Account Balance:`,e+" SOL")),console.log(Pt.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await re.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Vm=r(async()=>{let t=await I();return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),$m=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?
|
|
556
|
+
\u{1F4B0} Account Balance:`,e+" SOL")),console.log(Pt.yellow("\u26A0\uFE0F 0.03 SOL will be remaining in the account if you just press enter."));let o=await re.prompt([{type:"input",name:"amount",message:"Enter amount of SOL to stake:",default:String(Number(e)-.03)}]);return Number(o.amount)},"askAmount"),Vm=r(async()=>{let t=await I();return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to deactivate stake from?",choices:t.STAKE_ACCOUNTS}])},"deactivateStakeAsk"),$m=r(async t=>{let e=t.STAKE_ACCOUNTS,o=t.NETWORK===u.TESTNET?Km(t):t.DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY;return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to delegate stake to?",choices:e},{type:"input",name:"validatorVoteAccount",message:"What is the Validator Vote Account Address?",default(){return o}}])},"delegateStakeAsk"),Km=r(t=>{let n=`/home/solv/${t.NETWORK===u.TESTNET?"testnet-vote-account":"mainnet-vote-account"}-keypair.json`;return qe(`solana-keygen pubkey ${n}`).toString()},"getVoteAccountAddress"),bm=r(async()=>{let t=["Deactivate Stake","Withdraw Stake"];return await re.prompt([{type:"list",name:"unstakeOption",message:"What would you like to do?",choices:t,default:t[0]}])},"unstakeAsk"),Dm=r(async()=>{let t=(await I()).STAKE_ACCOUNTS;return await re.prompt([{type:"checkbox",name:"stakeAccounts",message:"Which Stake Account would you like to withdraw stake from?",choices:t},{type:"input",name:"destinationAddress",message:"What is the destination address for the withdrawn SOL?",default(){return"xxxxxxxx"}},{type:"input",name:"solAmount",message:"How many SOL would you like to withdraw?",default(){return"1"}}])},"withdrawStakeAsk");import{execSync as Um}from"child_process";var Ls=r(()=>{try{return Um("solana epoch --commitment finalized -ul",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getEpoch Error: ${t}`}},"getEpoch");import{execSync as Mm}from"child_process";var Ps=r(()=>{try{return Mm("solana --url http://127.0.0.1:8899 slot",{encoding:"utf-8"}).toString().replace(/\n/g,"")}catch(t){return`getSlot Error: ${t}`}},"getSlot");import lt from"chalk";import{Spinner as Fm}from"cli-spinner";var xt;(function(t){t.successHex=lt.hex("#39A845"),t.warningHex=lt.hex("#FFD02E"),t.errorHex=lt.hex("#B5332E"),t.syncHex=lt.hex("#3073B7"),t.greyHex=lt.hex("#BEBDBD"),t.indigoHex=lt.hex("#3950A0"),t.pinkHex=lt.hex("#D8A1C4"),t.normal=e=>{console.log(lt.white(e))},t.syncSpinner=e=>{let o=new Fm(lt.white(e)+` %s
|
|
555
557
|
`);try{return o.setSpinnerString(18),o.start(),o}catch(n){throw o.stop(!0),new Error(`syncSpinner Error: ${n}`)}},t.solvAA=()=>{let e=t.syncHex(" _ "),o=t.syncHex(" | | "),n=t.syncHex(" ___ ___ | |")+t.errorHex("_ __ "),s=t.syncHex("/ __|/ _ \\| |")+t.errorHex("\\ \\ / /"),a=t.syncHex("\\__ \\ (_) | |")+t.errorHex(" \\ V / "),i=t.syncHex("|___/\\___/|_|")+t.errorHex(" \\_/ ");console.log(`
|
|
556
558
|
${e}`),console.log(`${o}`),console.log(`${n}`),console.log(`${s}`),console.log(`${a}`),console.log(`${i}
|
|
557
559
|
`),console.log(`Solc Version: v${le}
|
|
@@ -575,7 +577,7 @@ $ solc mt -p <fileSystem>
|
|
|
575
577
|
$ solc umt -p <fileSystem>
|
|
576
578
|
`,s=`mount reload
|
|
577
579
|
$ solc mtr
|
|
578
|
-
`;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(xt||(xt={}));import Vt from"chalk";import{spawnSync as Hm}from"node:child_process";var Qe=r(()=>{Hm("solana config get",{shell:!0,stdio:"inherit"});let e=pt();console.log(Vt.white("start-validator.sh: ")+e.scriptPath),console.log(Vt.white("service unit: ")+P.SOL_SERVICE),console.log(Vt.white("logrotate: ")+P.SOL_LOGROTATE),console.log(Vt.white("sysctl.d: ")+P.SOL_SYSTEM_CONFIG21),console.log(Vt.white("limits.d: ")+P.SOL_NOFILES_CONF),console.log(Vt.white("system.conf: ")+P.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as jm}from"node:child_process";import Ym from"chalk";var xs=r(t=>{let{minDownloadSpeed:e,maxLatency:o,snapshotPath:n}=t;try{console.log(Ym.white("\u{1F50E} Running solana-snapshot-finder..."));let s=["rm -rf solana-snapshot-finder","git clone https://github.com/ikaika1/solana-snapshot-finder.git","sudo apt-get update","sudo apt-get install -y python3-venv git","cd solana-snapshot-finder","python3 -m venv venv",'bash -lc "source ./venv/bin/activate && pip3 install -r requirements.txt"',`bash -lc "source ./venv/bin/activate && python3 snapshot-finder.py --min_download_speed ${e} --max_latency ${o} --snapshot_path ${n}"`].join(" && ");jm(s,{shell:!0,stdio:"inherit"})}catch(s){throw new Error(`runSnapshotFinder Error: ${s}`)}},"runSnapshotFinder");import{spawnSync as Vs}from"node:child_process";import Jm from"chalk";var $s=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?tt:et;t.NODE_TYPE===T.RPC&&(o=Tt);let n=h.command("get").description("Get Solana Validator's Information").argument("<cmd>","Subcommands: epoch, slot, catchup, snapshot, contact, config");n.command("epoch").description("Show Validator's Epoch").action(()=>{let s=Ls();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=Vs(s,{shell:!0,stdio:"pipe"});console.log(Jm.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Ps();console.log({slot:s})}),n.command("snapshot").alias("sn").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed","45").option("-l, --ledgerPath <ledgerPath>","Ledger Path","/mnt/ledger").option("-s, --snapshotPath <snapshotPath>","Snapshot Path","/mnt/ledger/snapshot").option("-v, --version <version>","Specific Version Node",o).description("Download the latest snapshot").action(s=>{let a=s.minDownloadSpeed,i=s.ledgerPath,c=s.snapshotPath,l=s.version;Ve(e,a,i,c,l)}),n.command("snapshot-finder").description("Clone and run solana-snapshot-finder to fetch a snapshot").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed (MB/s)","100").option("-x, --maxLatency <maxLatency>","Maximum latency (ms)","1000").option("-p, --snapshotPath <snapshotPath>","Snapshot download path","/mnt/ledger").action(s=>{xs({minDownloadSpeed:s.minDownloadSpeed,maxLatency:s.maxLatency,snapshotPath:s.snapshotPath})}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${
|
|
580
|
+
`;console.log(e),console.log(t.greyHex(o)),console.log(t.greyHex(n)),console.log(t.greyHex(s))}})(xt||(xt={}));import Vt from"chalk";import{spawnSync as Hm}from"node:child_process";var Qe=r(()=>{Hm("solana config get",{shell:!0,stdio:"inherit"});let e=pt();console.log(Vt.white("start-validator.sh: ")+e.scriptPath),console.log(Vt.white("service unit: ")+P.SOL_SERVICE),console.log(Vt.white("logrotate: ")+P.SOL_LOGROTATE),console.log(Vt.white("sysctl.d: ")+P.SOL_SYSTEM_CONFIG21),console.log(Vt.white("limits.d: ")+P.SOL_NOFILES_CONF),console.log(Vt.white("system.conf: ")+P.SOL_SYSTEM_CONF)},"showConfig");import{spawnSync as jm}from"node:child_process";import Ym from"chalk";var xs=r(t=>{let{minDownloadSpeed:e,maxLatency:o,snapshotPath:n}=t;try{console.log(Ym.white("\u{1F50E} Running solana-snapshot-finder..."));let s=["rm -rf solana-snapshot-finder","git clone https://github.com/ikaika1/solana-snapshot-finder.git","sudo apt-get update","sudo apt-get install -y python3-venv git","cd solana-snapshot-finder","python3 -m venv venv",'bash -lc "source ./venv/bin/activate && pip3 install -r requirements.txt"',`bash -lc "source ./venv/bin/activate && python3 snapshot-finder.py --min_download_speed ${e} --max_latency ${o} --snapshot_path ${n}"`].join(" && ");jm(s,{shell:!0,stdio:"inherit"})}catch(s){throw new Error(`runSnapshotFinder Error: ${s}`)}},"runSnapshotFinder");import{spawnSync as Vs}from"node:child_process";import Jm from"chalk";var $s=r(t=>{let e=t.NETWORK===u.TESTNET,o=e?tt:et;t.NODE_TYPE===T.RPC&&(o=Tt);let n=h.command("get").description("Get Solana Validator's Information").argument("<cmd>","Subcommands: epoch, slot, catchup, snapshot, contact, config");n.command("epoch").description("Show Validator's Epoch").action(()=>{let s=Ls();console.log({epoch:s})}),n.command("ip").description("Show Validator's IP Address").action(()=>{let s="curl ipinfo.io/ip",{stdout:a}=Vs(s,{shell:!0,stdio:"pipe"});console.log(Jm.white(`${a}`))}),n.command("slot").description("Show Current Slot").action(()=>{let s=Ps();console.log({slot:s})}),n.command("snapshot").alias("sn").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed","45").option("-l, --ledgerPath <ledgerPath>","Ledger Path","/mnt/ledger").option("-s, --snapshotPath <snapshotPath>","Snapshot Path","/mnt/ledger/snapshot").option("-v, --version <version>","Specific Version Node",o).description("Download the latest snapshot").action(s=>{let a=s.minDownloadSpeed,i=s.ledgerPath,c=s.snapshotPath,l=s.version;Ve(e,a,i,c,l)}),n.command("snapshot-finder").description("Clone and run solana-snapshot-finder to fetch a snapshot").option("-m, --minDownloadSpeed <minDownloadSpeed>","Minimum download speed (MB/s)","100").option("-x, --maxLatency <maxLatency>","Maximum latency (ms)","1000").option("-p, --snapshotPath <snapshotPath>","Snapshot download path","/mnt/ledger").action(s=>{xs({minDownloadSpeed:s.minDownloadSpeed,maxLatency:s.maxLatency,snapshotPath:s.snapshotPath})}),n.command("contact").description("Show Validator Contact Information").action(()=>{let a=`${b()} --ledger /mnt/ledger/ contact-info`;Vs(a,{shell:!0,stdio:"inherit"})}),n.command("config").description("Show Solc Config").alias("c").action(async()=>{Qe()}),n.command("aa").description("Show Solc AA").option("-c, --client","Show Solc Client Mode AA",!1).action(s=>{xt.solvAA(),s.client?xt.installClientMessage():xt.installMessage()}),n.addHelpCommand("help [cmd]","Get Solana Validator Information")},"getCommands");import{spawnSync as Bm}from"node:child_process";var Ks=r(()=>{Bm("sudo systemctl status relayer.service",{shell:!0,stdio:"inherit"})},"relayerStatus");import{spawnSync as Gm}from"node:child_process";var bs=r(()=>{Gm("sudo systemctl start relayer.service",{shell:!0,stdio:"inherit"})},"relayerStart");import{spawnSync as zm}from"node:child_process";var Ds=r(()=>{zm("sudo systemctl stop relayer.service",{shell:!0,stdio:"inherit"})},"relayerStop");import{spawnSync as Wm}from"node:child_process";var Us=r(()=>{Wm("sudo systemctl restart relayer.service",{shell:!0,stdio:"inherit"})},"relayerRestart");import{spawnSync as qm}from"node:child_process";var Ms=r((t=!1)=>{qm(t?"journalctl -u relayer.service -xef | grep ERROR":"journalctl -u relayer.service -xef",{shell:!0,stdio:"inherit"})},"relayerLog");import Ro from"chalk";import{spawnSync as Xm}from"child_process";import{spawnSync as Qm}from"node:child_process";var Fs=r(()=>{Qm("sudo systemctl enable relayer.service",{shell:!0,stdio:"inherit"})},"relayerEnable");var Hs=r(()=>{let t=h.command("relayer").description("Jito Relayer Commands");t.command("status").description("Show Relayer Status").action(()=>{Ks()}),t.command("start").description("Start Relayer").action(()=>{bs()}),t.command("stop").description("Stop Relayer").action(()=>{Ds()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Relayer Logs").action(e=>{Ms(e.error)}),t.command("restart").description("Restart Relayer").action(()=>{Us()}),t.command("enable").description("Enable Relayer").action(()=>{Fs()}),t.command("set:url").option("-u, --url <url>","Set Relayer URL","").description("Set Relayer URL on Validator").action(e=>{if(e.url===""){console.log(Ro.red("Please provide a URL"));return}let o=`${b()} --ledger ${y} set-relayer-config --relayer-url ${e.url}`;console.log(Ro.white("Setting Relayer URL ...")),Xm(o,{shell:!0,stdio:"inherit"}),console.log(Ro.green("\u{1F7E2} Relayer URL Set"))})},"relayerCommands");import{writeFile as Zm,mkdir as tp}from"fs/promises";import{existsSync as js}from"fs";import ep from"path";import Co from"chalk";var op=r((t,e)=>{let o=t;if(e.identity&&(o=o.replace(/identity_path\s*=\s*\"[^\"]*\"/,`identity_path = "${e.identity}"`)),e.vote&&(o=o.replace(/vote_account_path\s*=\s*\"[^\"]*\"/,`vote_account_path = "${e.vote}"`)),e.auth&&e.auth.length>0){let n=e.auth.map(s=>`"${s}"`).join(`,
|
|
579
581
|
`);o=o.replace(/authorized_voter_paths\s*=\s*\[[\s\S]*?\]/,`authorized_voter_paths = [
|
|
580
582
|
${n}
|
|
581
583
|
]`)}return e.blockEngineUrl&&(o=o.replace(/url\s*=\s*\"[^\"]*\"/,`url = "${e.blockEngineUrl}"`)),o},"renderWithOverrides"),Ys=r(()=>{h.command("firedancer").description("Firedancer utilities").command("config").description("Generate Firedancer config.toml").option("-n, --network <network>","Network: mainnet-beta|testnet").option("-i, --identity <path>","Identity keypair path").option("-v, --vote <path>","Vote account keypair path").option("-a, --auth <paths...>","Authorized voter keypair paths").option("-o, --out <path>","Output path","/home/solv/firedancer/config.toml").option("-f, --force","Overwrite if exists",!1).option("--dry-run","Print to stdout instead of writing",!1).option("--jito-region <region>",`Jito region (${Object.keys(G).join("|")})`).action(async e=>{let o=await I(),s=(e.network||o.NETWORK)===u.MAINNET?Ue():De(),a;if(e.jitoRegion){let m=e.jitoRegion,d=G[m];if(!d){console.log(Co.red(`Invalid --jito-region '${e.jitoRegion}'. Choose one of: ${Object.keys(G).join(", ")}`));return}a=d.BLOCK_ENGINE_URL}let i=op(s.body,{identity:e.identity,vote:e.vote,auth:e.auth,blockEngineUrl:a});if(e.dryRun){console.log(i);return}let c=e.out||s.filePath,l=ep.dirname(c);if(js(l)||await tp(l,{recursive:!0}),js(c)&&!e.force){console.log(Co.red(`File exists: ${c}. Use --force to overwrite or --dry-run to preview`));return}await Zm(c,i),console.log(Co.green(`Wrote Firedancer config: ${c}`))})},"firedancerCommands");import Js from"chalk";import{spawnSync as rp}from"child_process";var Bs=r(async t=>{try{let e=`spl-token accounts --owner ${t}`;rp(e,{shell:!0,stdio:"inherit"})}catch{console.log(Js.yellow(`You might need to install the Solana SPL CLI:
|
|
@@ -591,17 +593,17 @@ Balance: ${e.authorityKeyBalance}
|
|
|
591
593
|
Active Identity:`;t.NODE_TYPE===T.RPC&&(o=`Validator Key: ${e.validatorKey}
|
|
592
594
|
Address: ${e.validatorKeyAddress}
|
|
593
595
|
Balance: ${e.validatorKeyBalance}
|
|
594
|
-
Active Identity:`),console.log(ap.white(o)),ip(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),lp=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:ut(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:ut(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:ut(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:ut(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:ut(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as mp}from"child_process";var zs=r(()=>{mp("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as Ws}from"node:child_process";var qs=r(()=>{Ws("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),Ws("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as pp}from"node:child_process";var Qs=r(t=>{let o=`${
|
|
596
|
+
Active Identity:`),console.log(ap.white(o)),ip(`solana-keygen pubkey ${O}`,{stdio:"inherit",shell:!0})},"showKeypairsInfo"),lp=r(t=>{let e=A(),o=t.NETWORK===u.TESTNET;return t.NODE_TYPE===T.RPC?{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey)}:o?{validatorKey:e.testnetValidatorKey,validatorKeyAddress:E(e.testnetValidatorKey),validatorKeyBalance:ut(e.testnetValidatorKey),voteKey:e.testnetValidatorVoteKey,voteKeyAddress:E(e.testnetValidatorVoteKey),voteKeyBalance:ut(e.testnetValidatorVoteKey),authorityKey:e.testnetValidatorAuthorityKey,authorityKeyAddress:E(e.testnetValidatorAuthorityKey),authorityKeyBalance:ut(e.testnetValidatorAuthorityKey)}:{validatorKey:e.mainnetValidatorKey,validatorKeyAddress:E(e.mainnetValidatorKey),validatorKeyBalance:ut(e.mainnetValidatorKey),voteKey:e.mainnetValidatorVoteKey,voteKeyAddress:E(e.mainnetValidatorVoteKey),voteKeyBalance:ut(e.mainnetValidatorVoteKey),authorityKey:e.mainnetValidatorAuthorityKey,authorityKeyAddress:E(e.mainnetValidatorAuthorityKey),authorityKeyBalance:ut(e.mainnetValidatorAuthorityKey)}},"getKeypairsInfo");import{spawnSync as mp}from"child_process";var zs=r(()=>{mp("sudo rm -rf /home/solv/solana-validator.log.*",{shell:!0,stdio:"inherit"})},"rmLogs");import{spawnSync as Ws}from"node:child_process";var qs=r(()=>{Ws("sudo rm -rf /mnt/ledger/*",{shell:!0,stdio:"inherit"}),Ws("sudo rm -rf /mnt/accounts/*",{shell:!0,stdio:"inherit"})},"rmSnapshot");import{spawnSync as pp}from"node:child_process";var Qs=r(t=>{let o=`${b()} --ledger ${y} monitor`;pp(o,{shell:!0,stdio:"inherit"})},"monitorSolana");import{spawnSync as dp}from"node:child_process";var Xs=r(()=>{dp("solana catchup --our-localhost",{shell:!0,stdio:"inherit"})},"solanaCatchup");import Xe from"inquirer";import{execSync as Ze,spawnSync as Io}from"child_process";import ne from"chalk";import{homedir as up}from"os";var Zs=1e3,Lo;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account"})(Lo||(Lo={}));var to;(function(t){t.VALIDATOR="Validator Account",t.AUTHORITY="Authority Account",t.OTHER="Other Account"})(to||(to={}));var fp=Object.values(Lo),ta=r(t=>{h.command("transfer").alias("tr").option("-s, --spl","Show SPL Token Balance",!1).description("Transfer Solana Tokens/SPL Tokens").action(async e=>{e.spl&&(console.log(ne.blue(`\u2728 Coming Soon
|
|
595
597
|
This Feature is Currently Under Development
|
|
596
598
|
Please Check Back Later`)),process.exit(0));let{fromWalletPath:o,fromAddress:n,toAddress:s}=await hp(),a="0";try{let p=Io(`solana balance ${s} --url ${t.RPC_URL}`,{shell:!0});if(p.status!==0)throw new Error("Invalid Wallet Address");a=p.stdout.toString(),console.log("toBalance:",a)}catch{console.log(ne.red(`\u274C To Wallet is Invalid
|
|
597
599
|
Please Check the Wallet Address`)),process.exit(0)}let i=Ze(`solana balance ${n} --url ${t.RPC_URL}`).toString();console.log(ne.white(`\u{1F3E6} From Wallet: ${n}
|
|
598
600
|
\u{1F4B0} Balance: ${i}`)),console.log(ne.white(`\u{1F3E6} To Wallet: ${s}
|
|
599
601
|
\u{1F4B0} Balance: ${a}`));let{amount:c}=await Xe.prompt([{type:"number",name:"amount",message:"Enter Amount to Transfer",default:.1}]),l=`solana transfer ${s} ${c} --allow-unfunded-recipient --keypair ${o} --url ${t.RPC_URL}`,m=Io(l,{shell:!0,stdio:"inherit"}),d=de;for(;m.status!==0&&d>0;)console.log(ne.red(`\u274C Transaction Failed
|
|
600
602
|
Retrying Transaction in ${Zs}ms
|
|
601
|
-
Retries Left: ${d}`)),await rt(Zs),m=Io(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),se=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),hp=r(async()=>{let t=up(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=Ze(`solana address -k ${n}`).toString().trim(),a=await Xe.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:fp}]),i=a.from==="Validator Account"?Object.values(to).filter(p=>p!=="Validator Account"):Object.values(to).filter(p=>p!=="Authority Account");if((await Xe.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:p}=await Xe.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:se}]);s=p}else{let p=a.from==="Validator Account"?e:o;n=`${t}/${p}`,s=Ze(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,m=`${t}/${l}`,d=Ze(`solana address -k ${m}`).toString().trim();return{fromWalletPath:m,fromAddress:d,toAddress:s}},"selectFromKeypairs");import ea from"chalk";import yp from"inquirer";import{execSync as Po,spawnSync as Sp}from"node:child_process";var oa=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?ge:t.RPC_URL,s=o?"~/testnet-validator-keypair.json":"~/mainnet-validator-keypair.json",a=o?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",i=o?"~/testnet-vote-account-keypair.json":"~/mainnet-vote-account-keypair.json",c=Po(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,m=Number(c)-.03;if(e)l=m;else{console.log(ea.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(ea.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let S=await yp.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${m}`,default:String(m)}]);l=Number(S.sol)}let d=Po(`solana address --keypair ${i}`).toString().trim(),p=Po(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${p} ${l} --authorized-withdrawer ${a} --url ${n}`;Sp(f,{shell:!0,stdio:"inherit"})},"withdraw");var ra=r(t=>{h.command("withdraw").option("-a, --all","Withdraw All SOL",!1).description("Withdraw SOL from Vote Account to Authority Account").action(async e=>{await oa(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as Ip,spawnSync as Lp}from"node:child_process";import{BN as sa}from"bn.js";import{LAMPORTS_PER_SOL as xo}from"@solana/web3.js";import{Connection as wp,LAMPORTS_PER_SOL as Ap}from"@solana/web3.js";import{Keypair as Tp}from"@solana/web3.js";import{readFile as gp}from"fs/promises";var Ep=r(async t=>{let e=JSON.parse(await gp(t,"utf8"));return Tp.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),na=Ep;import{homedir as _p}from"os";var j;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(j||(j={}));var Np={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},Op=r(async(t,e="auth",o=!1)=>{let n=new wp(t),s=_p(),a=A(s),c=`${o?"testnet":"mainnet"}${Np[e]}`,l=a[c],m=await na(l),d=await n.getBalance(m.publicKey),f=Number(d)/Ap;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),st=Op;var kp=new sa(3*xo),aa=r(async t=>{let e=await st(t,j.VALIDATOR),n=new sa(Number(Number(e)*xo)).sub(kp),s=Number(n)/xo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import ae from"chalk";import{Keypair as vp,Connection as Rp,PublicKey as Cp,SystemProgram as ia,ComputeBudgetProgram as eo,VersionedTransaction as ca,TransactionMessage as la}from"@solana/web3.js";var ma=r(async(t,e,o,n)=>{let s=0;try{let a=new Rp(t,"finalized"),i=vp.fromSecretKey(new Uint8Array(Array.from(e))),c=new Cp(o),l=n;for(;;)try{let m=[ia.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:2e5}),eo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),p=new ca(new la({instructions:m,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(p,{replaceRecentBlockhash:!0,sigVerify:!1});p.sign([i]);let S=[ia.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),eo.setComputeUnitPrice({microLamports:1e3})],w=new ca(new la({instructions:S,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let _=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:_},"finalized"),console.log("finalized signature:",_),_}catch(m){if(s++,s>de)throw new Error(JSON.stringify(m));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${m}`),await rt(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as Pp}from"fs/promises";import{LAMPORTS_PER_SOL as xp}from"@solana/web3.js";var Vo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await st(t,j.VOTE)<1?(console.log(ae.white("Vote Account Balance is less than 1 SOL")),console.log(ae.white("Skip withdrawing SOL from Vote Account to Authority Account"))):Lp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await aa(t);console.log(ae.white(`Transferable Balance: ${s} SOL`));let a=s*xp;if(s<1)console.log(ae.white("Validator Account Balance is less than 1 SOL")),console.log(ae.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=Ip(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await Pp(o,"utf-8"));await ma(t,c,i,a)}return!0},"collectSOL");import{readFile as Yp}from"fs/promises";import Jp from"inquirer";import $o from"chalk";import{execSync as Vp}from"child_process";import{homedir as $p}from"os";var
|
|
602
|
-
`)),console.log($o.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),pa=
|
|
603
|
+
Retries Left: ${d}`)),await rt(Zs),m=Io(l,{shell:!0,stdio:"inherit"}),d--;process.exit(0)})},"transferCommands"),se=r(t=>/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(t)?!0:"Invalid Solana keygen string. Please enter a valid key.","validateSolanaKey"),hp=r(async()=>{let t=up(),e="mainnet-authority-keypair.json",o="mainnet-validator-keypair.json",n=`${t}/${e}`,s=Ze(`solana address -k ${n}`).toString().trim(),a=await Xe.prompt([{type:"list",name:"from",message:"Select Transfer From Account",choices:fp}]),i=a.from==="Validator Account"?Object.values(to).filter(p=>p!=="Validator Account"):Object.values(to).filter(p=>p!=="Authority Account");if((await Xe.prompt([{type:"list",name:"to",message:"Select Transfer To Account",choices:i}])).to==="Other Account"){let{to:p}=await Xe.prompt([{type:"input",name:"to",message:"Enter Transfer To Account",validate:se}]);s=p}else{let p=a.from==="Validator Account"?e:o;n=`${t}/${p}`,s=Ze(`solana address -k ${n}`).toString().trim()}let l=a.from==="Validator Account"?o:e,m=`${t}/${l}`,d=Ze(`solana address -k ${m}`).toString().trim();return{fromWalletPath:m,fromAddress:d,toAddress:s}},"selectFromKeypairs");import ea from"chalk";import yp from"inquirer";import{execSync as Po,spawnSync as Sp}from"node:child_process";var oa=r(async(t,e=!1)=>{let o=t.NETWORK===u.TESTNET,n=o?ge:t.RPC_URL,s=o?"~/testnet-validator-keypair.json":"~/mainnet-validator-keypair.json",a=o?"~/testnet-authority-keypair.json":"~/mainnet-authority-keypair.json",i=o?"~/testnet-vote-account-keypair.json":"~/mainnet-vote-account-keypair.json",c=Po(`solana balance ${i}`).toString().replace("SOL","").trim(),l=0,m=Number(c)-.03;if(e)l=m;else{console.log(ea.white("\u{1F4B0} Current Vote Account Balance:",c+" SOL")),console.log(ea.yellow("\u26A0\uFE0F 0.03 SOL will be left in the account if you just press enter."));let S=await yp.prompt([{type:"input",name:"sol",message:`How many SOL? e.g. ${m}`,default:String(m)}]);l=Number(S.sol)}let d=Po(`solana address --keypair ${i}`).toString().trim(),p=Po(`solana address --keypair ${a}`).toString().trim(),f=`solana withdraw-from-vote-account --keypair ${s} --commitment finalized ${d} ${p} ${l} --authorized-withdrawer ${a} --url ${n}`;Sp(f,{shell:!0,stdio:"inherit"})},"withdraw");var ra=r(t=>{h.command("withdraw").option("-a, --all","Withdraw All SOL",!1).description("Withdraw SOL from Vote Account to Authority Account").action(async e=>{await oa(t,e.all),process.exit(0)})},"withdrawCommands");import{execSync as Ip,spawnSync as Lp}from"node:child_process";import{BN as sa}from"bn.js";import{LAMPORTS_PER_SOL as xo}from"@solana/web3.js";import{Connection as wp,LAMPORTS_PER_SOL as Ap}from"@solana/web3.js";import{Keypair as Tp}from"@solana/web3.js";import{readFile as gp}from"fs/promises";var Ep=r(async t=>{let e=JSON.parse(await gp(t,"utf8"));return Tp.fromSecretKey(new Uint8Array(e))},"loadKeypairFromFile"),na=Ep;import{homedir as _p}from"os";var j;(function(t){t.VALIDATOR="validator",t.AUTH="auth",t.VOTE="vote"})(j||(j={}));var Np={validator:"ValidatorKey",auth:"ValidatorAuthorityKey",vote:"ValidatorVoteKey"},Op=r(async(t,e="auth",o=!1)=>{let n=new wp(t),s=_p(),a=A(s),c=`${o?"testnet":"mainnet"}${Np[e]}`,l=a[c],m=await na(l),d=await n.getBalance(m.publicKey),f=Number(d)/Ap;if(isNaN(f))throw new Error("Failed to get balance");return f},"getBalance"),st=Op;var kp=new sa(3*xo),aa=r(async t=>{let e=await st(t,j.VALIDATOR),n=new sa(Number(Number(e)*xo)).sub(kp),s=Number(n)/xo;return s=Math.round(s*1e9)/1e9,s},"getHarvestBalance");import ae from"chalk";import{Keypair as vp,Connection as Rp,PublicKey as Cp,SystemProgram as ia,ComputeBudgetProgram as eo,VersionedTransaction as ca,TransactionMessage as la}from"@solana/web3.js";var ma=r(async(t,e,o,n)=>{let s=0;try{let a=new Rp(t,"finalized"),i=vp.fromSecretKey(new Uint8Array(Array.from(e))),c=new Cp(o),l=n;for(;;)try{let m=[ia.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:2e5}),eo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],d=await a.getLatestBlockhashAndContext({commitment:"finalized"}),p=new ca(new la({instructions:m,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message()),f=await a.simulateTransaction(p,{replaceRecentBlockhash:!0,sigVerify:!1});p.sign([i]);let S=[ia.transfer({fromPubkey:i.publicKey,toPubkey:c,lamports:l}),eo.setComputeUnitLimit({units:f.value.unitsConsumed?Math.trunc(f.value.unitsConsumed*1.2):2e5}),eo.setComputeUnitPrice({microLamports:1e3})],w=new ca(new la({instructions:S,payerKey:i.publicKey,recentBlockhash:d.value.blockhash}).compileToV0Message());w.sign([i]);let _=await a.sendRawTransaction(w.serialize());return await a.confirmTransaction({...d.value,signature:_},"finalized"),console.log("finalized signature:",_),_}catch(m){if(s++,s>de)throw new Error(JSON.stringify(m));console.log(`solanaTransfer failed, ${s} times retrying... Error: ${m}`),await rt(1e3)}}catch(a){throw console.log(`solanaTransfer: ${a}`),new Error(JSON.stringify(a))}},"solanaTransfer");import{readFile as Pp}from"fs/promises";import{LAMPORTS_PER_SOL as xp}from"@solana/web3.js";var Vo=r(async t=>{let{mainnetValidatorAuthorityKey:e,mainnetValidatorKey:o}=A();await st(t,j.VOTE)<1?(console.log(ae.white("Vote Account Balance is less than 1 SOL")),console.log(ae.white("Skip withdrawing SOL from Vote Account to Authority Account"))):Lp("solc withdraw --all",{shell:!0,stdio:"inherit"});let s=await aa(t);console.log(ae.white(`Transferable Balance: ${s} SOL`));let a=s*xp;if(s<1)console.log(ae.white("Validator Account Balance is less than 1 SOL")),console.log(ae.white("Skip transferring SOL from Validator Account to Authority Account"));else{let i=Ip(`solana address --keypair ${e}`).toString().trim(),c=JSON.parse(await Pp(o,"utf-8"));await ma(t,c,i,a)}return!0},"collectSOL");import{readFile as Yp}from"fs/promises";import Jp from"inquirer";import $o from"chalk";import{execSync as Vp}from"child_process";import{homedir as $p}from"os";var Kp=r(async t=>{try{let e=$p(),{mainnetValidatorAuthorityKey:o}=A(e),n=`spl-token balance ${Z} --owner ${o} --url ${t}`,s=Vp(n).toString().trim();return Number(s)}catch(e){return console.log($o.red(`Error: ${e}`)),console.log($o.yellow(`You might need to install the Solana SPL CLI:
|
|
604
|
+
`)),console.log($o.white("$ cargo install spl-token-cli")),0}},"getElSOLBalance"),pa=Kp;import no from"chalk";import{Connection as bp,PublicKey as da,Keypair as Dp,ComputeBudgetProgram as oo,VersionedTransaction as ua,TransactionMessage as fa}from"@solana/web3.js";import{getOrCreateAssociatedTokenAccount as ha,createTransferInstruction as ya,TOKEN_PROGRAM_ID as Sa}from"@solana/spl-token";var Ta=r(async(t,e,o,n,s,a)=>{try{let i=new bp(t,"finalized"),c=Dp.fromSecretKey(new Uint8Array(e)),l=new da(o),m=new da(s),d=Math.trunc(n*Math.pow(10,a)),p=await ha(i,c,m,c.publicKey),f=await ha(i,c,m,l,!0);for(;;)try{let S=[ya(p.address,f.address,c.publicKey,d,[],Sa),oo.setComputeUnitLimit({units:2e5}),oo.setComputeUnitPrice({microLamports:Math.ceil(5e6)})],w=await i.getLatestBlockhashAndContext({commitment:"finalized"}),_=new ua(new fa({instructions:S,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message()),N=await i.simulateTransaction(_,{replaceRecentBlockhash:!0,sigVerify:!1});_.sign([c]);let z=[ya(p.address,f.address,c.publicKey,d,[],Sa),oo.setComputeUnitLimit({units:N.value.unitsConsumed?Math.trunc(N.value.unitsConsumed*1.2):2e5}),oo.setComputeUnitPrice({microLamports:1e3})],V=new ua(new fa({instructions:z,payerKey:c.publicKey,recentBlockhash:w.value.blockhash}).compileToV0Message());V.sign([c]);let Ot=await i.sendRawTransaction(V.serialize());return await i.confirmTransaction({...w.value,signature:Ot},"finalized"),console.log("finalized signature:",Ot),Ot}catch(S){console.error("Transfer failed, retrying...",S)}}catch(i){throw console.error(i),i}},"transferSPLToken");import ro from"inquirer";import{spawnSync as ga}from"child_process";import Ko from"chalk";import{promises as Ea}from"fs";var Up=r(async(t="epochTimer")=>{try{let e=ga("crontab",["-l"],{encoding:"utf-8"});e.status!==0&&(console.log(Ko.red("\u26A0\uFE0F Could not read crontab.")),process.exit(1));let n=e.stdout.split(`
|
|
603
605
|
`).filter(a=>!a.includes(t)).join(`
|
|
604
|
-
`),s="/tmp/temp_crontab";await Ea.writeFile(s,n,"utf-8"),ga("crontab",[s]),await Ea.unlink(s),console.log(
|
|
606
|
+
`),s="/tmp/temp_crontab";await Ea.writeFile(s,n,"utf-8"),ga("crontab",[s]),await Ea.unlink(s),console.log(Ko.green("\u2705 Cron Job successfully removed."))}catch(e){console.log(Ko.red("Error removing cron job:",e))}},"removeCronJob"),wa=Up;import Aa from"chalk";var Mp=r(async t=>{let e=t.NETWORK===u.TESTNET,o=await ro.prompt([{type:"confirm",name:"mevOn",message:"Do you want to enable solc Auto Operation Mode?(You can change it again)",default:!1}]);if(!o.mevOn)return await He()&&await wa(),await k({IS_MEV_MODE:o.mevOn,AUTO_UPDATE:!1,AUTO_RESTART:!1}),!1;let n=`\u2728 About Auto Update & Restart \u2728
|
|
605
607
|
${Aa.green("No more Login to the server to update \u{1F331}")}
|
|
606
608
|
|
|
607
609
|
If you enable this, solc will update automatically when the solc/solana version is updated.
|
|
@@ -610,7 +612,7 @@ AUTO UPDATE: If you enable this, solc will update automatically when the solc ve
|
|
|
610
612
|
|
|
611
613
|
AUTO RESTART: If you enable this, solc will restart automatically when the solana version is updated.
|
|
612
614
|
\u203B Please turn off if you are using no-downtime migration.
|
|
613
|
-
`;console.log(Aa.white(n));let s=await ro.prompt([{type:"confirm",name:"autoUpdate",message:"Do you want to enable AUTO UPDATE? (Recommended)",default:!1},{type:"confirm",name:"autoRestart",message:"Do you want to enable AUTO RESTART?",default:!1}]),a=t.RPC_URL,i=t.HARVEST_ACCOUNT===""?"Enter your Harvest Address":t.HARVEST_ACCOUNT,c=await ro.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await ro.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:se}]);i=l.harvestAddress,a=l.rpcUrl}return await k({HARVEST_ACCOUNT:i,IS_MEV_MODE:o.mevOn,RPC_URL:a,DISCORD_WEBHOOK_URL:c.discordWebhookUrl,AUTO_UPDATE:s.autoUpdate,AUTO_RESTART:s.autoRestart}),!0},"mevOn"),_a=Mp;import{spawnSync as Bp}from"node:child_process";import{Connection as jp}from"@solana/web3.js";import{Connection as Fp}from"@solana/web3.js";var Hp=r(async(t,e=10,o=.4)=>{try{let s=await new Fp(t).getRecentPerformanceSamples(e);if(s.length===0)return console.warn("No performance samples available. Using fallback slot time."),o;let a=s.filter(c=>c.numSlots!==0);return a.length===0?(console.warn("All performance samples have numSlots equal to 0. Using fallback slot time."),o):a.reduce((c,l)=>c+l.samplePeriodSecs/l.numSlots,0)/a.length}catch(n){return console.error(`getAverageSlotTime failed: ${n}. Using fallback slot time.`),o}},"getAverageSlotTime"),Na=Hp;var
|
|
615
|
+
`;console.log(Aa.white(n));let s=await ro.prompt([{type:"confirm",name:"autoUpdate",message:"Do you want to enable AUTO UPDATE? (Recommended)",default:!1},{type:"confirm",name:"autoRestart",message:"Do you want to enable AUTO RESTART?",default:!1}]),a=t.RPC_URL,i=t.HARVEST_ACCOUNT===""?"Enter your Harvest Address":t.HARVEST_ACCOUNT,c=await ro.prompt([{type:"input",name:"discordWebhookUrl",message:"Enter your Discord Webhook URL",default:t.DISCORD_WEBHOOK_URL}]);if(e)i="";else{let l=await ro.prompt([{type:"input",name:"rpcUrl",message:"Enter your RPC URL",default:t.RPC_URL},{type:"input",name:"harvestAddress",message:"Enter your Harvest Address",default:i,validate:se}]);i=l.harvestAddress,a=l.rpcUrl}return await k({HARVEST_ACCOUNT:i,IS_MEV_MODE:o.mevOn,RPC_URL:a,DISCORD_WEBHOOK_URL:c.discordWebhookUrl,AUTO_UPDATE:s.autoUpdate,AUTO_RESTART:s.autoRestart}),!0},"mevOn"),_a=Mp;import{spawnSync as Bp}from"node:child_process";import{Connection as jp}from"@solana/web3.js";import{Connection as Fp}from"@solana/web3.js";var Hp=r(async(t,e=10,o=.4)=>{try{let s=await new Fp(t).getRecentPerformanceSamples(e);if(s.length===0)return console.warn("No performance samples available. Using fallback slot time."),o;let a=s.filter(c=>c.numSlots!==0);return a.length===0?(console.warn("All performance samples have numSlots equal to 0. Using fallback slot time."),o):a.reduce((c,l)=>c+l.samplePeriodSecs/l.numSlots,0)/a.length}catch(n){return console.error(`getAverageSlotTime failed: ${n}. Using fallback slot time.`),o}},"getAverageSlotTime"),Na=Hp;var bo=r(async t=>{try{let o=await new jp(t).getEpochInfo();if(o.slotsInEpoch===0)throw new Error("slotsInEpoch is 0, causing division by zero.");let n=await Na(t);console.log("timePerSlotSeconds",n);let a=(o.slotsInEpoch-o.slotIndex)*n,i=(o.slotIndex/o.slotsInEpoch*100).toFixed(2),c=Math.floor(a/(3600*24)),l=Math.floor(a%(3600*24)/3600),m=Math.floor(a%3600/60),d=Math.floor(a%60),p=`${c}d ${l}h ${m}m ${d}s`;return c===0&&(p=`${l}h ${m}m ${d}s`),{...o,estimatedTimeUntilNextEpoch:p,displayRatio:i}}catch(e){throw new Error(`getEpochInfo failed: ${e}`)}},"getEpochInfo");var Gp=.03,Oa=r(t=>{h.command("harvest").alias("hv").description("Harvest SOL from Validator Account to Authority Account").action(async()=>{let e=await zp(t),{mainnetValidatorAuthorityKey:o}=A();console.log("Harvesting SOL..."),await Vo(t.RPC_URL);let n=await st(t.RPC_URL,j.VOTE),s=0;for(;n>1&&s<3;)console.log("Retrying Harvesting SOL..."),await rt(1e3),await Vo(t.RPC_URL),n=await st(t.RPC_URL,j.VOTE),s++;let a=JSON.parse(await Yp(o,"utf-8")),i=await st(t.RPC_URL,j.AUTH);if(i<1)console.log(no.white("Authority Account Balance is less than 1 SOL")),console.log(no.white("Skip converting SOL to elSOL"));else{let l=i-Gp;if(l=Math.round(l*1e9)/1e9,console.log(`Converting ${l} SOL to elSOL`),!await ze(t.RPC_URL,B,l,a))throw new Error("Failed to convert SOL to elSOL")}let c=await pa(t.RPC_URL);if(c<1){let l=await bo(t.RPC_URL);console.log("elSOL Balance is less than 1 elSOL");let m=`elSOL Balance is less than 1 elSOL for ${l.epoch}`;await x(m),process.exit(0)}if(console.log(`Transferring ${c} elSOL to Harvest Address`),await Ta(t.RPC_URL,a,e,c,Z,ur),t.IS_MEV_MODE){let m=`\u{1F4B0} Harvested Rewards for ${(await bo(t.RPC_URL)).epoch} \u{1F4B0}
|
|
614
616
|
Validator Address: ${E(o)}
|
|
615
617
|
Total Reward: ${c} elSOL
|
|
616
618
|
Harvest Address: ${e}`;await x(m)}console.log(no.green("\u2714\uFE0E Successfully Harvested SOL")),process.exit(0)}),h.command("auto").alias("mev").description("Enable Auto Operation Mode").action(async()=>{await _a(t)&&(Bp("solc cron epoch",{stdio:"inherit",shell:!0}),console.log(no.green("\u2714\uFE0E Auto Operation Mode Enabled"))),process.exit(0)})},"harvestCommands"),zp=r(async t=>{try{let e=t.HARVEST_ACCOUNT;if(e==="")throw new Error("Harvest Address not found");return e}catch{let o=await Jp.prompt([{type:"input",name:"harvestAddress",message:"Enter Harvest Address",validate:se}]);return await k({HARVEST_ACCOUNT:o.harvestAddress}),o.harvestAddress}},"getHarvestAddress");import{format as yd}from"@skeet-framework/utils";import{writeFile as Wp}from"fs/promises";var qp=r(async t=>{await Wp(Te,JSON.stringify({...t},null,2),"utf-8")},"writeEpochDataToFile"),ft=qp;var Qp=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,{mainnetValidatorKey:s,testnetValidatorKey:a}=A(),i=n?E(a):E(s),c=`===\u23F3 ${t.epoch} \u23F3===
|
|
@@ -631,7 +633,7 @@ Address: ${i}`;return await x(c),!1}return console.log(pd.green("\u2714\uFE0F Va
|
|
|
631
633
|
VoteAccount: ${m.pubkey}
|
|
632
634
|
Reason: ${m.reason}
|
|
633
635
|
Network: ${t.NETWORK}
|
|
634
|
-
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${m.isActive}`),await Pa(t),!await Va()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),Sd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await Ia(a,t),"Epoch has been updated!";let p=a.totalMinutes,f=[Ca,va,ka];for(let S of f)if(await S(p,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),
|
|
636
|
+
Please check your validator node \u{1F477}\u200D\u2640\uFE0F`),console.log(`Validator is active: ${m.isActive}`),await Pa(t),!await Va()&&t.AUTO_UPDATE)return console.log("Found new version of solc! Updating..."),Sd("solc update && solc update --auto",{stdio:"inherit",shell:!0}),"Node has been restarted!";if(s.epoch<a.epoch)return await Ia(a,t),"Epoch has been updated!";let p=a.totalMinutes,f=[Ca,va,ka];for(let S of f)if(await S(p,s,a,t))break;return"Epoch has not been changed!"},"epochTimer"),Ka=Td;var ba=r(t=>{h.command("epochTimer").description("Check Solana Epoch Timer").action(async()=>{await Ka(t),process.exit(0)})},"epochTimerCommands");import Qa from"inquirer";import{join as Fa}from"path";import{spawnSync as bt}from"node:child_process";import Y from"chalk";import{spawnSync as gd}from"node:child_process";var Ed=r((t,e,o="solv",n="pipe",s="~/.ssh/id_rsa")=>{let a;try{let i=gd(`ssh -i ${s} -o StrictHostKeyChecking=no ${o}@${t} -p 22 'cd ~ && source ~/.profile && ${e}'`,{shell:!0,stdio:n});return i.status!==0?(console.log(`\u26A0\uFE0F CMD Failed. Please check your SSH connection.
|
|
635
637
|
$ ssh ${o}@${t}
|
|
636
638
|
|
|
637
639
|
Failed Cmd: ${e}`),a={status:i.status,stdout:String(i.stdout),stderr:i.stderr.toString()},a):(a={status:i.status,stdout:i.stdout.toString(),stderr:i.stderr.toString()},a)}catch(i){return console.log(`scpSSH Error: ${i}`),a={status:null,stdout:"",stderr:String(i)},a}},"scpSSH"),Da=Ed;import Ua from"chalk";var wd=r((t,e)=>{console.log(Ua.white("\u{1F50D} Checking If Destination Validator Key is the same..."));let o=E(t).trim(),n=Da(e,`solana-keygen pubkey ${t}`).stdout.toString().trim();return o!==n?(console.log(Ua.yellow(`\u26A0\uFE0F Destination Identity Key is different.
|
|
@@ -639,24 +641,24 @@ Please check your Validator
|
|
|
639
641
|
$ ssh solv@${e}
|
|
640
642
|
|
|
641
643
|
Local Identity Key: ${o}
|
|
642
|
-
Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),
|
|
644
|
+
Destination Identity Key: ${n}`)),!1):!0},"checkValidatorKey"),Kt=wd;var so=Fa(C,yt),Ma=Fa(C,ht),Ha=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=b();if(!Kt(a,t))return;console.log(Y.white("\u{1F7E2} Waiting for restart window..."));let l=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(bt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
643
645
|
$ ssh solv@${t}
|
|
644
646
|
|
|
645
|
-
Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(Y.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} set-identity ${so}'`;if(
|
|
647
|
+
Failed Cmd: ${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(Y.white("\u{1F7E2} Setting identity on the new validator..."));let d=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${i} -l ${y} set-identity ${so}'`;if(bt(d,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
646
648
|
$ ssh solv@${t}
|
|
647
649
|
|
|
648
|
-
Failed Cmd: ${i} -l ${y} set-identity ${so}`));return}if(console.log(Y.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),
|
|
650
|
+
Failed Cmd: ${i} -l ${y} set-identity ${so}`));return}if(console.log(Y.white("\u{1F7E2} Changing the Symlink to the new validator keypair...")),bt(`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ln -sf ${so} ${Ma}'`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
649
651
|
$ ssh solv@${t}
|
|
650
652
|
|
|
651
|
-
Failed Cmd: ln -sf ${so} ${Ma}`));return}if(console.log(Y.white("\u{1F7E2} Uploading the tower file to the new validator...")),
|
|
653
|
+
Failed Cmd: ln -sf ${so} ${Ma}`));return}if(console.log(Y.white("\u{1F7E2} Uploading the tower file to the new validator...")),bt(`scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Upload Tower File Failed. Please check your tower file
|
|
652
654
|
$ ssh solv@${t}
|
|
653
655
|
|
|
654
|
-
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...")),
|
|
656
|
+
Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(Y.white("\u{1F7E2} Setting identity on the new validator...")),bt(`${i} -l ${y} set-identity --require-tower ${a}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
655
657
|
|
|
656
658
|
Failed Cmd: ${i} -l ${y} set-identity ${a}
|
|
657
|
-
ln -sf ${a} ${O}`));return}if(
|
|
659
|
+
ln -sf ${a} ${O}`));return}if(bt(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(Y.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
658
660
|
|
|
659
|
-
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(Y.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as Ja}from"path";import F from"chalk";import{spawnSync as Dt}from"node:child_process";var ja=Ja(C,yt),Ad=Ja(C,ht),Ya="~/.ssh/id_rsa",Ba=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:
|
|
661
|
+
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(Y.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncoming");import{join as Ja}from"path";import F from"chalk";import{spawnSync as Dt}from"node:child_process";var ja=Ja(C,yt),Ad=Ja(C,ht),Ya="~/.ssh/id_rsa",Ba=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=b();if(!Kt(a,t))return;let l=`${i} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`,m=`${i} -l ${y} set-identity ${ja}`,d=`ln -sf ${ja} ${Ad}`,p=`scp ${y}/tower-1_9-${e}.bin solv@${t}:${y}`,f=`${i} -l ${y} set-identity --require-tower ${a}`,S=`ln -sf ${a} ${O}`;if(console.log(F.white("\u{1F7E2} Waiting for restart window...")),Dt(l,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
660
662
|
|
|
661
663
|
Failed Cmd: ${l}`));return}if(console.log(F.white("\u{1F7E2} Setting identity on the new validator...")),Dt(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F set-identity Failed. Please check your Validator
|
|
662
664
|
|
|
@@ -669,7 +671,7 @@ $ ssh solv@${t}
|
|
|
669
671
|
|
|
670
672
|
Failed Cmd: ${f}`)),console.log(F.white("\u{1F7E2} Changing the Symlink to the new validator keypair..."));let Ft=`ssh -i ${Ya} -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${S}'`;if(Dt(Ft,{shell:!0,stdio:"inherit"}).status!==0){console.log(F.yellow(`\u26A0\uFE0F Symlink Failed. Please check your Validator
|
|
671
673
|
|
|
672
|
-
Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as _d}from"node:child_process";function Ga(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return _d(e,{shell:!0,stdio:"inherit"}).status===0}r(Ga,"checkSSHConnection");import ie from"chalk";import{join as Wa}from"path";import{spawnSync as Ut}from"node:child_process";import J from"chalk";var ao=Wa(C,yt),za=Wa(C,ht),qa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:
|
|
674
|
+
Failed Cmd: ${S}`));return}console.log(F.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!0})},"changeIdentityOutgoing");import{spawnSync as _d}from"node:child_process";function Ga(t){let e=`ssh -o BatchMode=yes -o ConnectTimeout=5 solv@${t} exit`;return _d(e,{shell:!0,stdio:"inherit"}).status===0}r(Ga,"checkSSHConnection");import ie from"chalk";import{join as Wa}from"path";import{spawnSync as Ut}from"node:child_process";import J from"chalk";var ao=Wa(C,yt),za=Wa(C,ht),qa=r(async(t,e,o)=>{let n=o.NETWORK===u.TESTNET,s=o.NODE_TYPE===T.RPC,a=n?L:K;if(s&&(a=L),!Kt(a,t))return;let c=Jo,l=Bo;console.log(J.white("\u{1F7E2} Waiting for restart window..."));let m=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check'`;if(Ut(m,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F wait-for-restart-window Failed. Please check your Validator
|
|
673
675
|
$ ssh solv@${t}
|
|
674
676
|
|
|
675
677
|
Failed Cmd: ${c} -l ${y} wait-for-restart-window --min-idle-time 2 --skip-new-snapshot-check`));return}console.log(J.white("\u{1F7E2} Setting identity on the new validator..."));let p=`ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no solv@${t} -p 22 'cd ~ && source ~/.profile && ${c} -l ${y} set-identity ${ao}'`;if(Ut(p,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Set Identity Failed. Please check your Validator
|
|
@@ -686,7 +688,7 @@ Failed Cmd: scp solv@${t}:${y}/tower-1_9-${e}.bin ${y}`));return}if(console.log(
|
|
|
686
688
|
Failed Cmd: ${l} -l ${y} set-identity ${a}
|
|
687
689
|
ln -sf ${a} ${O}`));return}if(Ut(`ln -sf ${a} ${O}`,{shell:!0,stdio:"inherit"}).status!==0){console.log(J.yellow(`\u26A0\uFE0F Chaning Identity Key Symlink Failed. Please check your Validator
|
|
688
690
|
|
|
689
|
-
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(J.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncomingV1toV2");var Nd=["Incoming","Outgoing"],Xa=r(async(t,e)=>{t.command("switch").option("--ip <ip>","IP Address of the New Validator","").option("--switchType <switchType>","Switch Type","").option("--v2-migrate-incoming","Switch V1 to V2 Incoming",!1).description("Switch Validator Identity with No Downtime").action(async o=>{try{let n=e.NETWORK===u.TESTNET,s=e.NODE_TYPE===T.RPC,a=n?L:
|
|
691
|
+
Failed Cmd: ln -sf ${a} ${O}`));return}console.log(J.white("\u{1F7E2} Identity changed successfully!")),await k({IS_DUMMY:!1})},"changeIdentityIncomingV1toV2");var Nd=["Incoming","Outgoing"],Xa=r(async(t,e)=>{t.command("switch").option("--ip <ip>","IP Address of the New Validator","").option("--switchType <switchType>","Switch Type","").option("--v2-migrate-incoming","Switch V1 to V2 Incoming",!1).description("Switch Validator Identity with No Downtime").action(async o=>{try{let n=e.NETWORK===u.TESTNET,s=e.NODE_TYPE===T.RPC,a=n?L:K;s&&(a=L);let i=E(a),c=o.switchType,l=o.ip;if(c===""||l===""){let d=await Qa.prompt([{name:"switchType",type:"list",message:"Which switch type do you want to perform?",choices:["Incoming","Outgoing"]},{name:"ip",type:"input",message:"What is the IP address of the new validator?",default(){return"1.1.1.1"}}]);c=d.switchType,l=d.ip}if(!Nd.includes(c)){console.log(ie.yellow(`\u26A0\uFE0F Invalid Switch Type
|
|
690
692
|
You can choose only Incoming or Outgoing`));return}if(!Ga(l)){console.log("SSH Connection Failed");return}if(c==="Incoming"){if(o.v2MigrateIncoming){(await Qa.prompt([{name:"confirm",type:"confirm",message:"Are you sure you want to migrate V1 to V2 Incoming? This node must be running V2 and the remote node must be running V1."}])).confirm||(console.log(ie.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.log(ie.white("\u{1F7E2} Migrating V1 to V2 Incoming...")),await qa(l,i,e);return}await Ha(l,i,e)}else await Ba(l,i,e);process.exit(0)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(ie.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(ie.red(`Switch Error: ${n.message}`)),process.exit(0)}})},"switchCommand");import{spawnSync as Od}from"node:child_process";var kd=r((t="296877183",e=y)=>{try{let o=`agave-ledger-tool --ledger ${e} create-snapshot --incremental --snapshot-archive-path ${e} --hard-fork ${t} --deactivate-feature-gate 7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb -- ${t} ${e}`,n=Od(o,{shell:!0,stdio:"pipe",cwd:e});if(n.status!==0)throw new Error(`createSnapshot: ${n.error}`)}catch(o){throw new Error(`createSnapshot: ${o}`)}},"createSnapshot"),Za=kd;import Mt from"inquirer";import $d from"dotenv";import Nt from"chalk";var io={SOL:{tokenMint:"So11111111111111111111111111111111111111112",associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},USDC:{tokenMint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},elSOL:{tokenMint:lo,associationAccount:"",decimal:9},JitoSOL:{tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSOL:{tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSOL:{tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},EPCT:{tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUP:{tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},BONK:{tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},JTO:{tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}},Do={So11111111111111111111111111111111111111112:{symbol:"SOL",tokenMint:ue,associationAccount:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",decimal:9},EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:{symbol:"USDC",tokenMint:fe,associationAccount:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",decimal:6},ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC:{symbol:"elSOL",tokenMint:lo,associationAccount:"",decimal:9},J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:{symbol:"jitoSOL",tokenMint:"J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn",associationAccount:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",decimal:9},mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:{symbol:"mSOL",tokenMint:"mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",associationAccount:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",decimal:9},bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:{symbol:"bSOL",tokenMint:"bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1",associationAccount:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",decimal:9},CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:{symbol:"EPCT",tokenMint:"CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",associationAccount:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",decimal:6},JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:{symbol:"JUP",tokenMint:"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",associationAccount:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",decimal:6},DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:{symbol:"BONK",tokenMint:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",associationAccount:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",decimal:5},jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:{symbol:"JTO",tokenMint:"jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL",associationAccount:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo",decimal:9}};import{readFile as Cd}from"fs/promises";import{Connection as Id,Keypair as Ld,VersionedTransaction as Pd}from"@solana/web3.js";import U from"chalk";import xd from"inquirer";import Vd from"dotenv";var vd=r(async(t,e,o,n,s)=>{try{let a=`${t}/quote?inputMint=${o}&outputMint=${n}&amount=${s}`,i=await fetch(a,{method:"GET",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`}});return i.status===429?"Too many requests, please try again later":i.status===401?"Unauthorized, please check your API key":await i.json()}catch(a){throw new Error(`Error getJupiterQuote: ${a}`)}},"getJupiterQuote"),ti=vd;var Rd=r(async(t,e,o,n)=>{try{let s=o.outputMint,a,i=tr[s];i?a={swapRequest:{quoteResponse:o,userPublicKey:n,feeAccount:i,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}}:a={swapRequest:{quoteResponse:o,userPublicKey:n,dynamicComputeUnitLimit:!0,prioritizationFeeLamports:"auto",dynamicSlippage:{maxBps:500}}};let c=`${t}/swap`,l=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e,Authorization:`Bearer ${e}`},body:JSON.stringify(a.swapRequest)});return l.status===429?"Too many requests, please try again later":await l.json()}catch(s){throw new Error(`Error postJupiterSwap: ${s}`)}},"postJupiterSwap"),ei=Rd;Vd.config();var oi=r(async(t,e,o,n,s,a,i,c=!0)=>{let l=new Id(t,"confirmed"),m=await ti(e,o,s,a,i);if(typeof m=="string"){m.includes("Unauthorized")&&(console.error(U.yellow(`\u26A0\uFE0F Invalid API key, please check your API key \u26A0\uFE0F
|
|
691
693
|
`)),console.log(U.white("Get Your API key \u{1F447}")),console.log(U.white(Ht+`
|
|
692
694
|
`)),process.exit(0));let ce=`${U.yellow("\u26A0\uFE0F Too many requests, please try again later \u26A0\uFE0F")}
|
|
@@ -713,7 +715,7 @@ You can upgrade your API key to increase your rate limits.
|
|
|
713
715
|
Get Your API key \u{1F447}
|
|
714
716
|
Validators Solutions: ${Ht}
|
|
715
717
|
`;console.error(U.white(ce)),process.exit(0)}let z=Buffer.from(N.swapTransaction,"base64"),V=Pd.deserialize(z);V.sign([_]);let Ot=V.serialize(),Ft=await l.sendRawTransaction(Ot,{skipPreflight:!0,maxRetries:2}),Uo=V.message.recentBlockhash;return console.log(`Swapping...
|
|
716
|
-
Transaction ID: ${Ft}`),await l.confirmTransaction({blockhash:Uo,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ft},"confirmed"),Ft},"swap");$d.config();var ri=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await
|
|
718
|
+
Transaction ID: ${Ft}`),await l.confirmTransaction({blockhash:Uo,lastValidBlockHeight:N.lastValidBlockHeight,signature:Ft},"confirmed"),Ft},"swap");$d.config();var ri=r(async(t,e)=>{t.command("swap").description("Swap tokens").option("-i, --input <input>","Input token mint","").option("-o, --output <output>","Output token mint","").option("-a, --amount <amount>","Input amount in lamports","0").option("-s, --skip-confirm","Skip confirmation",!1).option("-c, --init-config","Initialize config",!1).action(async o=>{try{await Kd(e.RPC_URL,e.KEYPAIR_PATH,e.API_KEY,o.input,o.output,Number(o.amount),!o.skipConfirm,o.initConfig)}catch(n){n.message.includes("User force closed the prompt")&&(console.error(Nt.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(Nt.red(`Swap Error: ${n.message}`)),process.exit(0)}})},"swapCommand"),Kd=r(async(t,e,o,n="",s="",a=0,i=!0,c=!1)=>{console.log(Nt.white("Solana RPC URL:",t)),console.log(Nt.white("KeyfilePath:",e)),(!e||e===""||c)&&await bd();let l=Qo,m=[...Xo,"Other"],d=n,p="",f=s,S=a;if(d===""){let N=await Mt.prompt([{type:"list",name:"name",message:"Select input mint",choices:m,default:ue}]);N.name==="Other"?d=(await Mt.prompt([{type:"input",name:"address",message:"Enter input mint address",default:fe}])).address:(p=N.name,d=io[p].tokenMint)}if(f===""){m=m.filter(V=>V!==p);let N=await Mt.prompt([{type:"list",name:"name",message:"Select output mint",choices:m}]);if(N.name==="Other")f=(await Mt.prompt([{type:"input",name:"address",message:"Enter output mint address",default:Z}])).address;else{let V=N.name;f=io[V].tokenMint}let z=N.name;f=io[z].tokenMint}if(S===0){let N=await Mt.prompt([{type:"input",name:"amount",message:"Enter input amount in LAMPORTS. e.g. 0.01 SOL",default:"10000000"}]);S=Number(N.amount)}let _=await oi(t,l,!o||o===""?Zo:o,e,d,f,S,i);_||process.exit(0),console.log(Nt.green("\u2714\uFE0E Sent Tx Successfully!")),console.log(Nt.white(`Check Your TX \u{1F449}: https://solscan.io/tx/${_}`))},"swapCmd");var bd=r(async()=>{let t=await Mt.prompt([{type:"input",name:"RPC_URL",message:"Enter Solana RPC URL",default:"https://api.mainnet-beta.solana.com"},{type:"input",name:"KEYPAIR_PATH",message:"Enter Keypair Path",default:"/home/solv/mainnet-validator-keypair.json"},{type:"input",name:"API_KEY",message:"Enter Jupiter API Key(Optional)",default:""}]);await k(t),console.log(Nt.green(`\u2714\uFE0E Config Updated Successfully!
|
|
717
719
|
`)),wt()},"askForConfig");import{spawnSync as Dd}from"node:child_process";var ni=r(()=>{Dd("sudo systemctl status jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStatus");import{spawnSync as Ud}from"node:child_process";var si=r(()=>{Ud("sudo systemctl start jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStart");import{spawnSync as Md}from"node:child_process";var ai=r(()=>{Md("sudo systemctl stop jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterStop");import{spawnSync as Fd}from"node:child_process";var ii=r(()=>{Fd("sudo systemctl restart jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterRestart");import{spawnSync as Hd}from"node:child_process";var ci=r((t=!1)=>{Hd(t?"journalctl -u jupiter-api.service -xef | grep ERROR":"journalctl -u jupiter-api.service -xef",{shell:!0,stdio:"inherit"})},"jupiterLog");import{spawnSync as jd}from"node:child_process";var li=r(()=>{jd("sudo systemctl enable jupiter-api.service",{shell:!0,stdio:"inherit"})},"jupiterEnable");var mi=r(()=>{let t=h.command("jupiter").description("Jupiter API Commands");t.command("status").description("Show Jupiter Status").action(()=>{ni()}),t.command("start").description("Start Jupiter").action(()=>{si()}),t.command("stop").description("Stop Jupiter").action(()=>{ai()}),t.command("log").option("-e, --error","Show Error Logs",!1).description("Show Jupiter Logs").action(e=>{ci(e.error),process.exit(0)}),t.command("restart").description("Restart Jupiter").action(()=>{ii()}),t.command("enable").description("Enable Jupiter").action(()=>{li()})},"jupiterCommands");import Bd from"chalk";import{spawnSync as Yd}from"node:child_process";var pi=r(()=>{h.command("pubkey").alias("p").description("Print pubkey from a keypair file (wrapper of solana-keygen)").option("-f, --file <path>","Keypair file path","identity.json").addHelpText("after",`
|
|
718
720
|
Examples:
|
|
719
721
|
$ solc pubkey
|
|
@@ -722,5 +724,5 @@ Examples:
|
|
|
722
724
|
|
|
723
725
|
Notes:
|
|
724
726
|
- This runs: solana-keygen pubkey <file>
|
|
725
|
-
- Defaults to "identity.json" in the current directory`).action(t=>{let o=`solana-keygen pubkey ${t.file||"identity.json"}`,n=Yd(o,{shell:!0,stdio:"inherit"});process.exit(n.status??0)})},"pubkeyCommand");var h=new Jd;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(le,"-V","Display version");async function Gd(){try{let t=await I();Gn(t),Qn(t),Wn(t),ds(t),jr(t),Jr(),Xn(t),Is(t),$s(t),ps(),es(),Yn(t),Gs(t),Zn(),Hs(),ta(t),ra(t),Oa(t),Bn(),ri(h,t),
|
|
727
|
+
- Defaults to "identity.json" in the current directory`).action(t=>{let o=`solana-keygen pubkey ${t.file||"identity.json"}`,n=Yd(o,{shell:!0,stdio:"inherit"});process.exit(n.status??0)})},"pubkeyCommand");var h=new Jd;h.name("solc").description("\u{1FA84} solc - Solana Validator Tool \u2728").helpOption("-h, --help","Display help for command").version(le,"-V","Display version");async function Gd(){try{let t=await I();Gn(t),Qn(t),Wn(t),ds(t),jr(t),Jr(),Xn(t),Is(t),$s(t),ps(),es(),Yn(t),Gs(t),Zn(),Hs(),ta(t),ra(t),Oa(t),Bn(),ri(h,t),ba(t),Xa(h,t),mi(),Ys(),pi(),h.command("rm:log").description("Remove Logs").action(()=>{zs()}),h.command("rm:snapshot").description("Remove Snapshot").action(()=>{qs()}),h.command("create:snapshot").description("Create Snapshot").option("-s, --slot <slot>","Slot").option("-l, --ledger <ledger>","Ledger").action(e=>{console.log(Bd.white("\u{1F4DD} Creating Snapshot...")),Za(e.slot,e.ledger)}),h.command("monitor").alias("m").description("Monitor Solana Node").action(()=>{Qs(t)}),h.command("catchup").description("Check Solana Catchup Status").alias("c").alias("ca").action(()=>{Xs()}),h.command("config").description("Show Solc Config").action(()=>{Qe()}),h.command("vv").description("Show Solc Version").action(()=>{let e=we();console.log("version:",e)}),await h.addHelpCommand("help [cmd]","Display help for command").parseAsync(process.argv),process.exit(0)}catch(t){console.log(t),process.exit(0)}}r(Gd,"main");Gd();export{h as program};
|
|
726
728
|
//# sourceMappingURL=index.js.map
|