Shawn Lu hai 1 ano
pai
achega
241ce7341f
Modificáronse 6 ficheiros con 101 adicións e 18 borrados
  1. 1 0
      package.json
  2. 6 5
      prisma/schema.prisma
  3. 49 0
      src/faucet/faucetTuc.ts
  4. 6 0
      src/models/Status.ts
  5. 11 0
      src/singletons/index.ts
  6. 28 13
      src/test.ts

+ 1 - 0
package.json

@@ -24,6 +24,7 @@
     "prestart": "npm run build",
     "start": "node build/src/main.js",
     "testShawn": "npm run build && node build/src/test.js",
+    "faucetTuc": "npm run build && node build/src/faucet/faucetTuc.js",
     "clean": "rimraf coverage build tmp",
     "build": "tsc -p tsconfig.json && tsc-alias",
     "build:watch": "tsc -w -p tsconfig.json && tsc-alias",

+ 6 - 5
prisma/schema.prisma

@@ -14,9 +14,10 @@ datasource db {
 }
 
 model Account {
-  id       Int    @id @default(autoincrement())
-  mnemonic String @db.VarChar(255)
-  address  String @db.VarChar(100)
-  balance  String @db.VarChar(50)
-  message  String @db.Text
+  id       Int     @id @default(autoincrement())
+  mnemonic String  @db.VarChar(255)
+  address  String  @db.VarChar(100)
+  balance  String? @db.VarChar(50)
+  status   Int     @default(0)
+  message  String? @db.Text
 }

+ 49 - 0
src/faucet/faucetTuc.ts

@@ -0,0 +1,49 @@
+import { forEachAsync, getAxiosClient } from '../utils'
+import { DBClient } from '../singletons'
+import { Status } from '../models/Status'
+import polly from 'polly-js'
+
+async function faucetTuc(address: string) {
+  await polly()
+    .waitAndRetry(3)
+    .executeForPromise(async () => {
+      const client = getAxiosClient(true)
+      const res = await client.post(
+        'https://birdee-faucet.testnet.mesoops.net/',
+        {
+          address: address,
+          coins: ['10000000utuc'],
+        },
+      )
+      if (res.data.error) {
+        throw new Error(res.data.error)
+      }
+    })
+}
+
+async function startFaucetTuc(concurrency = 10) {
+  const accounts = await DBClient.instance.account.findMany({
+    where: {
+      status: Status.Inited,
+    },
+  })
+  await forEachAsync(accounts, concurrency, async (account, index) => {
+    console.log(`${index}/${accounts.length}: processing ${account.address}`)
+    try {
+      await faucetTuc(account.address)
+
+      await DBClient.instance.account.update({
+        where: { id: account.id },
+        data: { status: Status.TucFauceted },
+      })
+    } catch (e) {
+      console.log(e)
+      await DBClient.instance.account.update({
+        where: { id: account.id },
+        data: { status: Status.TucFaucetFailed, message: e.message },
+      })
+    }
+  })
+}
+
+await startFaucetTuc(40)

+ 6 - 0
src/models/Status.ts

@@ -0,0 +1,6 @@
+export const Status = {
+  Inited: 0,
+  TucFauceted: 1,
+  InitiaFauceted: 2,
+  TucFaucetFailed: -1,
+}

+ 11 - 0
src/singletons/index.ts

@@ -0,0 +1,11 @@
+import { PrismaClient } from '@prisma/client'
+
+const DBClient = {
+  instance: new PrismaClient(),
+}
+
+export type IDBClient = typeof DBClient
+
+Object.freeze(DBClient)
+
+export { DBClient }

+ 28 - 13
src/test.ts

@@ -4,17 +4,32 @@ import { faucetAccount } from './faucet/faucet'
 import { MnemonicKey } from '@initia/initia.js'
 import { InitiaClient } from './InitiaClient'
 import polly from 'polly-js'
+import { DBClient } from './singletons'
+
+// await polly()
+//   .waitAndRetry(4)
+//   .executeForPromise(async () => {
+//     const key = new MnemonicKey()
+//     console.log(key.accAddress)
+//     console.log(key.mnemonic)
+//     await faucetAccount(key.accAddress)
+//   })
+
+async function createAccounts(count: number) {
+  const accounts = []
+  for (let i = 0; i < count; i++) {
+    console.log(`creating account ${i}/${count}`)
+    const key = new MnemonicKey()
+    const account = {
+      mnemonic: key.mnemonic,
+      address: key.accAddress,
+    }
+    accounts.push(account)
+  }
+  await DBClient.instance.account.createMany({ data: accounts })
+}
+
+await createAccounts(20000)
+
+
 
-await polly()
-  .waitAndRetry(4)
-  .executeForPromise(async () => {
-    // const key = new MnemonicKey()
-    // console.log(key.accAddress)
-    // console.log(key.mnemonic)
-    await faucetAccount('init1yvmuhk70rp7n84qws7ws6emqtve0u22cthfwck')
-  })
-// const client = new InitiaClient(
-//   'evil pact small brass now dirt gun horror route screen camp rookie crouch valid feel useful ladder robot slide adjust pact salad horse gesture',
-// )
-// console.log(client.key.accAddress)
-// await client.transfer('init1yvmuhk70rp7n84qws7ws6emqtve0u22cthfwck', 4)