Pārlūkot izejas kodu

add concurrency

Shawn Lu 1 gadu atpakaļ
vecāks
revīzija
149e940cd8
9 mainītis faili ar 1036 papildinājumiem un 10 dzēšanām
  1. 4 0
      .babelrc
  2. 7 1
      package.json
  3. 5 3
      src/faucet/captcha.ts
  4. 2 2
      src/faucet/faucet.ts
  5. 20 0
      src/faucet/worker.ts
  6. 1 1
      src/test.ts
  7. 9 0
      src/utils/index.ts
  8. 4 1
      tsconfig.json
  9. 984 2
      yarn.lock

+ 4 - 0
.babelrc

@@ -0,0 +1,4 @@
+{
+  "presets": ["@babel/preset-env"],
+  "plugins": ["@babel/plugin-transform-modules-commonjs"]
+}

+ 7 - 1
package.json

@@ -7,10 +7,15 @@
     "node": ">= 18.12"
   },
   "devDependencies": {
+    "@babel/cli": "^7.24.5",
+    "@babel/core": "^7.24.5",
+    "@babel/preset-env": "^7.24.5",
     "@types/jest": "~29.5",
     "@types/node": "~18",
     "@typescript-eslint/eslint-plugin": "~6.2",
     "@typescript-eslint/parser": "~6.2",
+    "babelify": "^10.0.0",
+    "browserify": "^17.0.0",
     "eslint": "~8.46",
     "eslint-config-prettier": "~9.0",
     "eslint-plugin-prettier": "^5.1.1",
@@ -39,13 +44,14 @@
   "dependencies": {
     "@initia/initia.js": "^0.1.51",
     "@prisma/client": "^5.14.0",
-    "shawnlu96-altcha-lib": "0.3.4",
     "axios": "^1.6.8",
     "dotenv": "^16.4.5",
     "https-proxy-agent": "^7.0.4",
+    "minify": "^11.1.1",
     "node-cron": "^3.0.3",
     "polly-js": "^1.8.3",
     "prisma": "^5.14.0",
+    "shawnlu96-altcha-lib": "0.3.6",
     "tslib": "~2.6.2"
   },
   "volta": {

+ 5 - 3
src/faucet/captcha.ts

@@ -1,7 +1,7 @@
 import axios, { AxiosInstance } from 'axios'
 import dotenv from 'dotenv'
 import polly from 'polly-js'
-import { solveChallenge } from 'shawnlu96-altcha-lib'
+import { solveChallenge, solveChallengeWorkers } from 'shawnlu96-altcha-lib'
 dotenv.config()
 
 const googlekey = '6LdLhtYpAAAAAOe1xmceNR-i6MTtzq7N6AYztoVI'
@@ -45,14 +45,16 @@ export async function getAltchaPayload(client: AxiosInstance) {
         'https://faucet-api.initiation-1.initia.xyz/create_challenge',
       )
       const challenge = challengeResp.data
+
       // console.log(challenge)
-      const { promise } = solveChallenge(
+      const solution = await solveChallengeWorkers(
+        './build/src/faucet/worker.js',
+        4,
         challenge.challenge,
         challenge.salt,
         challenge.max,
         challenge.start,
       )
-      const solution = await promise
       const payload = {
         algorithm: 'SHA-256',
         challenge: challenge.challenge,

+ 2 - 2
src/faucet/faucet.ts

@@ -4,7 +4,7 @@ import { DBClient } from '../singletons'
 import { Status } from '../models/Status'
 
 export async function faucetAccount(address: string) {
-  const client = getAxiosClient(true)
+  const client = getAxiosClient(false)
   const altcha = await getAltchaPayload(client)
   const hCaptcha = await solveHCaptcha(address)
   try {
@@ -49,4 +49,4 @@ async function startFaucet(concurrency = 10) {
   })
 }
 
-await startFaucet(20)
+await startFaucet(6)

+ 20 - 0
src/faucet/worker.ts

@@ -0,0 +1,20 @@
+import { solveChallenge } from 'shawnlu96-altcha-lib'
+import {parentPort} from 'node:worker_threads'
+
+let controller: AbortController | undefined = undefined
+
+parentPort.on('message', async message => {
+  const { type, payload } = message
+  if (type === 'abort') {
+    controller?.abort()
+    controller = undefined
+  } else if (type === 'work') {
+    const { alg, challenge, max, salt, start } = payload || {}
+    const result = solveChallenge(challenge, salt, alg, max, start)
+    controller = result.controller
+    result.promise.then(solution => {
+      parentPort.postMessage(solution ? { ...solution, worker: true } : solution)
+    })
+  }
+})
+

+ 1 - 1
src/test.ts

@@ -33,7 +33,7 @@ async function createAccounts(count: number) {
 
 // await createAccounts(10000)
 // await faucetAccount('init1xj0ekwu5n3t4c8aj2xfxr9l94lwr0sssl4rkxy')
-
+await getAltchaPayload(getAxiosClient(false))
 // const client = new InitiaClient(
 //   'scheme address way popular shrug fall rail eyebrow buzz learn cross involve spatial rookie ostrich grocery chest ice glory security slogan summer also comfort',
 // )

+ 9 - 0
src/utils/index.ts

@@ -30,6 +30,15 @@ export function getAxiosClient(useProxy: boolean) {
     headers: {
       'User-Agent':
         'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
+      'Sec-Ch-Ua':
+        '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
+      'Sec-Ch-Ua-Mobile': '?0',
+      'Sec-Ch-Ua-Platform': '"Windows"',
+      Origin: 'https://faucet.testnet.initia.xyz',
+      Referer: 'https://faucet.testnet.initia.xyz/',
+      'Sec-Fetch-Dest': 'empty',
+      'Sec-Fetch-Mode': 'cors',
+      'Sec-Fetch-Site': 'same-site',
     },
   })
 }

+ 4 - 1
tsconfig.json

@@ -2,7 +2,10 @@
   "compilerOptions": {
     "target": "esnext",
     "module": "esnext",
-    "lib": ["ES2022"],
+    "lib": [
+      "ES2022",
+      "dom"
+    ],
     "moduleResolution": "node",
     "rootDir": ".",
     "outDir": "build",

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 984 - 2
yarn.lock


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels