瀏覽代碼

update tuc faucet

Shawn Lu 1 年之前
父節點
當前提交
8a07fa2d41
共有 7 個文件被更改,包括 120 次插入48 次删除
  1. 2 0
      package.json
  2. 1 0
      prisma/schema.prisma
  3. 47 36
      src/decodeFunction.ts
  4. 17 9
      src/faucet/faucet.ts
  5. 21 1
      src/faucet/faucetTuc.ts
  6. 14 2
      src/test.ts
  7. 18 0
      yarn.lock

+ 2 - 0
package.json

@@ -32,6 +32,7 @@
     "start": "node build/src/main.js",
     "testShawn": "npm run build && node build/src/test.js",
     "faucet": "npm run build && node build/src/faucet/faucet.js",
+    "faucetTuc": "npm run build && node build/src/faucet/faucetTuc.js",
     "clean": "rimraf coverage build tmp",
     "postinstall": "yarn prisma generate",
     "build": "tsc -p tsconfig.json && tsc-alias",
@@ -71,6 +72,7 @@
     "prisma": "^5.14.0",
     "shawnlu96-altcha-lib": "0.3.6",
     "tslib": "~2.6.2",
+    "useless-helpers": "^0.0.7",
     "uuid": "^9.0.1",
     "xrpl": "^3.0.0"
   },

+ 1 - 0
prisma/schema.prisma

@@ -37,6 +37,7 @@ model Faucet {
   lastRun            DateTime @db.DateTime(0)
   availableFrom      DateTime @db.DateTime(0)
   message            String?  @db.Text
+  tucStatus          Int      @default(0)
 }
 
 model RandomTask {

+ 47 - 36
src/decodeFunction.ts

@@ -115,54 +115,65 @@ function parse5(): void {
   //   'CmNoYW5uZWwtMjU=',
   //   'AA==',
   // ]
-
   const raw = [
-    'BQ==',
-    'QKroIsCES99i848oZJPjCeGMr11aDFUGU2Roat7L1LX8LqsTZL5TMJTv3saMfcvo3RjWMK1FtR+fzT715Z+bnh4=',
-  ]
-  const s = [
-    'AQ==',
-    'QCzDqo9I8xICLNbNuDICoH4yoxq5QNUeDW+Soq/WbAVxITr1fs+aJpiQuwo3w411O2EogH6qDmVqKSpAAluH2HY=',
+    '2+lWb+7Xy+Fy4RJ3INn8xwr0QQlVvARSifYjl59C9Bc=',
+    'jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=',
+    'QEIPAAAAAAA=',
+    'AQwpDwAAAAAA',
+    'DgAAAAAAAAA=',
+    'AAAAAAAAAAAAAAAAwfIGiv3Te+HINdWz7IkKXwKsGQ4=',
+    'AA==',
   ]
+  // const a = [
+  //   ('0x1::object::Object<0x1::fungible_asset::Metadata>',
+  //   '0x1::object::Object<0x1::fungible_asset::Metadata>',
+  //   'u64',
+  //   '0x1::option::Option<u64>',
+  //   'u64',
+  //   'address',
+  //   'vector<u8>'),
+  // ]
+  const d4 = bcs
+    .u64() // type
+    .parse(Uint8Array.from(Buffer.from(raw[4], 'base64')))
+  console.log('d4', d4)
+  // console.log(
+  //   bcs
+  //     .address()
+  //     .serialize('init1c8eqdzha6da7rjp46ke7ezg2tup2cxgwpazuse')
+  //     .toBase64(),
+  // )
+  //
+  // const d0 = bcs
+  //   .vector(bcs.u8()) // type
+  //   .parse(Uint8Array.from(Buffer.from(raw[0], 'base64')))
+  //
+  // console.log(d0)
+  //
+  // const d1 = bcs
+  //   .vector(bcs.u8()) // type
+  //   .parse(Uint8Array.from(Buffer.from(raw[1], 'base64')))
+  // console.log(d1)
 
-  const d0 = bcs
-    .u8() // type
-    .parse(Uint8Array.from(Buffer.from(s[0], 'base64')))
-
-  console.log(d0)
-
-  const d1 = bcs
-    .vector(bcs.u8()) // type
-    .parse(Uint8Array.from(Buffer.from(s[1], 'base64')))
-  console.log(d1)
-
-  const res = bcs
-    .vector(bcs.u8())
-    .serialize(
-      Buffer.from(
-        '3ViG4aV7ED54UmN/QBn2rwhze3muJwLbN+T6sC7uPpo2ev36VsFEZF7oOwj2/qC/6Z1XnP8uxhj8cePQs1D/gQ==',
-        'base64',
-      ),
-    )
-
-  console.log(res.toBase64())
-
+  // const res = bcs.vector(bcs.u8()).serialize(Buffer.from(raw[1], 'base64'))
+  // console.log(res)
+  //
+  // console.log(raw.toBase64())
   // const d2 = bcs
   //   .u8() // type
-  //   .parse(Uint8Array.from(Buffer.from(raw[2], 'base64')))
+  //   .parse(Uint8Array.from(Buffer.from(raw[1], 'base64')))
   //
   // console.log(d2)
   //
   // const d3 = bcs
-  //   .string() // type
-  //   .parse(Uint8Array.from(Buffer.from(raw[3], 'base64')))
+  //   .u64()// type
+  //   .parse(Uint8Array.from(Buffer.from(raw[1], 'base64')))
   //
   // console.log(d3)
   //
-  // const d4 = bcs
-  //   .string() // type
-  //   .parse(Uint8Array.from(Buffer.from(raw[4], 'base64')))
-  // console.log('d4', d4)
+  // console.log(
+  //   bcs.string().serialize('init1c8eqdzha6da7rjp46ke7ezg2tup2cxgwpazuse').toBase64(),
+  // )
   //
   // const d5 = bcs
   //   .string() // type

+ 17 - 9
src/faucet/faucet.ts

@@ -67,18 +67,26 @@ async function checkFaucetBalance() {
   const accounts = await DBClient.instance.faucet.findMany({
     where: { balance: 0 },
   })
-  await forEachAsync(accounts, 2, async (account, index) => {
+  await forEachAsync(accounts, 10, async (account, index) => {
     try {
       console.log(`checking ${index}/${accounts.length}`)
-      const client = new InitiaClient(account.mnemonic, true)
-      const gasAmount = await client.getGasAmount()
-      console.log(index, gasAmount)
+      await polly()
+        .waitAndRetry(5)
+        .executeForPromise(async () => {
+          const client = new InitiaClient(account.mnemonic, true)
+          const gasAmount = await client.getGasAmount()
+          console.log(index, gasAmount)
+          await DBClient.instance.faucet.update({
+            where: { id: account.id },
+            data: { balance: gasAmount },
+          })
+        })
+    } catch (e) {
+      console.log(`${index}: error`, e)
       await DBClient.instance.faucet.update({
         where: { id: account.id },
-        data: { balance: gasAmount },
+        data: { balance: 0 },
       })
-    } catch (e) {
-      console.log(`${index}: error`)
     }
   })
 }
@@ -184,5 +192,5 @@ function startCron(concurrency: number) {
   })
 }
 
-startCron(2)
-// await checkFaucetBalance()
+// startCron(2)
+await checkFaucetBalance()

+ 21 - 1
src/faucet/faucetTuc.ts

@@ -1,7 +1,8 @@
-import { forEachAsync, getAxiosClient } from '../utils'
+import { getAxiosClient } from '../utils'
 import { DBClient } from '../singletons'
 import { Status } from '../models/Status'
 import polly from 'polly-js'
+import { forEachAsync } from 'useless-helpers'
 
 async function faucetTuc(address: string) {
   await polly()
@@ -21,4 +22,23 @@ async function faucetTuc(address: string) {
     })
 }
 
+async function startFaucet(concurrency: number) {
+  const accounts = await DBClient.instance.faucet.findMany()
+  await forEachAsync(accounts, concurrency, async account => {
+    try {
+      await faucetTuc(account.address)
+      await DBClient.instance.faucet.update({
+        where: { id: account.id },
+        data: { tucStatus: Status.Fauceted },
+      })
+    } catch (e) {
+      console.log(e)
+      await DBClient.instance.faucet.update({
+        where: { id: account.id },
+        data: { tucStatus: Status.FaucetFailed },
+      })
+    }
+  })
+}
 
+await startFaucet(5)

+ 14 - 2
src/test.ts

@@ -4,7 +4,7 @@ import polly from 'polly-js'
 import { v4 as uuidv4 } from 'uuid'
 import { DBClient } from './singletons'
 import { solveChallenge } from 'shawnlu96-altcha-lib'
-import { forEachAsync, getAxiosClient } from './utils'
+import { forEachAsync, getAxiosClient, getProxyAgent } from './utils'
 import { getAltchaPayload, solveHCaptcha } from './faucet/captcha'
 import axios from 'axios'
 import toHex = AccAddress.toHex
@@ -109,7 +109,19 @@ async function testFaucet() {
   }
 }
 
