@gabrielhicks/solv 5.1.7 → 5.1.8
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 +2 -2
- 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 hi=Object.defineProperty;var r=(t,e)=>hi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Kd}from"commander";var Jo="5.1.7";var Go={name:"@gabrielhicks/solv",version:Jo,description:"Solana Validator CLI SOLV",main:"dist/index.js",type:"module",repository:"https://github.com/gabrielhicks/solv",keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",bin:{solv:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",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 de=Go.version;var jt="https://validators.solutions";var ue="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Wo="relayer-keypair.json",yi="mainnet-validator-keypair.json",Ti="mainnet-vote-account-keypair.json",Ei="mainnet-authority-keypair.json",gi="testnet-validator-keypair.json",Ai="testnet-vote-account-keypair.json",wi="testnet-authority-keypair.json",I="/home/solv",R=`${I}/${St}`,jd=`${I}/${yt}`,b=`${I}/${yi}`,fe=`${I}/${Ti}`,Bd=`${I}/${Ei}`,P=`${I}/${gi}`,zo=`${I}/${Ai}`,Jd=`${I}/${wi}`,q=`${I}/solana-validator.log`,Q=I+"/start-validator.sh",w="/mnt/ledger",kt="/mnt/accounts",X="/mnt/snapshots",qo="solana-validator",Qo="agave-validator",Xo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Zo="https://api.testnet.solana.com",tr="https://api.mainnet-beta.solana.com",er="https://verify.validators.solutions/solv-migrate",or="https://jup.validators.solutions/v1/jup",fo;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(fo||(fo={}));var rr=Object.values(fo),Se="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var nr="SOLV420",sr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Oi}from"child_process";import{spawnSync as ar}from"node:child_process";var _i=r((t,e=!1)=>{e?ar(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):ar(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=_i;var ir="agave-validator",Ni=r(()=>{try{return ir}catch(t){return console.error(t),ir}},"getSolanaCLI"),Z=Ni;var Te=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),So=r(async(t,e=!1)=>{let o=Z(),n=`${o} --ledger ${w} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${w} exit --max-delinquent-stake ${t}`),Oi(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import zr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var cr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(cr||(cr={}));var lr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(lr||(lr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var mr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(mr||(mr={}));var pr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(pr||(pr={}));var dr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(dr||(dr={}));var ur;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ur||(ur={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var ge;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ge||(ge={}));var Sr=!1,yr=!0,H={ID:"solv",LANG:Tt.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,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots"},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},tt={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},k={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"},N=r((t=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${k.MAINNET_VALIDATOR_KEY}`,n=`${e}/${k.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${k.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${k.TESTNET_VALIDATOR_KEY}`,i=`${e}/${k.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${k.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?`${U.ROOT}/${k.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${k.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${k.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${k.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${tt.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${U.ROOT}/${tt.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",yo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Tr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Er=9,et="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",gr="So11111111111111111111111111111111111111112",Ar="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",wr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",fr;(function(t){t[t.ELSOL=et]="ELSOL",t[t.SOL=gr]="SOL",t[t.USDC=Ar]="USDC",t[t.EPCT=wr]="EPCT"})(fr||(fr={}));var hr;(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"})(hr||(hr={}));var iu={[gr]:9,[et]:9,[Ar]:6,[wr]:6},Ae="/home/solv/currentEpoch.json",To=.5,we="https://api.testnet.solana.com";import{spawnSync as Eo}from"child_process";var _r=r(()=>{Eo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;Eo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Eo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.16",tag:"v2.1.16",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},go={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"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14: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 Nr}from"child_process";var _e=r((t=at.tag,e=!1)=>{e?Nr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Nr(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as vi,writeFile as Ri}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${tt.JITO_CONFIG}`,s={...JSON.parse(await vi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ri(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Or}from"child_process";import Ci from"inquirer";var vr=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";Or(`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}`;Or(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Rr=r(async()=>await Ci.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ii from"chalk";import Pi from"inquirer";var kr=r(async()=>{let t=await Pi.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(Ii.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Li=r(()=>Jo,"getSolvVersion"),It=Li;import{readFile as $i,writeFile as Di}from"fs/promises";import{existsAsync as Ki}from"@skeet-framework/utils";var Ao;(function(t){t.EN="en",t.JA="ja"})(Ao||(Ao={}));var $u=Object.values(Ao),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Cr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Ir=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Du=Object.values(A).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Pr=Object.values(D).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var ot="2.2.2",rt="2.1.16",Et="2.2.2",Gt="2.1.16",Lr="2.1.16",gt="2.1.16";var xr="20.17.0",Vr="0.407.20113",Wt="0.407.20113";var Vi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:ot,MAINNET_SOLANA_VERSION:rt,NODE_VERSION:xr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Xo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:tr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:kt,SNAPSHOTS_PATH:X},it=Vi;import{homedir as bi}from"os";var Ui=r(async()=>{let e=`${bi()}/${ue}`;return await Ki(e)?JSON.parse(await $i(e,"utf-8")):(console.log("Creating default config file at",e),await Di(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ui;import Mi from"node-fetch";var V=r(async t=>{try{let e=await x();if(e.DISCORD_WEBHOOK_URL==="")throw new Error(`DISCORD_WEBHOOK_URL is empty
|
|
2
|
+
var hi=Object.defineProperty;var r=(t,e)=>hi(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Kd}from"commander";var Jo="5.1.8";var Go={name:"@gabrielhicks/solv",version:Jo,description:"Solana Validator CLI SOLV",main:"dist/index.js",type:"module",repository:"https://github.com/gabrielhicks/solv",keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",bin:{solv:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",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 de=Go.version;var jt="https://validators.solutions";var ue="solv4.config.json";var St="identity.json",yt="unstaked-identity.json",Wo="relayer-keypair.json",yi="mainnet-validator-keypair.json",Ti="mainnet-vote-account-keypair.json",Ei="mainnet-authority-keypair.json",gi="testnet-validator-keypair.json",Ai="testnet-vote-account-keypair.json",wi="testnet-authority-keypair.json",I="/home/solv",R=`${I}/${St}`,jd=`${I}/${yt}`,b=`${I}/${yi}`,fe=`${I}/${Ti}`,Bd=`${I}/${Ei}`,P=`${I}/${gi}`,zo=`${I}/${Ai}`,Jd=`${I}/${wi}`,q=`${I}/solana-validator.log`,Q=I+"/start-validator.sh",w="/mnt/ledger",kt="/mnt/accounts",X="/mnt/snapshots",qo="solana-validator",Qo="agave-validator",Xo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var he=3,Zo="https://api.testnet.solana.com",tr="https://api.mainnet-beta.solana.com",er="https://verify.validators.solutions/solv-migrate",or="https://jup.validators.solutions/v1/jup",fo;(function(t){t.SOL="SOL",t.USDC="USDC",t.elSOL="elSOL",t.JitoSOL="JitoSOL",t.mSOL="mSOL",t.bSOL="bSOL",t.EPCT="EPCT",t.JUP="JUP",t.BONK="BONK",t.JTO="JTO"})(fo||(fo={}));var rr=Object.values(fo),Se="So11111111111111111111111111111111111111112",ye="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ho="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var nr="SOLV420",sr={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Oi}from"child_process";import{spawnSync as ar}from"node:child_process";var _i=r((t,e=!1)=>{e?ar(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/agave/v${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):ar(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Ct=_i;var ir="agave-validator",Ni=r(()=>{try{return ir}catch(t){return console.error(t),ir}},"getSolanaCLI"),Z=Ni;var Te=r(async(t,e=!1)=>{Ct(t,e)},"updateVersion"),So=r(async(t,e=!1)=>{let o=Z(),n=`${o} --ledger ${w} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${w} exit --max-delinquent-stake ${t}`),Oi(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import zr from"chalk";var Tt;(function(t){t.EN="en",t.JA="ja"})(Tt||(Tt={}));var cr;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE",t[t.TRIPLE=2]="TRIPLE"})(cr||(cr={}));var lr;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(lr||(lr={}));var mt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(mt||(mt={}));var mr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(mr||(mr={}));var pr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(pr||(pr={}));var dr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(dr||(dr={}));var ur;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ur||(ur={}));var Ee;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(Ee||(Ee={}));var ge;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ge||(ge={}));var Sr=!1,yr=!0,H={ID:"solv",LANG:Tt.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,ACCOUNTS_PATH:"/mnt/accounts",SNAPSHOTS_PATH:"/mnt/snapshots"},U={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},O={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger",SNAPSHOTS:"/mnt/snapshots"},tt={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solv.config.json",JITO_CONFIG:"jito.config.json"},L={SOL_SERVICE:"/etc/systemd/system/solv.service",SOL_LOGROTATE:"/etc/logrotate.d/solana",SOL_SYSTEM_CONFIG21:"/etc/sysctl.d/21-solana-validator.conf",SOL_NOFILES_CONF:"/etc/security/limits.d/90-solana-nofiles.conf",SOL_SYSTEM_CONF:"/etc/systemd/system.conf",SOLANA_PATH:"/home/solv/.local/share/solana/install"},k={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"},N=r((t=U.ROOT)=>{let e=t===U.ROOT?U.ROOT:t,o=`${e}/${k.MAINNET_VALIDATOR_KEY}`,n=`${e}/${k.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${k.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${k.TESTNET_VALIDATOR_KEY}`,i=`${e}/${k.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${k.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?`${U.ROOT}/${k.TESTNET_VALIDATOR_KEY}`:`${U.ROOT}/${k.MAINNET_VALIDATOR_KEY}`,o=t?`${U.ROOT}/${k.TESTNET_VALIDATOR_VOTE_KEY}`:`${U.ROOT}/${k.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${U.ROOT}/${tt.LOG}`,s=O.ACCOUNTS,a=O.LEDGER,i=O.SNAPSHOTS,c=`${U.ROOT}/${tt.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:c,snapshots:i}},"startupScriptPaths");var z="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",yo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",Tr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",Er=9,et="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",gr="So11111111111111111111111111111111111111112",Ar="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",wr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",fr;(function(t){t[t.ELSOL=et]="ELSOL",t[t.SOL=gr]="SOL",t[t.USDC=Ar]="USDC",t[t.EPCT=wr]="EPCT"})(fr||(fr={}));var hr;(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"})(hr||(hr={}));var iu={[gr]:9,[et]:9,[Ar]:6,[wr]:6},Ae="/home/solv/currentEpoch.json",To=.5,we="https://api.testnet.solana.com";import{spawnSync as Eo}from"child_process";var _r=r(()=>{Eo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=H.NODE_VERSION;Eo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),Eo("pnpm add -g @gabrielhicks/solv",{shell:!0,stdio:"inherit"})},"updateSolv");var at={version:"2.1.16",tag:"v2.1.16",commissionBps:1e3,relayerUrl:"https://frankfurt.mainnet.block-engine.jito.wtf",blockEngineUrl:"http://frankfurt.mainnet.relayer.jito.wtf:8100",shredReceiverAddr:"64.130.50.14:1002"},go={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"},London:{BLOCK_ENGINE_URL:"https://london.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://london.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"142.91.127.175:1002"},Frankfurt:{BLOCK_ENGINE_URL:"https://frankfurt.mainnet.block-engine.jito.wtf",RELAYER_URL:"http://frankfurt.mainnet.relayer.jito.wtf:8100",SHRED_RECEIVER_ADDR:"64.130.50.14: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 Nr}from"child_process";var _e=r((t=at.tag,e=!1)=>{e?Nr(`sh -c "$(curl -sSfL https://raw.githubusercontent.com/gabrielhicks/jito-solana/${t}-mod/installer)"`,{shell:!0,stdio:"inherit"}):Nr(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}-jito/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as vi,writeFile as Ri}from"fs/promises";import{homedir as ki}from"os";var Bt=r(async t=>{let o=`${ki()}/${tt.JITO_CONFIG}`,s={...JSON.parse(await vi(o,"utf8")),...t},a=JSON.stringify(s,null,2);await Ri(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Or}from"child_process";import Ci from"inquirer";var vr=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";Or(`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}`;Or(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Rr=r(async()=>await Ci.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Jt}from"@skeet-framework/utils";import Ii from"chalk";import Pi from"inquirer";var kr=r(async()=>{let t=await Pi.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(Ii.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var Li=r(()=>Jo,"getSolvVersion"),It=Li;import{readFile as $i,writeFile as Di}from"fs/promises";import{existsAsync as Ki}from"@skeet-framework/utils";var Ao;(function(t){t.EN="en",t.JA="ja"})(Ao||(Ao={}));var $u=Object.values(Ao),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Cr=Object.values(u),E;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(E||(E={}));var Ir=Object.values(E),A;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(A||(A={}));var Du=Object.values(A).filter(t=>t!=="none"),D;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})(D||(D={}));var Pr=Object.values(D).filter(t=>t!=="none"),F;(function(t){t.SINGLE="single",t.DOUBLE="double",t.TRIPLE="triple"})(F||(F={}));var ot="2.2.2",rt="2.1.16",Et="2.2.2",Gt="2.1.16",Lr="2.1.16",gt="2.1.16";var xr="20.17.0",Vr="0.407.20113",Wt="0.407.20113";var Vi={NETWORK:u.TESTNET,NODE_TYPE:E.RPC,VALIDATOR_TYPE:A.NONE,RPC_TYPE:D.AGAVE,MNT_DISK_TYPE:F.TRIPLE,TESTNET_SOLANA_VERSION:ot,MAINNET_SOLANA_VERSION:rt,NODE_VERSION:xr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Xo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:tr,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:"",LEDGER_PATH:w,ACCOUNTS_PATH:kt,SNAPSHOTS_PATH:X},it=Vi;import{homedir as bi}from"os";var Ui=r(async()=>{let e=`${bi()}/${ue}`;return await Ki(e)?JSON.parse(await $i(e,"utf-8")):(console.log("Creating default config file at",e),await Di(e,JSON.stringify(it,null,2)),it)},"readConfig"),x=Ui;import Mi from"node-fetch";var V=r(async t=>{try{let e=await x();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} Solv Notifier"};return(await Mi(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 Gi}from"child_process";import{Connection as $r}from"@solana/web3.js";var zt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new $r("https://api.testnet.solana.com"):new $r(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 m=c.lastVote,d=await a.getSlot()-m;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 Hi}from"child_process";var _=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=Hi(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Fi=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),j=Fi;import{sendDiscord as Yi}from"@skeet-framework/utils";var Dr=60,ji=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=N(),a=_(e?n:o),i=await zt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Dr){console.log("Max retries reached, exiting...");let m=`\u26A0\uFE0F Validator is not active for ${Dr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -211,7 +211,7 @@ exec agave-validator \\
|
|
|
211
211
|
--block-verification-method unified-scheduler \\
|
|
212
212
|
--full-rpc-api \\
|
|
213
213
|
`,"startTestnetAgaveValidatorScript");import{existsAsync as un}from"@skeet-framework/utils";import{writeFile as fn}from"fs/promises";var $c=r(async(t,e=!1)=>{let{NETWORK:o}=t;o===u.MAINNET?(console.log("Mainnet Validator Node Setup"),await Dc(t,e)):o===u.TESTNET?(console.log("Testnet Validator Node Setup"),await Kc(t,e)):console.log("Unknown Network Validator Node Setup")},"setupValidatorNode"),Dc=r(async(t,e=!1)=>{let{VALIDATOR_TYPE:o,MAINNET_SOLANA_VERSION:n}=t,s="";switch(o){case A.SOLANA:No(n),s=dn(t);break;case A.JITO:console.log("JITO Validator Setup for Mainnet");let a=await At();Xt(n,e),s=Oo(a.commissionBps,a.relayerUrl,a.blockEngineUrl,a.shredReceiverAddr,t);break;default:console.log("Unknown Validator Type for Mainnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,s,"utf-8"),Zt()},"setupMainnetValidator"),Kc=r(async(t,e=!1)=>{let{VALIDATOR_TYPE:o}=t,n="";switch(o){case A.SOLANA:No(t.TESTNET_SOLANA_VERSION),n=vo(t);case A.AGAVE:console.log("Agave Validator Setup for Testnet"),Ct(t.TESTNET_SOLANA_VERSION,e),n=vo(t);break;case A.JITO:console.log("JITO Validator Setup for Testnet");let s=await At();Xt(t.TESTNET_SOLANA_VERSION,e),n=Oo(s.commissionBps,s.relayerUrl,s.blockEngineUrl,s.shredReceiverAddr,t);break;default:console.log("Unknown Validator Type for Testnet");break}if(await un(Q)){console.log("Startup script already exists. Skipping...");return}await fn(Q,n,"utf-8"),Zt()},"setupTestnetValidator"),hn=$c;import Yn from"chalk";import{execSync as Sn}from"node:child_process";function yn(t){try{Sn(`test -d ${t}`),console.log(`${t} already exists.`)}catch{Sn(`sudo mkdir -p ${t}`),console.log(`${t} has been created.`)}}r(yn,"createDirectoryIfNotExists");var Tn=r(()=>{try{let t=[O.ACCOUNTS,O.LEDGER,O.SNAPSHOTS];for(let e of t)yn(e)}catch(t){throw new Error(`setupDirs Error: ${t}`)}},"setupDirs");import{execSync as bc}from"child_process";function Uc(){let e=bc("lsblk -l -b -o NAME,SIZE,MOUNTPOINT",{encoding:"utf8"}).split(`
|
|
214
|
-
`).slice(1),o=[],n=e.map(y=>y.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c=!1,m="";for(let y of e){let[T,$,C]=y.trim().split(/\s+/);if(!T||!$)continue;let W=parseInt($,10);if(isNaN(W))continue;let vt=C!==void 0&&C!=="";C==="/"&&(m=T.replace(/p?\d*$/,""));let Yt=n.some(uo=>uo!==T&&uo.startsWith(T)),po=T.startsWith("nvme")?"NVMe":"SATA";W>=400*1024*1024*1024&&o.push({name:T,size:W,mountpoint:C||"",isMounted:vt,hasPartition:Yt,type:po})}console.log("Found root disk name: ",m);let l=n.filter(y=>y.startsWith(m));l.forEach(y=>console.log("Found root disk partition: ",y));let p=o.filter(y=>!l.includes(y.name)).sort((y,T)=>T.size-y.size),f=p.filter(y=>y.type==="NVMe").sort((y,T)=>T.size-y.size),S=p.filter(y=>y.type==="SATA").sort((y,T)=>T.size-y.size),g=[...f,...S];if(g.length>0){let y=g[0];if(y.size>=850*1024*1024*1024&&!y.isMounted&&(s=!0),y.size>=1250*1024*1024*1024&&y.isMounted&&(i=!0),g.length>1){let T=g[1];T.size>=400*1024*1024*1024&&!T.isMounted&&(a=!0)}if(g.length>2){let T=g[2];T.size>=400*1024*1024*1024&&!T.isMounted&&(c=!0)}}return g.forEach((y,T)=>console.log(`Prioritized Disk ${T+1}: ${y.name} ${y.size}`)),{disks:g,has850GB:s,has400GB:a,hasUsed1250GB:i,hasThirdDisk400GB:c}}r(Uc,"getPreferredDisks");var te=Uc;import{spawnSync as En}from"child_process";var dt=r(t=>{if(En(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return En(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as $e}from"child_process";function Ro(t){let o=$e(`blkid -s UUID -o value ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim();
|
|
214
|
+
`).slice(1),o=[],n=e.map(y=>y.trim().split(/\s+/)[0]),s=!1,a=!1,i=!1,c=!1,m="";for(let y of e){let[T,$,C]=y.trim().split(/\s+/);if(!T||!$)continue;let W=parseInt($,10);if(isNaN(W))continue;let vt=C!==void 0&&C!=="";C==="/"&&(m=T.replace(/p?\d*$/,""));let Yt=n.some(uo=>uo!==T&&uo.startsWith(T)),po=T.startsWith("nvme")?"NVMe":"SATA";W>=400*1024*1024*1024&&o.push({name:T,size:W,mountpoint:C||"",isMounted:vt,hasPartition:Yt,type:po})}console.log("Found root disk name: ",m);let l=n.filter(y=>y.startsWith(m));l.forEach(y=>console.log("Found root disk partition: ",y));let p=o.filter(y=>!l.includes(y.name)).sort((y,T)=>T.size-y.size),f=p.filter(y=>y.type==="NVMe").sort((y,T)=>T.size-y.size),S=p.filter(y=>y.type==="SATA").sort((y,T)=>T.size-y.size),g=[...f,...S];if(g.length>0){let y=g[0];if(y.size>=850*1024*1024*1024&&!y.isMounted&&(s=!0),y.size>=1250*1024*1024*1024&&y.isMounted&&(i=!0),g.length>1){let T=g[1];T.size>=400*1024*1024*1024&&!T.isMounted&&(a=!0)}if(g.length>2){let T=g[2];T.size>=400*1024*1024*1024&&!T.isMounted&&(c=!0)}}return g.forEach((y,T)=>console.log(`Prioritized Disk ${T+1}: ${y.name} ${y.size}`)),{disks:g,has850GB:s,has400GB:a,hasUsed1250GB:i,hasThirdDisk400GB:c}}r(Uc,"getPreferredDisks");var te=Uc;import{spawnSync as En}from"child_process";var dt=r(t=>{if(En(`sudo blkid ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim())return console.log(`${t} is already formatted.`),!1;{let o=`sudo mkfs.ext4 ${t}`;return En(o,{shell:!0,stdio:"inherit"}),console.log(`${t} has been formatted.`),!0}},"formatDisk");import{spawnSync as $e}from"child_process";function Ro(t){let o=$e(`blkid -s UUID -o value ${t}`,{shell:!0,encoding:"utf8"}).stdout.trim();if(o)console.log(`[SUCCESS] Found UUID: ${o}`);else return console.warn(`[WARN] Failed to get UUID for ${t}, using raw path`),t;return`UUID=${o}`}r(Ro,"getUUID");var ee=r((t,e="",o="",n=!1,s=!1)=>{let a=Ro(t),i=Ro(e),c=Ro(o),m=`${a} ${O.ROOT} ext4 defaults 0 0`;n&&(m=`${a} ${O.LEDGER} ext4 defaults 0 0
|
|
215
215
|
${i} ${O.ACCOUNTS} ext4 defaults 0 0`),s&&(m=`${a} ${O.LEDGER} ext4 defaults 0 0
|
|
216
216
|
${i} ${O.ACCOUNTS} ext4 defaults 0 0
|
|
217
217
|
${c} ${O.SNAPSHOTS} ext4 defaults 0 0`);let l=[m],p=$e("cat /etc/fstab",{shell:!0,encoding:"utf8"}).stdout,f=[];for(let S of l)p.includes(S)||f.push(S);if(f.length){let S=`echo "${f.join(`
|