@ily-validator/solc 5.0.6 → 5.0.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/README.md +9 -8
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://
|
|
3
|
-
<img src="https://
|
|
2
|
+
<a href="https://ily-validator.com/">
|
|
3
|
+
<img src="https://miladymaker.net/milady/2841.png" alt="solc" />
|
|
4
4
|
</a>
|
|
5
|
-
<!-- chore: trigger release workflow via docs-only change -->
|
|
6
|
-
<a href="https://twitter.com/intent/follow?screen_name=
|
|
7
|
-
<img src="https://
|
|
5
|
+
<!-- chore: trigger release workflow via docs-only change -->
|
|
6
|
+
<a href="https://twitter.com/intent/follow?screen_name=ily_validator">
|
|
7
|
+
<img src="https://miladymaker.net/milady/2841.png" alt="Follow @ily_validator" />
|
|
8
8
|
</a>
|
|
9
9
|
<br/>
|
|
10
10
|
<a aria-label="npm version" href="https://www.npmjs.com/package/@ily-validator/solc">
|
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
<a aria-label="Downloads Number" href="https://www.npmjs.com/package/@ily-validator/solc">
|
|
14
14
|
<img alt="" src="https://badgen.net/npm/dt/@ily-validator/solc">
|
|
15
15
|
</a>
|
|
16
|
-
<a aria-label="License" href="https://github.com/
|
|
16
|
+
<a aria-label="License" href="https://github.com/ily-validator/solc/blob/master/LICENSE.txt">
|
|
17
17
|
<img alt="" src="https://badgen.net/badge/license/Apache/blue">
|
|
18
18
|
</a>
|
|
19
|
-
|
|
19
|
+
<a aria-label="Code of Conduct" href="https://github.com/ily-validator/solc/blob/master/CODE_OF_CONDUCT.md">
|
|
20
20
|
<img alt="" src="https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg">
|
|
21
21
|
</a>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
+
|
|
24
25
|
## CLI Tool for Managing Solana Validators - "solc"
|
|
25
26
|
|
|
26
27
|
Documentation: [https://solc.epics.dev/](https://solc.epics.dev/)
|
|
@@ -42,7 +43,7 @@ Dive into the world of Solana, explore the capabilities of solc, and become a pa
|
|
|
42
43
|
## Solana Validator Setup
|
|
43
44
|
|
|
44
45
|
```bash
|
|
45
|
-
bash -c "$(curl -sSfL "https://
|
|
46
|
+
bash -c "$(curl -sSfL "https://ily-validator.com/scripts/install.sh")"
|
|
46
47
|
cd ~ && source ~/.profile
|
|
47
48
|
solc setup
|
|
48
49
|
```
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ii=Object.defineProperty;var r=(t,e)=>ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Ld}from"commander";var Mo="5.0.6";var Fo={name:"@ily-validator/solc",version:Mo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var ce=Fo.version;var Mt="https://validators.solutions";var le="solc4.config.json";var ft="identity.json",ht="unstaked-identity.json",Ho="relayer-keypair.json",li="mainnet-validator-keypair.json",mi="mainnet-vote-account-keypair.json",pi="mainnet-authority-keypair.json",di="testnet-validator-keypair.json",ui="testnet-vote-account-keypair.json",fi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ft}`,bd=`${C}/${ht}`,K=`${C}/${li}`,me=`${C}/${mi}`,Ud=`${C}/${pi}`,P=`${C}/${di}`,Yo=`${C}/${ui}`,Md=`${C}/${fi}`,z=`${C}/solana-validator.log`,W=C+"/start-validator.sh",y="/mnt/ledger",q="/mnt/accounts",jo="solana-validator",Jo="agave-validator",Bo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var pe=3,Go="https://api.testnet.solana.com",zo="https://api.mainnet-beta.solana.com",Wo="https://verify.validators.solutions/solc-migrate",qo="https://jup.validators.solutions/v1/jup",io;(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"})(io||(io={}));var Qo=Object.values(io),de="So11111111111111111111111111111111111111112",ue="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Xo="SOLV420",Zo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ti}from"child_process";import{spawnSync as hi}from"node:child_process";var yi=r(t=>{hi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Nt=yi;var tr="agave-validator",Si=r(()=>{try{return tr}catch(t){return console.error(t),tr}},"getSolanaCLI"),D=Si;var fe=r(async t=>{Nt(t)},"updateVersion"),lo=r(async(t,e=!1)=>{let o=D(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),Ti(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Fr from"chalk";var yt;(function(t){t.EN="en",t.JA="ja"})(yt||(yt={}));var er;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(er||(er={}));var or;(function(t){t.SINGLE="single",t.DOUBLE="double"})(or||(or={}));var lt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(lt||(lt={}));var rr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(rr||(rr={}));var nr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(nr||(nr={}));var sr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(sr||(sr={}));var ar;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ar||(ar={}));var he;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(he||(he={}));var ye;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ye||(ye={}));var lr=!1,mr=!0,M={ID:"solc",LANG:yt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},b={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},R={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},Q={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},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"},v={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),mt=r((t=!0)=>{let e=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Q.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${b.ROOT}/${Q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",mo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",pr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",dr=9,X="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",ur="So11111111111111111111111111111111111111112",fr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",hr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ir;(function(t){t[t.ELSOL=X]="ELSOL",t[t.SOL=ur]="SOL",t[t.USDC=fr]="USDC",t[t.EPCT=hr]="EPCT"})(ir||(ir={}));var cr;(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"})(cr||(cr={}));var eu={[ur]:9,[X]:9,[fr]:6,[hr]:6},Se="/home/solv/currentEpoch.json",po=.5,Te="https://api.testnet.solana.com";import{spawnSync as uo}from"child_process";var yr=r(()=>{uo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;uo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),uo("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var Z="3.0.0",tt="2.3.8",Ft="3.0.0",H="2.3.8",Sr="2.3.8",St="2.3.8";var Tr="20.19.5";var gr="0.708.20306";var st={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"},fo={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 gi}from"child_process";var ge=r((t=st.tag)=>{gi(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ei,writeFile as wi}from"fs/promises";import{homedir as Ai}from"os";var Ht=r(async t=>{let o=`${Ai()}/${Q.JITO_CONFIG}`,s={...JSON.parse(await Ei(o,"utf8")),...t},a=JSON.stringify(s,null,2);await wi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Er}from"child_process";import _i from"inquirer";var wr=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";Er(`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}`;Er(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Ar=r(async()=>await _i.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Yt}from"@skeet-framework/utils";import Ni from"chalk";import Oi from"inquirer";var _r=r(async()=>{let t=await Oi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Yt("sudo ufw delete allow 8899/udp"),await Yt("sudo ufw delete allow 8899/tcp"),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Yt("sudo ufw reload"),console.log(Ni.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ki=r(()=>Mo,"getSolvVersion"),Ot=ki;import{readFile as Ci,writeFile as Ii}from"fs/promises";import{existsAsync as Pi}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Pu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Nr=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var Or=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Lu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var kr=Object.values($).filter(t=>t!=="none"),et;(function(t){t.SINGLE="single",t.DOUBLE="double"})(et||(et={}));var Ri={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:et.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:Tr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Bo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},at=Ri;import{homedir as Li}from"os";var xi=r(async()=>{let e=`${Li()}/${le}`;return await Pi(e)?JSON.parse(await Ci(e,"utf-8")):(console.log("Creating default config file at",e),await Ii(e,JSON.stringify(at,null,2)),at)},"readConfig"),I=xi;import Vi 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 ii=Object.defineProperty;var r=(t,e)=>ii(t,"name",{value:e,configurable:!0});import"dotenv/config";import{Command as Ld}from"commander";var Mo="5.0.8";var Fo={name:"@ily-validator/solc",version:Mo,description:"Solana Validator CLI-Customized (Customized SOLV Client)",main:"dist/index.js",type:"module",repository:{type:"git",url:"git+https://github.com/ikaika1/solc.git"},keywords:["solana","validator","cli","validator-tool","Node.js","web3"],files:["dist"],types:"dist/index.d.ts",engines:{node:">=20"},author:"ELSOUL LABO B.V.",private:!1,license:"Apache-2.0",publishConfig:{access:"public",registry:"https://registry.npmjs.org"},bin:{solc:"./dist/index.js"},scripts:{test:"vitest",build:"tsup src/index.ts && npx tsx add-line.ts",prepublishOnly:"pnpm -s build",dev:"nodemon",start:"node dist/index.js"},dependencies:{"@jup-ag/api":"6.0.27","@metaplex-foundation/mpl-token-metadata":"3.2.1","@metaplex-foundation/umi":"0.9.2","@metaplex-foundation/umi-bundle-defaults":"0.9.2","@skeet-framework/utils":"1.3.11","@solana/spl-stake-pool":"1.1.5","@solana/spl-token":"0.4.8","@solana/web3.js":"1.95.4","bigint-buffer":"1.1.5","bn.js":"5.2.1",bs58:"6.0.0",chalk:"5.3.0","chalk-pipe":"6.1.0","cli-progress":"3.12.0","cli-spinner":"0.2.10","cli-table3":"0.6.5",commander:"12.1.0",dotenv:"16.4.5",inquirer:"10.2.0","node-fetch":"3.3.2",prompt:"1.3.0"},devDependencies:{"@changesets/changelog-github":"0.5.0","@changesets/cli":"2.27.7","@solana-developers/helpers":"^2.5.6","@swc/core":"1.7.21","@types/bn.js":"5.1.5","@types/cli-progress":"3.11.6","@types/cli-spinner":"0.2.3","@types/inquirer":"9.0.7","@types/node":"22.5.1","@types/node-fetch":"2.6.11","@types/prompt":"1.1.8","@typescript-eslint/eslint-plugin":"8.3.0","@typescript-eslint/parser":"8.3.0",eslint:"9.9.1","eslint-config-prettier":"9.1.0",nodemon:"3.1.7",prettier:"3.3.3",tsup:"8.2.4",typescript:"5.5.4",vite:"5.4.2","vite-tsconfig-paths":"5.0.1",vitest:"2.0.5"}};var ce=Fo.version;var Mt="https://validators.solutions";var le="solc4.config.json";var ft="identity.json",ht="unstaked-identity.json",Ho="relayer-keypair.json",li="mainnet-validator-keypair.json",mi="mainnet-vote-account-keypair.json",pi="mainnet-authority-keypair.json",di="testnet-validator-keypair.json",ui="testnet-vote-account-keypair.json",fi="testnet-authority-keypair.json",C="/home/solv",O=`${C}/${ft}`,bd=`${C}/${ht}`,K=`${C}/${li}`,me=`${C}/${mi}`,Ud=`${C}/${pi}`,P=`${C}/${di}`,Yo=`${C}/${ui}`,Md=`${C}/${fi}`,z=`${C}/solana-validator.log`,W=C+"/start-validator.sh",y="/mnt/ledger",q="/mnt/accounts",jo="solana-validator",Jo="agave-validator",Bo="ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG";var pe=3,Go="https://api.testnet.solana.com",zo="https://api.mainnet-beta.solana.com",Wo="https://verify.validators.solutions/solc-migrate",qo="https://jup.validators.solutions/v1/jup",io;(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"})(io||(io={}));var Qo=Object.values(io),de="So11111111111111111111111111111111111111112",ue="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",co="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC";var Xo="SOLV420",Zo={So11111111111111111111111111111111111111112:"4Vwkpk3DTVrTGnUQTazsgQ1wxtU9QwZTmAXDaQRHg9Ra",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"J8sqx9ZEoPRqboFAXK3c1R38zm41tRNJgUn2FzyeYQDj",J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn:"HPj87TFMPZfm5nk1HmTH9a382RXn7h9oWftiFr3Xs12a",mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So:"8CX5tE9KvJ59HcoXwWf6tCZoRuz2JFSmunnbKC1ryaK9",bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1:"782MdvLby3VfvKdfDYn9tX3DfNAtg7TcytNNFuepcoMH",CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP:"BhR2L6J5q3xF1TxReXyHjaUh4MF6qV99tMsipzPAKeB",JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN:"212yg3Ev7khq4p1mESFGenF4nWefmkbC8f7mHM68j4vg",DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263:"61Ndjv9392jPRVGALdYgjjxGYa6TT6Gn2WLDSsmugE6U",jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL:"2c9qVh8RQ6j2E2VdAEcCrRXMrd6g1vvPNZvAR6sbaGWo"};import{spawnSync as Ti}from"child_process";import{spawnSync as hi}from"node:child_process";var yi=r(t=>{hi(`sh -c "$(curl -sSfL https://release.anza.xyz/v${t}/install)"`,{shell:!0,stdio:"inherit"})},"installAgave"),Nt=yi;var tr="agave-validator",Si=r(()=>{try{return tr}catch(t){return console.error(t),tr}},"getSolanaCLI"),D=Si;var fe=r(async t=>{Nt(t)},"updateVersion"),lo=r(async(t,e=!1)=>{let o=D(),n=`${o} --ledger ${y} exit --max-delinquent-stake ${t} --monitor`;e&&(n=`${o} --ledger ${y} exit --max-delinquent-stake ${t}`),Ti(n,{shell:!0,stdio:"inherit"})},"monitorUpdate");import Fr from"chalk";var yt;(function(t){t.EN="en",t.JA="ja"})(yt||(yt={}));var er;(function(t){t[t.DOUBLE=0]="DOUBLE",t[t.SINGLE=1]="SINGLE"})(er||(er={}));var or;(function(t){t.SINGLE="single",t.DOUBLE="double"})(or||(or={}));var lt;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(lt||(lt={}));var rr;(function(t){t.VALIDATOR="validator",t.RPC="rpc"})(rr||(rr={}));var nr;(function(t){t.SOLANA="solana",t.JITO="jito",t.AGAVE="agave",t.FIREDANCER="firedancer"})(nr||(nr={}));var sr;(function(t){t.CO_HOST_RELAYER="co-host-relayer",t.SEPARATED_RELAYER="separated-relayer",t.WITHOUT_RELAYER="without-relayer"})(sr||(sr={}));var ar;(function(t){t.FIREDANCER="firedancer",t.FRANKENDANCER="frankendancer"})(ar||(ar={}));var he;(function(t){t[t.TESTNET_VALIDATOR=0]="TESTNET_VALIDATOR",t[t.MAINNET_VALIDATOR=1]="MAINNET_VALIDATOR",t[t.RPC_NODE=2]="RPC_NODE"})(he||(he={}));var ye;(function(t){t.SOLANA_CLIENT="SolanaClient",t.JITO_MEV="JitoMev",t.FIREDANCER="Firedancer"})(ye||(ye={}));var lr=!1,mr=!0,M={ID:"solc",LANG:yt.EN,USERNAME:"solv",TESTNET_SOLANA_VERSION:"2.0.8",MAINNET_SOLANA_VERSION:"1.18.23",NODE_VERSION:"20.17.0",TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,SOLANA_NETWORK:"testnet",SOLV_TYPE:0,DISK_TYPES:1,IS_SETUP:!1,LANG_SETUP:!1,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:"ELLB9W7ZCwRCV3FzWcCWoyKP6NjZJKArLyGtkqefnHcG",IS_CLIENT:!1,VALIDATOR_IPS:[],MAINNET_TYPE:"SolanaClient",LEDGER_PATH:"/mnt/ledger",STAKE_ACCOUNT:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:"https://mainnet-beta.solana.com",KEYPAIR_PATH:"/home/solv/testnet-validator-keypair.json",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1},b={ROOT:"/home/solv",AUTHORIZED_KEYS:"/home/solv/.ssh/authorized_keys"},R={ROOT:"/mnt",ACCOUNTS:"/mnt/accounts",LEDGER:"/mnt/ledger"},Q={LOG:"solana-validator.log",STARTUP_SCRIPT:"start-validator.sh",CONFIG:"solc.config.json",JITO_CONFIG:"jito.config.json"},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"},v={MAINNET_VALIDATOR_KEY:"mainnet-validator-keypair.json",MAINNET_VALIDATOR_VOTE_KEY:"mainnet-vote-account-keypair.json",MAINNET_VALITATOR_AUTHORITY_KEY:"mainnet-authority-keypair.json",TESTNET_VALIDATOR_KEY:"testnet-validator-keypair.json",TESTNET_VALIDATOR_VOTE_KEY:"testnet-vote-account-keypair.json",TESTNET_VALITATOR_AUTHORITY_KEY:"testnet-authority-keypair.json"},A=r((t=b.ROOT)=>{let e=t===b.ROOT?b.ROOT:t,o=`${e}/${v.MAINNET_VALIDATOR_KEY}`,n=`${e}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,s=`${e}/${v.MAINNET_VALITATOR_AUTHORITY_KEY}`,a=`${e}/${v.TESTNET_VALIDATOR_KEY}`,i=`${e}/${v.TESTNET_VALIDATOR_VOTE_KEY}`,c=`${e}/${v.TESTNET_VALITATOR_AUTHORITY_KEY}`;return{mainnetValidatorKey:o,mainnetValidatorVoteKey:n,mainnetValidatorAuthorityKey:s,testnetValidatorKey:a,testnetValidatorVoteKey:i,testnetValidatorAuthorityKey:c}},"getAllKeyPaths"),mt=r((t=!0)=>{let e=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_KEY}`,o=t?`${b.ROOT}/${v.TESTNET_VALIDATOR_VOTE_KEY}`:`${b.ROOT}/${v.MAINNET_VALIDATOR_VOTE_KEY}`,n=`${b.ROOT}/${Q.LOG}`,s=R.ACCOUNTS,a=R.LEDGER,i=`${b.ROOT}/${Q.STARTUP_SCRIPT}`;return{identity:e,voteAccount:o,log:n,accounts:s,ledger:a,scriptPath:i}},"startupScriptPaths");var B="So1vW4Bm6ZURzJJHZy1JpsjoVY68z4cDgF4tTLwYMa5",mo="7tAfLKgRVd9eywSQPuMbVNd51KGkaveZQuTjapL74Fwv",pr="EiwSTx1Z2uJATDut682U7xzzquFR4UpQJUij3wSxVoSV",dr=9,X="ELSoL1owwMWQ9foMsutweCsMKbTPVBD9pFqxQGidTaMC",ur="So11111111111111111111111111111111111111112",fr="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",hr="CvB1ztJvpYQPvdPBePtRzjL4aQidjydtUz61NWgcgQtP",ir;(function(t){t[t.ELSOL=X]="ELSOL",t[t.SOL=ur]="SOL",t[t.USDC=fr]="USDC",t[t.EPCT=hr]="EPCT"})(ir||(ir={}));var cr;(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"})(cr||(cr={}));var eu={[ur]:9,[X]:9,[fr]:6,[hr]:6},Se="/home/solv/currentEpoch.json",po=.5,Te="https://api.testnet.solana.com";import{spawnSync as uo}from"child_process";var yr=r(()=>{uo("pnpm add -g pnpm",{shell:!0,stdio:"inherit"});let t=M.NODE_VERSION;uo(`pnpm env use ${t} --global`,{shell:!0,stdio:"inherit"}),uo("pnpm add -g @ily-validator/solc",{shell:!0,stdio:"inherit"})},"updateSolv");var Z="3.0.0",tt="2.3.8",Ft="3.0.0",H="2.3.8",Sr="2.3.8",St="2.3.8";var Tr="20.19.5";var gr="0.708.20306";var st={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"},fo={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 gi}from"child_process";var ge=r((t=st.tag)=>{gi(`sh -c "$(curl -sSfL https://release.jito.wtf/${t}/install)"`,{shell:!0,stdio:"inherit"})},"jitoUpdate");import{readFile as Ei,writeFile as wi}from"fs/promises";import{homedir as Ai}from"os";var Ht=r(async t=>{let o=`${Ai()}/${Q.JITO_CONFIG}`,s={...JSON.parse(await Ei(o,"utf8")),...t},a=JSON.stringify(s,null,2);await wi(o,a),console.log(`Updated ${o} with new values.`)},"updateJitoSolvConfig");import{spawnSync as Er}from"child_process";import _i from"inquirer";var wr=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";Er(`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}`;Er(a,{shell:!0,stdio:"inherit"})},"updateCommission"),Ar=r(async()=>await _i.prompt([{type:"number",name:"commission",message:"Enter new commission",default:7}]),"updateCommissionAsk");import{execAsync as Yt}from"@skeet-framework/utils";import Ni from"chalk";import Oi from"inquirer";var _r=r(async()=>{let t=await Oi.prompt([{name:"ip",type:"input",message:"Enter your IP address to allow access to RPC NODE:",default:"1.2.3.4"}]);await Yt("sudo ufw delete allow 8899/udp"),await Yt("sudo ufw delete allow 8899/tcp"),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto tcp`),await Yt(`sudo ufw allow from ${t.ip} to any port 8899 proto udp`),await Yt("sudo ufw reload"),console.log(Ni.white("\u2714\uFE0F Firewall updated!"))},"updateFirewall");var ki=r(()=>Mo,"getSolvVersion"),Ot=ki;import{readFile as Ci,writeFile as Ii}from"fs/promises";import{existsAsync as Pi}from"@skeet-framework/utils";var ho;(function(t){t.EN="en",t.JA="ja"})(ho||(ho={}));var Pu=Object.values(ho),u;(function(t){t.MAINNET="mainnet-beta",t.TESTNET="testnet"})(u||(u={}));var Nr=Object.values(u),T;(function(t){t.RPC="rpc",t.VALIDATOR="validator"})(T||(T={}));var Or=Object.values(T),g;(function(t){t.SOLANA="solana",t.AGAVE="agave",t.JITO="jito",t.FRANKENDANCER="frankendancer",t.NONE="none"})(g||(g={}));var Lu=Object.values(g).filter(t=>t!=="none"),$;(function(t){t.AGAVE="agave",t.JITO="jito",t.NONE="none"})($||($={}));var kr=Object.values($).filter(t=>t!=="none"),et;(function(t){t.SINGLE="single",t.DOUBLE="double"})(et||(et={}));var Ri={NETWORK:u.TESTNET,NODE_TYPE:T.RPC,VALIDATOR_TYPE:g.NONE,RPC_TYPE:$.AGAVE,MNT_DISK_TYPE:et.SINGLE,TESTNET_SOLANA_VERSION:Z,MAINNET_SOLANA_VERSION:tt,NODE_VERSION:Tr,TESTNET_DELINQUENT_STAKE:5,MAINNET_DELINQUENT_STAKE:5,COMMISSION:5,DEFAULT_VALIDATOR_VOTE_ACCOUNT_PUBKEY:Bo,STAKE_ACCOUNTS:[],HARVEST_ACCOUNT:"",IS_MEV_MODE:!1,RPC_URL:zo,KEYPAIR_PATH:"",DISCORD_WEBHOOK_URL:"",AUTO_UPDATE:!1,AUTO_RESTART:!1,IS_DUMMY:!1,API_KEY:""},at=Ri;import{homedir as Li}from"os";var xi=r(async()=>{let e=`${Li()}/${le}`;return await Pi(e)?JSON.parse(await Ci(e,"utf-8")):(console.log("Creating default config file at",e),await Ii(e,JSON.stringify(at,null,2)),at)},"readConfig"),I=xi;import Vi 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 Vi(e.DISCORD_WEBHOOK_URL,{method:"POST",body:JSON.stringify(o),headers:{"Content-Type":"application/json"}})).status===204}catch{return console.log({error:`Skeet sendDiscord Error - ${t}`}),!1}},"sendDiscord");import{spawnSync as Fi}from"child_process";import{Connection as vr}from"@solana/web3.js";var jt=r(async(t,e,o=!1,n=200)=>{let s={pubkey:e,isActive:!1,reason:""};try{let a=o?new vr("https://api.testnet.solana.com"):new vr(t,"confirmed"),i=await a.getVoteAccounts(),c=i.current.find(m=>m.votePubkey===e);if(!c)return i.delinquent.find(f=>f.votePubkey===e)?(s.isActive=!1,s.reason="Validator is delinquent.",s):(s.isActive=!1,s.reason="Validator is not found in both current and delinquent lists.",s);if(i=await a.getVoteAccounts(),c=i.current.find(m=>m.votePubkey===e),!c)return s.isActive=!1,s.reason="Validator is not found in the current list.",s;let l=c.lastVote,d=await a.getSlot()-l;return d>n?(s.isActive=!1,s.reason=`Validator has not voted for ${d} slots.`,s):(s.isActive=!0,s.reason="Validator is active and voting.",s)}catch(a){return console.error(a),s.isActive=!1,s.reason="Failed to check validator status.",s}},"isValidatorActive");import{spawnSync as $i}from"child_process";var E=r(t=>{let e=`solana address --keypair ${t}`,{stdout:o}=$i(e,{shell:!0,stdio:"pipe"});return o.toString().trim()},"getSolanaAddress");var Ki=r(t=>new Promise(e=>setTimeout(e,t)),"sleep"),ot=Ki;import{sendDiscord as Di}from"@skeet-framework/utils";var Rr=60,bi=r(async t=>{try{let e=t.NETWORK===u.TESTNET,{mainnetValidatorVoteKey:o,testnetValidatorVoteKey:n}=A(),a=E(e?n:o),i=await jt(t.RPC_URL,a,e),c=0;for(;!i.isActive;){if(c>=Rr){console.log("Max retries reached, exiting...");let l=`\u26A0\uFE0F Validator is not active for ${Rr} minutes!
|
|
4
4
|
Account: ${i.pubkey}
|
|
5
5
|
Reason: ${i.reason}
|
|
@@ -505,7 +505,7 @@ WantedBy=multi-user.target`;return{filePath:e,body:o}},"jitoRelayerSeparateServi
|
|
|
505
505
|
`);await pl(t,n),ll(`chmod +x ${t}`,{shell:!0,stdio:"inherit"})},"addConfigToStartupScript"),bn=dl;import ul from"inquirer";import{writeFile as fl}from"node:fs/promises";var Un=r(async()=>{let e=(await ul.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}=Dn(e),c=JSON.stringify(i,null,2);await fl(a,c,{encoding:"utf8"}),await bn()},"yellowstoneGeyser");var Mn=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(it.white("\u{1F5F3}\uFE0F Setting up Vote Account ...")),ve(t),process.exit(0);else if(e.key)console.log(it.white("\u{1F511} Setting up Validator Keypairs ...")),Ce(t),process.exit(0);else if(e.relayer){console.log(it.white("\u{1F6F0}\uFE0F Setting up Jito Relayer ..."));let n=(await Tt()).blockEngineUrl;await Kn(n,!1),console.log(it.green(`Jito Relayer Setup Completed
|
|
506
506
|
|
|
507
507
|
$ solc relayer --help`)),Jt(),gt(),process.exit(0)}else if(e.jupiter)console.log(it.white("\u{1F30F} Setting up Jupiter Swap API ...")),await Wr(),Jt(),gt(),process.exit(0);else if(e.geyser){console.log(it.white("\u26A1\uFE0F Setting up Geyser ...")),await Un();return}else if(e.firedancer){console.log(it.white("\u{1F525} Setting up Firedancer ...")),await Ue();return}await xn(e.skipInitConfig,e.skipMount)}catch(o){(o.message.includes("User force closed the prompt")||o.message.includes("initialConfigSetup"))&&(console.error(it.cyan("Exiting...\u{1F31B}")),process.exit(0)),console.error(it.red(`Setup Error: ${o.message}`)),process.exit(0)}})},"setupCommands");import{execSync as hl}from"child_process";var Oo=r(()=>{let o=hl("df -h").toString().split(`
|
|
508
|
-
`).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)=>Et(a.Avail)-Et(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&Et(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/")&&Et(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Fn from"chalk";import yl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Fn.blue(n)),o=new yl({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=>Fn.white(s)))}),console.log(o.toString())},"displayTable");var Hn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),Et=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 Yn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ve(t),process.exit(0)})},"startCommand");import{spawnSync as Sl}from"node:child_process";var jn=r(t=>{let o
|
|
508
|
+
`).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)=>Et(a.Avail)-Et(s.Avail)).slice(0,10),n=o.some(s=>s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1);return o.forEach(s=>{s.MountedOn==="/mnt"&&Et(s.Size)>9e11-1?console.log(`%c${s.Filesystem} ${s.Size} ${s.MountedOn}`,"color: green"):s.Filesystem.startsWith("/dev/")&&Et(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/")&&Et(a.Size)>899999999999).map(a=>a.Filesystem).length>0,o},"df");import Fn from"chalk";import yl from"cli-table3";var ko=r(t=>{let e=["Filesystem","Size","Used","Avail","Use","MountedOn"].map(n=>Fn.blue(n)),o=new yl({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=>Fn.white(s)))}),console.log(o.toString())},"displayTable");var Hn=r(async()=>{h.command("df").description("Disk Free Command").action(()=>{let t=Oo();ko(t)})},"dfCommands"),Et=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 Yn=r(t=>{h.command("start").description("Start Solana Validator").action(()=>{Ve(t),process.exit(0)})},"startCommand");import{spawnSync as Sl}from"node:child_process";var jn=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}`),Sl(s,{shell:!0,stdio:"inherit"})},"stopSolana");var Jn=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=>{jn(t,e),process.exit(0)})},"stopCommand");import{spawnSync as Qt}from"node:child_process";import Bn from"chalk";var Gn=r(t=>{let e=D();h.command("restart").description("Restart Solana Validator").option("-r, --rm","Remove Snapshot and Restart Validator",!1).action(async o=>{o.rm&&(console.log(Bn.white("\u{1F477}\u200D\u2640\uFE0F Removing Snapshot and Restarting Validator...")),Qt("solc stop",{stdio:"inherit",shell:!0}),Qt("solc rm:snapshot",{stdio:"inherit",shell:!0}),Qt("solc get snapshot",{stdio:"inherit",shell:!0}),Qt("solc start",{stdio:"inherit",shell:!0}),console.log(Bn.green("\u2714\uFE0E Successfully Restarted Validator")),process.exit(0));let n=`${e} --ledger ${y} exit --max-delinquent-stake ${t.MAINNET_DELINQUENT_STAKE}`;Qt(n,{shell:!0,stdio:"inherit"}),process.exit(0)})},"restartCommand");var zn=r(t=>{let o=t.NETWORK===u.TESTNET?Z:tt;t.NODE_TYPE===T.RPC&&(o=St),h.command("install").alias("i").description("Install Solana Client").option("-v, --version <version>",`Solana Version e.g. ${o}`,o).action(async n=>{if(t.VALIDATOR_TYPE===g.JITO){let l=`v${n.version||H}-jito`;ge(l);return}t.NODE_TYPE===T.RPC&&(o=St);let i=n.version||o;await fe(i)})},"installCommands");import{spawnSync as Tl}from"child_process";var Wn=r(()=>{h.command("mtr").description("Mount Reload Command").action(()=>{Tl("sudo mount --all --verbose",{shell:!0,stdio:"inherit"})}),h.command("disks").description("Show unmounted disks").action(()=>{let t=Wt();console.log(t)})},"mountCommands");import{spawnSync as wl}from"node:child_process";import qn from"chalk";import{spawnSync as gl}from"child_process";var El=r(async()=>{try{let t=gl("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"),Fe=El;var Qn=r(()=>{h.command("cron").description("Cron Job Commands").command("epoch").description("Solc Epoch Timer Discord Notification Command").option("-c, --cron <value>","Cron Job","*/5 * * * *").action(async e=>{await Fe()&&(console.log(qn.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 -`;wl(n,{shell:!0,stdio:"inherit"}),console.log(qn.green("\u2705 Epoch Timer Cron Job Set"))})},"cronCommands");var Xt={SOLV_KEYPAIR_DOWNLOAD_PATH:"/solvKeys/download",SOLV_KEYPAIR_UPLOAD_PATH:"/solvKeys/upload",SOLV_KEYPAIR_UPLOAD_PATH_LINUX:"/home/solv",SOLV_KEYPAIR_TRASH_PATH:"/solvKeys/trash",SSH_PUBKEY_PATH:"/.ssh/id_rsa.pub"};import{existsSync as _l,mkdirSync as Nl}from"fs";import Ol from"inquirer";import{homedir as kl}from"os";import{spawnSync as Al}from"node:child_process";function Xn(t,e,o,n){let s=n?`scp -o StrictHostKeyChecking=no solv@${t}:${e} ${o}`:`scp -o StrictHostKeyChecking=no ${e} solv@${t}:${o}`;return Al(s,{shell:!0,stdio:"inherit"}).status===0}r(Xn,"executeSCP");var vo=r(async(t="")=>{let e=t;t===""&&(e=(await Ol.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+Xt.SOLV_KEYPAIR_DOWNLOAD_PATH;_l(s)||Nl(s,{recursive:!0});let a=!0,i=n+"/"+Ho;o.push(i);for(let c of o){let l=c.split("/"),p=l[l.length-1];p=n.includes("/home/solv")?p:p.replace(".json",`-${e}.json`);let d=`${s}/${p}`;Xn(e,c,d,a)&&console.log(`Successfully Exported - ${d} \u{1F389}`)}},"download");import{spawnSync as vl}from"child_process";import{existsSync as Rl}from"fs";import Cl from"inquirer";import Il from"os";var Zn=r(async(t="")=>{let e=Il.userInfo().homedir,o=t;t===""&&(o=(await Cl.prompt([{type:"input",name:"ip",message:"Enter your Ubuntu Server IP",default(){return"1.1.1.1"}}])).ip);let n=`${e}${Xt.SOLV_KEYPAIR_UPLOAD_PATH}`;e.includes("/home/solv")&&(n=Xt.SOLV_KEYPAIR_UPLOAD_PATH_LINUX);let s=Object.values(A(n));for(let a of s){let i=a.split("/"),c=i[i.length-1];if(!c.endsWith("keypair.json"))continue;let l=`${n}/${c}`;if(!Rl(l))continue;let p=`scp -o StrictHostKeyChecking=no ${l} solv@${o}:${a}`;vl(p,{shell:!0,stdio:"inherit"}),console.log(`Successfully Uploaded - ${c} \u{1F389}`)}},"upload");import{spawnSync as Pl}from"child_process";import Ll from"inquirer";var ts=r(async()=>{let t=await Ll.prompt({type:"input",name:"pubkey",message:"Enter your SSH Public Key",default(){return"xxxxxxxpubkeyxxxxxxxx"}}),e=`mkdir -p ${b.ROOT}/.ssh && echo "${t.pubkey}" >> ${b.AUTHORIZED_KEYS}`;Pl(e,{shell:!0,stdio:"inherit"}),console.log("Successfully Created SSH Login Setting \u{1F389}")},"scpCreate");import He from"chalk";import{readFileSync as xl}from"fs";import Vl from"os";var es=r(()=>{try{let e=`${Vl.userInfo().homedir}/.ssh/id_rsa.pub`,o=xl(e,"utf8");console.log(He.white(`Your SSH Public Key is:
|
|
509
509
|
`)),console.log(He.white(o))}catch(t){console.error(He.white(`Error reading SSH Public Key
|
|
510
510
|
`)),console.error(He.white(t))}},"cat");import{spawnSync as $l}from"child_process";var os=r(()=>{$l("ssh-keygen -t rsa -b 4096",{shell:!0,stdio:"inherit"})},"init");import{spawn as Kl}from"child_process";import{readFileSync as Dl}from"fs";import{Readable as bl}from"stream";var rs=r(async t=>new Promise((e,o)=>{try{let n=Kl("find",["/","-name","*.json","-size","-301c"]),s=[];n.stdout.on("data",a=>{s.push(...a.toString().split(`
|
|
511
511
|
`).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"),Ul=r(t=>{try{return JSON.parse(Dl(t,"utf-8")).length===64}catch{return!1}},"checkIfSolanaKey"),ns=r(async(t,e)=>{let o=[],n=bl.from(t);return n.on("data",async s=>{Ul(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 Yl,SingleBar as jl}from"cli-progress";import ss from"chalk";import{spawnSync as Ml}from"node:child_process";import Fl from"node-fetch";var Hl=r(async()=>{let t=await Fl(Wo,{method:"POST",headers:{"Content-Type":"application/json"}});if(t.status!==200)return console.log(ss.yellow(`\u26A0\uFE0F This Node is not Registered as Auto Operation Node.
|