-await testFaucet()
+async function testL2WithProxy() {
+  const agent = getProxyAgent()
+  const client = axios.create({
+    httpsAgent: agent,
+  })
+  const resp = await client.get(
+    'https://maze-rest-617bacff-7d34-4eb8-87f4-ee16fb4e0ac7.ue1-prod.newmetric.xyz/cosmos/bank/v1beta1/balances/init1ckyxek0ckfszwgpqf6j9a4sawveazpyrlgpj4s/by_denom?denom=l2/aadf1a9da6a38b7e7e11839364ee42002260eff1657f403b9ce608337bcb986b',
+  )
+  console.log(resp.data)
+}
+
+await testL2WithProxy()
+// await testFaucet()
 // await createDummyAddresses()
 // await createAccounts(10000)
 // await faucetAccount('init1xj0ekwu5n3t4c8aj2xfxr9l94lwr0sssl4rkxy')

+ 18 - 0
yarn.lock

@@ -1728,6 +1728,15 @@ axios@^1.6.5, axios@^1.6.8:
     form-data "^4.0.0"
     proxy-from-env "^1.1.0"
 
+axios@^1.7.2:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621"
+  integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==
+  dependencies:
+    follow-redirects "^1.15.6"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
 babel-plugin-polyfill-corejs2@^0.4.10:
   version "0.4.11"
   resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz"
@@ -4574,6 +4583,15 @@ url@~0.11.0:
     punycode "^1.4.1"
     qs "^6.11.2"
 
+useless-helpers@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/useless-helpers/-/useless-helpers-0.0.7.tgz#49fe71a9c8f2bd940115c464a6c4cb8c2871e357"
+  integrity sha512-sk6397cJYSJw3/P0ByEG6D+P8cZ2HFuwmQqZ42XT0P1u3CH40Ju6kZi66MabgbVX2+ppOFmRSenAIq7wUU29gA==
+  dependencies:
+    axios "^1.7.2"
+    https-proxy-agent "^7.0.4"
+    polly-js "^1.8.3"
+
 util-deprecate@^1.0.1, util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"