-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathservice.js
More file actions
1 lines (1 loc) · 13 KB
/
service.js
File metadata and controls
1 lines (1 loc) · 13 KB
1
const fs=require("fs"),path=require("path"),qs=require("querystring"),readline=require("readline"),{ethers:e}=require("ethers"),chains=require("./chains"),pharos=chains.testnet.pharos,etc=chains.utils.etc,abi=chains.utils.abi,contract=chains.utils.contract,axios=require("axios"),selectedWallets=global.selectedWallets||[],wallets=selectedWallets;async function performSwapUSDC(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing data"}.`);continue}try{let r=new e.Wallet(t,pharos.provider()),o=r.address,i=e.parseEther("0.0001"),s=contract.WPHRS.slice(2).padStart(64,"0")+contract.USDC.slice(2).padStart(64,"0"),n=i.toString(16).padStart(64,"0"),l="0x04e45aaf"+s+"0000000000000000000000000000000000000000000000000000000000000bb8"+o.toLowerCase().slice(2).padStart(64,"0")+n+"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",c=Math.floor(Date.now()/1e3)+600,d=["function multicall(uint256 deadline, bytes[] calldata data) payable"],p=new e.Contract(contract.SWAP,d,r),f=p.interface.encodeFunctionData("multicall",[c,[l]]);await pharos.provider().getFeeData();for(let w=1;w<=maxTransaction;w++){console.log(`🚀 ${$} | Transaction Swap 0.0001 PHRS → USDC ${w} from ${maxTransaction}`);let g={to:p.target,data:f,value:i};g.gasLimit=await pharos.provider().estimateGas(g)*12n/10n;let m=await r.sendTransaction(g);await m.wait(1),console.log(`✅ ${$} | ${etc.timelog()} | Transaction Confirmed: ${pharos.explorer.tx(m.hash)}`),await etc.delay(5e3)}}catch(u){console.error(`❌ ${$} | ${etc.timelog()} | Error:`,u.message)}}}async function performSwapUSDT(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing data"}.`);continue}try{let r=new e.Wallet(t,pharos.provider()),o=r.address,i=e.parseEther("0.0001"),s=contract.WPHRS.slice(2).padStart(64,"0")+contract.USDT.slice(2).padStart(64,"0"),n=i.toString(16).padStart(64,"0"),l="0x04e45aaf"+s+"0000000000000000000000000000000000000000000000000000000000000bb8"+o.toLowerCase().slice(2).padStart(64,"0")+n+"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",c=Math.floor(Date.now()/1e3)+600,d=["function multicall(uint256 deadline, bytes[] calldata data) payable"],p=new e.Contract(contract.SWAP,d,r),f=p.interface.encodeFunctionData("multicall",[c,[l]]);await pharos.provider().getFeeData();for(let w=1;w<=maxTransaction;w++){console.log(`🚀 ${$} | Transaction Swap 0.0001 PHRS → USDT ${w} from ${maxTransaction}`);let g={to:p.target,data:f,value:i};g.gasLimit=await pharos.provider().estimateGas(g)*12n/10n;let m=await r.sendTransaction(g);await m.wait(1),console.log(`✅ ${$} | ${etc.timelog()} | Transaction Confirmed: ${pharos.explorer.tx(m.hash)}`),await etc.delay(5e3)}}catch(u){console.error(`❌ ${$} | ${etc.timelog()} | Error:`,u.message)}}}async function checkBalanceAndApprove(a,t,$){let r=new e.Contract(t,abi.ERC20,a),o=await r.allowance(a.address,$);if(0n===o){console.log(`✍️ Token is not allowance. Sending approve transaction....`);let i=e.MaxUint256;try{let s=await r.approve($,i);await s.wait(1),await etc.delay(3e3)}catch(n){return console.error(`❌ Approve failed:`,n.message),!1}}return!0}async function addLpUSDC(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing data"}.`);continue}try{let r=new e.Wallet(t,pharos.provider()),o=new e.Contract(contract.ROUTER,abi.ROUTER,r),i=Math.floor(Date.now()/1e3)+1800,s="100000000000000",n=s,l=await checkBalanceAndApprove(r,contract.USDC,contract.ROUTER);if(!l)continue;let c={token0:contract.WPHRS,token1:contract.USDC,fee:500,tickLower:-887220,tickUpper:887220,amount0Desired:s,amount1Desired:"100000000000000",amount0Min:"0",amount1Min:"0",recipient:r.address,deadline:i},d=o.interface.encodeFunctionData("mint",[c]),p=o.interface.encodeFunctionData("refundETH",[]),f=[d,p];for(let w=1;w<=maxTransaction;w++){console.log(`🚀 ${$} | Transaction Add Liquidity pair 0.0001 PHRS + 0.0001 USDC ${w} from ${maxTransaction}`);let g=await o.multicall(f,{value:n,gasLimit:5e5});await g.wait(1),console.log(`✅ ${$} | ${etc.timelog()} | Transaction Confirmed: ${pharos.explorer.tx(g.hash)}`),await etc.delay(5e3)}}catch(m){console.error(`❌ ${$} | ${etc.timelog()} | Error:`,m.message)}}}async function addLpUSDT(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing data"}.`);continue}try{let r=new e.Wallet(t,pharos.provider()),o=new e.Contract(contract.ROUTER,abi.ROUTER,r),i=Math.floor(Date.now()/1e3)+1800,s="100000000000000",n=s,l=await checkBalanceAndApprove(r,contract.USDT,contract.ROUTER);if(!l)continue;let c={token0:contract.WPHRS,token1:contract.USDT,fee:500,tickLower:-887220,tickUpper:887220,amount0Desired:s,amount1Desired:"100000000000000",amount0Min:"0",amount1Min:"0",recipient:r.address,deadline:i},d=o.interface.encodeFunctionData("mint",[c]),p=o.interface.encodeFunctionData("refundETH",[]),f=[d,p];for(let w=1;w<=maxTransaction;w++){console.log(`🚀 ${$} | Transaction Add Liquidity pair 0.0001 PHRS + 0.0001 USDT ${w} from ${maxTransaction}`);let g=await o.multicall(f,{value:n,gasLimit:5e5});await g.wait(1),console.log(`✅ ${$} | ${etc.timelog()} | Transaction Confirmed: ${pharos.explorer.tx(g.hash)}`),await etc.delay(5e3)}}catch(m){console.error(`❌ ${$} | ${etc.timelog()} | Error:`,m.message)}}}async function randomTransfer(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing private key"}.`);continue}try{let r=new e.Wallet(t,pharos.provider()),o=pharos.provider(),i="0.000001",s=e.parseEther(i),n=await o.getBalance(r.address);if(n<s*BigInt(maxTransaction)){console.warn(`⚠️ ${$} | Insufficient balance (${e.formatEther(n)}) to transfer ${i} PHRS x ${maxTransaction} times.`);continue}for(let l=1;l<=maxTransaction;l++){let c=e.Wallet.createRandom(),d=c.address;console.log(`🚀 ${$} | Transfer ${l} of ${maxTransaction} → ${i} PHRS to ${d}`);let p=await r.sendTransaction({to:d,value:s,gasLimit:21e3,gasPrice:0});await p.wait(1),console.log(`✅ ${$} | ${etc.timelog()} | Transfer Confirmed: ${pharos.explorer.tx(p.hash)}`),await etc.delay(5e3)}}catch(f){console.error(`❌ ${$} | ${etc.timelog()} | Transfer error: ${f.message}`)}}}async function accountCheck(){for(let a of global.selectedWallets||[]){let{privatekey:t,token:$,name:r}=a;if(!t||!$){console.warn(`⚠️ Skip ${r||"wallet with missing data"}.`);continue}try{let o=new e.Wallet(t,pharos.provider()),i=`https://api.pharosnetwork.xyz/user/profile?address=${o.address}`;await etc.loading(`🚀 ${r} | Check Profile Stats for ${o.address}.....`,2e3);let s={...etc.headers,authorization:`Bearer ${$}`},n=await axios.get(i,{headers:s}),l=n.data;if(0!==l.code||!l.data.user_info){console.log(`${l.msg}`);continue}let{ID:c,TotalPoints:d,TaskPoints:p,InvitePoints:f}=l.data.user_info;console.log(`✅ ${r} | ${etc.timelog()} | ID: ${c}, TotalPoints: ${d}, TaskPoints: ${p}, InvitePoints: ${f}`),await etc.delay(5e3)}catch(w){axios.isAxiosError(w)?console.error(`❌ ${r} | ${etc.timelog()} | HTTP Error: ${w.response?.status} - ${w.response?.data?.message||w.message}`):console.error(`❌ ${r} | ${etc.timelog()} | Error: ${w.message}`)}await etc.delay(5e3)}}async function accountLogin(){for(let a of global.selectedWallets||[]){let{privatekey:t,token:$,name:r}=a;if(!t){console.warn(`⚠️ Skip ${r||"wallet with missing private key"}.`);continue}if(!$){console.log(`ℹ️ ${r} | No token found. Trying to login...`),await etc.delay(3e3);try{let o=new e.Wallet(t,pharos.provider()),i=await o.signMessage("pharos"),s=`https://api.pharosnetwork.xyz/user/login?address=${o.address}&signature=${i}&invite_code=rmKeUmr3VL7bLeva`;await etc.loading(`🚀 ${r} | Logging in to Pharos...`,2e3);let n={...etc.headers},l=await axios.post(s,null,{headers:n}),c=l.data;if(0!==c.code||!c.data?.jwt){console.warn(`❌ ${r} | Login failed: ${c.msg}`);continue}let d=c.data.jwt;a.token=d;let p=path.join(__dirname,"./wallet.json"),f=JSON.parse(fs.readFileSync(p,"utf8")),w=f.wallets||[],g=w.findIndex(e=>e.privatekey.trim().toLowerCase()===t.trim().toLowerCase());-1!==g&&(w[g].token=d),fs.writeFileSync(p,JSON.stringify({wallets:w},null,2),"utf8"),console.log(`✅ ${r} | Login successful.`)}catch(m){console.error(`❌ ${r} | ${etc.timelog()} | Login error: ${m.message}`)}await etc.delay(5e3)}}}async function accountCheckIn(){for(let a of global.selectedWallets||[]){let{privatekey:t,token:$,name:r}=a;if(!t||!$){console.warn(`⚠️ Skip ${r||"wallet with missing data"}.`);continue}try{let o=new e.Wallet(t,pharos.provider()),i=`https://api.pharosnetwork.xyz/sign/in?address=${o.address}`;await etc.loading(`🚀 ${r} | Check-in for ${o.address}.....`,2e3);let s={...etc.headers,authorization:`Bearer ${$}`},n=await axios.post(i,null,{headers:s}),l=n.data;0===l.code?console.log(`✅ ${r} | ${etc.timelog()} | Check-in successful: ${l.msg}`):l.msg?.toLowerCase().includes("already")?console.log(`ℹ️ ${r} | ${etc.timelog()} | Already checked in.`):console.log(`❌ ${r} | ${etc.timelog()} | Check-in failed: ${l.msg||"Unknown error"}`)}catch(c){axios.isAxiosError(c)?console.error(`❌ ${r} | ${etc.timelog()} | HTTP Error: ${c.response?.status} - ${c.response?.data?.message||c.message}`):console.error(`❌ ${r} | ${etc.timelog()} | Error: ${c.message}`)}await etc.delay(5e3)}}async function claimFaucetUSDC(){for(let a of global.selectedWallets||[]){let{privatekey:t,name:$}=a;if(!t){console.warn(`⚠️ Skip ${$||"wallet with missing private key"}.`);continue}let r=new e.Wallet(t,pharos.provider());try{await etc.loading(`🚀 ${$} | Claim USDC for ${r.address}...`,2e3);let o=await axios.post("https://testnet-router.zenithswap.xyz/api/v1/faucet",{tokenAddress:"0xAD902CF99C2dE2f1Ba5ec4D642Fd7E49cae9EE37",userAddress:r.address},{headers:{"Content-Type":"application/json",...etc.headers}}),i=o.data;200===i.status&&i.data?.txHash?console.log(`✅ ${$} | ${etc.timelog()} | USDC Claimed | TxHash: ${pharos.explorer.tx(i.data.txHash)}`):console.log(`❌ ${$} | ${etc.timelog()} | USDC Claim failed: ${i.message||"Unknown error"}`)}catch(s){if(axios.isAxiosError(s)){let n=s.response?.data?.message||s.message;console.error(`❌ ${$} | ${etc.timelog()} | USDC | Error: ${n}`)}else console.error(`❌ ${$} | ${etc.timelog()} | USDC | Unexpected error: ${s.message}`)}await etc.delay(5e3)}}async function socialTask(){let a=[201,202,203,204];for(let t of global.selectedWallets||[]){let{privatekey:$,token:r,name:o}=t;if(!$||!r){console.warn(`⚠️ Skip ${o||"wallet with missing data"}.`);continue}let i=new e.Wallet($,pharos.provider());for(let s of a){try{await etc.loading(`🚀 ${o} | Verifying task ${s} for ${i.address}...`,2e3);let n=qs.stringify({address:i.address,task_id:s}),l=await axios.post("https://api.pharosnetwork.xyz/task/verify",n,{headers:{...etc.headers,authorization:`Bearer ${r}`,"Content-Type":"application/x-www-form-urlencoded"}}),c=l.data;0===c.code&&c.data?.verified?console.log(`✅ ${o} | ${etc.timelog()} | Task ${s} verified successfully for ${i.address}`):console.log(`❌ ${o} | ${etc.timelog()} | Task ${s} verification failed: ${c.msg||"Unknown error"}`)}catch(d){if(axios.isAxiosError(d)){let p=d.response?.data?.msg||d.message;console.error(`❌ ${o} | ${etc.timelog()} | Task ${s} HTTP Error: ${p}`)}else console.error(`❌ ${o} | ${etc.timelog()} | Task ${s} Unexpected error: ${d.message}`)}await etc.countdown(15e3,"Countdown")}}}async function accountClaimFaucet(){for(let a of global.selectedWallets||[]){let{privatekey:t,token:$,name:r}=a;if(!t||!$){console.warn(`⚠️ Skip ${r||"wallet with missing data"}.`);continue}try{let o=new e.Wallet(t,pharos.provider());await etc.loading(`🚀 ${r} | Claim Faucet for ${o.address}.....`,2e3);let i=`https://api.pharosnetwork.xyz/faucet/status?address=${o.address}`,s={...etc.headers,authorization:`Bearer ${$}`},n=await axios.get(i,{headers:s}),l=n.data;if(0!==l.code||!l.data){console.log(`❌ ${r} | Faucet status check failed for ${o.address}: ${l.msg||"Unknown error"}`);continue}if(!l.data.is_able_to_faucet){let c=new Date(1e3*l.data.avaliable_timestamp).toLocaleString("en-US",{timeZone:"Asia/Jakarta"});console.log(`ℹ️ ${r} | Faucet not available for ${o.address}. Next available: ${c}`);continue}let d=`https://api.pharosnetwork.xyz/faucet/daily?address=${o.address}`,p=await axios.post(d,null,{headers:s}),f=p.data;0===f.code?console.log(`✅ ${r} | Faucet claimed successfully for ${o.address}`):console.log(`❌ ${r} | Faucet claim failed for ${o.address}: ${f.msg||"Unknown error"}`)}catch(w){axios.isAxiosError(w)?console.error(`❌ ${r} | ${etc.timelog()} | HTTP Error for ${wallet.address}: ${w.response?.status} - ${w.response?.data?.message||w.message}`):console.error(`❌ ${r} | ${etc.timelog()} | Error for ${wallet.address}: ${w.message}`)}await etc.delay(5e3)}}module.exports={performSwapUSDC,performSwapUSDT,addLpUSDC,addLpUSDT,accountCheckIn,accountLogin,accountCheck,accountClaimFaucet,claimFaucetUSDC,randomTransfer,socialTask};